HP Skin, или как я получил наклейку для ноутбука

24 октября 2008, 13:30
Добавлено в: Из жизни
Логотип акции HPskin
Логотип акции HPskin

Компания HP проводит акцию — тем, кто купил в 2008 году ноутбук производства HP с Windows Vista, предлагают в подарок наклейку для ноутбука. С картинкой из галереи сайта hpskin.com.ua либо же со своей, которую можно загрузить про формировании заказа.

Мой ноутбук, тоже HP, был куплен в самом-самом начале 2008 года. Но у меня не было Windows Vista на борту. И вообще, Windows не было. Был FreeDOS.

Я решил для эксперимента сделать заказ. Указал свою модель ноутбука, ID ноутбука, загрузил свою картинку для наклейки и отослал заказ. В правилах было указано, что если всё ок, то администратор сайта свяжется со мной, и в течении 15 дней я получу наклейку.

Никто со мной не связался. Я подождал пару дней и решил, что не пришлют, ведь ноутбук без Висты продавался. И вот прошло почти две недели, когда иду домой из университета, смотрю, в почтовом ящике уведомление, мол, вас ожидает пакет на почте. А я и забыл про акцию HPskin.

Действительно, в аккуратном таком пакете лежат наклейка запечатанная с выбранным мной изображением и рекламная брошюра про ноутбуки HP. Правда, в напечатанной версии было небольшое отличие от моего оригинала: теперь сбоку нарисованы небольшие логотипы Windows Vista и HP.

Интересно, почему мне все-таки отправили наклейку? Потому что мало заказов, а акцию надо проводить, или просто проверяющий заказы не обратил внимание, что некоторые ноутбуки HP продаются без Windows?

Вот теперь и думаю, стоит клеить или не стоит.

jUpload — что это такое и с чем его едят?

21 октября 2008, 17:14
Как я и обещал в прошлой заметке, продолжу рассказ про свою работу с jUpload.

Выбор технологии

Сначала о том, почему надо было выбирать именно решение, основанное на Java-апплете. Задача стояла так: пользователь должен иметь возможность выбрать папку на своём компьютере (например, с фотографиями, сделанными на прошедшей вечеринке), нажать какую-нибудь волшебную кнопочку типа «Upload all selected files» — и выбранные фото должны закачаться на сайт.

Стандартные html-ные file-input не подходили сразу же. Во-первых, они требуют выборки конкретного файла, во-вторых, не всегда (зависит от браузера) запоминают расположение папки, из которой был выбран предыдущий файл, в-третьих, не позволяют (по умолчанию) включать режим предпросмотра (preview). Безусловно, вместо preview можно включить опцию «Показывать файлы как эскизы», но как показала практика, бОльшая часть пользователей об этом не знает либо же не пользуется этой опцией.
Да и мало кто из пользователей будет иметь достаточно выдержки, чтобы указать 40 файлов, идущих по порядку — по одному файлу за клик. Особенно если файлы имеют название вроде DSN6578.JPG. Тут легко и ошибиться.

Соответственно, стало ясно, что надо пользоваться какими-то более расширенными (по сравнению со стандартными) решениями.

Первой же в голову пришла мысль использовать flash. Да, действительно, подержка flash сейчас есть в браузерах большинства пользователей.

Но к сожалению, flash не позволяет выбирать целые папки с файлами. да, с помощью flash можно сделать достаточное продвинутое окно диалога по выбору файла, например, с выбором файлов по маске, т.е. не «*.*», а, например, «*.jpg; *.gif; *.png» (кстати, ссылка по теме — swfupload.org, неплохое flash-решение для улучшения стандартного html file input, есть примеры по работе с ASP.NET, PHP и другими серверными технологиями). Но пользователю всё равно придётся выбирать каждый файл отдельно. Не совсем то, что было нужно мне для текущей задачи.

Кроме перечисленных, я рассматривал (правда, чисто теоретически) вариант с плагинами для браузеров. Вы вполне могли с таким встречаться, к примеру, на сервисе Яндекс.Фотки. Там точно так же выбираются фотографии, как нужно было и мне — хоть по файлу, хоть целой папкой, с предпросмотром картинок. Но основная тонкость тут вот в чем — чтобы получить весь этот функционал, надо установить плагин для браузера.

А это целое дело. Даже со стороны пользователя это непросто. Надо скачать плагин, решиться на его установку (а ведь не каждый на это решится — кто-то не доверяет, у кого-то и так плагинов много), скачать, установить и перезапустить браузер.

А основных браузеров (пускай даже только под Windows) у нас сколько? IE 6,7, 8, Mozilla Firefox, Opera, Safari, Google Chrome. Как видим, семь. И это без учета разных версий Firefox (плагины в котором тоже не всегда совместимы в разных версиях браузеров). А ведь в Опере, насколько я знаю, плагины так просто не применить.

В общем, этот путь тоже был отброшен ввиду своей сложности.

И таким вот детальным методом перебора я пришел к выводу, что лучше всего использовать Java-апплеты. Тем более, на крупных всемирных социальных сетях (MySpace, Facebook) тоже используются подобные загрузчики, основанные на Java. Кстати, Java — мультиплатформенная.

Конечно, это не самый идеальный вариант, ведь у пользователя на компьютере должна быть установлена Java-машина (Java Runtime Environment, JRE). Я решил проверить, просто ли будет простому пользователю установить у себя на компьютере JRE. Для этого я удалил ту версию JRE (кстати, уже немного устаревшую) со своего лэптопа и зашел на www.java.com, чтобы скачать новую версию Java. Меня попросили проверить, какая версия Java установлена у меня сейчас, потом страница о чем-то «подумала» и попросила меня скачать более новую версию. Скачал дистрибутив на 300 килобайт, запустил, он слазил в интернет, чего-то с java.com вытащил и установил. Я потом посмотрел в папку Program Files/Java, там было 72 мегабайта. Мне кажется, он столько с java.com не утащил, потому что таскал данные он всего несколько минут, а скорость у меня полмегабита.

Так что из этого я сделал вывод,что пользователи с выделенными линиями без особых проблем смогут установить себе JRE. Ну а пользователи без выделенных линий могут и не пробовать, ведь на странице массового загрузчика фотографий сам апплет (подробнее о нём — позже) весит около полумегабайта, да и фотографии с диалапа пачками особенно не закачаешь. Впрочем, людей с выделенными линиями сейчас всё больше, а владельцев диалапов всё меньше, что не может не радовать.

Здравствуй, jUpload, великий и могучий!

Вообще, в сети есть масса Java-апплетов, написанных именно для тех целей, которые мне и были нужны. Зачасту с ними были примеры и решения по работе с ASP.NET. Но у большинства из них есть один, но существенный, недостаток. Они платные. А мне, во-первых, совсем не хотелось платить, а во-вторых, даже если бы я и захотел заплатить, сделать это было бы совсем не просто, ведь живу-то я не в Америке.

И какие не смотрел, ASPUpload, PowUpload или прочие — все платные. Разброс цен очень большой — от $20 до $800. Я уж было совсем приуныл. Но вот тут я нашел jUpload. Знакомьтесь, герой моего сегодняшнего повествования, jUpload, великий и могучий, а также бесплатный для non-commercial использования.

Посмотрите на Live Demo последней версии (0.90): www.jupload.biz/demo/0.90/index-demo.html. В демо-версии файлы закачиваются, но не сохраняются на сервере.

В комплекте с jUpload идет большое число примеров, а также несколько вариантов настроек апплета под конкретные цели.

Обратите внимание на несколько параметров конфигурационного файла: Upload.Http.MaxRequestSize (максимальный размер всех выбранных файлов) и Files.MaxImageSize (максимальный размер одного файла). Значения в них выставлены в байтах.

Не забудьте, что при работе с ASP.NET приложением надо увеличить параметр httpRuntime в секции system.web файла web.config.
(пример: <httpRuntime maxRequestLength="20480" /> — лимит суммарного размера обрабатываемых файлов в 20 мегабайт), иначе ваше веб-приложение не сможет обрабатывать файлы более-менее существенного размера.

И обратите внимание вот на что. В jUpload все конфигурационные файлы имеют название вида jupload.default.config. Если вы попробуете развернуть готовый пример в своем приложении, это не получится, потому что при попытке обратиться из апллета к файлу с расширением .config (вы же помните про корневой Web.config?) будет отказано в доступе.

Просто переименуйте jupload.default.config в jupload.default.config.cfg, например, и все нормально заработает.

И обратите внимание на параметр Upload.URL.Action файла конфигурации jUpload-a. Та страница (файл, скрипт), которая прописана в этом параметре, вызывается через сокет, потому все данные об авторизованности пользователя, само собой, недоступны.

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

