Shared rss feeds:

Servare Mentem - blog

Мой предыдущий блог

пятница, 25 апреля 2008 г.

CADBiS начало...

Решил открыть серию постов посвящённых моему дипломному проекту. Проект представляет собой систему управления доступом в Интернет.
Акцент в проекте идёт не на расчёт стоимости потребляемых услуг и списание средств (или попросту говоря биллинг), а на специфику предприятия на котором данная система должна быть установлена, а именно - локальная сеть кафедры САПР, на которой я учусь.
Клиентами системы являются студенты, преподаватели, аспиранты и сотрудники. Каждая группа должна иметь собственные права и лимиты доступа. Так же необходимо создать систему управления контентом, который получают из Интернета пользователи, потому как по идее студенты должны расходовать Интернет-трафик исключительно в учебных целях, ровно как и преподаватели.
На сегодняшний день система успешно функционирует. Она основана на открытой биллинг-системе FreeNIBS, которая в свою очередь представляет собой модуль сервера аутентификации FreeRADIUS, являющегося на сегодняшний день одним из самых популярных RADIUS-серверов в сети. Установление соединений по протоколу pptp происходит с помощью сервера mpd. И крутится всё это дело на шлюзе под управлением FreeBSD.
Эта система была настроена, поставлена, к ней был разработан веб-интерфейс для администраторов. Код FreeNIBS был частично модифицирован и в него была добавлена функция работы с оповещениями пользователей. Так же был настроен и подключен прокси-сервер Squid, который позволил отфильтровать некоторые нежелательные веб-ресурсы. И всё это в рамках бакалаврского проекта.
В системе был лишь базовый функционал. Конечно, ни о каких фильтрах контента речи не было. Главным параметром являлся Интернет-трафик, и предполагалось что его верхний порог - вполне ограниченное число, а поэтому система должна была уметь распределить использование трафика как можно более рационально. Для этого в веб-интерфейсе была предусмотрена "система поддержки принятия решений", которая сообщала администратору о том, что в какой-либо из дней расход трафика превысил свою дневную норму. Что плохо? Система базировалась на FreeNIBS, а это как плюс так и минус. Минус в том, что код на языке C, отладить который можно лишь вкомпилив во FreeRADIUS, представляется абсолютно не-maintanable и не-extensible. На написание простейшей функции отправки уведомлений ушло несколько дней. Посему, данная часть была в последствии выделена в ядро и не модифицировалась по причине невероятной лени, возникающей при одной мысли об этом коде:)
Далее система расширялась при помощи написания собственного прозрачного proxy-сервера, который бы отслеживал посещаемые ресурсы, составлял протоколы и записывал в базу. Данный сервер был выбран без особых поисков - и им стал входивший в необновлённую версию портов FreeBSD 5.4 tproxy. Опять же пришлось писать ужасающий код на C. При этом, код был написан в лучших традициях классической UNIX-архитектуры и вместо использования POSIX-threads он реализовывал многозадачность при помощи fork (собственно, FreeRADIUS тоже её использовал, но нагрузка на него была в разы меньше). В результате чего сервер часто просто загибался от обилия процессов. К тому же запись логов в базу была реализована путём модифицирования кода tproxy и реализована в том же стиле, в результате чего на каждый пакет создавались процесс обработки запроса и процесс записи запроса в базу, и при этом (!) соединение с базой открывалось для каждого пакета!
Представить сейчас страшно, что я так мог написать. Естественно, что сервер умирал когда кто-то начинал что-то просто скачивать. Немного помогли шаманские пляски с sysctl (было увеличено максимальное число сокетов). Но в итоге от данной утилиты было решено отказаться.
Второй попыткой реализовать свой proxy было написание его с 0 на чистом C++. Здесь, разумеется всё было сделано уже умнее. Для многозадачности использовались потоки, для синхронизации - мьютексы, был реализован собственный потоковый пул (от POSIX-пула было решено отказаться по ряду причин) и всё работало прекрасно. Если бы не одно но. Память текла. А куда текла - было очень трудно понять. Учитывая моё неумение пользоваться средствами типа dbg и некоторую несовместимость кода с Windows-платформой, отладить момент утечки оказалось нереальным и эту ветку тоже пришлось заморозить.
Но вот пришло время когда до защиты магистерского диплома осталось всего пара месяцев. И неожиданно появилось желание реализовать proxy на Java, особенно после нескольких пробных попыток и оценки кроссплатформенности. И ведь действительно, данный проект оказался в итоге наиболее перспективным...

