Давно замышлял покупку нового ноутбука, всё надеялся на чудо на ARM процессоре, но старичок Roverbook W700, который пережил со мной морозы, снег, дожди, жару и падения, начал намекать страшными артефактами на экране, что время перемен пришло и ждать больше уже нельзя. И вот чуть больше недели назад я стал обладателем матового монстра — Dell Vostro 3750. Почему я выбрал именно его? Читайте далее и берегитесь кучи картинок…
Павел Тетяев @Pahanini
Go, Цой, Postgres
Вышел релиз популярного магазина OpenCart v1.5.0 RC1
2 min
5.9KОдин из самых популярных и динамично развивающихся OpenSource проектов для электронной коммерции — OpenCart выпустил новую версию v1.5.0 RC1 для финального тестирования. Я беглым взглядом пробежался по меню настройки и выделил изменения по сравнению с версией 1.4.x.
+29
PHP — оптимизация многочисленных array_merge()
2 min
1.8KНебольшой хинт, о котором я собираюсь сейчас рассказать, я узнал уже довольно давно. Но, поскольку вот только что обнаружил, что именно в этом месте оптимизация помогла сэкономить изрядное количество времени уже в текущем проекте, то решил поделиться с общественностью (а мужики-то не знают, ага).
Буду краток, вот тестовый скрипт и то, что он выводит:
Экономия солидная. Авось кому пригодится.
Буду краток, вот тестовый скрипт и то, что он выводит:
$start = microtime(true);
$res1 = array();
for ($i = 0; $i < 1000; $i++) {
$res1 = array_merge($res1, array(1, 2, 3));
}
echo "1000 merges: " . ceil((microtime(true) - $start) * 1000) . "ms\n";
$start = microtime(true);
$toMerge = array();
for ($i = 0; $i < 1000; $i++) {
$toMerge[] = array(1, 2, 3);
}
$res2 = call_user_func_array('array_merge', $toMerge);
echo "call_user_func_array('array_merge',..): " . ceil((microtime(true) - $start) * 1000) . "ms\n";
echo "Is it true that the two arrays are equal? It is ";
var_export($res2 === $res1);
echo ".\n";
~ % php ~/tmp/array_merge.php
1000 merges: 980ms
call_user_func_array('array_merge',..): 11ms
Is it true that the two arrays are equal? It is true.
Экономия солидная. Авось кому пригодится.
+21
Мастерство целевого использования ключевых слов и оптимизации страниц
8 min
8.1KTranslation
Пост опубликован по просьбе одного хорошего человека.
Если вы СЕОшник (SEO оптимизатор), то этот вопрос вы часто слышите. К сожалению, однозначного ответа нет. Но, тем не менее, существует набор полезных приемов, которые помогут приблизиться к ответу на этот вопрос. В данном посте я поделюсь нашими лучшими рекомендациями для достижения «совершенства» оптимизации страницы и расположения ключевых слов. Или, по крайней мере, что-то близкое к этому. Некоторые из наших советов подтверждены данными, результатами исследований и тестирований, другие основаны на интуиции и общем опыте. Как и со всеми СЕО советами, мы рекомендуем постоянное тестирование и оттачивание, ну а данный пост поможет вам начать процесс оптимизации.
Как создать максимально оптимизированную веб-страницу?
Если вы СЕОшник (SEO оптимизатор), то этот вопрос вы часто слышите. К сожалению, однозначного ответа нет. Но, тем не менее, существует набор полезных приемов, которые помогут приблизиться к ответу на этот вопрос. В данном посте я поделюсь нашими лучшими рекомендациями для достижения «совершенства» оптимизации страницы и расположения ключевых слов. Или, по крайней мере, что-то близкое к этому. Некоторые из наших советов подтверждены данными, результатами исследований и тестирований, другие основаны на интуиции и общем опыте. Как и со всеми СЕО советами, мы рекомендуем постоянное тестирование и оттачивание, ну а данный пост поможет вам начать процесс оптимизации.
+53
Continuous Delivery в Яндексе. Как разогнать свой цикл разработки, используя только Open Source решения
8 min
58KПеред тестированием всегда стояли и стоят две задачи – помочь команде поддерживать высокий уровень качества разработки и делать это, не задерживая весь процесс. И это справедливо не только для наших проектов в Яндексе, где мы работаем над очень большим количеством сервисов. Часто основная задача и вовсе формулируется как увеличение скорости тестирования при сохранении должного уровня качества. Скорость процесса разработки, приверженность ценностям частых и быстрых релизов – это основополагающие факторы для успеха любого продукта. У команды больше возможностей маневра, команда быстрее находит и исправляет ошибки, быстрее получает фидбек. Как же ускоряться, не теряя качества, как достичь дзена непрерывной доставки изменений?
Сегодня мы покажем, что Continuous Delivery — это просто и весело! А пользу от него можно получить, встроив его даже частично. Мы в тестировании Яндекса уже несколько лет используем подобный подход для наших библиотек с открытым исходным кодом — Allure Framework или Yandex QATools. Процесс прост, значительно масштабируем и может применяться как для огромных команд из одного человека, так и для маленьких командочек из десятков человек. А самое главное — весь инструментарий доступен в Open Source!
Кстати, до 30 сентября можно подать заявку и поступить в нашу Школу автоматизации процессов разработки в Питере. Обучение в ней бесплатное и будет состоять не только из курса лекций — обязательным этапом станет командная работа над учебным проектом.
А теперь вернёмся к теме. Представьте картину: уютное рабочее место, вы пишете код, добавляете юнит-тесты и отправляете изменения в систему контроля версий, а через пару часов они «выезжают» на боевые сервера. И все при этом работает.
Сегодня мы покажем, что Continuous Delivery — это просто и весело! А пользу от него можно получить, встроив его даже частично. Мы в тестировании Яндекса уже несколько лет используем подобный подход для наших библиотек с открытым исходным кодом — Allure Framework или Yandex QATools. Процесс прост, значительно масштабируем и может применяться как для огромных команд из одного человека, так и для маленьких командочек из десятков человек. А самое главное — весь инструментарий доступен в Open Source!
Кстати, до 30 сентября можно подать заявку и поступить в нашу Школу автоматизации процессов разработки в Питере. Обучение в ней бесплатное и будет состоять не только из курса лекций — обязательным этапом станет командная работа над учебным проектом.
А теперь вернёмся к теме. Представьте картину: уютное рабочее место, вы пишете код, добавляете юнит-тесты и отправляете изменения в систему контроля версий, а через пару часов они «выезжают» на боевые сервера. И все при этом работает.
+79
Анализ рендеринга через Skia Debugger: как можно найти самые дорогие для отрисовки элементы
4 min
23KДоброго дня, недавно я решал проблему притормаживания скролла на страницах Почты Mail.Ru. Особенно эта проблема была заметна на retina-дисплеях. После простого анализа я пришел к выводу, что одна из основных проблем — это медленная отрисовка страницы.
В этой статье я расскажу, как можно применять инструмент Skia Debugger, входящий в набор инструментов Chrome, для пошагового анализа процесса отрисовки страницы, а также как с его помощью можно получить данные о том, сколько времени занимает отрисовка каждого элемента.
Как и многие подобные проблемы оптимизации, данную проблему можно решить множеством способов. Я взялся за оптимизацию рендеринга, так как на нее затрачивалось значительное количество времени. Тем самым, я достаточно быстро смог бы получить прирост производительности и, соответственно, улучшить плавность скролла, ускорив отрисовку.
В этой статье я расскажу, как можно применять инструмент Skia Debugger, входящий в набор инструментов Chrome, для пошагового анализа процесса отрисовки страницы, а также как с его помощью можно получить данные о том, сколько времени занимает отрисовка каждого элемента.
Как и многие подобные проблемы оптимизации, данную проблему можно решить множеством способов. Я взялся за оптимизацию рендеринга, так как на нее затрачивалось значительное количество времени. Тем самым, я достаточно быстро смог бы получить прирост производительности и, соответственно, улучшить плавность скролла, ускорив отрисовку.
+68
Настоящее модульное тестирование в AngularJS
12 min
42KTranslation
AngularJS молод и горяч, когда дело доходит до современной веб разработки. Его уникальный подход к компиляции HTML и двусторонней привязки данных делает его эффективным инструментом для создания клиентских веб приложений. Когда я узнал что Quick Left (студия в которой работает автор. прим. пер.) будет использовать его для создания приложения для одного из наших клиентов, я был взволнован и постарался узнать о angular столько сколько мог. Я обошел весь интернет, каждый урок и руководство, которые смог найти в Google. Они были реально полезны в понимании работы директив, шаблонов, компиляции и цикла обработки событий (digest), но когда дело дошло до тестирования, я обнаружил что эта тема была просто упущена.
Я обучался подходу TDD (Разработка через тестирование) и я чувствую себя не в своей тарелке без подхода «Красный-Зеленый-Рефакторинг». Так как мы все еще разбирались что к чему в тестировании в Angular, команде иногда приходилось полагаться на подход «тестирование-после». Это начало нервировать меня, поэтому я решил сосредоточится на тестировании. Я потратил на это недели, и в скором времени покрытие тестами поднялось с 40% до 86% (Кстати, если вы еще этого не делали, можете попробовать Istabul для проверки покрытия кода в вашем JS приложении).
Я обучался подходу TDD (Разработка через тестирование) и я чувствую себя не в своей тарелке без подхода «Красный-Зеленый-Рефакторинг». Так как мы все еще разбирались что к чему в тестировании в Angular, команде иногда приходилось полагаться на подход «тестирование-после». Это начало нервировать меня, поэтому я решил сосредоточится на тестировании. Я потратил на это недели, и в скором времени покрытие тестами поднялось с 40% до 86% (Кстати, если вы еще этого не делали, можете попробовать Istabul для проверки покрытия кода в вашем JS приложении).
+34
Топ-10 игр и Топ-10 приложений для Ubuntu по версии репозитория UALinux
2 min
118KКак-то на Хабре два года назад было несколько новостей (1, 2, 3, 4) про Топ10 популярных игр и приложений в одном из сторонних репозиториев для Ubuntu, и после этого больше особо так и не попадались публикации о других топах игр и приложений.
Я решил опять к ним заглянуть и посмотреть как обстоят дела, и вот какие интересные изменения я заметил:
+8
Как мы строили офис мечты с блэкджеком и пуфиками (почти за копейки)
6 min
113KМы не можем себе это позволить. Сколько раз за свою карьеру вы слышали такую фразу? Как правило, эти пять слов призваны напомнить собеседнику, что у компании просто не хватает на все денег. Хотя на самом деле в большинстве случаев деньги тут совершенно не при чем. Мы в этом убедились на собственном опыте, когда строили себе дом для Альфа-Лаборатории. Вот этот вот.
Большинство людей, которые приходят к нам в гости, начинают люто завидовать. Особенно если они сами работают в банковской сфере, где офисная обстановка, скажем так, обычно не отличается тем комфортом, к которому привыкли всякие стартаперы или дизайнеры.
При этом практически все, разглядывая пуфики, супергероев на стенах и игровую, думают примерно одно и то же. Не исключено, что вы думаете так же, глядя на эти фотографии: «Ну, конечно, Альфа-Банк может себе такое позволить». Подразумевается, что в инновационную Альфа-Лабораторию вбуханы какие-то баснословные деньги.
Когда мы рассказываем об этом, у людей в глазах читается немой вопрос, что-то вроде: «Эй, а почему тогда я, как и большинство людей на планете, до сих пор работаю в мышиной норе?» Ну что сказать. Дело уж точно не в деньгах.
В этом посте мы решили поделиться некоторыми принципами, которые позволили нам создать дружелюбное пространство — и не потратить при этом лишнего.
Большинство людей, которые приходят к нам в гости, начинают люто завидовать. Особенно если они сами работают в банковской сфере, где офисная обстановка, скажем так, обычно не отличается тем комфортом, к которому привыкли всякие стартаперы или дизайнеры.
При этом практически все, разглядывая пуфики, супергероев на стенах и игровую, думают примерно одно и то же. Не исключено, что вы думаете так же, глядя на эти фотографии: «Ну, конечно, Альфа-Банк может себе такое позволить». Подразумевается, что в инновационную Альфа-Лабораторию вбуханы какие-то баснословные деньги.
На самом же деле организация этого пространства стоила нам дешевле, чем стандартный офис, который вряд ли смог украсить рубрику «Интерьер недели» на каком-нибудь популярном хиптсерском сайте.
Когда мы рассказываем об этом, у людей в глазах читается немой вопрос, что-то вроде: «Эй, а почему тогда я, как и большинство людей на планете, до сих пор работаю в мышиной норе?» Ну что сказать. Дело уж точно не в деньгах.
В этом посте мы решили поделиться некоторыми принципами, которые позволили нам создать дружелюбное пространство — и не потратить при этом лишнего.
+112
15 малоизвестных команд Linux
3 min
316KTranslation
Каждому разработчику в определенной степени следует овладеть навыками работы в терминале. Физически находиться у компьютера не всегда возможно, поэтому приходится подключаться удаленно. И действительно, GUI-программы вполне могут с этим с правиться, но зачастую они работают медленнее, чем получение доступа через тот же терминал (в конце концов, это лишь обмен текстом).
+215
Мобильные приложения для путешествий
9 min
93KСезон отпусков начнётся в ближайшие недели. Продажи всевозможных гаджетов, полезных в путешествиях, неуклонно растут. Фотоаппараты, планшеты, смартфоны, ридеры, плееры закупаются в предвкушении моря, пляжей, исторических достопримечательностей, джунглей, гор и множества других прекрасных мест на нашей планете. Но при этом многие счастливые обладатели планшетов и смартфонов упускают такой немаловажный момент, как полезные и удобные приложения, способные существенно облегчить, или украсить, или дополнить новыми впечатлениями ваш отпуск. Поэтому мы решили предложить вашему вниманию подборку ряда приложения для путешественников.
+52
Понимание областей видимости или Scope в AngularJS
10 min
78KTutorial
Translation
В Ангуляре, дочерняя область видимости обычно прототипически наследуется от родительской. Единственным исключением является директива, в которой используется
scope: { ... }
, создающая «изолированную» область видимости, не наследуемую прототипически. Такая конструкция часто используется при создании директив для компонентов «многоразового использования»+30
В чем разница между factory и provider в AngularJS (на пальцах)
2 min
53KTutorial
Как-то давно переводил статью «Понимание типов сервисов в AngularJS (constant, value, factory, service, provider)». На практике, конечно, не всё пригождается, поэтому в рамках понижения порога вхождения в Ангуляр, объясню проще.
+27
Индексирование AJAX-сайтов
9 min
26KПри разработке интерфейса одного веб приложения возникла задача сделать странички, формируемые AJAX запросом, индексируемыми поисковиками. У Яндекса и Google есть механизм для индексации таких страниц (https://developers.google.com/webmasters/ajax-crawling/ http://help.yandex.ru/webmaster/robot-workings/ajax-indexing.xml). Суть довольно проста, чтобы сообщить роботу о HTML версии страницы, в тело нужно включить тег
. Этот тег можно использовать на всех AJAX страницах. HTML версия должна быть доступна по адресу www.example.com/чтотоеще?_escaped_fragment_=. То есть, если у нас есть страница http://widjer.net/posts/posts-430033, то статическая версия должна иметь адрес http://widjer.net/posts/posts-430033?_escaped_fragment_=.
Чтобы не быть обвиненным в клоакинге, динамическая и статическая версии не должны отличаться, поэтому возникает необходимость создания слепков ajax страниц, о чем и хотелось бы рассказать.
+13
Мне кажется, я начал понимать, что ты имела в виду!
7 min
33KОпечататься дело нехитрое; опечататься в поисковом запросе так и вдвойне. Почитай все большие веб-поисковики сегодня умеют корректировать ошибки в ключевых словах во-1х и подсказывать запросы во-2х; вслед за ними того же хочется поискам поменьше. Обе штуки можно ловко реализовать при помощи открытого поисковика по кличке Sphinx; в этом посте расскажу, как конкретно.
Ну, за did you mean («что ты имела в виду») и прочий query completion («уж не Васю ли ты ищешь»).
Ну, за did you mean («что ты имела в виду») и прочий query completion («уж не Васю ли ты ищешь»).
+66
Шпаргалка по С++11 для печати на кружке
1 min
47KTutorial
Вот захотелось мне такое сделать и я сделал.
Картинка под спойлером
Полноразмерная картинка (на случай если Хабр пережмёт картинку под спойлером). Подходит для печати на стандартной кружке, площадь поверхности 20 х 8.8 см, 300 dpi (ребята в магазине сувениров сказали, что это стандарт).
Шпаргалка, послужившая основой
P.S. Да, я в курсе, что у меня не вышло вместить 1300-cтраничный стандарт на одну кружку. В следующий раз точно получится, я уверен.
+105
Как устроена apache cassandra
13 min
226KВ этом топике я хотел бы рассказать о том, как устроена кассандра (cassandra) — децентрализованная, отказоустойчивая и надёжная база данных “ключ-значение”. Хранилище само позаботится о проблемах наличия единой точки отказа (single point of failure), отказа серверов и о распределении данных между узлами кластера (cluster node). При чем, как в случае размещения серверов в одном центре обработки данных (data center), так и в конфигурации со многими центрами обработки данных, разделенных расстояниями и, соответственно, сетевыми задержками. Под надёжностью понимается итоговая согласованность (eventual consistency) данных с возможностью установки уровня согласования данных (tune consistency) каждого запроса.
NoSQL базы данных требуют в целом большего понимания их внутреннего устройства чем SQL. Эта статья будет описывать базовое строение, а в следующих статьях можно будет рассмотреть: CQL и интерфейс программирования; техники проектирования и оптимизации; особенности кластеров размещённых в многих центрах обработки данных.
+73
Что интересного я узнал на DevConf 2012
4 min
2.4KПривет, Хабрасообщество!
По следам недавно прошедшей конференции DevConf 2012 хочу поделиться записями из своего блокнота, которые показались лично мне наиболее интересными и полезными. Возможно, кому-то все это хорошо известно. Поскольку доклады шли одновременно в нескольких залах, то все их посетить было невозможно, поэтому ваши дополнения с удовольствием почитаю в комментариях.
Темы, которые прежде всего интересовали меня, это:
— развертывание системы и непрерывная интеграция (Continuous Integration)
— PHP 5.4, PHPUnit, Yii
— тестирование в javascript
По следам недавно прошедшей конференции DevConf 2012 хочу поделиться записями из своего блокнота, которые показались лично мне наиболее интересными и полезными. Возможно, кому-то все это хорошо известно. Поскольку доклады шли одновременно в нескольких залах, то все их посетить было невозможно, поэтому ваши дополнения с удовольствием почитаю в комментариях.
Темы, которые прежде всего интересовали меня, это:
— развертывание системы и непрерывная интеграция (Continuous Integration)
— PHP 5.4, PHPUnit, Yii
— тестирование в javascript
+23
Наглядно о популярных Open Source лицензиях
1 min
28KНаглядное представление популярных Open Source лицензий
+155
RVM — подробно
4 min
97KRVM — Ruby Version Manager
Программа для управления версиями Ruby.
Как быть если один проект использует Ruby 1.8.7, а другой 1.9.2? А что если при этом у вас 2 проекта под версией 1.9.2, но с разными наборами гемов? Хотелось бы вам иметь отдельные наборы gem's для каждого проекта?
Основные задачи:
1. Физическое разделение версий ruby и наборов гемсетов
2. Возможность иметь несколько версий ruby и переключаться между ними
3. Возможность для каждой версии ruby иметь несколько gemsets — наборов gem's и переключаться между ними
Под катом будут описаны:
1. Установка RVM
2. Работа с разными версиями Ruby
3. Работа с gemsets
4. Задание окружения под отдельный проект с помощью .rvmrc
5. Команды RVM которые могут оказаться полезными
6. Шпаргалка по основным командам RVM
+43
Information
- Rating
- Does not participate
- Location
- Екатеринбург, Свердловская обл., Россия
- Registered
- Activity