• 12 способов не накосячить со вспышкой

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

      Ниже — достаточно известные вещи, которые, однако, вызывали facepalm у тех, кто был вместе со мной или же у меня. В списке грабель вы с некоторой вероятностью можете найти что-нибудь новое. Если хотя бы она фича использования вспышки окажется для вас полезной, то мою задачу можно считать выполненной.
      Читать дальше →
    • Восстанавливаем флешки

        Хотя со временем флешки становятся все дешевле и объемнее это не значит, что при любом сбое ее можно выбросить и приобрести другую. Хотя многие именно так и делают, даже на задумываясь о том, что ситуацию еще можно спасти. В свое время мы тряслись за каждую флоппи-дискету, почему же не поковыряться и с флешкой, чтобы дать ей вторую или даже не третью жизнь. Думаю, у многих в столе рядом с компьютером найдется какая-нибудь «мертвая» флешка-брелок, которую выбросить жалко из-за того, что она красивая или, хотя бы потому, что какое-то время назад она была полезна. Конечно, иногда флешки «умирают» раз и навсегда, но зачастую они находятся в состоянии «клинической смерти», а как известно, такое состояние обратимо.

        image
        Читать дальше →
      • Веб-сайт как набор готовых сервисов

          Раньше как было, написал ТЗ и по нему реализовал функционал. Теперь же такой вариант становится сложным, потому что требований в ТЗ все больше под современный мир, а времени меньше.

          Например, надо вам на сайте сделать комментирование материалов. Конечно, можно написать самостоятельно. Но что, если взять сервис intensedebate.com, который предоставляет прекрасный интерфейс для комментариев с большими возможностями и очень плотно интегрируется с несколькими популярными блог-платформами? На любом же другом сайте работает через javascript. При этом тут вам и нативная авторизация, и авторизация через популярные сервисы типа Twitter или Facebook. И много-много других плюшек.

          Читать дальше →
        • 10 способов стать хорошим программистом

          • Translation
          Хороший программист — это тот, кто смотрит в обе стороны, переходя дорогу с односторонним движением.
          Даг Линдер

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

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

          Читать дальше →
        • Ускорение загрузки Windows for fun and profit

            image Пожалуй, начну с того, что если перегружаться 15 раз в год, то любой «тюнинг» процесса загрузки отнимает больше времени, чем будет выиграно на перезагрузках за все время жизни системы. Однако, спортивный интерес берет свое, тем более, что люди интересуется процессом оптимизации быстродействия. А загрузка оказалась самым очевидным кандидатом в примеры того, как на мой взгляд должен выглядеть этот самый процесс. Сразу скажу, что грузиться будем с 5400 rpm винта, грузиться будем в «рабочую» систему: помимо недобитой вендорской крапвари там стоит еще куча всякого типа вижуал студии, антивируса, скайпа, стима, гуглапдейтера и пр…

            Про то, почему отключение pagefile-а скорее вредно, чем полезно — как нибудь в другой раз, а пока…
            Под катом много однообразных картинок и немножко унылого текста
          • Cookies внутри iframe — проблема при создании приложения ВКонтакте/Facebook

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

            Так считали и мы при разработке iframe-приложения для ВКонтакте.
            Но после того, как приложение было разработано (разработка велась в основном в Mozilla Firefox и Google Chrome), выяснилось, что оно неработоспособно в Internet Explorer, к которому позднее присоединились последние версии Opera и Safari.

            Под катом подробное описание проблемы и вариантов её решения.
            Читать дальше →
          • Что такое этот новый jQuery.Callbacks Object

              В не столь давно вышедшей версии jQuery 1.7 появился новый объект Callbacks, о котором сегодня и пойдёт речь.
              В официальной документации jQuery.Callbacks описан, как многоцелевой объект, представляющий собой список функций обратного вызова (callbacks — далее просто колбэков) и мощные инструменты по управлению этим списком.

              Я просматривал возможности этого объекта, когда он был ещё только в разработке, и надо сказать, что возможностей у него изначально было немного больше, чем осталось в релизной версии. Например, сейчас отсутствует возможность создания очереди (queue) колбэков, которые вызываются по одному на каждый вызов fire(). Видимо, команда jQuery, решила немного подсократить код, убрав «ненужные/редкоиспользуемые» возможности, чтобы сэкономить в весе библиотеки. Это маленький экскурс в историю Callbacks, но далее я буду описывать только доступные сейчас функции и в конце напишу небольшое возможное улучшение этого объекта.
              Кому интересно, прошу под кат
            • Работа с памятью (и всё же она есть)

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

                Читать дальше →
              • Моделируем полёт PHP на крыльях Erlang

                  В данной статье изложены размышления и фантазии на тему «как можно было бы скрестить Erlang и PHP, чтобы случилось вселенское счастье», а не описание готовой технологии или продукта. Впрочем, мы намерены это реализовать, скорее всего, в форме open-source проекта, если, конечно, уважаемая хабра-аудитория не отговорит :) Собственно, одна из главных задач этой статьи — понять, насколько идея интересна и потенциально полезна широкому PHP-сообществу. Кстати, некоторые из проблем, обсуждаемых в статье, справедливы и для других популярных скриптовых языков (тут я подразумеваю Ruby и Python), так что предлагаемое решение, возможно, будет актуально и для них.
                  Интересно, нафига козе баян?
                • Разработка браузерной стратегии

                  Всем привет!

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

                  image

                  Что представляет собой игра? Видимо наиболее коротким описанием будет «клон Цивилизации» =). Но это не значит что у меня не хватило фантазии придумать что-то свое. Просто сделать «Цивилизацию» было моей мечтой. Вряд ли бы я получил столько удовлетворения от написания другой игры. Ну а фанаты Цивилизации наоборот считают, что моя игра совсем не похожа на Цивилизацию, разве что только с виду. Может это и к лучшему.

                  Игра называется The Fate of Nation http://fatenation.com

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

                  Для создания игры я использовал php и MySQL на сервере, html и javascript на клиенте. Flash не используется. Из html5 есть только видео на сайте и несколько областей с канвасом в самой игре — включая поверхность карты и мини-карту. Объем кода клиентской части в несколько раз превышает серверную часть, поэтому в основном буду рассказывать о клиентской разработке, но начнем с сервера.

                  Читать дальше →
                • TDD в JavaScript. Разработка приложения

                    Всем привет. Данная статья посвящается методологии Разработки через тестирование (TDD) в применении c JavaScript.
                    Напишу лишь вкратце о методологии TDD, более подробную информацию можно почерпнуть из ссылки выше.

                    Разработка через тестирование подразумевает, что перед написанием кода необходимо:
                    • создать тест, который будет тестировать несуществующий код, тест соответственно не пройдет
                    • написать код и убедиться, что тест прошел
                    • почистить код
                    • повторить

                    Читать дальше →
                  • Обзор плагинов ++

                      Очередной топик с обзором нескольких интересных плагинов jQuery.

                      Mobily Map




                      Позволяет сделать интерфейс, подобный google-картам, на основе собственных изображений (возможность перетаскивать, ставить маркеры на изображении, реагировать на нажатие по ним и др.).
                      Узнать больше (англ.) | Посмотреть в действии


                      Читать дальше →
                    • CSS спрайты из командной строки

                      Да, инструменты для создания CSS спрайтов существуют. Я даже сделал один такой сервис. Но они время от времени ломаются (как сейчас, мой). Но и командная многого стоит, и imagemagick. Давайте посмотрим, как мы можем создавать CSS спрайты только из командной строки.

                      Создание картинки


                      Начнем с того, что у нас есть список отдельных файлов:
                      $ ls

                      1.png  2.gif  dot.png  phoney.gif  tw.gif

                      • — 1.png
                      • — 2.gif
                      • — dot.png
                      • — phoney.gif
                      • — tw.gif

                      Сделаем из них спрайт:
                      $ convert *png *gif -append result/result-sprite.png

                      Да, это все. Смотрим результат.

                      Читать дальше →
                    • Чек-лист вёрстки. Что можно отдавать клиенту, а что надо переделывать

                        Идеальная вёрсткаВы PM. Как узнать – готова ли вёрстка к реальному использованию?
                        Вы заказчик. Как убедиться, что работа выполнена качественно?
                        Как оценить качество вёрстки?

                        Когда я стал тим-лидом, а позже PM, передо мной стала задача проверять вёрстку наших проектов. Нужно было выработать формальные, легкопроверяемые критерии, соответствие кода которым, должно было давать некую гарантию, что не будет факапов и ни клиент, ни программеры не сказажут потом “WTF?”.

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

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

                        Итак что же это за список?

                        Краткая версия теперь доступна на html5checklist.com (github), где можно вносить pull-request'ы.

                        История обновлений:
                        • 2015/08/11: Актуализировал рекомендации по оптимизации скорости загрузки. Добавил требование поддержки Retina. Дополнил «19. Мелочи» требованием что изображения должны масштабироваться в зависимости от размера окна.
                        • 2015/08/10: актуализирован список исключений для CSSLint
                        • 2015/07/29: актуализирован пункт №13 «плохо»/«хорошо»
                        • 2015/04/08: добавлено требование использования препроцессоров и рекомендация использования систем сборки
                        • 2013/04/25: добавлены анализаторами качества кода: CSSLint и JSHint, указан сайт подбора css font stack (спасибо @fliptheweb), мелкие уточнения (работу интерактивных элементов страницы, что не пропадает фон на высоких разрешениях, не должно быть пустых презентационных блоков, при проверках контента — пробовать удалять заголовки, менять местами блоки)
                        • 2013/04/24: добавил пункт об минимизации каскада (БЭМ-техники, MCSS, SMACSS), необходимости вписывания в экран моб. устройства, заменил ссылку на проверочный текст отображения стандартного html на код с normalize.css, поправил пример где в рекомендации встречался длинный каскад, упомянул про Opera на Presto и новый уровень семантики — в именах классов BEM.
                        • 2012/04/12: отсортировал пункты проверки в порядке важности, выделил главные, дополнил статью подробностями
                        • 2011/12/07: дополнил согласно доклада на WSD Минск'2011.
                        • 2011/07/19: добавлено про повышение надёжности вёрстки благодаря html5-тэгам, про необходимость favicon/apple-touch-icon, отсутствие багов при ресайзе textarea
                        • 2011/06/15: добавил пояснения какие ошибки валидации допустимы, рассказал про отсутствие официальной кнопки «HTML5 Valid» и про официальное лого HTML5 на сайте.


                        Далее с примерами - как проверить html, даже если вы ничего не понимаете в вёрстке.
                      • Ищем быстро, еще быстрее

                          Натолкнулся в разделе QA на интересный вопрос. Ответ на него заставил написать эту статью как бОлее полный ответ на вопрос «как организовать поиск по множеству параметров, как в Яндекс-маркете, например».

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

                          Итак, что имеем в «ДАНО»
                          • Имеем 120 чекбоксов — вариант 1/0
                          • Имеем 30 «радио» с выбором «да/нет/не важно»
                          • Имеем 2-3 слайдера для указания диапазона цен/размера чего нить
                          • Имеем самое главное: 12 млн записей в БД.
                          • Имеем Select * From tovar Where (wifi=true) and (led=false) and (type=3) and ….остальные параметры …; со временем выполнения близкому к истерике клиента.

                          Читать дальше →
                        • FileSystem API&File API: разбираемся и используем

                            HTML5 Powered with Performance & Integration, and Offline & Storage
                            В данной статье я хочу рассмотреть FileSystem API и File API, разобраться с его методами и показать пару полезных штук. Эта статья является компиляцией материалов с html5rocks (1, 2, 3). Все представленные ниже демки можно посмотреть по первым двум ссылкам. Третья ссылка так же предлагает ряд интересных демо. Ну а теперь займемся изучением материала.
                            Читать дальше →
                          • HTML5 Canvas — создание аркады-скроллера по шагам

                            image

                            Предисловие

                            Это инструкция по созданию игры, которую я накодил за пару вечеров. Целью было не столько создание достойного представителя жанра, сколько проверка возможностей Canvas и ООП в JavaScript. Чтобы было интереснее, я поставил условие — никаких внешних файлов со спрайтами, вся графика рисуется встроенными методами. Также, не используется никаких фреймворков и библиотек. Просто потому, что в такой небольшой игре их использование ИМХО не оправдано.

                            В целом, Canvas молодая платформа, и может вызывать интерес перенесением на нее классических игровых концепций.

                            Задача

                            Cоздание классической скроллер аркады, с бесконечным количеством врагов разных типов, которые появляются волнами. За сбитых врагов дают очки, лучший результат записывается.

                            Исполнение

                            Сразу предупреждаю, статья довольно длинная, т.к. постарался описать каждый аспект игры. Ссылка на рабочий пример в конце.
                            Читать дальше →
                          • Автоматизированная проверка PHP кода при комитах

                              В свое время работая в узком кругу программистов, отдельными задачами и даже проектам, мы не задумывались о проблемах связанными с текучкой кадров. Точнее думать — думали, но ни каких мер не применяли, да и в целом коллектив был сплоченный никто не уходил и никого «не уходили». С ростом внутренних проектов и корпоративных клиентов, штат начал разрастаться и казалось, что все отлично — нас больше, значит будем больше успевать и делать, но не тут то было. Мы начали тратить кучу времени на “бесполезные” обсуждения, проверки, излишние проектирование и т.д, больше всего раздражает — это проверка кода. И тут я начал думать, что “мудрые и древние” наверняка решали эти проблемы с сотнями, тысячами программистов, неужели мы не справимся? Я решил провести эксперимент, под названием “автоматизированная проверка стиля кода при комитах”. Для большинства из Вас это не новость и наверняка вы этим пользуетесь, но поделиться опытом внедрения думаю, не будет лишним.
                              Читать дальше →
                            • Проверяем отказоустойчивость сайта

                                Результаты тестирования. Время ответа сервераЭто очередной пост их уже традиционной предновогодней серии про проверку отказоустойчивости сайта и готовности его принять всех ваших посетителей, озадаченных выбором подарков или предновогодними скидками. В этом выпуске я рассмотрю создание тестов в расширенном режиме с использованием записи действий (Proxy recorder), что позволяет почти полностью эмулировать поведение реальных пользователей из реального браузера у вас на сайте. Также немного будет затронута тема анализа самих графиков по отказоустойчивости.
                                Итак, поехали.
                                Читать дальше →
                              • Как создать вебсайт для мобильных устройств

                                  Стили


                                  User Agent

                                  Один из способов включения стилей для мобильного устройства — это использование User Agent, которую получает сервер от клиента.
                                  Этому может помочь набор скриптов: code.google.com/p/mobileesp, а также сервис от яндекса api.yandex.ru/detector
                                  При работе с User Agent только одна проблема — это постоянно появляющиеся новые User Agent.
                                  Читать дальше →