И вот ещё тонкий момент. Если вы хотите вызвать Upload.URL.Action с некими GET-параметрами, их нужно прописывать не в Upload.URL.Action, как того хочется интуитивно (например, «/upload.aspx?a=1»), а в Upload.Http.Query (например, «Upload.Http.Query=a=1,b=2» равносильно передаче uploader.aspx через строку запроса «?a=1&b=2»).

Руководство к jUpload

На сайту jupload.biz есть online-manual, есть и версия для загрузки. Надо отметить, что давно я не встречал настолько хороших мануалов, в особенности если говорить про open-source продукты. После работы с продукцией Microsoft привыкаешь, что есть MSDN, Books Online и в них всегда можно найти то, что нужно. И когда в других продуктах такого нету, это раздражает и вызывает определённый дискомфорт.

Разработчики jUpload написали очень серьёзный мануал, в нём есть ответы на подавляющую часть вопросов, которые могут возникнуть при работу с jUpload. При работе и настройке аплоадера я пользовался в основном этим документом. За что разработчикам и большое спасибо.

Мораль

jUpload — очень хорошее решение, при необходимости использовать массовый загрузчик файлов с использованием Java-технологий я рекомендовал бы обратить внимание именно на него.

И напоследок

Достаточно интересно получилось. В веб-проекте, основанном на одной технологии (ASP.NET), используется решение на принципиально другой, кроме того, конкурирующей, технологии (Java). Вот вам и mashup, как это любят говорить применительно к web2.0-проектам.

Конечно, если бы была возможность, я бы использовал Microsoft Silverlight, но пока что он не настолько распространён (т.е. Java установлена у бОльшего числа пользователей, хотя установить Silverlight plugin совсем не сложно, да и весит он куда уж меньше Java — примерно как flash plugin, мегабайт с копейками), да и готовых подобных решений (а особенно бесплатных) на Silverlight я не встречал. Потому использую то, что есть. Тем более, то, что есть, отлично работает и подходит для моих целей.

jUpload и прочие файл-аплоадеры

20 октября 2008, 17:17
Добавлено в: Веб-разработки
В новой версии SunSpace можно будет загружать фотографии гораздо удобнее и быстрее, чем это сделано сейчас. Одной из опций будет возможность закачивать папки с фотографиями (например, фото с какого-то мероприятия) буквально в пару кликов — при помощи Java-менеджера.

Подобные интерфейсы вы могли видеть на MySpace, Facebook или ВКонтакте. Я нашел очень удобный и довольно гибко настраиваемый Java-applet под названием jUpload. Он, в отличие от большинства своих «коллег», бесплатен.

В следующей записи (сегодня вечером или завтра, как получится) я постараюсь рассказать, как именно работает эта штука, с какими проблемами я столкнулся при установке и как я их решил.

Клиенты бывают разные — и не всегда разумные

16 октября 2008, 22:30
Нудные заказчики, очевидно, были всегда
Нудные заказчики, очевидно, были всегда

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

Штуки эти совершенно не эстетичны и очень функциональны. И вот пришла в голову их директору мысль сделать сайт. Хорошая, здравая мысль. И так получилось, что нашли они меня через общих знакомых и предложили сделать им сайт. А дело было в самых первых числах августа. Я только с моря приехал, многие только уехали, заказов практически нету.

Сходил к ним в гости, в офис, благо это недалеко от моего дома, минут 10-15 пешком. Вроде бы адекватные люди, в общем и целом понимают, чего хотят. Обсудили с ними структуры, материалы, посмотрели вместе сайты конкурентов, обсудили, что хорошо в них, а что плохо, и что хотелось бы видеть в сайте для Конторы.

Кирилл Зима, с которым я сотрудничаю по поводу дизайна, нарисовал (по тем параметрам, что я ему пересказал) вполне симпатичный макет. Показал — не то. Ну что ж, бывает.

На следующую встречу пошли вместе. Сели, обсудили вопрос дизайна более конкретно, пришли если не к полному взаимопониманию, то по крайней мере, к вполне конкретным требования к дизайну и довольно чётким его видением.

Кирилл нарисовал дизайн, как по мне, так очень симпатичный, и что самое главное — отвечающий поставленным требованиям и задачам. Впоследствии он его ещё немного улучшил, получилась весьма симпатично. Несколько раз он его отсылал по почте на утверждение, и каждый раз что-то было не так. Ещё несколько (не знаю точно, сколько именно) он туда съездил. В итоге, заказчик чего-то думал-думал, постоянно менял требования и в конце концов поменял все требования. Можно сказать, на прямо противоположные первоначальным.

