Блог

Как сделать корзину покупателя на сайте

Сегодня получил следующее письмо, которое может быть интересно народу:

Меня интересует такие вопросы:

1. Как реализовать корзину индивидуально для каждого клиента в отдельности. Читал что корзина покупателя должна создаватся из следующих данных: URL клиента и индификатора сессии, так ли это. Если это так то как это сделать?

2. Как лучше реализовать корзину через сессии или через куки что лучше?

3. Я обращал внимание на некоторых сайтах пока не зарегистрируешся некоторые надписи (ссылки) невидны на сайте, но после регистрации они появляются. Как это делают?

Сайт делаю в Adobe Dreamweaver 8, стоит Денвер на компе, phpMyAdmin, ОС Vista.

Михал, если бы вы решали эти задачи, то как бы вы поступили мне интересно узнать ваше мнение. Я хочу реализовать это на языке PHP, возможно использование JavaScript.

Дерьмовый код

Интересная критика одного программиста. Он увидел MVC проект, который написан с использованием Entity Framework и выдал критику - дерьмово написано, и нахрена использовать дебильную EntityFramework, когда есть ADO.NET.

Вы знаете, я сам не люблю EntityFramework и уже много раз говорил, что Linq только портит код, а именно Linq чаще всего используют с EntityFramework. Но критиковать код только за то, что кто-то не знает этот Framework и любит использовать чистый ADO.NET - позорно и не профессионально. Я не люблю Linq, но если какой-то проект написан с его использованием успешен, отлично работает и без проблем поддерживается, то мне насрать, что там используется Linq. Критиковать за это нельзя.

Оператор goto в PHP

На PHP пишу уже давно, но только сегодня узнал, что начиная с версии 5.3 этот язык начал поддерживать goto оператор. Я помню еще в 90-х годах, когда программировал под MS Dos уже среди программистов ходило правило - не использовать goto. Это зло, которое портит программы. С тех пор утекло уже много лет и я никогда не пользовался goto под Windows ни в одном языке программирование.

Удивило то, что этот оператор появился в PHP 5.3. Я бы понимал, если бы он появился в первых версиях, а в 5.3 его убрали, как настоящее зло, но наоборот... Неужели мир перевернулся и переходы по меткам стали добром?

Unit тесты

Недавно обещал написать свое отношение про unit тесты. Лично я не считаю их модной штучкой, это необходимость современного мира, чтобы можно было создавать более надежный код, который не будет падать каждый день и на каждом углу. В домашних проектах я тесты не пишу, но на работе по возможности стараюсь писать и покрывать все, особенно финансовые модули.

Заметка получилась достаточно большая, поэтому я ее решил поместить в статьи, да и проще будет ее там потом найти.

Переход с WinForms на MVC

Первая реализация ASP.NET использовала WebForms – самая ужасная идея для Web программирования. На то, чтобы это понять, у Microsoft ушло некоторое время, но за это время народ успел уже создать сайты на этой технологии. Но вот Microsoft уже одумалась и уже давно предлагает программистам более интересный и качественный вариант – MVC (Model View Controller).

Но только проблема в том, что старый вариант C# и ASP.NET использовали URL в виде ИмяФайла.aspx, после чего идут параметры страницы. А вот в MVC предлагается немного более гибкий вариант controller/action. Controller определяет файл, который будет обрабатывать запрос, а Action – это имя метода. Это очень удобно, но что делать, если у вас уже есть сайт на WebForms и не хочется терять старые URL, чтобы не терять ссылки, которые уже набраны. Ведь если изменить URL страниц, то все, что ссылается может быть разрушено.

Программирование игр для iPhone

Игрался, игрался собственным движком для игр под iPhone и меня это постепенно так затянуло, что уже стала получаться небольшая игра. Немного усилий и она может стать похожей на завершенный продукт, который можно будет выложить на всеобщее скачивание.

Давно я не работал с графикой особенно OpenGL, поэтому первые шаги давались с трудом. Потом все шло со скрипом, потому что не хватало знаний в Objective-C. Но по мере набора этих знаний все зашевелилось на много быстрее. Сегодня закончил класс аниматора, который должен амнистировать спрайты и сразу же произошел скачок в моей работе.

Ошибки в Objective-C

Играюсь с Objective-C, изучаю его и заодно пишу пару небольших примеров. Один из них связан с интернет программкой, другой – графический движок для себя (вспоминаю OpenGL). В одном месте у мне понадобилось часто использовать однообразные объекты, причем очень много раз. Логично стало не загружать их каждый раз и не освобождать память, а написать кэш, который будет сохранять данные для меня.

В качестве кэша я сделал статичную переменную для менеджера кэша, а сами данные решил размещать в NSMutableDictionary. Это что-то типа хэша. Переменная для хэша была объявлена у класса, а метод получения данных из него выглядит следующим образом:

Прикольные числа Double

На работе у парня возникла проблема, он не мог никак получить нужное число при округлении вещественного числа. Он долго не мог понять, почему следующий пример не дает правильного ответа:

if ((int)(double.parse("19.99") * 100 )== 1999) {
  Счастье
}
else {
  Что за фигня
}

Он никак не мог понять, почему он постоянно оказывается в блоке «что за фигня», вместо счастье. Я говорю ему, что числа double никогда не хранятся точно, они хранятся долбанутом приблизительном формате. После double.parse("19.99") вы никогда не получите double число 19.99. Вместо этого вы получите что-то типа 19.9899999991. Именно так хранится double число в памяти компьютера.

С чего начинать изучать программирование

Сегодня увидел в комментариях на блоге предложение народу начинать изучение программирование с Паскаля. Паскаль и С примерно одинаковы в изучении. У них синтаксис разный, но идея схожая. Недостаток начинать с этих языков - придется изучать указатели, выделения памяти и освобождение ресурсов. Вот почему раньше начинали изучать программирование с бейсика, а я рекомендую сейчас начинать с С#. Просто это проще.

Программирование и изучение первого языка далеко не для всех дается легко, и сразу же нырять с головой в указатели далеко не просто. Это отпугивает народ, особенно книги, в которых они не могут понять объяснения. Некоторые авторы объясняют выделения заумными словами, может потому что это выглядит круть, а нужно просто понимать, что начинающему пофиг, как оно выглядит и ему не должно звучать круть, ему нужно, чтобы было понятно.

С другой стороны, если начать изучение с C# и просидеть на нем хотя бы год, человек привыкнет не освобождать ресурсы и на C++ может даже не захотеть переходить. Я сейчас играюсь с Objective-C и во всех своих проектах включаю автоматический подсчет ссылок. После четырех лет безвылазного программирования на C# (до этого программировал на нем, но меньше, просто последние 4 практически только на нем и писал), мне лень заморачиваться с операторами release. Хватит того, что мне приходится делать две операции alloc и init.

Объединнение таблиц в SQL Server

Сейчас ВОВА в комментариях показал, что не все понимают, как работает SQL сервер. Это нормально, если вы не работали с оптимизацией достаточно долгое время, чтобы знать, как работает оптимизатор SQL Server. А в боьшинстве случаев он работает отлично и иногда даже откровенно тупой запрос может выполнить быстро. Было предложение перенести одно из сравнений в on. Просто для прикола, возьмите и напишите вот такой запрос:

select * 
from Table1 a
	inner join Table2 at on a.ID = at.ID

Замерьте план его выполнения и замерьте статистику (set statistics io on). Для замера статистики выполните запрос пару раз.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне