Знаю, что тут периодически тусуются люди, связанные с Asus и прочими производителями нетбуков, поэтому надеюсь, что они прочитают эту заметку и обсуждение, которое непременно воспоследует. Что за фигня творится с нетбуками? Почему я хотел нетбук, но так его и не купил? Почему сегодняшние нетбуки не нужны мне даже даром?
Eugene Leonovich @gen
rybakit
Как достичь профессионального вида с помощью цвета
9 min
11KTranslation
![image](https://habrastorage.org/getpro/geektimes/post_images/cba/e00/2ed/cbae002ed242abb7aad15b92c199b85b.jpg)
Что заставляет дизайн выглядеть скоординированным, спланированным и профессиональным? Ответ: 'цвет'.
Далеко не каждый проект нуждается в использовании мягкого корпоративного синего цвета для того, чтобы выглядеть профессионально. Планирование цвета означает создание структуры, которая бы описывала, какие использовать цвета и как их использовать. Цвет — самый неподдающийся элемент дизайна. «Хороший» цвет жестко связан с такими неуловимыми вещами как личный вкус и интуиция, и, в то же время, с технической позиции с калибровкой монитора и контрастом.
Но цвет просто необходим для контента. Если Вы уделите вебсайту достаточно времени для его совершенства, то читатели вероятно уделят достаточно времени его просмотру. Хороший выбор цвета сделает это возможным.
В этой статье мы будем делать обзор некоторых методик, чтобы достигнуть красивого сочетания цвета для Ваших проектов в сети.
+140
Простенький Time Manager для Android
13 min
35K![](http://nixan.org/habr/timetracker/4.png)
Что будет рассмотрено:
- RelativeLayout для реализации интерфейса программы с наложением изображений друг на друга.
- Timer для реализации алгоритма подсчета времени.
- Animation для
свистоперделоккрасивого интерфейса апплета.
Для наглядности добавил скринкаст как все это добро работает.
Итак, пишем простенький тайм менеджер для Android'а.
+53
PHP под С-шным дебаггером: копаемся внутри Zend Engine
6 min
5.2KКак-то пришлось мне столкнуться с проблемой: веб-краулер на PHP работает себе нормально, работает, а потом вдруг (через 3-6 часов работы) перестает что-либо делать и начинает кушать 100% CPU. Как искать такую проблему? Как узнать, где он зацикливается? А что если подключиться к PHP сишным дебаггером и узнать оттуда все, что необходимо? Подробности под катом.
+74
Пути более эффективного использования PostgreSQL
5 min
59KПрочитав статью Базы данных в онлайн играх и особенно комменты к ней, я в очередной расстроился от мысли, что многие разработчики меняют БД в своём проекте, пытаясь этой сменой решить свои проблемы, не исчерпав, однако, всех возможностей, предоставляемой заменяемой БД. Я принимаю участие в работе над проектом, БД которого характеризуется:
В силу, как говорится, исторических причин, вся база представляет из себя, гхм, одну базу, пока без шардинга, который мог бы решить ряд проблем. Тем острее стоит вопрос о поиске решений, заключённых именно в особенностях PostgreSQL. Решений, которые можно реализовать малой кровью.
Я опишу некоторые проблемы, с которыми мы сталкиваемся, и применённые решения. Если кто-то сочтёт это полезным — ради Бога. Если кто-то поправит — я буду только рад обнаружить уязвимость в используемых подходах и увеличить эффективность работы БД. Описанное может быть применено без вмешательства в логику приложения, исключительно путём модификации схемы БД.
- Количеством транзакций порядка 5'000 — 10'000 в секунду
- Объемом примерно в 100ГБ (который бодро растёт)
- Примерно равным количеством операций на чтение/запись
- Преимущественно мелкими транзакциями
В силу, как говорится, исторических причин, вся база представляет из себя, гхм, одну базу, пока без шардинга, который мог бы решить ряд проблем. Тем острее стоит вопрос о поиске решений, заключённых именно в особенностях PostgreSQL. Решений, которые можно реализовать малой кровью.
Я опишу некоторые проблемы, с которыми мы сталкиваемся, и применённые решения. Если кто-то сочтёт это полезным — ради Бога. Если кто-то поправит — я буду только рад обнаружить уязвимость в используемых подходах и увеличить эффективность работы БД. Описанное может быть применено без вмешательства в логику приложения, исключительно путём модификации схемы БД.
+36
Тюнинг SQLite для PHP
11 min
29K![](https://habrastorage.org/getpro/habr/post_images/7f4/f01/355/7f4f013551c6bb2b11d6722b07cd40b9.png)
В данной статье оценивается применение SQLite для PHP-проектов, рассматриваются особенности многопоточной работы и способы ускорения работы. «На десерт» — небольшое сравнение с другими СУБД (MySQL, PosgreSQL, MS SQL, MongoDB).
+17
Изучаем Tarantool + Lua
6 min
26KTutorial
![logo](https://habrastorage.org/storage3/e96/3db/d48/e963dbd483aca9f66cd94e81a2be9d25.png)
Хочу поделиться опытом изучения Tarantool. Про все преимущества и особенности самого Тарантула я писать не буду, на эту тему было много статей (например, эта, эта и эта). Этот пост рассказывает о том, как начать работать с тарантулом и про некоторые особенности и вкусности которые можно получить из коробки.
+53
Определение веса значимости пользователей по отношению друг к другу на основании их действий (Tarantool+Lua)
13 min
10KЕсть система с множеством пользователей. Каждый пользователь системы может осуществлять действия по отношению друг к другу. На основании этих действий рассчитывается вес. Необходимо иметь возможность для каждого пользователя получать список остальных пользователей системы, отсортированный в порядке убывания веса. Характеристики весов у бездействующего пользователя меняться не должны.
![](https://habrastorage.org/storage3/cb4/acd/6ba/cb4acd6ba37325003f11a9e6dd5da997.png)
В своей прошлой статье я описал базовые понятия и средства для начала работы с тарантулом. В этой статье попробую уделить больше внимания использованию хранимых процедур в Тарантуле на примере одной игровой задачи.
![](https://habrastorage.org/storage3/cb4/acd/6ba/cb4acd6ba37325003f11a9e6dd5da997.png)
В своей прошлой статье я описал базовые понятия и средства для начала работы с тарантулом. В этой статье попробую уделить больше внимания использованию хранимых процедур в Тарантуле на примере одной игровой задачи.
+33
Настольная игра, обучающая детей программированию
2 min
23KДля начала, хочу поздравить всех хабровчан с днем программиста!
О чем же писать в этот день, как не об игре, которая позволит воспитать из вашего ребенка юного Стива Джобса или Аду Лавлейс.
Robot Turtles — это игра от программиста из Google Дэна Шапиро.
Она предназначена для детей от трех до восьми лет, и в неё очень легко научиться играть. Ваши детки даже не будут подозревать, что в течение игры они будут строить настоящие алгоритмы и изучать основы программирования.
![image](https://habrastorage.org/getpro/habr/post_images/711/c74/2b7/711c742b7e26c5824d6b5bd9a312deb5.jpg)
О чем же писать в этот день, как не об игре, которая позволит воспитать из вашего ребенка юного Стива Джобса или Аду Лавлейс.
Robot Turtles — это игра от программиста из Google Дэна Шапиро.
Она предназначена для детей от трех до восьми лет, и в неё очень легко научиться играть. Ваши детки даже не будут подозревать, что в течение игры они будут строить настоящие алгоритмы и изучать основы программирования.
![image](https://habrastorage.org/getpro/habr/post_images/711/c74/2b7/711c742b7e26c5824d6b5bd9a312deb5.jpg)
+31
Структуры данных, PHP. Часть вторая
11 min
40KTutorial
Translation
Продолжаю совмещать приятное с полезным и переводить. Сегодня речь зайдет о кучах (heaps) и графах. Как обычно, материал скорее подойдет новичкам — большая часть информации, если не вся, уже где-то так или иначе освещалась.
В конце прошлой статьи затрагивались деревья, поэтому начнем с кучи, поскольку между кучей и деревьями есть общие корни. Затем перейдем к графам и реализуем алгоритм Дейкстры.
UPD: Добавил сравнение производительности
В конце прошлой статьи затрагивались деревья, поэтому начнем с кучи, поскольку между кучей и деревьями есть общие корни. Затем перейдем к графам и реализуем алгоритм Дейкстры.
UPD: Добавил сравнение производительности
+21
Расширяем Symfony 2 Forms
4 min
20KПрелюдия
Формы, возможно, один из самых сложных компонентов Symfony2. Но за всей его сложностью скрывается поразительно гибкая архитектура, предоставляющая широкие возможности для расширения. Мы, как разработчики, можем добавлять (и изменять) типы полей форм (Form Type), использовать слушатели (Event Listeners), преобразователи данных (Data Transformers) и расширения типов (Type Extensions). О последних сегодня и поговорим.
+10
Удобный веб сервер на Virtualbox
8 min
66K![nginx](https://habrastorage.org/getpro/habr/post_images/f20/950/747/f209507477a40b155034173a479e647a.png)
Когда делаешь простые сайты на WordPress, то с вебсервером все просто, поставил себе Xampp и спокойно работаешь.
Но приходит момент когда начинаешь заниматься серьезными проектами, а там уже конфигурация на сервере не совсем обычная и пользоваться Xampp не совсем удобно, к тому же у меня аллергия на Apache.
Захотелось хороший, живой вебсервер по типу выделеного сервера, но на своем компе, при этом чтобы пользоваться было удобно, локально.
Что именно хочется:
- Поддержку нормальных url типа sitename.ru
- Не редактировать /etc/hosts
- Не редактировать конфиги nginx
- Работать в локальной папке
- Удобное администрирование конфигурации сервера
- Изолированое окружение
- Поставить и забыть
Есть еще вариант — просто у себя поднять все, но есть загвоздка, если что нибудь сломается, упадет жесткий диск, или еще что нибудь, то потом опять все собирать будет лень, а так просто можно сделать бэкап файла виртуальной машины, так же получаем независимое окружение.
Поэтому я поднял дебиан на виртуальной машине (virtualbox) и настроил nginx+phpfpm за пару часов, но это не очередное хау ту по связке nginx+phpfpm, мы делаем готовое решение по типу xampp.
+2
Django development server и тестирование HTTPS
5 min
15KTutorial
Здравствуйте уважаемое сообщество,
Выбрав фреймворк Django для разработки корпоративного сайта, я столкнулся с проблемой тестирования его работы по протоколу HTTPS при использовании встроенного веб-сервера. Несмотря на поддержку работы с безопасными соединениями в Django, поставляемый в комплекте веб-сервер не обслуживает запросы по HTTPS.
Первое, что пришло в голову, поднять полноценный веб-сервер (например, Apache) для разработки и тестирования, но что если не хочется отказываться от удобств и простоты использования встроенного веб-сервера Django?
Поиск в Интернете по запросу «django + https» выдал несколько статей датированных 2009 и 2012 годами, в которых для тестирования HTTPS предлагается использовать stunnel.
Данная статья является инструкцией полученной в результате настройки
Выбрав фреймворк Django для разработки корпоративного сайта, я столкнулся с проблемой тестирования его работы по протоколу HTTPS при использовании встроенного веб-сервера. Несмотря на поддержку работы с безопасными соединениями в Django, поставляемый в комплекте веб-сервер не обслуживает запросы по HTTPS.
Первое, что пришло в голову, поднять полноценный веб-сервер (например, Apache) для разработки и тестирования, но что если не хочется отказываться от удобств и простоты использования встроенного веб-сервера Django?
Поиск в Интернете по запросу «django + https» выдал несколько статей датированных 2009 и 2012 годами, в которых для тестирования HTTPS предлагается использовать stunnel.
Данная статья является инструкцией полученной в результате настройки
stunnel
под среду разработки Django на Ubuntu 12.04.1 LTS x64. +8
Что можно узнать о кандидате по тестовому заданию
9 min
87KКакое-то время назад по Хабру прокатилась волна статей о поиске работы и прохождению собеседований. Многократно высказались и работодатели и соискатели. Но, к сожалению, не была в достаточной степени затронута тема тестовых заданий.
Ведь, тестовое задание не ограничивается категориями «выполнил» и «не выполнил». Внимательно наблюдая за процессом и изучая финальный результат, можно в итоге многое сказать о человеке ни дня с ним вместе не поработав. А порой, и научиться чему-то новому.
Предлагаю вашему вниманию тестовое задание, которое я уже довольно давно даю кандидатам в компании, где я работаю:
Я не сомневаюсь, что это задание с легкостью сделают все программисты посетители Хабра.
А у меня получилась следующая статистика:
Подумайте немного, как бы вы выполнили это задание, и заходите под кат, где я расскажу обо всем подробнее.
Ведь, тестовое задание не ограничивается категориями «выполнил» и «не выполнил». Внимательно наблюдая за процессом и изучая финальный результат, можно в итоге многое сказать о человеке ни дня с ним вместе не поработав. А порой, и научиться чему-то новому.
Предлагаю вашему вниманию тестовое задание, которое я уже довольно давно даю кандидатам в компании, где я работаю:
На экране есть сетка M на N из цветных квадратиков. Нужно реализовать на этой сетке следующий эффект — по клику слева направо со скоростью V пробегает волна, меняя цвет квадратиков на другой (единый для всей волны). Эффект должен работать при любых значениях M, N, V. Волна начинается всегда у левой стенки. Одновременно может идти несколько волн разного цвета.
Анимационный пример: http://dl.dropbox.com/u/3601116/wave.swf (покликать по флэшке).
Я не сомневаюсь, что это задание с легкостью сделают все программисты посетители Хабра.
А у меня получилась следующая статистика:
- В итоге, задание взяли чуть больше 20 человек.
- Пара человек ничего не сделали.
- Половина из оставшихся (по моим критериям) с ним не справились.
- Кандидаты четко разделились на весьма интересные группы.
Подумайте немного, как бы вы выполнили это задание, и заходите под кат, где я расскажу обо всем подробнее.
+72
HTML5/AngularJS/Nginx приложение с правильным с google-индексированием
3 min
38KTutorial
Translation
Большинство web-приложений и web-фреймворков используют архитектуру, не позволяющую разделить ui и backend разработку. Тем самым нет возможности разделить команду на узкоспециализированных frontend и backend разработчиков. Вне зависимости от предпочтений разработчика ему приходится иметь понимание как о слое представления, так и о слое логики. Если ui-разработчик знает только о том, как запустить сервер, и о модели данных — это огромная удача. В плохих случаях ui-разработчику необходимо провести полную сборку проекта чтобы увидеть изменения строчки в javascript файле, или знать о языке jsp файлов чтобы поменять стиль элемента. Формирование и передача на сервер обработанных html файлов так-же пагубно влияет на производительность сервера и сети.
![non-ajax](https://habrastorage.org/storage2/e6d/968/6e3/e6d9686e32200410db234bd72297ce21.png)
![non-ajax](https://habrastorage.org/storage2/e6d/968/6e3/e6d9686e32200410db234bd72297ce21.png)
+29
Проблема инициализации объектов в ООП приложениях на PHP. Поиск решения при помощи шаблонов Registry, Factory Method, Service Locator и Dependency Injection
13 min
49KТак уж повелось, что программисты закрепляют удачные решения в виде шаблонов проектирования. По шаблонам существует множество литературы. Классикой безусловно считается книга Банды четырех «Design Patterns» by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides" и еще, пожалуй, «Patterns of Enterprise Application Architecture» by Martin Fowler. Лучшее из того, что я читал с примерами на PHP – это «PHP Objects, Patterns and Practice» by Matt Zandstra. Так уж получилось, что вся эта литература достаточно сложна для людей, которые только начали осваивать ООП. Поэтому у меня появилась идея изложить некоторые паттерны, которые я считаю наиболее полезными, в сильно упрощенном виде. Другими словами, эта статья – моя первая попытка интерпретировать шаблоны проектирования в KISS стиле.
Сегодня речь пойдет о том, какие проблемы могут возникнуть с инициализацией объектов в ООП приложении и о том, как можно использовать некоторые популярные шаблоны проектирования для решения этих проблем.
Сегодня речь пойдет о том, какие проблемы могут возникнуть с инициализацией объектов в ООП приложении и о том, как можно использовать некоторые популярные шаблоны проектирования для решения этих проблем.
+47
PHPUnit: простой синтаксис для создания mock-объектов
3 min
20K![](http://cdn.tutsplus.com/net.tutsplus.com/authors/gabriel-manricks/2013_year_of_PHP_PHPUnit.png)
- почему не mockery
- основное преимущество — синтаксис
- моки — нативные
- создание stub-объектов
- мокирование свойств класса
- mock injection
- удобные методы для работы с Reflection
- как добавить в проект
+19
Механизм атомарного коммита в SQLite
23 min
29KTutorial
Translation
Эта статья — частичный перевод одной интересной статьи с sqlite.org, в которой подробно рассматривается реализация транзакций в SQLite. На самом деле я очень редко работаю с SQLite, но тем не менее мне очень понравилось это чтиво. Поэтому если хотите просто развить кругозор — будет интересно почитать. Первые две секции не включены в перевод, так как там нет ничего интересного, да и мне лень их набивать (пост и так огромный).
Мы начнём с обзора шагов, которые SQLite предпринимает, чтобы совершить атомарный коммит транзакции, которая затрагивает только один файл базы данных. Детали формата файлов, которые используются для защиты от повреждения БД и техники, которые применяются для коммита в несколько БД будут показаны ниже.
![](https://habrastorage.org/getpro/habr/post_images/37d/872/61b/37d87261b046bd33a8fa7fd7d40c120a.gif)
Состояние системы, когда соединение с БД только что было поднято, поверхностно изображено на рисунке справа. Справа показана информация, которая хранится на энерго-независимом носителе. Каждый прямоугольник — это сектор. Синий цвет говорит о том, что этот сектор содержит оригинальные данные. Посередине изображён дисковый кеш операционной системы. В самом начале нашего примера кеш холодный, это изображено белым цветом. На левой части рисунка — содержимое оперативной памяти процесса, который использует SQLite. Соединение с БД только что было открыто, и никакой информации прочитано не было.
3.0 Однофайловый коммит
Мы начнём с обзора шагов, которые SQLite предпринимает, чтобы совершить атомарный коммит транзакции, которая затрагивает только один файл базы данных. Детали формата файлов, которые используются для защиты от повреждения БД и техники, которые применяются для коммита в несколько БД будут показаны ниже.
3.1 Начальное состояние
![](https://habrastorage.org/getpro/habr/post_images/37d/872/61b/37d87261b046bd33a8fa7fd7d40c120a.gif)
Состояние системы, когда соединение с БД только что было поднято, поверхностно изображено на рисунке справа. Справа показана информация, которая хранится на энерго-независимом носителе. Каждый прямоугольник — это сектор. Синий цвет говорит о том, что этот сектор содержит оригинальные данные. Посередине изображён дисковый кеш операционной системы. В самом начале нашего примера кеш холодный, это изображено белым цветом. На левой части рисунка — содержимое оперативной памяти процесса, который использует SQLite. Соединение с БД только что было открыто, и никакой информации прочитано не было.
+78
Тонкости оператора switch
6 min
89KTutorial
Да, это целая статья по самому обычному switch в JDK 7. Бывает так, что накопленный материал кажется интересным и малоизвестным, а потом оказывается, что любая бабка у подъезда уже 50 лет знает об особенностях реализации switch. Но я попробую. Для затравки, предлагаю 3 вопроса:
- (Простой) Каков результат работы этого кода?
switch(5){ default: System.out.print(0); case 1: System.out.print(1); break; case 4: System.out.print(4); case 2: System.out.print(2); }
- Следующие 2 варианта практически одинаковы. Немного отличаются литералами.
//Вариант 1 switch("BBBBBB"){ case "AaAaAa": break; case "AaAaBB": break; case "AaBBAa": break; case "AaBBBB": break; case "BBAaAa": break; case "BBAaBB": break; case "BBBBAa": break; case "BBBBBB": break; }
//Вариант 2 switch("BBBBBB_8"){ case "AaAaAa_1": break; case "AaAaBB_2": break; case "AaBBAa_3": break; case "AaBBBB_4": break; case "BBAaAa_5": break; case "BBAaBB_6": break; case "BBBBAa_7": break; case "BBBBBB_8": break; }
(-Djava.compiler=NONE)? Сами проверьте в цикле! JIT таким кодом не проведешь, но если немного пошаманить, то небольшая разница будет заметна. - Какова вычислительная сложность алгоритма нахождения совпадающего значения среди n case-ов (по крайней мере, в JDK 7)?
+56
Свет и освещение
7 min
165K![](https://habrastorage.org/getpro/geektimes/post_images/56a/443/998/56a4439982676d6113720afe09b64bac.jpg)
Из этой статьи вы узнаете почему в фотостудиях не снимают с люминесцентными лампами, почему светодиоды до сих пор не захватили мир и стоит ли ими освещать улицы. Поехали!
+292
Information
- Rating
- Does not participate
- Location
- Нидерланды
- Date of birth
- Registered
- Activity