Search
Write a publication
Pull to refresh
23
0
kamaikin @kamaikin

User

Send message

Эмулятор Opera Mobile уже доступен

Reading time1 min
Views20K

Специально для веб-разработчиков выпущен эмулятор Opera Mobile, который предназначен для тестирования сайтов прямо с десктопа.

Скачать:
Opera Mobile for Windows
Opera Mobile for Mac
Opera Mobile for Linux (deb)

Источник

IT-бюрократия

Reading time4 min
Views5.5K
Казалось за 10 лет уже все плохие вещи со мной случились, ан нет, каждый раз сталкиваешься с новыми и с новыми тараканами, и еще неясно какие из них более неприятные, большие и жирные, или мелкие и многочисленные.

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

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

К вопросу о кроссбраузерных Data URI

Reading time8 min
Views9.9K
В погоне за оптимизацией сайтов захотел уменьшить количество запросов, не в ущерб размерам оптимизированных файлов.
Цель — передавать в одном файле изображения разных форматов, с разными настройками оптимизации.
Как средство, выбрал data uri и gzip'нутый css файл. Однако IE с data uri работают из рук вон плохо. Но в них есть mhtml. Существовавшая реализация не отвечала моим требованиям, т.к. приходилось 1 файл передавать два раза — раз для IE, в mhtml, и второй для всех остальных, в data uri. В поисках решения наткнулся на статью bolk'а, где описывалось решение для формата jpeg и некоторые теоретические выкладки для gif и png. После почти трехнедельного раскуривания манов мне удалось реализовать решение для gif и png и автоматизировать процесс для всех трех форматов.
ознакомиться

Code Like a Pythonista: Idiomatic Python (part2)

Reading time11 min
Views18K
Kaa, the Python


После небольшого перерыва представляю заключительную часть перевода статьи Дэвида Гуджера «Пиши код, как настоящий Питонист: идиоматика Python»


Ссылки на первую и вторую части.


Еще раз подчеркну, автор в этой статье не открывает Америку, большинство Питонистов не найдут в ней какой-то «особой магии». Но довольно подробно перечисляются методологии использования и выбора различных конструкций в Python с точки зрения удобочитаемости и близости к идеологии PEP8.
В некоторых местах в авторской статье отсутствуют примеры исходных кодов. Разумеется, оставил как есть, придумывать свои не стал, в принципе должно быть понятно, что имел в виду автор.

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

Как повысить доверие заказчика к профессионалу в области IT

Reading time3 min
Views2.3K
Доверие может быть разным — кто и кому доверяет: персонал — руководителю, посетители — сайту, заказчик — исполнителю… Ниже коснусь последнего, что наиболее актуально для фрилансеров.

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

Параллельный импорт данных

Reading time8 min
Views3.6K
Представим, что у нас есть некоторый набор задач, допускающих возможность параллельного выполнения. К примеру, нам нужно организовать RSS-агрегатор, обновляющий через заданный промежуток времени все свои ленты. Понятно, что основное и при этом вполне ощутимое время будет уходить на загрузку данных с удалённого источника. Учитывая это, организация такого импорта путём последовательной загрузки лент лишена смысла, так в случае сколь-либо большого количества лент, импорт не будет укладываться в отведённые ему сроки.
Читать дальше →

Новая версия Rediska 0.4.0 — PHP клиент для Redis

Reading time1 min
Views1.7K
RediskaGood news every one! Мы хорошенько потрудились чтобы сделать этот несовершенный мир чуточку лучше :). Для тех кто не знаком с предметом разговора, сначала стоит прочитать мои предыдущие посты о замечательной key-value базе Redis и о нашем удобном PHP клиенте Rediska (далее Редиска), а также погулять по его домашней страничке.
Уже пол года мы успешно обкатываем Redis на наших проектах (на самом популярном в среднем 130 000 уникальный посетителей в день и 1 500 000 просмотров) и не можем нарадоваться. По ходу разработки проектов, да и честно говоря, чтобы не ударить в грязь лицом перед вами, дорогие мои, мы старались довести Редиску до ума.
Вот, чем мы хотели порадовать вас в новой версии...

15+ полезных документов по jQuery

Reading time2 min
Views7.1K
Как известно, пару месяцев назад свет увидела jQuery 1.4, в которой мы можем наблюдать множество новых функций и возможностей. А значит, стало еще больше информации для изучения и запоминания. И не важно, насколько хорошо вы владеете искусством jQuery — запомнить всё в любом случае не удастся. И вот здесь нам на помощь приходят всевозможные сборники документаций и шпаргалки, которые очень полезно держать под рукой и периодически в них заглядывать).
Читать дальше →

