• Джентльменский набор интернет шоппера: Shipito + ProfitBid + TrackChecker

      На волне постов ненависти к Почте России легко прослеживается тот факт, что все большее количество людей покупают товар из заграниц. Тем самым не желая переплачивать Российским барыгам-ритейлерам подрывая политику государства в области импортозамещения. И я один из них.
      Однако много препятствий чинит православным Россиянам виртуальный шоппинг, самое трудное из которых — страна проживания. К сожалению наша отчизна классифицируется большинством онлайн магазинов как страна третьего мира, не иначе, а поэтому и прямой доставки туда нам не видать.
      Выходом из этого казуса, очевидно, является mail forwarding сервис.
      Итак в данной статье речь пойдет о
      • нововведениях в сервисе-посреднике — Shipito
      • Сервисе, который возвращает процент с покупок на ebay.com/ca/uk, Amazon, Skype, GoDaddy — Profitbid
      • Наконец-то созданном юзером MetalFan отличном софте (полностью бесплатном) для отслеживания почтовых отправлений всех почтовый сервисов TrackChecker
      • Небольшом списке интересных магазинов


      PS. В топике присутствуют мои реферральные ссылки.
      PS2. Трафик.
      Читать дальше
    • Знакомство с библиотекой libevent на примере создания простейшего Web-сервера картинок

        В данной статье я покажу как используя библиотеку libevent, написать простейший Web-сервер, который будет по запросу клиентов выдавать файлы jpeg картинок.

        Библиотека libevent предоставляет программистам доступ к кроссплатформенному асинхронному сетевому API. На основе данной библиотеки можно создавать высокопроизводительные сетевые приложения. Например, libevent используется в таких известных приложениях как Memcached (распределённая система кэширования) и TOR (распределённая анонимная сеть).

        Читать дальше →
      • Спать мало, но правильно?

          Навеяно этим постом от юзера case. Пост не новый, и на главную он не попал.
          Но я вот наткнулся на него сегодня и решил написать кое-что о сне. Уверен, что это будет полезно многим хабравчанам, да и случайным читателям тоже.
          Читать дальше →
        • Топ 5 Веб трендов 2009 года: №2 Интернет в реальном времени

          • Translation
          image
          Ken Formm написал интересную статью для ReadWriteWeb о интернете в реальном времени. В ней он обясняет что такой интернет является новой формой общения, он создает новый тип контента, который близок к вам, публичен, и несет в себе явную социализирующую составляющую.

          Один из первых лидеров интернета в рельном времени — сервис FriendFeed, который стал очень популярен. Один из основателей Paul Buchheit (который разрабатывал первую версию Gmail, когда работал в Google) в мае рассказал RWW, что открытые дискуссии, которые появляются на FriendFeed станут новым мощным способом общения, на равне с IM, почтой и блогами.
          image

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

            Перепечатано с моего ЖЖ.

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

            Читать дальше →
          • Разработка браузерной стратегии

            Всем привет!

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

            image

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

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

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

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

            Читать дальше →
          • Учебник по языку программирования Python (хабраиндекс)

              Серия статей «Основы Python»


              I, Начало
              II, Строки
              III, Списки, кортежи, файлы
              IV, Генераторы списков
              V, Определение функций, основы
              VI, Расширенное определение функций

              Об основах языка Python в сжатой форме

              Продвинутый уровень


              Сила и красота декораторов Короткий экскурс в метапрограммирование.
              Итерируем все и вся Специфика циклов в Питоне.
              Как я учился работать с XML
              Консервация объектов в Python Использование модуля Pickle.
              Memoization в Python Оптимизация работы программ.
              Простейшее рисование с помощью PIL
              Regexp и Python: извлечение токенов из текста
              Как писать маленькие приложения на python с графическим интерфейсом (библиотека Qt).

              http://netsago.org/ru/docs/1/12/
              Одеваем скрипты Python с помощью EasyGui (добавляем простой диалоговый интерфейс)

              http://djbook.ru/
              Учебник по Django (Python-фреймворк для веб-приложений)

              Читать дальше →
            • Заметки об объектной системе языка Python ч.3

                Третья часть заметок об объектной системе python'a (первая и вторая части). В статье рассказывается о том, почему c.__call__() не то же самое, что и c(), как реализовать singleton с помощью метаклассов, что такое name mangling и как оно работает.

                Читать дальше →
                • +66
                • 25.2k
                • 7
              • Что почитать, чтобы повысить свой уровень JavaScript

                • Translation
                От переводчика: Я думаю многие читали статью Rey Bango — What to Read to Get Up to Speed in JavaScript, но до хабра обсуждение так и не докатилось. Предлагаю закрыть этот пробел и поговорить о хороших книгах, блогах, тренингах и конференциях, посвященных в первую очередь клиентскому JavaScript и клиентской веб-разработке. Чтобы не копипастить оформляю статью в виде перевода.

                Сейчас в рассылке JSMentors JavaScript идет обсуждение книг, который стоит прочитать, чтобы улучшить свои знания. Там было много позитивных отзывов и предложений. Я хочу показать вам те книги и интернет-ресурсы, который я считаю важными и которые помогут вам в обучении. На этой странице я перечислил большое количество источников, разделенных по уровням.

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

                Не заставляю вас читать все книги, которые предложены ниже. Эти книги я читал на протяжении многих лет и почерпнул в каждой много полезного. Я их распределяю по категориям, чтобы вам было проще работать с ними. Выберите книги, которые подходят вам.
                Читать дальше →
                • +157
                • 91.2k
                • 31
              • Где моя кнопка?

                «Где моя кнопка? Почему она неактивна?» Как часто программист может слышать эти слова от пользователей своего продукта? Скорее всего, более чем очень часто для того, чтобы задуматься, а может быть продукт сам должен отвечать на этот вопрос пользователей.
                Читать дальше →
              • Сервер на стероидах: FreeBSD, nginx, MySQL, PostgreSQL, PHP и многое другое

                  Нравится мне эта картинка, у меня, вот никогда такие красивые графики в какти не получались =(

                  Введение


                  С момента написания мной предыдущей статьи по оптимизации этой связки прошло довольно много времени. Тот многострадальный Pentium 4 c 512Мб памяти, обслуживающий одновременно до тысячи человек на форуме и до 150,000 пиров на трекере уже давно покоится на какой-нить немецкой, свалке, а клуб сменил уже не один сервер. Всё сказанное в ней всё ещё остаётся актуальным, однако есть вещи которые стоит добавить.
                  Статья большая, так что будет поделена на логические блоки:

                  0. Зачем вообще что-то оптимизировать?
                    
                  1. Оптимизация ОС (FreeBSD)
                    1.1 Переход на 7.х 
                    1.2 Переход на 7.2
                    1.3 Переход на amd64
                    1.4 Разгрузка сетевой подсистемы
                    1.5 FreeBSD и большое кол-во файлов
                    1.6 Softupdates, gjournal и mount options
                    
                  2. Оптимизация фронтенда (nginx)
                    2.1 Accept Filters
                    2.2 Кеширование
                    2.3 AIO
                    
                  3. Оптимизация бэкенда
                    3.1 APC
                    3.1.1 APC locking
                    3.1.2 APC hints
                    3.1.3 APC fragmentation
                    3.2 PHP 5.3
                    
                  4. Оптимизация базы данных
                    4.1 MySQL 
                    4.1.1 Переход на 5.1
                    4.1.2 Переход на InnoDB
                    4.1.3 Встроеный кеш MySQL - Query Cache
                    4.1.4 Индексы
                    
                  4.2 PostgreSQL
                    4.2.1 Индексы
                    4.2.2 pgBouncer и другие.
                    4.2.3 pgFouine
                    
                  4.3 Разгрузка базы данных
                    4.3.1 SphinxQL
                    4.3.2 Не-RDBMS хранилище
                    4.4 Кодировки
                    4.5 Асинхронность
                    
                  Приложение. Мелочи.
                    1. SSHGuard или альтернатива.
                    2. xtrabackup
                    3. Перенос почты на другой хост
                    4. Интеграция со сторонним ПО
                    5. Мониторинг
                    
                   6. Минусы оптимизации

                  Кому что-нибудь из этого списка интересно, жмём сюда...
                • Async Hearts

                    Некоторое время назад случилось несколько событий, изменивших привычный вид ландшафта веб-разработки на Питоне: Facebook приобрела сервис Friendfeed и сразу же открыла исходный код технологии проекта — http-сервер и микрофреймворк Tornado. Одновременно разработчик Friendfeed опубликовал в своем блоге заметку, в которой привел причины, по которым было решено с нуля разрабатывать собственный асинхронный веб-сервер.

                    Статья — экскурсия в самое сердце этого и конкурирующего (Twisted.web) проектов, их циклы асинхронной обработки поступающих данных.

                    Читать дальше →
                  • Асинхронный http-клиент, или почему многопоточность — лишнее

                      Какое-то время назад Хабре проскакивала заметка про клиент-парсер сайтиков на Питоне. Автор на этом примере разбирал проблемы многопоточных сетевых приложений.

                      Но мне показалось, что ту же задачу (вернее, ее главную часть — параллельные соединения c http-cервером) вполне можно эффективно решить и без потоков.

                      И решил...
                    • Пример построения неблокирующего веб-приложения

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

                        Недавно захотел создать свой сервис проверки номеров ICQ на невидимость. Алгоритм проверки старый и известный, но до сих пор работающий — отправка специально сформированного служебного сообщения и анализ ответа сервера. Необходимо было держать несколько постоянных подключений к серверу ICQ, а также иметь веб-интерфейс для запросов на проверку. Очевидное решение — создание демона, который создает несколько потоков для ICQ-соединений, и как-либо получает команды от веб-приложения, использующего несколько процессов-воркеров (или на preforked архитектуре) — для возможности обрабатывать http-запросы от нескольких клиентов. Но я решил освоить новую для себя технологию и сделать приложение, поддерживающее несколько соединений и отвечающее клиентам, используя всего лишь один поток.
                        Читать дальше →
                      • Асинхронность: почему это никак не сделают правильно?

                          Асинхронные программы чертовски неудобно писать. Настолько неудобно, что даже в node.js, заявленном как «у нас все правильное-асинхронное», понадобавляли таки синхронных аналогов асинхронных функций. Что уж говорить про питоновский синтаксис, не дающий объявить лямбду со сколь-либо сложным кодом внутри…

                          Забавно, что красивое решение проблемы не требует ничего экстраординарного, но почему-то до сих пор не реализовано.
                          Читать дальше →
                        • nodeJS и nonblocking I/O

                            Добрый вечер уважаемые читатели,


                            На хабре последнее время проскакивало несколько упоминаний о node, быстрой платформе для создания вэб приложений на javascript, обладающей довольно уникальной на сегодняшний день особенностью, неблокирующим I/O (вводом/выводом).

                            Для начала о nodeJS:


                            1) В качестве языка используется JavaScript
                            2) Для выполнения JavaScript используется движок V8 от Google, который работает довольно быстро благодаря компиляции в машинный код перед выполнением.
                            3) Для реализации неблокирующего I/O используются libev и libeio, (libev показывает более хорошие результаты по сравнению с libevent)
                            4) Для реализации подключения библиотек выбран синтаксис commonJS
                            5) Есть возможность писать модули ещё и на C/C++, при этом подключаются они точно так-же как и js модули, это позволит Вам, к примеру, любое узкое место в вашем приложении переписать на C++ без каких либо трудностей.

                            В процессе изучения данного момента, что в итоге привело к написанию этой статьи я успел довольно неплохо поиграться с этой особоенностью. И могу сказать, что неблокирующий ввод/вывод очень и очень позитивно сказывается на производительности и устойчивости к нагрузкам.
                            Читать дальше
                          • phpDaemon — фреймворк асинхронных приложений

                              Сегодня речь пойдет о phpDaemon — асинхронном модульном демоне-фреймворке, который берёт на себя обработку I/O (libevent) и другие низкоуровневые задачи, присущие демонам. С его помощью легко писать правильные сетевые приложения с блэкджеком и шлюхами.
                              Из коробки идут сервера FastCGI, HTTP, CGI, FlashPolicy, Telnet, WebSocket (!) — да-да тот самый волшебный пендаль новый протокол от Google. И клиенты mysql, memcached, mongodb… И многое другое, полный список под катом. Работать с сетью действительно просто. Программист средней руки может написать, к примеру, IRC-бота за считанные часы.
                              В качестве наглядного примера я реализовал вот этот чат на phpDaemon + WebSocket + MongoDB + jQuery. Он наглядно демонстрирует преимущества этой технологии: доставка сообщений мгновенна, накладные расходы при обмене данными минимальны, высока производительность, приложение масштабируется горизонтально. Исходники этого чата (в данный момент 17 кб). Прошу заметить, чат тестировался и работает в Chrome, FF, IE6+, Iron, Safari.
                              Читать дальше →
                            • Подводные камни при использовании кэширования в nginx

                                В web-сервер и reverse-proxy nginx встроены очень мощные возможности по кэшированию HTTP-ответов. Однако в ряде случаев документации и примеров не хватает, в результате не все получается так легко и просто, как хотелось бы. Например, мои конфиги nginx-а местами написаны кровью. Этой статьей я попробую немного улучшить ситуацию.

                                В этой статье: а) подводные камни при полностраничном кэшировании; б) кэширование с ротацией; в) создание динамического «окна» в закэшированной странице.

                                Я буду предполагать, что вы используете связку nginx+fastcgi_php. Если вы применяете nginx+apache+mod_php, просто замените имена директив с fastcgi_cache* на proxy_cache*

                                Если выбирать, кэшировать ли страницу на стороне PHP или на стороне nginx, я выбираю nginx. Во-первых, это позволяет отдавать 5-10 тыс. запросов в секунду без каких-либо сложностей и без умных разговоров о «высокой нагрузке». Во-вторых, nginx самостоятельно следит за размером кэша и чистит его как при устаревании, так и при вытеснении нечасто используемых данных.

                                Кэширование всей страницы целиком


                                Если на вашем сайте главная страница хоть и генерируется динамически, но меняется достаточно редко, можно сильно снизить нагрузку на сервер, закэшировав ее в nginx. При высокой посещаемости даже кэширование на короткий срок (5 минут и меньше) уже дает огромный прирост в производительности, ведь кэш работает очень быстро. Даже закэшировав страницу всего на 30 секунд, вы все равно добьетесь значительной разгрузки сервера, сохранив при этом динамичность обновления данных (во многих случаях обновления раз в 30 секунд вполне достаточно).
                                Читать дальше →
                              • Повышение работоспособности: как я избавился от бессонницы

                                  У многих айтишников есть проблемы со сном. Ниже — описание моей проблемы и метод, которым я её решил.

                                  image
                                  Несколько недель назад я получил сразу три крупных заказа, каждый из которых был жёстко ограничен сроками. Проекты были действительно интересными и хорошо оплачиваемыми, поэтому первые несколько дней я работал практически без сна. Естественно, производительность начала снижаться. Дошло до того, что я начал ловить себя на том, что несколько минут(!) я «тупо втыкал» в монитор, ничего при этом не делая, и даже не замечая своего аут-состояния.

                                  Тогда я решил: всё, пора нормально выспаться. Сохранив всё «как есть», я отправился в постель… и понял, что проблема отнюдь не решена.
                                  Читать дальше →