Обновить
360.3

Веб-разработка *

Делаем веб лучше

Сначала показывать
Порог рейтинга
Уровень сложности

Замыкание в Java Script для непосвященных

Время на прочтение2 мин
Охват и читатели3.4K
У моих программистов была задача: в фото галерее при активном изображении подсвечивать thumbnail показываемого изображения. Задача вроде тривиальная, но вызвала у них некоторый затык при решении. Хочу сказать сразу, что владение JS было у них не на высоте.
Вообще мало людей по настоящему знающих этот язык и не путующий его с принципами работы DOM документа.

В чем же была проблема…
1. В том, что сначала они решали её рекурсией :)
2. Вторая попытка решить привела к введению глобальной переменной, что я не считаю хорошим тоном
3. Загрязнение общего кода подобными маленькими функциями вместо использования объектного подхода

В бытности будучи программистом я написал маленький каркас для демонстрации. Вот он:

<script type=«text/javascript»>
          
          
function MainMenu(){
            
            var OldImage;

            this.getOldImage = function(){ return OldImage; }
            this.setOldImage = function( img ){ OldImage = img;}
            this.chgImage = function( obj, newImage){
              if(newImage != null){
                this.setOldImage(obj.src);
                obj.src = '/images/'+newImage;
              } else {
                obj.src = this.getOldImage();
              }
            }

}

var Menu = new MainMenu();

</script>
* This source code was highlighted with Source Code Highlighter.


Вызывать следует так:

<img src="/images/home.gif" width=«88» height=«23» alt="" onmouseover=«Menu.chgImage(this, 'home_over.gif')» onmouseout=«Menu.chgImage(this)»>* This source code was highlighted with Source Code Highlighter.


Что это нам дало:

1. Мы не используем рекурсию. Этим мы бережем ресурсы компьютера. У клиентских машин они же не резиновые вопреки обратным утверждениям
2. Мы не ввели глобальную переменную, которая в больших системах неудобна по объективням причинам
3. В третьих мы сделали универсальный объект. У него инкапсулированы данные!

Новичкам просьба разобраться и понять. Этот вариант сделан специально проще, чем мы реализовывали.

Мы создаем в теле функции локальную переменную. Затем захватываем эту переменную методом этой функции (это класс, точнее прототип). В итоге получаем хитрый трюк. При выходе из самой функции данные в ней запомнились.

Вообще-то по этому вопросу материала достаточно в сети. Этот трюк далеко не новый. Но о нем нужно напоминать «отцам» и учить новичков.

Ваш собственный онлайн фидридер!

Время на прочтение1 мин
Охват и читатели802
shot_thumb

Gregarius — это RSS / RDF / ATOM веб-агрегатор написанный на php, предназначенный для установки на вашем веб-сервере, что позволяет Вам получать новости из практически любых источников.
Читать дальше

JQuery :: Edit in Place

Время на прочтение11 мин
Охват и читатели7.6K
Не сочтите этот материал за профессиональное изложение. Это не так. Я просто хотел поделиться своим опытом с людьми, которые смогут его применять в своих проектах и делать Интернет проекты более удобными для использования.

Начнем:
Делали механизм для роликов с разработчиками. Суть простая: загружено множество роликов, а потом они проигрываются в плеере. Сами ролики на сервере представляют собой музыкальые файлы и записи в БД. Записи имеют свои св-ва.
Ниже речь пойдет только о двух: позиция ролика в общей очереди и название.
Чтобы редактировать позицию ролика не очень-то хотелось переходить на специальную страницу, где можно было бы отредактировать это св-во. Роликов было около 150 :) Представляете какую рутиную операцию приходилось бы делать.
Как раз на днях просматривал JQuery. Вообще до того момента я больше склонялся к mootools, но после более глубокого общениея с первым из этого списка решил, что остановлюсь на этом фреимфорке.

Читать дальше →

Как показать в виде страниц результат большой выборки

Время на прочтение1 мин
Охват и читатели681
Когда результатов выборки много обычно невозможно отобразить их все в виде страниц — показывают несколько первых и последних, а в середину «прыгнуть» или невозможно или для этого нужно вручную набивать номер нужной страницы.
Для решения этой проблемы придумал алгоритм логарифмической шкалы страниц (в примере используется 20 миллиардов условных результатов разбитых на 1 миллиард страниц):

online пример

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

P.S. К сожалению, алгоритм при создании не был документирован (писалось по наитию), поэтому по каким математическим принципам он работает я и сам уже плохо представляю :)

Города России в именительном, предложном (местном) и родительном падеже.

Время на прочтение1 мин
Охват и читатели8.9K
Приняв во внимание все замечания из предыдущего поста с базой городов, мы обновили ее и добавили еще родительный падеж. Теперь база отвечает на вопрос «Откуда?». Например: Вася из Ярославля.

Скачать:
  1. CSV
  2. MySQL

Автоматическая обработка: Jetfish
Вычитка и ручная корректировка Sofrus

Как и в прошлый раз, при желании, выражайте респект и уважуху им, а не мне. Я просто их прикрываю.

Гармония ECMAscript

Время на прочтение1 мин
Охват и читатели622
Создатель языка JavaScript Брендан Эйч опубликовал в рассылке интересное письмо о будущем спецификации ECMAScript-262 после встречи в Осло. В обсуждении учавствовали представители Adobe, Google & MicroSoft, которые имеют собственные реализации этого стандарта (JavaScript, ActionScript, Rhino, JScript.NET).

Разработчики решили сконцентрироваться на версии 3.1 и отказаться от ряда возможностей, которые изначально предполагалось добавить в ES4: packages, namespaces & early binding. Под вопрос теперь так же поставлены классы, которые можно упростить до lambda-coding + Object.freeze.

ES 4 is dead, long live ES 3.1! AS 3 теперь сам себе хозяин.

Лог комита: зачем он нужен на самом деле?

Время на прочтение4 мин
Охват и читатели5.4K
Разработчики уже давно привыкли пользоваться системами контроля версий. Для кого-то это является естественным переходом, кто-то воспринимает сначала систему контроля версий как некоторое дополнительное усложнение своей работы, но работа над проектом в команде невозможна без этого инструмента.

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

  • «фикс бага»;
  • «закомитил всё, что сделал»;
  • «тестовый комит»;
  • «исправил опечатку»;
  • и т.п.

Почему это плохо?

37 Signals снова в эфире

Время на прочтение1 мин
Охват и читатели769
Сегодня, 13 августа в 20.00 GMT+3 37 Signals ответят на вопросы зрителей. Они учли ошибки прошлого эфира и убрали чат.

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

Включайте ваши экраны сегодня, 13 августа в 20.00 по Московскому времени
Более подробно на блоге 37signals

Генерация отчетов. Crystal Reports или Веб-технологии?

Время на прочтение2 мин
Охват и читатели11K
Одной из основных функций современных бизнес-приложения является генерация отчетов. Какой способ их генерации лучше избрать?

Беглый анализ с неясным результатом

Динамический css

Время на прочтение2 мин
Охват и читатели3.6K
Browsers-small
При подгонке сайтов до единого вида во всех браузерах, верстальщик использует не один css хак.
Но зачем обычному пользователю с IE получать избыток кода для других браузеров firefox, opera, safari?!
Это проблема легко решается с помощью динамического css.
Читать дальше

Видео с первой международной конференции PM Days — для менеджеров WEB-проектов

Время на прочтение1 мин
Охват и читатели998

Вопрос по авторским правам

Время на прочтение1 мин
Охват и читатели5K
Добрый день, уважаемые.

Нами был сделан сайт, который в дальнейшем был передан на поддержку другой веб-студии (назовем ее «ХХХ»). Студия «ХХХ», оставив разработанный нами дизайн, изменила верстку и прикрутила свою CMS.

Соответственно ссылку на нас, как разработчика, изменили на фразу «Разработка сайта — студия „ХХХ“.

На мою просьбу указать по крайней мере, что разработка дизайна осуществлена нами, студия „ХХХ“ ответила, что (цитирую) „Вы не являетесь разработчиком программного кода на котором работает сайт!“

Интересует:
1) входит ли создание дизайна в разработку сайта?
2) правомерно ли указание только студии „ХХХ“ в качестве разработчика?

nginx, memcached и SSI

Время на прочтение3 мин
Охват и читатели19K
Моя первая статья, не судите строго...

Приветствую вас, уважаемые хабрадевелоперы!

Многие из вас знают о прекрасном легковесном веб-сервере nginx.
Некоторые также знают, что он умеет работать с memcached.
Но лишь немногие в курсе, при чём здесь SSI и как его можно использовать в связке с nginx и memcached.

Как известно, новое — это хорошо забытое старое. Каждый названный инструмент и технология вам наверняка известны. Я же хочу рассказать о том, как и зачем свалить всё это в одну кучу :)
Читать дальше →

Ближайшие события

Eclipse + QT: установка и настройка

Время на прочтение3 мин
Охват и читатели54K
Достаточно давно стал присматриваться к кроссплатформенному С++ программированию. Не то, чтобы это было мне необходимо, но так для общего развития. И вот что я могу отметить: самая большая вещь, которая доставляет проблемы на этом пути — достаточно высокий порог вхождения в эту область именно по причине инструментария.

Если не рассматривать случай программирования в Emacs, что лично мне кажется пока неким толи анахронизмом, толи экстримом, постоянно сравнивая различные IDE с Visual Studio зачастую приходилось просто ужасаться. И главная проблема этих систем была в том, что за редким исключением они не работали из коробки без напильника.

Вторая проблема — юзабилити. Зачастую ниже среднего. Ранние версии KDevelop оставляли достаточно неоднозначное впечатление.