Code Like a Pythonista: Idiomatic Python (part1)

Reading time9 min
Views26K
Kaa, the Python


Это продолжение перевода статьи Дэвида Гуджера «Пиши код, как настоящий Питонист: идиоматика Python»

Начало и окончание перевода.


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

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

Обязательные поля при регистрации

Reading time2 min
Views7.1K
Разрабатывая интерфейс для очередного сайта, основной аудиторией которого будут люди не очень продвинутые технически, я задумался над вопросом об обязательных для регистрации полях и минимизации их количества.

В голову пришли следующие варианты:

0 полей: при загрузке страницы незалогиненный пользователь получает сгенеренный аккаунт, который ему предлагают использовать, вот еще один пример такого подхода.
— удобно для узкоспециализированных задач и мне не подходит. По функционалу уже недалеко от куки, если бы не привязанность последних к конкретному хранилищу в браузере или по :)

1 поле: email
Пользователь оставляет email, id создается автоматически, на email он получает пароль, авторизация либо по ID либо по email, username задается пользователем уже в профиле

+ Черт, это все таки одно поле! По умолчанию может быть сгенерен устойчивый к перебору пароль.
± username свободно меняются, и могут оставаться пустыми. Учитывать пользователей по айдишникам мне не хочется
— ЧПУ приобретают вид ufosite.nl/users/18567, скорее всего пользователь захочет сменить свой пароль. При ЧПУ вида ufosite.nl/users/customusername наступает ад для поисковиков. Строить ЧПУ на основе email, который, к тому же, далеко не все захотят публиковать — это подарок спамерам и ЧПУ становятся не совсем ЧПУ.

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

Почему 9 женщин не могут родить ребёнка за 1 месяц или О применении имитационного моделирования в управлении проектами

Reading time7 min
Views38K

Введение


Думаю, многие из вас слышали выражение «9 женщин не могут родить ребёнка за 1 месяц!». Контекст этого выражения очевиден — в разработке ПО его применяют в качестве аллегории, когда протестуют против совершенно неприемлемого сжатия сроков. Здесь под сжатием понимают сокращение сроков разработки путём расширения команды при сохранении общей трудоёмкости разработки.
image

Совершенно очевидно, что сжимать сроки до бесконечности невозможно. Существует определённый предел. Например, известным экспертом в области оценки трудоёмкости разработки ПО Стивом Макконнеллом (Steve McConnell) этот порог определён как 25% от исходных оценок (см. мою предыдущую статью).
Но этот топик не об оценках трудоёмкости…
Вот я выше написал «совершенно очевидно...». Думаете, это действительно очевидно? Всем?
Мой недавний опыт показал, что это очевидно далеко не всем. Проект был очень крупный и срок сдачи неумолимо приближался. Было принято решение резко расширять команду, чтобы успеть. Довод про «9 женщин» никто не принял. Команда была расширена и в срок мы всё равно не успели. Можно ли было как-то, кроме как на словах, показать, как будут развиваться события? Вот о том, как смоделировать такую ситуацию, и будет моя статья.
Читать дальше →

ProgressBar — Javascript Canvas2d

Reading time4 min
Views6.4K

Здравствуйте. Последнее время я достаточно часто имею дело с JavaScript-canvas, особенно написание всяких игрушек, которые требовательны к трафику в силу необходимости загрузки множества картинок.
Обычно сначала загружается около 50-100кб сжатого JavaScript, после чего — энное количество картинок(например, 500кб, 2мб, 10мб и т.п.) и только после этого запускается сама игра. Можно, конечно, загружать по ходу, но отсутствие текстур врядли порадует игрока.
Потому я решил, что необходимо сделать какой-то приличный, симпатичный, легко-настраиваемый(чтобы быстро менять от проекта к проекту) прогресс-бар, но, обязательно без использования картинок. Под катом исходники под лицензией LGPL, небольшая инструкция, как это сделать и внизу статьи — ссылка на результат.
Читать дальше →

JQuery FormNavigate — плагин для удобной работы с onbeforeunload

Reading time2 min
Views4.6K
Все, кто пользуется веб-интерфейсом gmail, наверняка замечали, как гугл заботится о нас и не даёт закрыть страницу, если мы начали составлять письмо и не сохранили его в черновики. И понадобилось мне для своего проекта сделать нечто похожее.

