Blog

  • 1Password

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

    После перехода на Маверикс я начал было использовать стандартную маковскую связку ключей. Но пользоваться ей с разных компьютеров и мобильных устройств оказалось не самым удобным.

    Еще когда я устроился работать в AdMe, наш генеральный директор Павел Радаев посоветовал мне программу 1Password. Как жаль, что я поскупился и не купил ее сразу, ведь тогда вряд ли меня смогли бы взломать.

    Снимок экрана 2014-01-10 в 17.05.55

    В общем, в этот раз никаких сожалений по поводу траты денег я уже не испытывал и немедленно купил программу для Мака и Айфона. Все это встало примерно в 1600 рублей.

    Пользоваться ей очень удобно. Есть расширения для всех браузеров и платформ. Ну, на самом деле не для всех — отсутствуют версии для Линукса и Видовз Телефона, но ими я сейчас и не пользуюсь.

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

    Рекомендую.

  • array_key_exists vs. isset

    Очередное маленькое бесполезное исследование скорости работы двух похожих функций.

    Код и результаты, как водится, ниже.

    <?php
    
    $array = range(0, 1000000, 3);
    
    $start = microtime(true);
    for ($i = 0; $i < 1000000; $i++) {
        array_key_exists($i, $array);
    }
    $end = microtime(true);
    echo 'array_key_exists: ' . ($end - $start) . PHP_EOL;
    
    $start = microtime(true);
    for ($i = 0; $i < 1000000; $i++) {
        isset($array[$i]);
    }
    $end = microtime(true);
    echo 'isset: ' . ($end - $start) . PHP_EOL;
    array_key_exists: 0.13523197174072
    isset: 0.055444002151489
  • PhpStorm Best Practices

    Я уже несколько лет использую Jetbrains PhpStorm, начиная с самой первой версии. С каждым новым релизом он становится все лучше и радует все больше. (Последнее утверждение не касалось третьей версии, тогда пришлось вернуться обратно на двойку.) На мой взгляд это лучшая среда для разработки на PHP. Но на деле я не использовал ее даже на четверть. Но вот я увидел один замечательный вебинар, который рекомендую посмотреть и вам.

    https://youtube.com/watch?v=TejBj_N-3rI

    Upd. Смотрите также видео-туториалы по PhpStorm.

  • Обновление PHP в Mac OS X

    Сегодня мне рассказали про очень простой способ обновить PHP на локальной Mac OS X.

    Шаг 1. Сначала необходимо установить Xcode, если вы этого до сих пор не сделали. Запускаем его, идем в меню Xcode → Preferences… и выбираем тут закладку Downloads. Жмем “Install” напротив Command Line Tools. Шаг 1 завершен, в дальнейшем при очередном обновлении этого делать уже не потребуется.

    Шаг 2. Снова, если не было это сделано ранее, устанавливаем Homebrew. Для этого достаточно выполнить команду:
    ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

    На этом второй шаг завершен и его повторять также не потребуется впоследствии.

    Шаг 3. Переходим непосредственно к установке новой версии PHP. По адресу http://php-osx.liip.ch есть небольшой сайтик посвященный утилите для установки PHP. Смотрим раздел “One Line Installation” и копируем оттуда команду, соответствующую желаемой версии интерпретатора. Например, для PHP 5.4 это будет:
    curl -s http://php-osx.liip.ch/install.sh | bash -s 5.4

    Сегодня он установил мне PHP 5.4.15, который является самой последней версией в данной ветке.

    Тут необходимо заметить, что эта утилитка не заменяет установленный в системе PHP, поэтому по умолчанию будет работать старая версия. Чтобы это исправить нужно отредактировать (или создать) файл .profile, который находится в вашей домашней директории (то есть ~/.profile). В этот файл нужно добавить строчку, которая изменит путь поиска бинариков:
    export PATH=/usr/local/php5/bin:$PATH

    После этого нужно перезапустить терминал (или перелогиниться в нем), чтобы изменения вступили в силу.

  • Меняем историю

    На работе мы имеем дело c git и github. Чтобы не захламлять историю нашего основного репозитория на гитхабе, мы решили соединять коммиты перед пулл-реквестом.

    То есть вместо истории:
    9fc47c08e9d70cdd33768eff1dd0c4ea95c95a7f Создал класс для фичи
    69e87e4eee9bc656184a8e32c619625db0b2f51f Написал класс этой фичи
    4644b4d8111fd6a9fb38087bfa9f869215ff842e Правлю баг…
    4881c35c6d58e0453e737a06ae19d264acddf423 Правлю другой баг…
    86861e363530a4924217e4a497a74b168beb157d Форматирование!
    9680a87d2a86bb205615afeb6a9780fc7a914ef5 Все, теперь можно!

    Мы получаем нечто вроде:
    38b34074eb416155167b10c6914c95ee4c26d2e6 Фича такая-то. Описание особенностей.

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

    Сначала мы сбрасываем текущее состояние до последнего общего с мастером коммита:
    git reset --soft 3a1829e5f8d49cdc404df070133e5a64ccacdac2

    Мы делали “мягкий” сброс, поэтому все наши изменения остались в коде, теперь мы должны из закоммитить:
    git commit -a -m 'Message'

    И, наконец, запушить новый коммит. Если не сделать –force, то это закончится неудачей.
    git push --forсe

    У способа есть минус — на деле эти ревизии сохраняются и их можно увидеть, посмотрев лог с указанием комиитов:
    git log ff122876f2f5ad46b4c930a5889571e8b6db6913…c66b0cf61e269809e2d655f10fa0a6f2294da405

  • Кирдык казанской Мамбе

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

    Если нужны контакты хороших PHP-программистов, обращайтесь, могу порекомендовать несколько человек.

  • function_exists vs. extension_loaded

    Одно небольшое бесполезное исследование провел сегодня на работе по долгу службы. Код и результаты его выполнения ниже.

    <?php
    
    $functionExistsStart = microtime(true);
    for ($i = 0; $i < 1000000; $i++) {
        function_exists('this_function_doesnt_exist');
    }
    $functionExistsEnd = microtime(true);
    
    $extenstionLoadedStart = microtime(true);
    for ($i = 0; $i < 1000000; $i++) {
        extension_loaded('this_extension_is_not_loaded');
    }
    $extenstionLoadedEnd = microtime(true);
    
    echo 'function_exists ' .
        ($functionExistsEnd - $functionExistsStart) .
        PHP_EOL;
    
    echo 'extension_loaded ' .
        ($extenstionLoadedEnd - $extenstionLoadedStart) .
        PHP_EOL;
    function_exists 0.35822796821594
    extension_loaded 0.40138292312622
  • Последние события

    Как я писал ниже, я сменил место работы, но писать об этом в блоге пока что не хочется. Поэтому пришлось придумать повод — я записался на мастер-классы по веб-разработке. Это может показаться смешно, так как я и сам, наверное, мог бы их вести и даже для более подготовленных слушателей, чем присутствовали вчера на первом занятии. Проводт эти мастер-классы ака семинары Барс-групп, стоят они всего 2500 рублей. Длительность месяц, занятия каждый понедельник и четверг.

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

    Еще хотел заметить, что скоро будет две конференции, которые должны быть обязательно интересны всем веб-разработчикам — На стачку и DevConf. Надеюсь, увидимся там.

  • Мамба, до свидания!

    Прошла зима, а вместе с ней завершилась и моя работа в казанском офисе Мамбы.
    С 1 марта я начал трудиться в другой казанской компании, которая хорошо известна российской аудитории благодаря одному из своих проектов.
  • GitHub

    Я уже всем друзьям прожужжал уши про то, что стал активнее использовать свой аккаунт на github. Сам аккаунт я создал еще два года назад, но он не проявлял тогда никакой активности.

    Разумеется, главной причиной того, что данный сервис стал для меня так интересен, является скорый вывод проекта FullCart в open source. Но по мере его изучения понял, сколько это удобная платформа, чтобы следить за любимыми проектами. Все в одном месте.

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

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

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

    Если раньше вы ни разу не сталкивались с git, то это простое руководство поможет быстро его освоить. Кроме того, на самом гитхабе куча полезной информации по этому вопросу. Жду и вас на гитхабе!