Третье, чего бы хотелось — интегрированного дизайнера интерфейсов. Его не было практически нигде, если не считать NetBeans (но только для Java), да MonoDevelop (GTK#). И хотя эти IDE весьма достойны, хотелось найти легкий способ программировать именно на C++ с минимальным количеством граблей.

В этой статье я хочу привести пошаговое руководство, что называется «для чайников», по установке на платформу Windows работоспособной конфигурации хорошей IDE Eclipse и хорошей библиотеки QT. Стартовую площадку, так сказать.

UPD: Что касается именно программирования в QT, то могу порекомендовать просто шикарную книжку на эту тему:
Jasmin Blanchette, Mark Summerfield: Разработка графического интерфейса с помощью QT3 (перевод Андрей Киселёв)

UDP2: Ещё литература:
Русский перевод документации из QAssistant
Qt4. Профессиональное программирование на C++
Jasmin Blanchette, Mark Summerfield: Qt 4. Программирование GUI на C++
Foundations of QT Development

Читать дальше →

Полнотекстовый поиск в веб-проектах: Sphinx, Apache Lucene, Xapian

Время на прочтение15 мин
Охват и читатели56K
Полная авторская верcия из моего блога. Оригинал материала написан специально для Developers.org.ua

Наверное любой современный веб-проект сложно себе представить без… без контента! Да, именно контент в разных его проявлениях сегодня «правит бал» в различных веб-проектах. Не так важно — создаваемый пользователями или получаемый из других источников автоматически — информация является основной любого (ну, или почти любого) проекта. А раз так — то вопрос поиска необходимой информации стоит очень остро. И острее с каждым днем, ввиду стремительного расширения количества этого самого контента, в основном за счёт создаваемого пользователями (это и форумы, и блоги и модные нынче сообщества, вроде Habrahabr.ru). Таким образом, любой разработчик, реализующий сегодня какой-либо проект, сталкивается с потребностью реализовать поиск в своём веб-приложении. При этом требования к такому поиску уже намного сложнее и шире, чем даже год-два назад. Конечно, для каких-то проектов вполне подойдёт и простое решение, к примеру, вполне можно использовать Custom Google Search. Но чем более сложное приложение, и чем сложнее структура контента, если требуются особые виды поиска и обработки результата, или же просто количество или формат данных в вашем проекте особый, вам потребуется собственная поисковая система. Именно своя система, собственный поисковый сервер или сервис, а не сторонний, пусть даже гибкий и настраиваемый. Но что же выбрать, и вообще — какие сейчас на рынке есть поисковые проекты, которые готовы для использования в реальных проектах, не исследовательских или научных, а реальных бизнес-приложениях? Далее мы кратко рассмотрим различные варианты поисковых решений, пригодных для встраивания в ваше веб-приложение или развёртывания на собственном сервере.
Читать дальше →

Облако тегов: линейная зависимость vs логарифмическая

Время на прочтение2 мин
Охват и читатели3.7K
Этот пост меня сподвигли написать две вещи. Автокадабра и некто под ником napisal, кто активно не соглашался с моим постом

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

Опера 9.51 не кэширует ajax?

Время на прочтение1 мин
Охват и читатели1.3K
Обычно мы стараемся избегать кэширования ajax-запросов, но бывают случаи, когда оно необходимо. Например, если ajax используется для загрузки скриптов. Все современные браузеры отлично справляются с кэшированием статических файлов, но Опера ни при каких условиях не хочет кэшировать ajax-запросы, хотя все остальное кэширует нормально.

Читать дальше →

Как сделать двигающийся аплоадер минимального размера и красиво

Время на прочтение1 мин
Охват и читатели943
Хочу поделиться небольшим трюком для создания анимированной полосы загрузки как в флеш проигрывателях или в операционной системе.
Имеем в наличии просто картинку:


Как заставить её двигаться? А очень просто! Нужно двигать бекграунд в интервале попиксельно.
Смотрим демо

немного кода

Интерфейсы vs. классы

Время на прочтение4 мин
Охват и читатели291K
Обсуждая с различными людьми — в большинстве своём опытными разработчиками — классический труд «Приёмы объектно-ориентированного проектирования. Паттерны проектирования» Гаммы, Хелма и др., я с изумлением встретил полное непонимание одного из базовых подходов ООП — различия классов и интерфейсов.

Читать дальше →

Фотобанки, фотобанки…

Время на прочтение1 мин
Охват и читатели5.7K
Открываем новый новостной проект, идея вроде интересная, движок уже готов, тех. дизайн тоже. Осталось дело за малым — подпилить напильником, добавить картинок к дизайну, и счастливого плавания!

И вот тут, на последнем этапе, появляется проблемка, с которой раньше не встречались — картинки и иллюстрации. Где их брать? Данный дизайн требует массу иллюстраций (фото). Сама концепция проекта так же — иллюстрации к новостям. Конечно, нарушением авторских прав у нас в стране уже давно ни кто не занимается. Поэтому начали выбирать фотобанки. Вот, что мы нашли:
Читать дальше →

Вклад авторов