• Способы сокрытия IP-адреса в сети Internet

      Прежде чем мы подробно рассмотрим известные технологии сокрытия своего настоящего IP-адреса, нам следует узнать свой IP-адрес и выяснить некоторые вещи, обличающие наш компьютер в сети, например адрес DNS-сервера. Для этого достаточно зайти на любой сервис проверки анонимности, например www.whoer.net, главное чтобы он обладал интерактивной проверкой вашего компьютера с помощью Java, ActiveX, Flash и Javascipt. Изменить свой IP-адрес, например с помощью Socks или VPN, недостаточно, т.к. существует множество технологий, позволяющих его выявить, которые нужно либо отключить на своем компьютере, либо обмануть. Также не лишним будет изменить передаваемые НТТР-заголовки, это позволит «сбить» определение установленного ПО и географическое место расположения компьютера. Более детально проверить свой компьютер можно в расширенной версии www.whoer.net/ext.

      Читать дальше →
    • «Demonoid для нас – обычный клиент»: интервью с украинским провайдером пиратского трекера

        Недавно весь интернет гудел о переезде The Pirate Bay в Украину. И хоть слухи не подтвердились, выяснилось, что у нас размещается другой известный на весь мир трекер – Demonoid. О том, каково это – хостить один из крупнейших пиратских сайтов современности, мне рассказал Пётр Власенко, коммерческий директор компании Colocall.


        Сервера трекера Demonoid в дата-центре Colocall

        Несмотря на всемирную популярность сайта Demonoid.com, о нём мало что известно. Его админы не отвечают на письма и не дают интервью, их настоящие имена не знает даже полиция, а на сам трекер можно попасть лишь по приглашению.

        После конфликта с медиамагнатами в Нидерландах, Канаде и Малайзии в апреле 2008-го года он переехал к нам. Их текущий провайдер Colocall никак не афишировал причастность к сайту и через полтора года молчания впервые согласился на интервью. Для блога pazzive.livejournal.com.

        Читать дальше →
      • Модификация байт-кода виртуальной машины Java

          Данный пост является продолжением статьи о байт-коде виртуальной машины Java, и мы считаем, что читатель имеет представление о его структуре. Наиболее распространенной библиотекой для модификации байт-кода является фрейморк ASM от object web. На нем построено большинство высокоуровневых библиотек, в частности cglib.

          Библиотека ASM имеет два варианта API. Что бы лучше представить отличие между ними, проведем следующую аналогию. Класса это некое дерево. Корень его- сам класс. Переменные, методы, подклассы это его листья. Инструкции — листья методов. Таким образом можно провести параллель с XML и двумя типами его парсеров. Первый вариант Core API похож на SAX парсер. Когда нужно прочитать, создать или внести изменения, делается обход дерева представления класса. Второй вариант (Tree API) работает по прицепу DOM парсера. Сначала строиться дерево представления, а затем с ним производиться необходимые манипуляции. Очевидно, что первый вариант API менее ресурсоемкий, более подходящей для внесения небольших изменений. Второй требует больше ресурсов, но и дает более гибкие возможности. Мы рассмотрим только первый вариант API.

          Читать дальше →
          • +17
          • 6,8k
          • 2
        • «OOC для C, — это как Scala для Java»

            Сегодня на Hacker News наткнулся на пост о (похоже очень) новом языке "ooc". Бросил на день все дела, занялся ковырятельством — уж больно интересно выглядит.

            Итак, "ooc — это современный, объектно-ориентированный, функционально(ватый), высокоуровневый, низкоуровневый, секси язык программирования". (Именно секси его и представляют разработчики, ну а я бы добавил что еще и "компилируемый")

            По сути — ooc — транслятор языка высокого уровня в C со сборщиком мусора.

            Как выразился один из посетителей сайта: "ooc для C, — это как Scala для Java" (jimbokun@HN).

            Обязательный «Hello, World» на ooc:

            hello.ooc:
            "Hi, softer world =)" println()

            на выходе hello.c и hello.exe.

            ooc-компилятор транслирует это в c-код и использует доступный c компилятор (gcc, mingw, icc, tinycc) чтобы сделать из этого hello.exe (или ./hello). Поддержка tinycc заявлена, но в реальности ждем поддержки C99 в самом tinycc (автор обещал сделать обходные пути, но пока не работает), поэтому наслждаемся пока что довольно неслабого размера .exe'шниками (gcc от mingw других не делает).

            Итак, что у нас уже есть в языке: классы, объекты, строгая типизация, угадывание типов (n := "Beer" length()), chaining (.dothis().dothat()), совместимость с c-библиотеками, абстрактные классы, шаблоны из C++, списки, разреженные(sparse) списки, хеши (ArrayList, SparseList, HashMap), for (i in list) { ... }, обертки для c-шных функций и классов, перегрузка операторов, полиморфизм, сборщик мусора (отключаемый), import file/name (не нужны .h, но .h можно использовать как extern), closures, eiffel's contracts, исключения, reflections, pattern matching, ranges, ternary operator, bindings, generics, coroutines, GTK, SDL, OpenGL, GLU, GLUT bindings…

            Как сказал товарищ varjag@HN: «Я думаю это розыгрыш, сделанный пользователями Ruby, но нигде этого в тексте не вижу.» Нет, этот язык существует на самом деле. Примеры, линки, установка, подводные коряги — под катом…
            Читать дальше →
          • Java-головоломка: Капитализация слов в строке за одно java-выражение

              Представляю вашему вниманию небольшую головоломку по Java.
              Это реальная задача, возникшая передо мной и коллегами в процессе разработки и имеет вполне оправданное применение.

              Итак, условие:
              Необходимо реализовать ОДНИМ выражением Java (конечно же, используя только стандартные библиотеки) задачу по капитализации слов произвольной строки.

              То есть, что-то вроде этого:
              String strOrig = "строка с большим количеством слов";
              String strRes = <.. тут какое-то выражение ..>;
              assert strRes.equals("Строка С Большим Количеством Слов");

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

              Результаты мозговой деятельности под катом
              Читать дальше →
            • Swarm: язык распределённых вычислений в облаке

                Год назад Ян Кларк, известный как создатель распределённой сети Freenet, выступил с ещё одной революционной инициативой. Он предложил создать новый язык программирования для распределённых вычислений, логика которого будет идти «не от данных, а от вычислений», чтобы любые написанные на таком языке программы можно было естественном образом распараллеливать по неограниченному количеству процессоров и серверов. Это очень важная задача, если учитывать повсеместный переход на распределённые вычисления. И до сих пор нет нормального фреймворка для создания распределённых программ.

                Як Кларк сделал на базе Scala 2.8 первый прототип языка Swarm. Вот исходные коды и инструкция по установке.
                Читать дальше →
              • Язык Scheme


                  Если здесь HD-режим недоступен, значит нужно перейти на vimeo.

                  Знакомство с языком программирования Scheme в рамках проекта CS Student. В видео мы познакомимся с некоторыми простыми типами данных, порядком обработки процедур и выполним парочку заданий из моего курса Programming Paradigms. Во второй части будет решение задачек немного посложнее и знакомство с другими возможностями языка. Ссылки:

                  Интерпретаторы
                • Oracle RAC. Общее описание / Часть 1

                    Высоконагруженные сайты, доступность «5 nines». На заднем фоне (backend) куча обрабатываемой информации в базе данных. А что, если железо забарахлит, если вылетит какая-то давно не проявлявшаяся ошибка в ОС, упадет сетевой интерфейс? Что будет с доступностью информации? Из чистого любопытства я решил рассмотреть, какие решения вышеперечисленным проблемам предлагает Oracle. Последние версии, в отличие от Oracle 9i, называются Oracle 10g (или 11g), где g – означает «grid», распределенные вычисления. В основе распределенных вычислений «как ни крути» лежат кластера, и дополнительные технологии репликации данных (DataGuard, Streams). В этой статье в общих чертах описано, как устроен кластер на базе Oracle 10g. Называется он Real Application Cluster (RAC).

                    Статья не претендует на полноту и всеобъемлемость, также в ней исключены настройки (дабы не увеличивать в объеме). Смысл – просто дать представление о технологии RAC.

                    P.S. Beware of the многабукаф
                    Продолжение статьи

                    Читать дальше →
                  • Разбираемся с анимацией в jQuery

                      imageЗдравствуйте. Сегодняшний топик я хотел написать о том, что механизм анимации в jQuery не эффективен, создает кучу таймеров, каждый из которых работает по отдельности, что приводит к чрезмерно частой перерисовки контента и сильно тормозит браузер, и хотел описать некоторые приемы написания «правильной анимации». В ходе подготовки примеров я понял, что я ошибался. Механизм анимации jQuery действительно не эффективен, создает кучу проблем, но причины этих проблем вовсе не в создании большого количества таймеров, а в нечте совсем другом, и, кажется, я добился замечательных результатов в устранении этих проблем.
                      Читать дальше →
                    • Memcached. Как найти ключи по паттерну?

                        Доброе утро|день|вечер|ночь, %username%!

                        При использовании Memcached, иногда могут возникнуть вопросы: «А как посмотреть все ключи Memcached?» или «Как найти все ключи по маске „*“ или „sql_*“ ?»
                        Вот тогда открываются мануалы и начинается поиск такой функции, но, к сожалению, такой не оказывается :-(
                        Потом начинается Гугление… И там особо ничего нет :-(
                        А потом начинается поиск незадокументированных возможностей :-) и тут «Ура! Нашел!»

                        Читать дальше →
                      • grep в Windows? Легко!

                          grep


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

                          Мне, как любителю посидеть в консоли Windows очень мешало отсутствие грепа, по этому мои скрипты под Win всегда были не так хороши, как могли бы быть. Но мои скрипты должны работать на любой (ну, или почти на любой) Windows, так как же быть?
                          Читать дальше →
                        • Были получены исходники 3300 глобальных интернет-проектов

                            Пару месяцев назад нами (2Товарища и Антон Исайкин) была обнаружена уязвимость, присущая в основном большим интернет-проектам (вроде Рамблера, Мейла, Яндекса, Оперы и пр.). Удалось получить доступ к файловым структурам известнейших сайтов (в общей сложности 3320 сайтов) и в ряде случаев их полные исходные коды.
                            Читать дальше →
                          • Три интересные задачи на знание SQL

                              image

                              Буквально несколько часов назад, после внимательного изучения комментариев вот к этому топику я был несколько удивлен что многие не очень любят использовать условия HAVING и похоже другие возможности СУБД. Скажу прямо — мне очень понравилась обсуждение простейшего и не работающего запроса, в результате которого многие узнали для себя много нового и познавательного (это мое личное мнение). Поэтому я решил сделать вот что — вывести три моих самых любимых задачи по знанию SQL (MySQL) на суд общественности.

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

                              Читать дальше →
                            • Сервер на стероидах: 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. Минусы оптимизации

                                Кому что-нибудь из этого списка интересно, жмём сюда...
                              • Пример построения неблокирующего веб-приложения

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

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

                                    В последнее время на Хабре стала популярной тема реализации высокопроизводительных приложений. Решили тоже немножко поэкспериментировать в этом направлении и поделиться текущими результатами наших изысканий.

                                    Подопытный «Hello, world!» представляет собой простейшую OLTP систему:



                                    Требования к производительности и отказоустойчивости являются ключевыми для подобных систем. Поэтому поиск решения поставленной задачи осуществлялся в направлении: C, C++, fastcgi, nginx, lighttpd, oracle. В первую очередь нам было любопытно попробовать различные варианты построения OLTP на данных технологиях, а так же измерить производительность и пиковые нагрузки.

                                    Подробности под катом...
                                  • Делаем reflection быстрой как прямые вызовы

                                    • Перевод
                                    Большинство программистов знают о reflection, которая (она — рефлексия) упрощает добавление динамических возможностей в статические языки, такие как Java/C#. Однако reflection упрекают в том, что вызовы работают очень медленно — до 500 раз медленнее. Все же это можно c легкостью исправить — покажем в этой статье как сделать reflection-вызов таким же быстрым, как и прямой (direct) вызов.
                                    Читать дальше →
                                  • dklab_multiplexor: постоянное Javascript-соединение с сервером в условиях сотен тысяч онлайн-клиентов

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

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

                                      Зачем это нужно?


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

                                      Данную задачу можно решить двумя способами.
                                      1. Неправильный способ. Раз в 10 секунд делать из JavaScript запрос на сервер для проверки, не появилось ли новых сообщений. Этот метод не работает, если на сайте одновременно находится очень большое количество пользователей, т.к. нагрузка на сервер растет слишком быстро. Кроме того, потребление трафика пользователем также оказывается крайне высоким.
                                      2. Правильный способ. Устанавливать постоянное и длительное соединение с сервером, ожидая поступления данных через него. Если сообщений нет, соединение просто держится открытым на протяжение нескольких минут. Если соединение по каким-либо причинам закрылось, оно вновь открывается. В итоге и трафика потребляется мало, и нагрузка на сервер оказывается невелика. Так работает GMail, Мой Круг и т. д., и именно на этом принципе построен dklab_multiplexor.
                                      +-------------------+                    ------------------ 
                                      | Сервер обработки  |                   |                  |   <===WAIT=== Клиент A
                                      | и базы данных     |  ======IN=======> |   Мультиплексор  |   <===WAIT=== Клиент B
                                      | (e.g Apache + PHP |                   |                  |   <===WAIT=== Клиент C
                                      +-------------------+                    ------------------ 
                                      (указаны направления установления TCP-соединений).
                                      
                                      Читать дальше →
                                    • Dependency injection для Scala: Cake Pattern

                                        Я совсем недавно начал изучать Scala. Для тех, кто еще не в курсе, что это за язык, небольшая выдержка с официального сайта:

                                        Scala — лаконичный, элегантный и статически типизированный язык программирования, который сочитает в себе возможности обьектно-ориентированного и функционального языка. Scala полностью совместима с Java.

                                        Сегодня я хотел бы показать вам, как, используя богатые выразительные способности этого языка, решить проблему, актуальную для любого более-менее крупного проекта, а именно работу с зависимостями компонентов или dependency injection. Последние несколько лет я использовал spring ioc для решения этой проблемы, однако у этого фрэймворка есть несколько недостатков, самый очевидный из которых это сборка приложения из компонент в runtime и наличие xml-дескрипторов (да, конечно можно использовать и autowiring и аннотации, но и у этих возможностей есть свои серьезные проблемы).
                                        Читать дальше →
                                        • +9
                                        • 11,3k
                                        • 2