У этой истории оптимистичный конец. Мы решили расстаться с этим заказчиком. Посудите сами: любой проект состоит из согласования структуры, дизайна, программной части, наполнения и потом утверждения всего получившегося. И за 2 месяца (с начала августа по начало октября) мы не продвинулись дальше стадии дизайна. Точнее, мы её и не преодолели.

В случае с нормальными, адекватными клиентами обычно дизайн утверждался максимум через неделю-полторы после начала работы, а зачастую — сразу же, первый вариант (возможно, с небольшими правками).

А ведь ещё предстояла разработка сайта и наполнение его информацией. Представьте себе, сколько бы времени ушло на это — с таким-то заказчиком.

Мы посовещались и решили, что тратить на одного клиента столько времени просто неразумно, да и продолжать сотрудничество было весьма некомфортно. Вот так мы и закончили работу с Конторой и её функциональными, но некрасивыми Штуками.


P.S. А ещё у них был (и есть) довольно страшный логотипчик. И заметьте, никаких предложений по его изменению (редизайн, ребрендинг — называйте любым модным словом, лишь бы помогло решить вопрос) не принимались.

В итоге выяснилось, что рисовала логотип жена директора, дизайнер. На вполне резонный вопрос о том, а дизайнер чего именно она (судя по нарисованному ею логотипу, она очень плохой дизайнер в части полиграфии), получили ответ, что «она — дизайнер интерьеров».

Попытки объяснить, что дизайнеры, как и программисты, бывают разные, и дизайнер интерьеров практически всегда не специалист в веб-дизайне и полиграфии, успехом не увенчались. Зато в ответ мы получили «гениальный» ответ: «Ну и что, что дизайнер интерьеров, но ведь дизайнер же». Вот так-то.

Диплом

15 октября 2008, 19:07
Добавлено в: Из жизни, Мои проекты
Магистров моей группы ещё вчера распределили к различным преподавателям, которые будут научными руководителями дипломной работы. Я попал к тому преподавателю, к которому и хотел.

А сегодня утверждали темы дипломов. Часть народа предпочла стандартные темы, вроде «Разработка устройства управления роботом таким-то на основе микропроцессора такого-то». То есть по сути требовалось сконструировать такую специализированную железяку.

Ну а мне совершенно не хотелось что-то такое делать. Потому я и предложил свою собственную тему, более близкую мне (ведь я хоть и учусь на робототехнике, но занимаюсь-то веб-разработками). После утверждения и корректировки названия она стала звучать так: «Управление робототехнической системой с использованием Интернет-технологий».

Если вкратце, то это будет удалённое управление роботом через Интернет. Так что буду понемногу приступать к сбору информации и написанию кода.

SMS-акции и я

10 октября 2008, 11:49
Добавлено в: Из жизни
Недавно был в «Пузатой Хате». Купил чего-то поесть и увидел на листовке рекламу акции, мол, отошли код из своего чека и выиграй чего-то там. Я решил ради эксперимента отослать, тем более и цена SMS была вполне разумной, 80 коп (~$0.15).

Вчера пришло SMS, что я выиграл пополнение счета на 20 грн (~$4). Посмотрел, действительно, пополнили счёт. Мелочь, а приятно.

Правда, сама реализация SMS-акции (собственно, ради чего и принял участие) не впечатлила. Сообщение с подтверждением получения кода, через полторы недели сообщение о выигрыше, а между этими событиями — полная тишина в эфире. Где же какие-то новости о ходе проведения, о числе выигравших людей и прочих цифрах?

ASP.NET: тонкости работы с DropDownList

8 октября 2008, 17:20
Добавлено в: Веб-разработки
Пример обычноговыпадающего списка
Пример обычного
выпадающего списка
Зачастую при разработке веб-приложений на ASP.NET появляется необходимость заполнять DropDownList (выпадающий список) значениями из, например, базы данных — в зависимости от какого-то условия.

Если реализовывать заполнение DropDownList (например, с ID="DropDownList1") в Page_Load, например:

DropDownListFill(DropDownList1);

то возникает такая проблема — после PostBack'a страницы данные о выбранном значении (DropDownList1.SelectedValue) не сохраняются, так как после постбека снова срабатывает заполнение списка значениями.

Но выход есть: просто выполняйте заполнение DropDownList не в Page_Load, а в Page_Init, например:

private void Page_Init(object sender, EventArgs e)
{
DropDownListFill(DropDownList1);
}