[To be continued]

Ярлыки: , , , , , , ,

понедельник, 21 апреля 2008 г.

Как установить Eclipse + PHP + Apache + PDT + ZendDebugger + Subclipse

полезный линг
Остальные полезные линги:
  • http://www.php.net/downloads.php
  • http://www.zend.com/en/community/pdt
  • http://httpd.apache.org/download.cgi
  • Для начала надо всё это скачать (со ссылок приведённых выше). Лучше всего создать директорию WWW где-нибудь на диске (пусть будет C). Дальше в WWW создать директории /bin и /home.
    • Поставить Apache в директорию C:\www\bin\apache (внимательно, чтобы не получилось C:\www\bin\apache\apache2.2 или что-то подобное)
    • Поставить PHP в директорию C:\www\bin\php (то же самое). Отметить при установке "поставить как модуль для Apache 2.2 or higher".
    • Открыть файл C:\www\bin\apache\conf\httpd.conf и исправить в нём строчку
    • DocumentRoot "C:/www/bin/apache/htdocs"
      
    на
      DocumentRoot "C:/www/home"
    

    И заменить все вхождения "C:/www/bin/apache/htdocs" в этом файле на "C:/www/home" так же найти строчку

    DirectoryIndex index.html
    

    добавить туда index.php так:

    DirectoryIndex index.html index.php
    
    • Создать в папке C:/www/home файл index.php с содержимым:
    •  <?php phpinfo(); ?>
      
    • Проверить как работает PHP на Apache. Для этого - перезапустить Apache и набрать в адресной строке браузера http://localhost

    Внимание Если Apache не запускается по какой-то причине, возможно, неверно отредактирован файл httpd.conf или же 80 порт занят. Для этого в файле httpd.conf исправить строчку

    Listen 80
    
    на
    Listen 8080
    

    или любой другой свободный порт. (тогда проверка работоспособности будет заключаться в заходе на URL http://localhost:8080).

    • Скопировать ZendDebugger.dll в папку C:\www\bin\php\ext (если нет - создать её).
    • Посмотреть через phpinfo где находится файл php.ini (Loaded Configuration File). Открыть его в редакторе. Далее найти строчку "extension_dir = ...". Под ней вставить следующие строки:
    • extension=ZendDebugger.dll
      extension=php_mysql.dll
      

    Далее в конец файла добавить строки:

    [Zend]
    zend_extension_ts="C:/www/bin/php/ext/ZendDebugger.dll"
    zend_debugger.allow_hosts=localhost,127.0.0.1,[твой IP адрес]
    zend_debugger.expose_remotely=always 
    

    Так же заменить implicit_flush = Off на implicit_flush = On и заменить output_buffering = 4096 на output_buffering = 0 Ещё заменить short_open_tag = Off на short_open_tag = On Так же заменить display_errors = Off на display_errors = On

    • Перезапустить Apache и убедиться по phpinfo, что в группе "Powered by" появилась надпись
    • with Zend Debugger v5.2.12, Copyright (c) 1999-2007, by Zend Technologies
      
    • Скопировать PDT All in one в папку C:\Eclipse (так чтобы eclipse.exe находился в корне этой папки)
    • Запустить Eclipse.
    • Нажать Help -> Software Update -> Find And Install -> Next -> New Remote Site. Далее ввести "Subclipse" и "http://subclipse.tigris.org/update_1.2.x" и нажать Finish. Дальше следовать инструкциям визарда (отметить галочками Subclipse в нужном месте) и после установки перезапустить Eclipse.
    • Далее нажать File -> New -> Project... Выбрать Checkout projects from SVN и нажать Next. Потом задать параметры репозитория (url). Подождать когда появится список проектов и выбрать нужный. Потом нажать Next -> и Finish.
    • Теперь у вас есть полноценный PHP-дебаггер, мощная среда разработки, которую вы можете связать с сорс-контролом и самый лучший веб-сервер в мире :) Enjoy

    Ярлыки: , , ,

    среда, 9 апреля 2008 г.

    Какие моды и проги для айфона я ставил и считаю юзабильными

    iPhone - это просто красивая игрушка или это полнофункциональный коммуникатор?
    Купил себе это чудо, и, честно говоря, не жалею, что не купил коммуникатор с Windows Mobile. В айфоне есть куча прекрасно выполненных возможностей, есть стиль и красота. Пользоваться им очень удобно. Ну и что что пока нет GPS - он скоро появится (уже есть куча решений, которые, впрочем, пока не для широкой публики).
    С айфоном одна большая проблема - политика Apple. С самого начала он позиционировался как просто телефон. ОС была закрыта, ничего кроме того что вам разрешили делать, делать нельзя. Правда, сейчас, после выхода первой и последующих бет SDK, становится понятно, что они одумались :).
    Итак, вот неполный список того, что я на текущий момент (владея айфоном около 3-х недель) поставил для него:
    iPhone PC suite – Прога для почти полного управления айфоном с компа (ставит своего демона на айфон, что немного стрёмно. На прошивке 1.1.4 я пока не встретил особых проблем - всё работает и работает прекрасно).
    Wondershare iPhone Video Converter – конвертит видео в формат mp4- для айфона.
    BSD Subsystem & Mobile Enhancer – требуют многие проги
    Кэш карты Питера (чтобы смотреть карту без EDGE и WiFi) – порядка 600 метров.
    BossPrefs.app – позволяет отключить EDGE. Вообще-то там ещё несколько вариантов настройки, но я использую только для этого
    LocateMe.app – позволяет определить местонахождение на основании ближайших ретрансляционных точек вашего оператора(очень хреново :) - но зато хоть поймёте на какой вы планете 0_o)
    Books.app – чтение книг с айфона. Программа не очень удобная (в плане кастомизации). И мне не удалось настроить нормально переносы - переносит всегда любой символ, будь то точка или одна буква. Это немного раздражает и читать становится неудобно.
    Lighthttpd – Веб-сервер. Вещь многофункциональная, но в айфоне может использоваться просто для того, чтобы читать через Safari локальные документы Word, Excel, PDF или html
    Doom.app – Doom2. Для прикола - "зацените, у меня тут есть Doom2!"
    Drummer.app – барабанщик :)
    Guitarist.app – гитарист :)
    Pianist.app – пианист :)
    NuPogodi.app – игра про волка который ловит яйца :) - ради неё многие и покупают айфон
    Pool.app – игра в пул
    Term-vt100.app – консоль (командная строка). Отличная вещь - рутшел на вашем айфоне. Я коннектился под ней к серваку на FreeBSD через SSH и управлял им (забавно выглядело).
    TextEdit.app – текстовый редактор - позволяет создавать и редактировать текстовые файлы. Что хорошо - работает в связке с Finder, а это позволяет выбрать нужный файл через эксплорер.
    Finder.app – файловый браузер (эксплорер) - до конца в нём не разобрался, почему-то отображает не всю файловую систему.
    Genesis4iphone – эмулятор приставки Sega Genesis (офигенная вещь – можно играть почти во все игры для сеги. Особенно порадовал Sonic и Mortal Combat)
    Psx4all – эмулятор приставки SonyPlayStation (почти все игры тормозят, поэтому не слишком полезная вещь. Но GTA идёт вполне прилично)
    weDict.app – словарь (с базами словарей для разных языков - можно так же преобразовать словари от Lingvo).
    iPhysics.app – классная игрушка. Позволяет убить кучу времени :). Это двумерный физический движок. Можно рисовать любые объекты на экране айфона и смотреть как они сталкиваются и поддаются действию всемирного тяготения. Направление силы тяжести меняется согласно акселерометру. Для этого движка есть куча интересных игр.
    Hwinfo.app – приложение отображает не только «начинку» iPhone – то есть хард, но и кучу прочих параметров, таких как объём свободного пространства и т.п.

    Ну и у меня бесплатный аккаунт в iTunes, что позволяет мне соответственно загрузить картинки обложек большинства альбомов в айфон бесплатно.
    В планах попробовать что-нибудь написать под iPhone. Правда, хочется подождать когда выйдет под него Java, чтоб не слишком заморачиваться с объектным C :).

    -->