• Обзор системной архитектуры социальной сети Campus.ru

      Представляю Вашему вниманию обзор высокоуровневой системной архитектуры социальной сети www.campus.ru, разработки компании ООО «Креатив Медиа». На мой взгляд, данный материал интересен тем, что позволяет оценить применимость рассмотренных подходов и технологий в разработке интернет-ресурсов. По крайней мере, когда наша компания начинала проект «Кампус», мне очень не хватало подобной информации.
      Дальше очень много букв
    • Открывать ли публичный доступ к WiFi точке доступа?

        Так сложилось, что у меня дома 100мбитный интернет-канал, безо всяких шейпилок и с неограниченным трафиком. Так как трафика мне не жалко — точка доступа (точнее — старенький ноут :) раздавала его налево и направо без каких-либо ограничений.
        Кто-то из соседей им периодически пользовался, а мне было приятно, что кому-то от этого хорошо :)
        Но тут появился странный товарищ — сначала пытаться подобрать пароль к ssh, а потом начал круглосуточно качать что-то в большом количестве, просаживая канал. КулХацкер, в общем. Пару раз заблокировал его mac — товарищ его после менял. Потом поставил простой WEP пароль — ну, думаю, поймет человек, верну обратно.
        Ан нет — через пару дней он его «сломал» (не будем обсуждать небезопасность WEP) и продолжил качать порево что-то.
        Так как заменять человеку домашнего провайдера в мои планы не входило — пришлось сегодня поднять hostapd, и вкрутить WPA2 шифрование.
        Товарищ остался не у дел, но и несколько человек еще, кто-то из которых похоже просто сидел в «одноклассниках» и еще чем-то легком остался без халявного интернета.

        Мне кажется, таким товарищем движет желание нае обмануть окружающих, мол если человек не знает что надо включать щифрование — то он «лох» и его можно «обуть».
        В общем — поддерживаете ли вы идею раздавать свой интернет страждущим? :)
        Я вот вижу только воркэраунд — сильно шейпить трафик с «незнакомых» адресов.

        UPDATE
        Забавно, если сначала все поддерживали идею, то сейчас, видимо почитав «хвост» топика, крутят пальцем у виска и говорят, мол «хочешь проблем — раздавай, и ващетыдурак».
      • Рисоваська, часть 3: Амазоновские веб-сервисы в действии

          В данной статье я расскажу, что же такое Amazon Web Services или сокращенно AWS, для чего это можно использовать, и приведу пошаговую инструкцию, как настроить их у себя с самого начала. В статье основной упор будет сделан на Amazon Elastic Compute Cloud или EC2 и Amazon Simple Storage Service или S3. Amazon CloudFront, являющийся логическим продолжением S3, хорошо рассмотрен в статье mish: Настраиваем CloudFront для работы с S3. С остальными амазоновскими сервисами вы можете познакомиться самостоятельно: Amazon SimpleDB, Amazon Simple Queue Service или SQS, а также другими сервисами Амазона. Данная статья является продолжением первой и второй статей. Итак:

          Что такое Amazon Web Services


          Это набор удобных сервисов, которые можно использовать как по отдельности, так и вместе. В первую очередь это «облачные вычисления» (анг. Elastic Compute Cloud). Что это значит? Это значит, что вы можете запустить в «облаке» любое кол-во компьютеров нужной вам конфигурации c нужной вам операционной системой всего за пару минут. Это действительно так. Время запуска одного инстанса (instance называется один виртуальный сервер в амазоне) обычно не превышает двух минут. Сразу после запуска инстанс начинает работать, к нему есть root-доступ по SSH или Remote Desktop, если там установлен Windows. Не правда ли, здорово! С момента запуска оплата за инстанс идет по часам. В любой момент вы можете остановить инстанс и деньги за его использование перестанут сниматься. Помимо времени работы инстанса, так же отдельно оплачивается входящий и исходящий трафик.
          Читать дальше →
        • Еще один (более подробный) отзыв о 7й встрече StartupPoint

            Elevator pitch

            + startup lynch

            Состоял из двухминутных докладов, по итогам которого победители выходили в следующий раунд.
            Для себя приятно было отметить, что мое мнение по 4 самым интересным проектам совпало с общим мнением.
            Хотя лично для меня была проблема "кого же написать четвертым", а не "кого вычеркнуть из кандидатов"

            Читать дальше →
          • 7 простых способов протестировать кроссбраузерную совместимость

            • Translation
            Эта статья предназначена для дизайнеров, верстальщиков, разработчиков и всех остальных людей, бьющихся с тестированием сайтов в нескольких браузерах.

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

            В этой статье, мы рассмотрим 7 простых инструментов для тестирования кроссбраузерной совместимости; инструментов, которые справляются со своей задачей очень легко, и к тому же, каждый из этих инструментов можно использовать бесплатно.
            Читать дальше →
          • Регистрация в качестве Индивидуального предпринимателя для freelance'ера: Зачем и как?

            • Tutorial
            После моей статьи «Freelance: ожидания, реальность, признание» сразу несколько человек обратилось ко мне с вопросом о юридических проблемах в работе freelance'ра. Скажу сразу, я далеко не юрист, но в свое время оформлял себе ИП, именно для freelance'а, а потому имею опыт, и некоторые знания в этой сфере, и могу ими поделиться. Хотя конечно мои выводы могут быть ошибочны, и у юристов эта статья наверняка вызовет легкую улыбку (или приступ раздражения), скажу еще раз, я просто хочу поделиться опытом, и рассказать как я регистрировался в качестве предпринимателя, и что мне дала эта бумажка.
            Читать дальше →
          • Erlang в Рисоваське, часть 1 — обзор языка

              В этой и последующих статьях (часть 2) я хочу рассказать про язык программирования Erlang/Эрланг, его использование в нашем проекте Рисоваська, а также какие приложения и готовые модули (большинство которых тоже написаны на Эрланге) мы использовали в серверной части.

              Поискав на Хабре по теме Erlang/Эрланг, понял, что тема освещена мало, есть всего пара действительно хороших статей на тему языка (например, отличная статья от создателя языка в переводе alex_blank What's all this fuss about Erlang? написанная понятным, доходчивым языком). Именно поэтому хочется остановиться сначала на самом языке и его отличиях от традиционных языков.
              Читать дальше →
            • Prett Parsing — метод Вогана Пратта для разбора выражений

                В тему компиляций и вычислений выражений.

                В далёком 1973 году Воган Прэтт (Vaughan Pratt) предложил простой и эффективный метод разбора выражений, не использующий ни автоматы, ни грамматику как таковую.

                Идея заключается в том, что каждый символ (token) наделяется свойствами:
                lbp = приоритет связывания символа слева,
                nud = функция, определяющая результат применения оператора в начале выражения,
                led = функция, определяющая результат применения в середине выражения.

                Основной разбор осуществляется по схеме:
                разбор(приоритет продолжения):
                    вытолкнуть символ из входного потока
                    результат = вызов nud этого символа
                    пока приоритет lbp следующего в потоке символа > приоритета продолжения:
                        вытолкнуть символ из входного потока
                        результат = применени led этого символа к текущему результату
                

                Константы и переменные имеют приоритет связывания 0, а функция nud возвращает их значение (или ссылку). Поэтому применение разбора к константам сразу возратит их значение.
                Для бинарных операторов функция led рекурсивно вызывает продолжение разбора (справа) вплоть до более низкого приоритета, и делает что-нибудь с уже накопленым (слева) результатом, и полученным рекурсивно.
                Результат применения оператора аггрегируется для внешнего вызова.
                Много-арные операторы — получают аргументы дополнительным вызовом функции разбора.
                Префиксные операторы делаются с помощью определения для них функции nud.
                Для правостороннего связывания меняется приоритет продолжения рекурсивного разбора.

                На сайте effbot.org приводится подробная реализация на питоне.
                Там же есть ссылки для жаваскрипта и схемы.
                наглядный пример на питоне
              • «Совершенный Ajax» – новый подход к построению настоящих клиент-серверных web-приложений

                  «Совершенный Ajax» — новый подход к построению web-приложений, при котором web-сервер не генерирует ни строчки HTML-кода и взаимодействует с внешним миром только посредством web-служб; а клиентский интерфейс реализуется только на основе клиентских HTML, CSS, JavaScript.

                  Статья состоит из двух частей. В первой части — более живой и провокационной я постараюсь заинтересовать проблемой, рассказать о технологии «Совершенный Ajax» и показать ее применение на примере нашего проекта «Система Интерактивного Тестирования Знаний “Синтез”» (который имеет ряд интересных особенностей, таких, как использование серверного JavaScript на платформе Mozilla Rhino, прототипно-ориентированная ORM и поддержка SPARQL — языка запросов к Semantic Web).

                  Вторая часть – более занудная будет содержать много технических деталей и выйдет в следующий раз.

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



                  Попробуйте угадать: к какой архитектуре относятся web-приложения?

                  К клиент-серверной говорите? Я ожидал, что Вы так ответите :-)

                  Что ж, давайте разберемся. В клиент-серверной архитектуре выделяют:
                  • Сервер — отвечает за хранение данных и реализацию бизнес-логики приложения.

                  • Клиент — отвечает за взаимодействие с пользователем [1].

                  Реализация бизнес-логики на сервере и взаимодействие с пользователем на клиенте четко разделены.

                  Преимущества клиент-серверной архитектуры очевидны; мы их все знаем:
                  1. Бизнес-логика не смешивается с пользовательским интерфейсом.
                  2. Можно реализовать несколько клиентов с разными пользовательскими интерфейсами: интерфейс командной строки, оконный Windows-интерфейс, Flash, web-интерфейс, мобильный интерфейс и т.д.
                  3. Клиентский компьютер не требователен к ресурсам;
                  4. И т.д.


                  Но, относятся ли web-приложения к клиент-серверной архитектуре? Web-сервер

                  Действительно, в web-приложениях есть сервер, отвечающий за бизнес логику приложения.

                  Но! За реализацию интерфейса отвечает не клиент, а тоже сервер. На сервере происходит обработка клиентской формы. Сервер генерирует HTML-код пользовательского интерфейса.

                  Браузер Клиент, т.е. браузер лишь визуализирует уже готовый HTML-код интерфейса. Это, фактически, то же самое, что прицепить к серверу монитор и объявить этот монитор клиентом…

                  Читать дальше →
                • Изобретаем технологию: опыт соединения нескольких open-source проектов

                    Я хотел бы поделиться опытом создания приложения, или точнее технологии, основанной на нескольких open-source проектах. Это нечто вроде веб-сервера с поддержкой асинхронных сообщений и возможностью исполнения скриптов на JavaScript.

                    Читать дальше →
                  • Всегда ли нужна «резиновая» верстка?

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

                      На написание этого текста меня натолкнули постоянные споры, возникающие за время моей практики как веб-дизайнера. Собственно, первый раз мне пришлось столкнуться с «резиновыми сайтами» благодаря прихоти заказчика. Когда дизайн проекта был полностью готов, а сам сайт сверстан и подключен, заказчик спросил: «А почему он не растягивается?». Было это достаточно давно, но этот вопрос я слышу примерно раз в 4-5 месяцев. О «резиновой» верстке сайтов говорили и писали много. Говорили что она обязательна, и наоборот, что использование ее ошибка. Однозначно, были причины возникновения резиновости. И утверждать, что использование этой технологии на 99% ошибочно, однозначно нельзя. Любую технологию нужно применить, если она нужна. Я хочу очертить примерную границу применения резиновой верстки.

                      полный текст
                    • Обзор LLVM

                        LLVM (Low Level Virtual Machine) — это универсальная система анализа, трансформации и оптимизации программ или, как её называют разработчики, «compiler infrastucture».

                        LLVM — не просто очередной академический проект. Его история началась в 2000 году в Университете Иллинойса, а теперь LLVM используют такие гиганты индустрии как Apple и Adobe. В частности, на LLVM основана подсистема OpenGL в MacOS X 10.5, а iPhone SDK использует GCC с бэкэндом на LLVM. Apple является одним из основных спонсоров проекта, а вдохновитель LLVM — Крис Латтнер — теперь работает в Apple.

                        В основе LLVM лежит промежуточное представление кода (intermediate representation, IR), над которым можно производить трансформации во время компиляции, компоновки (linking) и выполнения. Из этого представления генерируется оптимизированный машинный код для целого ряда платформ, как статически, так и динамически (JIT-компиляция). LLVM поддерживает генерацию кода для x86, x86-64, ARM, PowerPC, SPARC, MIPS, IA-64, Alpha.

                        LLVM написана на C++ и портирована на большинство *nix-систем и Windows. Система имеет модульную структуру и может расширяться дополнительными алгоритмами трансформации (compiler passes) и кодогенераторами для новых аппаратных платформ. Пользовательский фронтенд, как правило, линкуется с LLVM и использует C++ API для генерации кода и его преобразований. Однако LLVM включает в себя и standalone утилиты.

                        Для тех, кто не без оснований считает C++ не лучшим языком для написания компиляторов, с недавних пор в LLVM включена обертка API для OCaml.

                        Чтобы понять, что можно сделать с помощью LLVM, и на каком уровне придётся работать, давайте разберёмся,
                        что из себя представляет LLVM IR.
                      • Как отправлять уведомления с сайта по SMS?

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

                          Уже сейчас работает уведомление по e-mail, icq.
                          Но как быть, если администратор в дороге, и не имеет доступа к почте и мессенджеру? Нужно сделать уведомление SMSкой. Это будет полезно как админу, так и пользователю, т.к. последний сможет уведомиться об обработке его проблемы/заявки.

                          Читать дальше →
                        • Three Futamura Projections и не только

                            Привет, хабрачеловек. Сегодня я расскажу тебе про некоторые фундаментальные вещи в computer science: частичные вычисления, три проекции Футамуры и суперкомпиляцию.
                             
                             

                            1. Сразу к коду


                            -- функция, которая возводит x в степень y (неотрицательную)
                            power x y =
                                case y of
                                    0 → 1
                                    1 → x
                                    _ → x * (power x (y - 1))


                            Читать дальше →
                          • Основы BASH. Часть 1

                            • Tutorial
                            Безусловно, все те кто общается с ОС Linux хоть раз да имели дело(во всяком случае слышали точно) с командной оболочкой BASH. Но BASH не только командная оболочка, это еще и превосходный скриптовый язык программирования.
                            Цель этой статьи — познакомить поближе юзеров с bash, рассказать про синтаксис, основные приемы и фишки языка, для того чтобы даже обычный пользователь смог быстренько написать простой скрипт для выполнения ежедневной(-недельной, -месячной) рутинной работы или, скажем, «на коленке» наваять скриптик для бэкапа директории.
                            Читать дальше →
                          • «God, Sex, Love and Secret» или статистика использования паролей в социальных сетях

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

                              В этой статье приведён результат анализа ~100 000 паролей. Надеюсь этот анализ будет интересен и пригодится многим хабралюдям.
                              Читать дальше →
                            • Иерархические структуры данных и Doctrine

                                Введение



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

                                В первую очередь, это связано с тем, что реляционные базы не приспособлены к хранению иерархических структур (как, например, XML-файлы), структура реляционных таблиц представляет из себя простые списки. Иерархические же данные имеют связь «родитель-наследники», которая не реализована в реляционной структуре.

                                Тем не менее, задача «хранить деревья в базе данных» рано или поздно возникает перед любым разработчиком.

                                Ниже мы подробно рассмотрим, какие существуют подходы в организации хранения деревьев в реляционных БД, а также рассмотрим инструментарий, который нам предоставляет ORM Doctrine для работы с такими структурами.
                                Читать дальше →
                              • Методичка по работе с клиентами. Для начинающих менеджеров веб-студий

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

                                  Итак, получили письмо от клиента


                                  обычно есть следующие варианты
                                  1. клиент явно перспективный и обратился «выборочно» именно к нам — есть большая вероятность, что переговоры будут удачными — тогда лучше сразу набивать стрелку и устанавливать личный контакт и все выяснять на месте. Хотя, границы бюджета лучше выяснить в любом случае.
                                  2. клиент интересный, но многое неясно из его письма ( нет ТЗ, нет бюджета, он написал в несколько студий, сайт потенциально сложный, сайт неинтересный и тд. ). Тут важно прислать ему БРИФ на заполнение, выяснить сроки и бюджет. Согласовать бюджет сроки — уже потом встречаться в случае, если все устраивает.
                                  3. Письмо подозрительно короткое и не «пахнет интересом». Например, «нужен обувной интернет-магазин, сколько стоит? Как быстро сделаете? Виталий» — тут вряд-ли чтото выгорит + вероятно это пробивон по ценам от конкурентов.
                                    В этом случае — цену говорим в полтора раза дето дороже, интересуемся «укладываемся ли мы в их бюджет» в положительном случае — можно встречаться. Иначе — скорее всего трата времени.

                                  Читать дальше →
                                • Разработка макетов: а давайте в этот раз не будем спрашивать уборщицу?

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

                                    Это происходит потому, что все «специалисты» знают: дизайн — это красивая картинка.

                                    Дизайн лишь на 20% искусство, на 80% — это точная наука. И вы будете удивлены, когда узнаете, из чего на самом деле состоит каждая картинка.

                                    Читать дальше →
                                  • Сервис расстановки переносов

                                      OnLine HyphenationНе­дав­но ком­па­ния Qlikworld вы­ло­жи­ла не­боль­шой сер­вис рас­ста­нов­ки «мяг­ких» пе­ре­но­сов. Он на­хо­дит­ся по ад­ре­су — www.plazoo.com/ru/tools.asp

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

                                      Сер­вис рас­став­ля­ет пе­ре­но­сы с уче­том воз­мож­но­го из­ме­не­ния раз­ме­ра ок­на вы­во­да.

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

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

                                      Эта статья уже со­дер­жит рас­став­лен­ные пе­ре­но­сы. Из­ме­няя раз­мер ок­на бра­у­зе­ра, мож­но уви­деть, как ра­бо­та­ет сер­вис.