Сперва сделал это используя window.onbeforeunload, но злая опера не поддерживает это событие.
Призадумался, попутно нашёл плагин для jquery под названием FormNavigate.
Читать дальше →

Nagare — пример использования фреймворка

Reading time4 min
Views1.1K
В прошлом посте я презентовал Nagare — революционный (хоть и имеющий аналоги на Smalltalk и CL) питоновский web-фреймворк. Тот пост был несколько сумбурен и отражал, скорее, степень моего восторга, чем реальные особенности технологии. Сегодня я попробую дать немного более практический пример.
Читать дальше →

Как нанять программиста с закрытыми глазами

Reading time5 min
Views8.1K

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

  • Один не мылся и вонял так, что в комнату не зайти. Я угрожал поставить вытяжку и вычесть из зарплаты; это помогало на один душ, не больше.
  • Другой пил запоем и врал, что отравился брюшками семги.
  • И все, почти все затягивали сроки.


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




Поиск кандидатов



Очередного программиста я нашел так: отобрал несколько откликов на HeadHunter.ru и попросил их посмотреть, чем они займутся. Вот что я написал:

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

Простой консольный прогрессбар на питоне

Reading time3 min
Views32K
В связи с некоторыми вычислениями на питоне (например, подсчётом коэффициента симметрии карты реликтового излучения) мне захотелось сделать процесс более наглядным. Ну хотя бы добавить прогресс-бар. Скучно, знаете ли, сидеть перед пустой консолью и втыкать на запущенную команду. То ли работает, то ли висит… с ходу не понять. А делать какой-нибудь лог исполнения не хочется, так как потом в полученом хаосе глаз теряется.
Недавно нашёл выход: модуль progressbar.

Подсветка исходного кода

Reading time4 min
Views4.5K
Так получилось, что на хабре принято подсвечивать код с помощью Source Code Highlighter. Список поддерживаемых языков не впечатляет, да и возможности выбрать цветовую схему я не нашел. Существует библиотека pygments, которая понимает большинство используемых языков, умеет выдавать на выходе html, картинки, latex и не только. Но для хабры, как известно, нужен особый подход, и html вывод pygments хабра не пропускает. В связи с этим я написал небольшой класс для pygments, который исправляет это досадное недоразумение. Воспользоваться веб-версией можно по адресу paste.ly.
А посмотреть исходник и пример подсвеченного кода под катом

Шифрование электронной почты Gmail в Firefox

Reading time2 min
Views12K
Много сервисов вкусных и разных, которые все больше и больше собирают информацию о пользователях: их увлечения, списки контактов, деловая активность, списки друзей, поступление средств, все о бизнесе. Иногда тот-же Gmail может знать о человеке больше, чем сам человек, извините за тавтологию. Конечно мы думаем, что нечего скрывать, все честные люди, правда когда собранная информация насчитывает тысячи человек, уже начинаем задумываться.
Читать дальше →

Динамический CSS?

Reading time4 min
Views19K
xCSS PHP ClassЯ давно ждал этого момента, нет честно, где-то в подкорке я очень-очень хотел такой штуки чтобы было удобно писать на CSS без переписывания похожих стилей по два раза, без выыскивания нужных разделов в собственном коде, в общем хотелось чтобы на CSS можно было работать легко и просто, что-то я затянул…И так встречайте xCSS — php-класс для работы с динамическим CSS.
Поехали

Одноврéменно || Одновремéнно

Reading time2 min
Views933
image

Введение


ZendX_Console_Process_Unix позволяет разработчикам создавать объекты под видом процессов, и таким образом параллельно выполнять несколько задач. Из-за особенностей реализации на текущий момент эта возможность доступна только на *nix системах, таких как Linux, Solaris, Mac / OSX и другие в CLI или CGI режиме. Кроме того для работы этого компонента необходимы следующие модули: Shared Memory, Process Control и POSIX. Если одно из требований не выполняется, то будет брошено исключение.

Основы использования ZendX_Console_Process_Unix


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

Метод _run(), а так же каждый метод вызванный внутри него будет выполняться в отдельном процессе. Любой другой метод, вызванный в вашем приложении будет выполняться в родительском процессе.

Методы setVariable () и getVariable () могут быть использованы для передачи переменных между родительским и дочерними процессами. Для наблюдения за статусом дочернего процесса следует вызывать внутри него метод _setAlive () через короткие промежутки времени, таким образом родительский процесс сможет получить информацию о состоянии дочернего процесса посредством вызова метода getLastAlive (). Чтобы получить PID дочернего процесса, родитель может вызвать getPid().
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity