Все потоки
Поиск
Написать публикацию
Обновить

Система удалённого хранения конфиденциальной информации

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

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

Подобный проект уже существует и называется www.e-nigma.ru. Когда я первый раз узнал о его существовании мне понравилась идея, но не понравилась ее реализация.

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

В первом случае, даже если файлы пользователя дейсвительно защифрованы и не доступны для злоумышленников, существует возможность отключить сервера по требованию от различных ГОС служб т.е. пользователь может потерять возможность воспользоваться своими данными. Во втором случае ПО может содержать намерено заложенные «лазейки» которые позволят расшифровать информацию без участия ее владельца.

Вообщем я решил создать аналогичный проект. Главными требованиями к нему были открытые исходные коды и возможность развертывания собственного сервера. Результат работы находится по адресу www.cipherwall.com Замечу что подобную систему можно «сложить» из уже имеющихся open source проектов или просто шифровать свои файлы PGP и загружать их на FTP сервер. Но такие решения чаще всего сложны в развертивании и не удобны для пользователей. Моя цель была создать программу которая с одной стороны должна быть простой в использовании для человека который не знаком с криптографией, а с другой стороны обеспечивала бы максимальный уровень защиты данных.

Вот список криптографических алгоритмов реализованых в системе:
  • 3-х шаговая авторизация по стандарту X.509
  • RSA с длинной ключей до 4096 бит
  • весь трафик между клиентом и сервером шифруется одним из алгоритмов AES, Twofish или Serpent с использованием случайного 256-битного ключа
  • AES и Twofish в каскаде с двумя независимыми 256-битными ключами используються для шифрования файлов
  • имена файлов и папок также шифруються
  • HMAC-SHA-256 для проверки целосности файлов и потока данных
  • PKCS 5.2 на основе HMAC-SHA-512 с 2000 итераций
  • мощный генератор случайных чисел
  • поддержка дополнительных «корпоративных» ключей
  • алгоритмы DoD-5220.22-M и Peter Gutmann's используються для безопасного удаления данных

Мне интересно ваше мнение о том в каком направлении стоит двигаться и стоит ли вообще.

Список того что я еще не сделал:
1) инсталятор для серверной части ПО — сейчас инсталяция сервера может отнять много нервов
2) админ-панель для сервера

ASP.NET MVC — создание полноценного приложения с нуля

Доселе многие из доступных статей по ASP.NET MVC освещали лишь определенную часть этой перспективной технологии. Если и были полные руководства, показывающие весь цикл разработки приложений, то, как правило, сложность создаваемого проекта была невелика.

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

К примеру, персонально я так и не получил ответа о 'правильном' способе работы с базой данных. Код по обращению к БД располагался прямо в контроллерах (хотя ему место в Моделях ?), и даже если его там и оставить — отсутствует обработка исключений try-catch. А если к тому добавить и валидацию (проверку на корректность значений), то код контроллере разрастается до недопустимых пределов. С другой стороны, если обращение к базе помещать в Моделях, отсутствует доступ к ModelState. Я прошу относиться читателей ко мне со снисхождением, поскольку опыт у меня в MVC все-таки мал :). Часть ответов на вопросы дал блог Scott Guthrie, но не на все.

Однако, сейчас появилась возможность изучить действительно впечатляющий проект, созданный на технологии ASP.NET MVC, тем более, что автором является все тот же Scott Guthrie. Им написана глава размером в 185 (!) страниц для книги Wrox Professional ASP.NET MVC 1.0, которая в данный момент проходит подготовку к печати. Собственно говоря, за ее создание он денег не взял, зато в обмен на это мы имеем возможность ознакомиться с ней бесплатно :)



Ссылки:
Блог
Книга (PDF, 11MB)
Исходные коды
LIVE веб-сайт разработанного приложения

Древо Мудрости — место для общения о культурной жизни

image
Итак, заготовьте тухлые яйца и помидоры :). Хочу представить свой скромный стартап www.drevomudrosti.ru.
До недавнего времени мне очень не хватало ресурса, для общения на очень не популярную тему культурной жизни и нравственных ценностей. Почему Древо Мудрости? Просто потому, что мудрость — это прежде всего способность уворачиваться от граблей, постоянно летящих нам на встречу. Древо же символизирует многоветвистось знаний о жизни: личные отношения и эффективность, духовное развитие и поиски истины, здоровый образ жизни, семейная жизнь и многое другое. В каждом из этих направлений приходится постоянно искать правильные решения, чтобы держатся на плаву.
Читать дальше →

Универсальная процедура разборки текстов

Зачем?


Каждому из нас, рано или поздно, приходила в голову идея создания собственного небольшого языка программирования (как пишется в умных книжках, Domain Specific Language). Задача это, разумеется, непростая — и, в лучшем случае, на выходе получался колченогий инвалид, со своей работой справляющийся, но синтаксис языка выходил зависящим не столько от задачи, сколько от особенностей реализации парсера. В худшем же случае, всё заканчивалось сакраментальной фразой «А ну её к чёрту!».
Автор данной статьи тоже пытался наступать на эти грабли, и в результате прошёл некую эволюцию — сначала это был интерпретатор с жёстко заданным синтаксисом (и весьма плачевной производительностью), следующим шагом была попытка создать некий «универсальный» кросс-транслятор (с компиляцией «на лету» получившихся в результате трансляции исходных текстов на языке Object Pascal), обвешанный уймой конфигурационных файлов, задающих синтаксис — но, в конечном итоге, с появлением в нашей жизни .NET 3.5, LINQ и более-менее вменяемых элементов из области функционального программирования в C#, я решил написать очередную итерацию «универсального парсера».
Читать дальше →

Переходим на Open Source и экономим 50 миллионов. Пример французской жfндармерии.

Время финансового кризиса заставляет задуматься о вопросах экономии уже в масштабах национальной экономики и государственных структур. Как раз в такой момент обсуждения привлекательности Open Source с эк. точки зрения имеют наибольший интерес и кажутся не такой уже и «игрушкой» в глазах топ-менеджеров и первых лиц страны.

Рассмотрим историю перехода на Open Source французской жандармерии.

История, результаты, планы и прогнозы

Eclipse PDT 2.0 и удаленное редактирование файлов

Выход PDT 2.0 для Eclipse состоялся 31 декабря прошлого года, как новогодний подарок веб-программистам. Однако существует большие неудобства в работе с PDT 2.0, и они остались неразрешенными до сих пор.

Самое основное неудобство для меня – это работа PDT с удаленными файлами. Редактировать файлы на удаленном сервере, например по протоколу SSH, – это довольно распространенная задача для разработки на PHP. Если программист занимается поддержкой работающей объемной системы, то без удаленного редактирования кода обойтись практически невозможно.

В состав готового релиза All-In-One PDT 2.0 не входят средства для удаленно редактирования файла. Однако, это легко исправить, установив в Eclipse плагин Remote Systems Explorer (RSE). Плагин позволяет работать с файлами по всем популярным протоколам.

Проблема в том, что редактор PDT 2.0 очень плохо работает вместе с RSE. При открытии файлов с помощью RSE возникают следующие трудности:
  • Редактор PDT не выполняет проверку PHP синтаксиса, и поэтому не подсвечивает ошибки;
  • Полностью или частично не работает автодополнение: PDT не предлагает ни названия стандартных и определенных функций, ни переменных, ни классов;
  • Окно Outline остается пустым;
  • В список задач (окно Tasks) не попадают записи, отмеченные в коде с помощью phpDoc и директив todo.

Перечисленные проблемы приводят к тому, что пользы от PDT 2.0 при работе с удаленными файлами не больше, чем от блокнота Windows. При редактировании же локальных файлов, включенных в PHP проект, редактор PDT ведет себя вполне корректно.

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

Другой способ организовать работу с удаленными файлами заключается в монтировании удаленного каталога к системе. Удаленный каталог в таком случае становится в системе дополнительным диском. Для Windows мне удалось организовать такой способ работы при помощи утилиты Dokan SSHFS. Этот способ можно использовать только для небольших проектов, потому что скорость работы с удаленными файлами низкая, а при большом объеме кода работа вообще становится невыносимой.

Мне удалось найти другое решение, которое решило все мои проблемы.

Плагин RSE создает в Eclipse свой проект, который называется RemoteSystemsTempFiles. Данный проект располагается обычно по пути C:\Users\user_name\workspace\RemoteSystemsTempFiles. В этом каталоге содержатся все файлы, которые RSE получает при работе с удаленными серверами.

Оказалось, что если проект RemoteSystemsTempFiles преобразовать в PHP проект, то PDT начнет полностью корректно работать с удаленными файлами. Для преобразования в PHP проект я отредактировал файл RemoteSystemsTempFiles\.project, добавил строки, отмеченные зеленым цветом.

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>RemoteSystemsTempFiles</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.wst.validation.validationbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.dltk.core.scriptbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>

    </buildSpec>
    <natures>
        <nature>org.eclipse.php.core.PHPNature</nature>
        <nature>org.eclipse.rse.ui.remoteSystemsTempNature</nature>
    </natures>
</projectDescription>


Также понадобилось добавить в каталог проекта RemoteSystemsTempFiles файл .buildpath.

<?xml version="1.0" encoding="UTF-8"?>
<buildpath>
    <buildpathentry kind="src" path=""/>
    <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
</buildpath>


Теперь, когда RSE использует PHP проект, работа PDT 2.0 полностью нормализовалась:
  • Работает проверка синтаксиса;
  • Работает автодополнение;
  • Работает Outline;
  • Работают todo.

Работа проверялась на версиях PDT 2.0.0GA и 2.1.0M5 для Windows.

Google Chrome как инструмент для веб-разработчика

Совершенно неожиданно для себя обнаружил, что в Google Chrome есть неплохой «инспектор» элементов веб-страницы

image

Вызвать его можно нажав правой кнопкой на любом элементе страницы и выбрав пункт «Просмотр кода элемента».

На деле эта штука оказалась недурным инструментом с очень удобным и понятным интерфейсом. Это конечно не FireBug, но тоже ничего.

Оказывается не только Огнелис может быть полезен веб-разработчику.

А ты спланировал ИТ в своей компании?

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

Для начала определимся с термином «ИТ инфраструктура». Будем считать что это компьютерная техника, средства коллаборации, различные коммуникации, серверы, оргтехника, программное обеспечение, одном словом все, что связано с информационными технологиями в компании, и то, как все эти технологии между собой взаимодействуют. Это, безусловно, требует очень больших затрат, как на момент создания инфраструктуры с нуля, так и в будущем, в процессе обслуживания. Но правильно спланированная и реализованная ИТ инфраструктура может существенно снизить стоимость своей же эксплуатации. Планирование в конечном итоге представляет из себя документ, стандарт, завизированный управляющим звеном компании. Итак, давайте попробуем разобраться, зачем нужно такое планирование, в чем его плюсы, а также какие очевидные недостатки существуют.

Первой и самой важной целью планирования инфраструктуры является понимание топ-менеджментом и инвесторами компании, на что департамент информационных технологий собирается тратить деньги. План становления и развития ИТ инфраструктуры в компании нужен для обеспечения прозрачности ИТ для бизнеса в целом. Например, если в качестве типового решения закупается оборудование конкретного бренда, по определенному Part Number'у, сотрудники финансовой службы смогут спрогнозировать предстоящие траты. Или стоимость организации инфраструктуры в планируемом удаленном офисе рассчитана заранее, и инвестор сможет скорректировать стратегию движения в регионы. Имея на бумаге общее, стандартизированное решение, бизнес будет ориентироваться именно на это, и составление бюджета на следующий год вызовет существенно меньше вопросов. Даже процесс организации закупок техники и программного обеспечения станет более простым — одни и те же поставщики, известные сроки, известные проблемы, и вот, можно планировать риски.

Для самого департамента информационных технологий этот план является своеобразной картой, целью, к которой нужно постепенно стремиться. В документе должны быть описаны сервисы, например служба Active Directory, почтовая система, система документооборота и т.д. Очевидно, что все это не делается «за раз», чтобы вычеркивать из плана сделанное, нужны материальные средства и человеко-часы. Пусть в плане значится Lotus Domino, SAP, OpenView, ничего страшного, главное наметить цель и план движения к этой цели, а реализация будет после, ведь нельзя собрать с поля пшеницу, предварительно не посеяв ее. Еще одно преимущество планирования инфраструктуры заранее — это создание понятных и простых процедур, таких как настройка рабочего места новому пользователю, подключение к корпоративной телефонии, решение типовых инцидентов и т.д. Чаще всего эти процедуры описываются в формате каталога услуг, предоставляемых департаментом ИТ сотрудникам компании.

Идем дальше. В наш план попадают типовые решения, которые мельком были затронуты ранее. Типовое решение позволит не только планировать предстоящие расходы, но и сделает саму инфраструктуру более управляемой, удобной в обслуживании. Возьмем, например, за типовое решение коммутаторы для офисной сети — Cisco Catalist 3550, сервера — HP Proliant DL380 G5, программное обеспечение рабочих мест — Microsoft Windows Vista, шкафы — Rittal и т.д. Однажды описав это в документе, не нужно будет думать, какой сервер купить и в какой комплектации, все уже посчитано и записано. Конечно, бывают случаи, когда, например, не совсем целесообразно покупать сервер DL380, а дешевле и правильнее купить DL360 G4, но ведь никто не мешает «завиртуалить» на этом сервере 2 операционных системы, разделив ресурсы между ними как требуется. Или таки купить DL360 вместо 380-го, обозначив на будущее в стандарте на оборудование 360 G4, как «Сервер приложений средней производительности». Как показывает практика, обслуживание сети, включающей типовое железо и программное обеспечение существенно удобнее (и правильнее), чем диверсифицированной сети.

Прорабатывая любой план, обычно возникает большое количество вопросов, ответы на которые можно постараться дать на момент проектирования. Гораздо хуже, если эти проблемы «вылезут» в момент реализации, особенно если затронут критические бизнес процессы компании. Наверняка не один ИТ-шник испытывал неудобства, когда его план, составленный в голове за 15 минут пару недель назад, с треском проваливался. И было закуплено оборудование не с теми опциями, или не та версия ПО, или железо оказалось не совместимо с чем то уже существующим. Нет, я не хочу сказать, что планируя, мы избежим всех проблем, конечно нельзя знать наверняка, ошибки случаются, но сократить их количество в наших силах! Это еще раз подтверждает необходимость планирования инфраструктуры заранее, и желательно, на посевном этапе.

В заключении отмечу и минусы, связанные с планированием и стандартизацией инфраструктуры. Во-первых, применение планирования инфраструктуры хоть и желательно, но не всегда целесообразно в компаниях, состоящих из 5 и менее человек, а тем более в компаниях, которые не собираются увеличивать количество своих сотрудников в ближайшие 1-2 года. Во-вторых, сама по себе стандартизация это не всегда хорошо. Ну захотел топ-менеджер VAIO, вместо HP, куда денешься, приходится делать исключения из правил. И в этом случае важно не брутальное зацикливание на созданном документе, а гибкие методы изменения созданных жестких правил. Как показала практика, такие документы зачастую не существуют даже в компаниях, количество сотрудников с ПК в которых уже перевалило за полторы сотни. Как это сказывается на управляемости и стоимости инфраструктуры можете предположить сами. Принимая во внимание best practices крупных ИТ/телеком компаний, с уверенностью заявляю, что планирование ИТ инфраструктуры должно быть самым первым и самым главным шагом компании в мире информационных технологий. Успехов в начинаниях! И не ленитесь планировать, это поможет вам избежать многих проблем!

Мультиязычность в Smarty

Недавно пришлось реализовывать на движке Smarty проект мультиязычного сайта – когда пользователь в любой момент можешь выбрать другой язык и контент адекватно на это отреагирует соответствующим изменением. Самый большой топик по проблеме находится на официальном форуме Smarty: «best way to build a multi-language site with smarty». Там я нашел ссылку на нечто фундаментальное, но громоздкое, что так и не решился испробовать: smarty.incutio.com/?page=SmartyMultilanguageSupport. А также маленькое и изящное решение предложенное Тобиасом Шиттковски (Tobias Schittkowski) в своем блоге: www.schittkowski.de/index.php?q=node/20.
Читать дальше →

Скрипт на PowerShell для чистки старых бэкапов

Доброго времени суток, уважаемые хабрачитатели

Недавно я начал восполнять пробел знаний по могучей оболочке Windows PowerShell. И, дабы закрепить усвоенный материал, решил переписать под PowerShell когда-то написанный мною для рабочих нужд vb-скрипт.
Читать дальше →

О спаме, паролях и капче, измышления о решениях.

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

1. Спам. В качестве защиты от спаммеров — можно использовать электронную марку. Для этого можно создать сервис для получения почты, специальный почтовый клиент или плагин к существующему. Смысл задумки такой — ты можешь получать письма только от тех, кого знаешь, а если кто-то незнакомый хочет чтобы человек прочитал его письмо — пусть пользуется е-маркой. Пусть это будет многоразовая е-марка, которую я потом сам смогу использовать для рассылки писем по незнакомым контактам. Е-марки можно будет приобретать на специальных сервисах через трехрублевые СМС-ки. Если человек присылает письмо без марки — ему приходит автоответ с пожеланием отправить платную СМС-ку для приобретения марки.

2. Пароли. Однажды я читал про хакера, которого американские службы выманили на территорию штатов. Там они с удовольствием снифили его сеансы связи с домашним компьютером, и получили все пароли, которые использовали чтобы самим там пошариться и выудить нужные улики. Я еще тогда подумал, что есть защита от многократного подглядывания пароля. Давно придуманы уже сеансовые ключи. Но есть еще один неиспользуемый ранее способ. Можно в качестве пароля помнить процедуру обработки данных. Технология несколько похожа на шифрование открытыми ключами.
Легче разобрать на примере. В качестве запроса пароля человеку предъявляется набор из 20 цифр, 5 из которых являются значимыми, остальные нет. Человеку надо запомнить какие позиции значимые. Еще надо запомнить две комбинации по 5 цифр. На первую он умножает, вторую прибавляет. В качестве результата используется последняя цифра, первая отбрасывается. Можно использовать другие арифметические операции. Сама арифметическая операция, если она не известна, тоже по сути является элементом пароля. Потом человек генерирует случайные цифры на незначимых местах и подставляет в нужные места результаты вычислений. Такой подход будет защищен от многократного подсмотра. Здесь, конечно, еще много работы. Стоит подсчитать надежность такого пароля.

3. Капча. Не всем нужна анонимность в интернете. Я не хочу чтобы меня принимали за робота. Мне надоело каждый регистрироваться на разных сервисах. Да, давно уже придуман OpenID, который до сих пор не используется. Я же предлагаю для идентификации человека в интернете можно придумать подобие паспорта. Пусть это будет е-паспорт в виде функции хэширования. Причем сделать его стоит в формате виджета или плагина для браузера, чтобы ходить-серфить по интернету публично. У человека может быть много виртуальных паспортов, если ему нравится пользоваться виртуалами. Как человек заходит на сайт, в его браузер для идентификации посылается запрос, который обрабатывается плагином. Для ограждения от армий ботов для выдачи человеку е-паспорта можно использовать идентификацию по СМС, поскольку большая часть симок имеет привязку к реальным физическим, либо юридическим лицам. Сам процесс регулярной идентификации человека можно сделать сторонним веб-сервисом, который может предоставлять услуги другим веб-сервисам.

Секреты параноика

Преследуемый приступами паранои страхом подхватить вирус или троян, я три года назад стал использовать линукс на всех компютерах, где я читаю пошту, переписываюсь в однокласнике, в чат клиентах, набираю пароли к вебмани или данные своей визы(Visa), доступаюсь к другой приватной информации. Но желание клиента получить сейчас услугу свято, и мне часто приходилось оставлять свои данные у него в броузере. Потом, придя домой отрезвев,
Читать дальше →

Ссылка на следующую страницу в Wordpress

Порой для какой то тривиальной и простой и популярной задачи бывает сложно отыскать простое решение, кажется что истина где-то рядом и уже придуман не один способ их решения, но они что-то все не находятся… Суть вот в чём — для популярной системы WordPress внизу страницы нужно вставить ссылку на следующую страницу из этой же категории. Замучившись искать какой-н. плагин я придумал, как я считаю, оригинальное но немного громоздкое и извращённое решение, поэтому не ругайте сильно что криво и если знаете как решить это просто — откомментесь, пожалуйста.

В WP есть стандартная функция wp_list_pages которая генерирует список ссылок на страницы из заданной категории, рассмотрим парсин выдаваемых результатов подробнее:

if ($post->post_parent)
$children = wp_list_pages("depth=1&title_li=&child_of=".$post->post_parent."&echo=0");
else
$children = wp_list_pages("depth=1&title_li=&child_of=".$post->ID."&echo=0");

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

$children = preg_replace('/<li\s+[^>]*?class="[^"]*(?:current_page_item)[^"]*"[^>]*>((?:(?!<\/li>).)*)<\/li>/si','!',$children);
$children = preg_replace('/<[\/\!]*?li[^<>]*?>/si','',$children);


Суть регулярных выражений: первое в строку $children перезаписывает то что нам сгенерировала wp_list_pages обрубая теги li с классом current_page_item, причём заменяя его на знак "!". Делается это для того чтобы отсеять ссылки на текущую страницу и на те что находятся с order выше(раньше) текущей страницы, т.к. нам нужна ссылка на следующую страницу.

$test = explode("", $children);

Загоняем в массив наши ссылки

$result = "";
for ($i=0;$i<count($test);$i++) {
$tmp = $test[$i];
if ($tmp[0]=="!" || $tmp[1]=="!") {
$result = substr($test[$i]."
",2);
break;
}
}

Суть: Проходим циклом по всему массиву ссылок и проверяем — встречается ли нам восклицательный знак(на который мы меняли ссылку на текущую страницу) первым или вторым символом(в каком то из случаев, не помню в каком — вроде бы когда ссылка на текущую страницу была где-то в середине — перед ней получался пробел). И как только это условие срабатывает — записываем в $result начиная со второго символа(без "!", получится начало тега а) и до конца, прибавляя к полученному закрытие тега а, т.к. они обрубились когда мы резали по ним в массив функцией explode

if(strlen($result)>5) {

Проверяем длиннее ли 5 символов наша строка — почему 5, просто потому что если хотя бы 5 символов есть — то это точно ссылка, т.к. туда могло попасть просто закрытие тега а, если элемент в массиве был последним

Далее пойдёт вообще полный бред, который можно было бы сделать регулярками, но я тогда ещё не очень в них шарил, да и сейчас не на высоком уровне, поэтому сделал так:
$max_symb = 29;
for ($i=0; $i<strlen($result); $i++) {
if ($result[$i] == ">") break;
}

Определяем максимальную длину(29) и… и… мм, чет на столько полный бред я написал что даже не могу вспомнить зачем настолько тупой ничего не делающий цикл, аа, вспомнил! Мы наращиваем переменную $i в которой будет храница позиция символа > в строке

Далее:
for ($k=$i; $k<strlen($result); $k++) {
if (substr($result,$k,4) == "
") break;
}

Делаем цикл от символа > до конца строки и получаем позицию < Почему так извращённо а не просто вычтя 4 от длины строки? Мало ли там к-нить пробелы ещё после затесались…

$tmp = substr($result,$i+1,$k-$i-1);


Копируем в $tmp содержимое строки между символами > и < в результате чего у нас там оказывается текст названия ссылки

if (strlen($tmp)>$max_symb) {
$res2 = substr($result,0,$i+1);
$res2.= substr($tmp,0,$max_symb)."...";
$res2.= substr($result,$k);
}

Проверяем длиннее ли он максимальной длины что мы указали ранее(29 символов), если да — то копируем в $res2 содержимое оригинальной целой строки всего тега а с href и прочими атрибутами до символа > включительно, в результате чего в $res2 у нас оказывается что-то типа этого.
Затем к $res2 добавляем часть строки названия ссылки до максимального символа(29-го) и троеточие на конце.
И потом добавляем из оригинальной строки окончания после символа < включительно, получается закрытие тега а.

Результате всех этих действий в $res2 у нас теперь хранится ссылка с названием следующей страницы (по order), находящейся в той же категории что и текущая и если длина названия следующей страницы больше 29 символов - обрублена до 29 и добавлено троеточие. Вот, попытался поделиться этим извращённым хардкордом который мне пришлось однажды написать, не найдя к-нить простого готового решения для такой тривиальной задачки, далее прилагаю полный листинг кода и ссылку на проект где это было использовано http://staging.widefunnel.com/ (смотреть внизу страницы, чуть позже и возможно на самом widefunnel.com, сейчас недоступно - наверное переносят, они еще давно хотели, это был редизайн блога)

Полный код:

<?php
if ($post->post_parent)
$children = wp_list_pages("depth=1&title_li=&child_of=".$post->post_parent."&echo=0");
else
$children = wp_list_pages("depth=1&title_li=&child_of=".$post->ID."&echo=0");

$children = preg_replace('/<li\s+[^>]*?class="[^"]*(?:current_page_item)[^"]*"[^>]*>((?:(?!<\/li>).)*)<\/li>/si','!',$children);
$children = preg_replace('/<[\/\!]*?li[^<>]*?>/si','',$children);
$test = explode("", $children);
$result = "";
for ($i=0;$i<count($test);$i++) {
$tmp = $test[$i];
if ($tmp[0]=="!" || $tmp[1]=="!") {
$result = substr($test[$i]."
",2);
break;
}
}
?>
<?php if(strlen($result)>5) {?>
<?php
$max_symb = 29;
for ($i=0; $i<strlen($result); $i++) {
if ($result[$i] == ">") break;
}
for ($k=$i; $k<strlen($result); $k++) {
if (substr($result,$k,4) == "
") break;
}
$tmp = substr($result,$i+1,$k-$i-1);
if (strlen($tmp)>$max_symb) {
$res2 = substr($result,0,$i+1);
$res2.= substr($tmp,0,$max_symb)."...";
$res2.= substr($result,$k);
}
?>
Read Next: <?php echo $res2;?> »



<?php }?>

Программы для автоматической проверки доступности регистрации на закрытых трекерах

Здравствуйте, хочу предложить вашему вниманию обзор двух небольших программ для автоматического отслеживания открытой регистрации на закрытых трекерах. Как известно, некоторые закрытые трекеры периодически открывают свободную регистрацию для всех желающих. На одних время этой открытой регистрации известно, например, elbitz.net или gfxnews.ru, на других это время абсолютно случайно. В любом случае эти программки будут полезны любому кто не хочет пропустить время регистрации.

Tracker Checker 2


Страничка разработчика (ссылка на последнюю версию): www.stamcar.com/2007/07/25/tracker-checker-2-public-preview

Принцип работы программы довольно простой. Вы отмечаете галочками нужные трекеры и задаете интервал проверки в секундах. Тут же можно задать и автозапуск при загрузке системы:

image

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

image

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

Как работает этот алгоритм?

image

1. Вы вводите наименование трекера, на котором хотите зарегистрироваться.
2. Вводите адрес на страницу с регистрационной формой.
3. Определяете слово, которое (4) должно быть или не должно присутствовать на этой странице.

В зависимости от наличия или отсутствия заданного слова на странице, программа определяет закрыта или открыта регистрация на трекере.

В свернутом виде программа висит в трее и выводит информацию об открытых трекерах в виде всплывающего информационного окна:
image

Torrents Open Registrations Checker


Страничка разработчика: teamroots.co.cc/projects/orc

image

image

Эта программа по функционалу побогаче, чем предыдущая, хотя принцип остается тот же:
1) Возможность импорта/экспорта списка трекеров, в том числе и с сайта разработчика.
2) Сортировка списка трекеров.
3) Задание звукового оповещения по окончанию проверки.

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

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

Аналогичные on-line ресурсы:


www.btracs.com/index.htm
trackerchecker.org
www.opentrackers.fr

Настройка Firefox: устраняем подвисания и пожирание памяти

С давних пор являюсь большим поклонником веб браузера firefox, но его подвисания оказывают существенное влияние на продуктивность моей работы, порой приходится перезагружать по 5, а то и по 10 раз на день, спасает екстеншин от гугл, который восстанавливает сессию после краша. Оказывается, причиной подвисания является не ошибка в коде, а особое хранение кэша станиц в табах. Начиная с версии 1.5 файрфокс хранит кэш последних 5 сгенерированных страниц для каждого таба и открытие большого числа табов может стать причиной этого самого подвисания.

Благодаря гибкости firefox мы в настройках “about:config” возможно снизить потребление памяти и увеличить скорость работы на столько, на сколько это возможно.

Снизить поедание РАМов, которые используется для кэширования:

* набрать “about:config” в адресной строке браузера
* найти “browser.sessionhistory.max_total_viewer”
* присвоить значение “0″

Увеличить скорость загрузки страницы:

* набрать “about:config” в адресной строке браузер
* присвоить “network.http.pipelining” значение “true”
* присвоить “network.http.proxy.pipelining” значение “true”
* присвоить “network.http.pipelining.maxrequests” примерное значение “30″ (30 запросов за раз)
* кликнуть мышкой на свобоное пространство и выбрать New->Integer, “nglayout.initialpaint.delay” и присвоить значение “0″
* присвоить “network.dns.disableIPv6″ значние “false” (при необходимости создать нужный тип New -> Boolean)
* присвоить “content.notify.backoffcount” значение “5″
* присвоить “plugin.expose_full_path” значение “true”
* присвоить “ui.submenuDelay” значение “0″ (ноль)

Снизить поедание РАМов на 10МБ когда FF минимизирован:

* В файрфоксе в адресной строке набрать “about:config”
* Кликнуть на свободное место правой кнопкой и выбрать New -> Boolean
* В появившемся окошке набрать “onfig.trim_on_minimize” и нажать Enter
* Присвоить значние “True”
* Перезагрузить Firefox

Данные шаги действительно повлияли на скорость загрузки и подвисать браузер стал всего 2 раза за день, вместо предыдущих 5-и.

WinKnock — небольшая утилита для получения доступа к каким-либо ресурсам на FreeBSD

Маленькая, но полезная утилита для unix-админов.
Программа WinKnock служит для открывания и закрывания дверцы, которая закрыта демоном knockd. Сразу две версии — для Windows и Windows Mobile.

image

Читать дальше →

*.swf в качестве background

Возникла необходимость запихнуть swf'ку в background на странице сайта.
Мозг подвергался мучениям длительное время, но решение было найдено ))))

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0"
width="x" height="y">
<embed src="intro.swf" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
type="application/x-shockwave-flash" width="x" height="y" bgcolor="" wmode="transparent">


Content




,где
x, y — ширина и высота flash-объекта.
Content — содержимое, располагаемое над flash-объектом.

Проверено на работоспособность в FireFox, Opera, Internrt Explorer

Собственный локальный диск из почты Gmail

Сразу говорю, идея не моя и уже не нова, но может кто то и не знает.
У каждого почти есть аккаунт на Gmail, а вместе с ним и 7Гб личного дискового пространства в интеренте. Случайно наткнулся в интернете на утилиту GMail Drive, которая делает в компьютере виртуальный диск аккаунта Gmail, в котором как и на обычный диск можно копировать, удалять, переименовивать файлы.
После установки в Моем Компьютере появляется виртуальный диск GMail Drive, при входе в который он запросит твой логин и пароль от почты, в последующие же разы ввод не требуется, если предварительно поставив галочку «Запомнить». При добавлении файла на диск на почту приходит письмо, вложением которого является данный файл. Если копировать много файлов, то будет приходить много писем, что не очень хорошо, т.к. смешивается с обычными письмами. Немного подумав, создал в гмейле ярлык (назвал его GmailFS), на которыми должы помечаться входящие файлы и создал фильтр со своим же входящим адресом, содержащим слова GMAILFS, т.к. тема приходящего письма имеет название GMAILFS далее выбрал пункты:
  • Пропустить входящие (Архивировать)
  • Отметить как прочитанное
  • Применить ярлык: GmailFS

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

С проблемой уведомления файлов разобрались, но вот не люблю я пользоваться Проводником Windows, а в Total Commander виртуальный диск не показывается. Но если открыть папку Мой Компьютер в тотале, то он появляется там. Теперь осталось только сделать для него кнопку быстрого доступа. Зайдя на Gmail диск, щелкаем двойным щелчком по адресной строке панели и выбираем «Добавить текущий каталог» вводим имя, после чего также щелкнув выбираем «Настроить» и копируем команду этой ссылки, которая пригодится для создания кнопочки.
Далее создаем новую кнопку на панели инструментов (ПКМ по панели -> Изменить -> Добавить -> вписываем команду, выбираем любую иконку (я нарисовал гмейлевскую) жмем Ок) и вот кнопка готова.
Теперь у меня есть 7 Гб личного дискового пространства, в котором можно хранить любые личные файлы и загружать также как обычное письмо через почтовый ящик.

Так что же такое безопасный режим запуска компьютера?

Отвечаю:

Безопасный режим загрузки Windows — это загрузка ОС с наименьшим использованием драйверов. Такой режим загрузки, как обычно, Windows использует для внесения изменений в системный реестр, а также для загрузки или удаления драйверов. Обычно существует несколько видов безопасного режима:
Безопасный режим (SAFEBOOT_OPTION=Minimal). Для запуска Windows используется минимальный набор драйверов устройств и служб.
Безопасный режим с загрузкой сетевых драйверов (SAFEBOOT_OPTION=Network). Для запуска Windows используется минимальный набор драйверов устройств и служб плюс драйверы для поддержки работы в сети.
Безопасный режим с поддержкой командной строки (SAFEBOOT_OPTION=Minimal(AlternateShell)). Аналогично безопасному режиму, только вместо проводника Windows запускается файл Cmd.exe.
Включить режим VGA. Windows запускается с помощью текущего видео драйвера (а не Vga.sys) в режиме 640 x 480. Этот режим используется, когда выбрана конфигурация, которая не поддерживается монитором.

Также не стоит забывать об этом:
Помните, что в безопасном режиме и безопасном режиме с загрузкой сетевых драйверов загружается драйвер Vga.sys.
Загрузка последней удачной конфигурации. Загружается последняя удачная конфигурация Windows.
Восстановление службы каталогов. Этот режим может быть использован только на контроллерах домена Windows. С его помощью производится восстановление службы каталогов.
Режим отладки. В Windows включается режим отладки. Отладочная информация может быть послана по последовательному кабелю на другой компьютер с запущенным отладчиком. В этом режиме используется порт СОМ2.
Включить протоколирование загрузки. При выборе одного из вариантов безопасной загрузки (кроме «Загрузка последней удачной конфигурации») включается протоколирование загрузки. Для хранения результатов протоколирования используется файл Ntbtlog.txt из папки %SystemRoot%.
Обычная загрузка Windows. Windows запускается в обычном режиме.
Перезагрузка. Выполняется перезагрузка компьютера.
Возврат к выбору операционной системы. На компьютере, настроенном для запуска нескольких операционных систем, происходит возврат к меню загрузки.