В этом случае всё работает корректно — и DropDownList заполняется, и данные о SelectedValue не обнуляются, — поскольку Page_Init находится раньше в жизненном цикле ASP.NET-страницы, чем Page_Load.

Пользуйтесь!

Есть ещё один вариант решения вопроса, но он более хитрый и не подходит не для всех случаев. Работая с ASP.NET Ajax, можно использовать CascadingDropDown для заполнения DropDownList-a.

Мультибраузерность

4 октября 2008, 18:01
Наконец-то поставил себе на компьютер 7-ой Internet Explorer. Почему я не ставил раньше? Да очень просто: не хотел сносить 6-ую версию, потому что надо было и в ней сайты тестировать.

А вот задался целью, изучил вопрос и оказалось, что на одном компьютере очень легко можно содержать сразу несколько версий IE: от 4 до 8. Есть разные способы решения этого вопроса.

Я выбрал довольно простой, с помощью которого установил себе 7-ую версию, не удаляя 6-ую. Кому нужно повторить мой подвиг, читайте здесь более подробное описание процесса установки.

Итого у меня на лэптопе сейчас стоят:
* Mozilla Firefox 3
* Opera 9
* Safari 3 от Apple
* Google Chrome
* Microsoft Internet Explorer 6
* Microsoft Internet Explorer 7

Такой себе джентельменский набор веб-разработчика.
Думаю, для полноты картины не хватает разве что 8-ой версии IE. Ничего, постепенно доберусь и до него.

Размышления про jQuery

3 октября 2008, 22:52
Добавлено в: Из жизни
jQuery: JavaScript Framework
jQuery: JavaScript Framework
Не так давно начал использовать в своих проектах javascript-овую библиотеку jQuery в связке с jQuery UI (jUI я использую для визуальных эффектов и всего прочего). До этого использовал (в основном на SunSpace) в тех же целях Prototype.js и script.aculo.us.

Должен сказать, приятно удивлён jQuery: работа с ним намного удобнее, чем я Prototype. Синтаксис человечнее, а уж сколько готовых внешних плагинов для jQuery есть — так и сосчитать трудно.

Вот буквально на днях писал код, и в нём надо было изменять класс элемента меню. А меню было свёрстано как список. И мне было нужно отслеживать клики по ссылкам в меню, а после этого менять css-класс у ссылки. Но в процессе решения проблемы выяснилось, что смены класса только у ссылки недостаточно, надо менять css-класс ещё и у элемента списка (<li>), в котором находится ссылка.

Вот кусок кода для смены css-класса у всех нужных элементов (опускаю код для удаления класса у предыдущей ссылки):

...
$(this).addClass('selected').parents('li').addClass('selected');
...


Просто и понятно. А как бы это было на Prototype, и представить страшно. Не одной строчкой, так это точно.

P.S. Но зато у Prototype есть отличная библиотека script.aculo.us.

За прошедшие две недели

1 октября 2008, 15:31
Вроде бы только началась осень, учебный год, народ наконец-то поприезжал со всевозможных мест отдыха, а уже — бац, а ведь на календаре уже 1 октября! Месяц прошёл. А особенно быстро промелькнули последние две недели.

Неплохо обстоят дела и с SunSpace, за последние две недели мы собирались два раза: поиграть в «Мафию» на День города и на квест «SunSpace Quest» на прошедших выходных.

На учёбе все по-прежнему, она мне особо не мешает :) А благодаря тому, что я учусь в магистратуре, у меня ещё и лекций меньше, чем у большей части моих одногруппников (которые, закончив университет, будут не магистрами, а специалистами — вроде как тоже ничего, но похуже магистров). Правда, есть ещё какой-то курсовой проект, но его сдавать только в начале зимы, потому его пока никто и не делал.

P.S. А ещё у меня с сегодняшнего дня скорость работы в Интернете уже не четверть, а половина мегабита. На радостях скачал из сети десяток альбомов Alice Cooper. Нет, я не поддерживаю музыкальное пиратство, я скачал всю эту музыку исключительно для ознакомительного прослушивания :)
Страницы: 1 2 3 4 5 6 7 8
Илья Барков Я занимаюсь веб-разработками, создаю интересные сервисы.
Живу в Днепропетровске.
Весьма разборчив в музыке.

Люблю продукцию компании Apple, пользуюсь Firefox 5 лет, немало работаю с технологиями Microsoft и весьма этим доволен.
  • Сервис отзывов «2 совета»
  • BMW
  • Социальная сеть SunSpace
Если вам интересен мой блог, подписывайтесь на него — feeds.feedburner.com/barkov