Microsoft is DEAD? А также warez

Новость дня — вся сеть Microsoft лежит в дауне. Не отвечают ни DNS-сервера, не Web-сайты, ни другие сервисы. Насколько я знаю, пока не поступило никаких комментариев от самой Microsoft, по крайней мере, мне не удалось найти ничего об этом в Интернете. Народ выдвигает предположения об атаках хакеров. Моя версия — чисто хардварные проблемы, в любом случае, правды мы все равно не узнаем. Просто интересно, как это объяснит Билл Гейтс и компания. Вот будет смешно, если никак. :)

Ну, а теперь, к менее важным новостям. MySQL 3.23 перешел в разряд стабильных. В общем-то, для меня эта новость никакая. Я давно перестал интересоваться, какую я сейчас версию качаю stable или beta, поскольку и те, и другие при пиковых нагрузках просто падают. Ничего не хочу сказать плохого об этой СУБД, у нее есть своя ниша (так же как у miniSQL — своя), но, будь моя воля, я бы с ней постарался не пересекаться. К сожалению, не получается.

А вот новость, которую я каждый раз жду с нетерпением. Вышла очередная версия программы удаленного администрирования через веб-интерфейс Webmin 0.84. Я знаю, что многие системные администраторы поморщатся при одном упоминании о программе подобного рода. Не спешите свистеть и кидаться помидорами. Во-первых, Webmin умеет работать через HTTPS — камень в огород людям, до сих пор не перешедшим с telnet на ssh. Во-вторых, подумайте. Как вам на время передать права, на администрирование, скажем, sendmail одному человеку, а Apache — другому? Да, я знаю, вы скажете: «Не проще ли, просто, завести им аккаунт в Webmin и передать каждому права на модуль»? Это отговорки. Уверяю вас, гораздо проще. Хотя мне, например, неудобно работать таким образом с Apache, а вот с Sendmail или MySQL — в самый раз.

Вот как раз открылся change log. Что у нас нового? Добавлен модуль PAM Authentication, добавлена поддержка групп в ACL-модуль, изменения в модуле DHCP, пофиксена пара багов. Качать!

А что у нас с FARом? Давненько там не был… А с Фаром у нас… хм… фаровская эха у меня не грузится.. идем на сайт… А с Фаром у нас ничего. На сайте лежит все также без движения вторая бета. Новый FAR не вышел. Зато вышел WinAMP 2.72. Причем уже давненько. Аж 10 дней назад. Хожу я туда редко, поскольку скорость выхода новых версий, после придания проекту статуса бесплатного, упала на порядки. Но все-таки интересно, что новенького. Вы не поверите, но полная версия уже разрослась до семи мегабайт!!!

Итак. Подправлен кодек и пара плагинов. Уменьшен размер WinAMP agent (а я им все равно не буду пользоваться). Пофиксены баги. Ну что же. Можно и скачать. Но семь мегабайт… Кстати, надо бы выяснить чем полная версия отличается от стандартной и «облегченной». Прямо сейчас и выясним. Итак.

Полная версия — это и так понятно. Стандартная не проигрывает Windows Media Audio и M-Juice и понятия не имеет об Exclusive Radiohead track. Впрочем, как и я. Облегченная версия, минус ко всему, представления не имеет как обращаться с MIDI и MOD-файлами и про Advanced Visual Studio придется тоже забыть. Не больно-то и хотелось. Кто как, а я качаю Lite. Ибо остальное мне как-то ни к чему.

На сегодня с меня хватит, только что докачался VNC, сейчас пойду знакомиться: Хочется узнать, что это за зверь. Всем пока! :)

Оставить комментарий

Java и JavaScript. Близнецы или братья?

Сегодня, когда мне в триста тысяч двадцать седьмой раз сказали, что Java и JavaScript — это одно и тоже, я не выдержал, и решил высказаться со своей относительно высокой трибуны.

Господа! Java и JavaScript — языки разные, что я намерен сейчас доказать.

Большинство, в качестве защиты своей точки зрения, приводит такой аргумент, буквально: «посмотри на название, если ты не видишь сходства…» и т. д. Странная точка зрения, тем более, что это самое большинство вполне допускает, что C и C++ — языки разные. Разубеждать таких людей бесполезно, у них сформировалась своя точка зрения, менять которую они не собираются, в голове их путаница, и чтобы их еще больше запутать, я скажу, что JavaScript — это не один язык, а три. Есть JavaScript от Netscape, JavaScript от Microsoft, который еще называется JScript, и EMCAScript, который тоже является JavaScriptом. Вот эти три языка весьма похожи, хотя и не совместимы между собой полностью.

А теперь, собственно, перейдем к сути. Начнем с базового языка. Корни этих двух языков уходят куда-то в C, так что синтаксически они довольно близки. По крайней мере, что касается инструкций if, while, switch и прочих им подобных, в обоих языках записываются они одинаково. Но вот если коснуться описания функций, объектов, переменных, то тут эти языки весьма существенно различаются.

Простой пример на JavaScript:

function somefunct (s)
{
        Arr    = new Array (2)
        var k = parseInt (s) + '99'
        alert (k)
}

вопрос к знатокам Java — какая из этих строчек, исключая скобки, не вызовет ошибки в интерпретаторе? Правильно, вызовут все. Думаю, лучшего доказательства и не придумаешь. Кстати, обратите внимание: в JavaScript точка с запятой элемент необязательный и ставится лишь там, где действительно нужна (например, после пустого цикла for).

Если кто не понял, тут я создал объект типа Array и переменную k. Преобразовал s в число, а потом сложил со строкой «99». В результате, опять получил строку и при помощи alert вывел на экран. Тут я подхожу к еще одному отличию JavaScript от Java: первый язык с нестрогой типизацией данных. Переменная в разные моменты времени может хранить строку, целое или любой другой объект. Кстати, строка, число и прочие типы в JavaScript являются объектом, а «базовые» функции — методами объекта Global. Чего не скажешь о Java. Да, и кстати, вспомните о том, как выполняется конкатенация в Java. И вот, проделайте мне еще такую штуку в Java:

Регулярные выражения:

function somefunct2 (s)
{
        if (/\d+\s+/.test(s)) alert ('Ok!'); else
        s = s.replace (/(\d)/g,'\\1!')
}

99,9999% людей такое объяснение удовлетворит, а вот самые стойкие, знаю по опыту, приведут мне примеры блоков try и вызовов Java-методов из JavaScript в Netscape. Последовательно.

Блок try — catch поддерживается только JScript 5.0 и Netscape JavaScript 1.4, т. е. введение это довольно недавнее. Кроме того, этот блок имеет синтаксис отличный от принятого в Java. Наверное достаточно будет сказать о наличии у try, по крайней мере в версии от Microsoft, блока else при отсутствии finally, а так же о том, что catch возвращает специальный объект Error с двумя (в 5.5 — тремя) свойствами, что уже совсем никак не похоже на Java.

Теперь относительно вызовов Java-методов. Вызов Java-методов из JavaScript в NC называется LiveConnect и к самому языку непосредственного отношения не имеет. Пользуясь LiveConnect я, теоретически, могу вызвать Java из Flash, Flash из JavaScript, JavaScript и DOC-viewer и так далее. Для этого эта технология и предназначена. Надеюсь, это не повод мешать все перечисленное в одну кучу?

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

Оставить комментарий

Opera: три в одном

Вы любите многофункциональные вещи? Шампунь, бальзам и кондиционер в одном флаконе? Отвертка, плоскогубцы, нож в одном футляре? Ньюс-ридер, почтовый клиент и браузер в одном пакете? Лично мне, подобного рода вещи кажутся «недоделанными», я не люблю такие решения.

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

Недавно, запустив Opera, я вновь заинтересовался вопросом «зачем», и вспомнил одну вещь. Идея авторов Opera изготовить среду «все в одном» родилась не сегодня. В Opera есть ньюс-ридер, довольно примитивный и неудобный, есть WAP-клиент, который не открывает половину отечественных WAP-сайтов, и вот, теперь, появился такой же недоделанный ICQ.

Стремление затащить «под крышу» удавшегося продукта какие-то довески из других областей мне знакомы и понятны. Сам я, в свое время, пытался вставить в JUnix возможности доски объявлений, чата и почтовой службы, пока не понял, к чему это приведет, и одним волевым движением не отсек эти ненужные там сервисы. Но эта причина, как мне кажется, лишь сопутствующая.

Судя по всему, разработчики из Opera corp. пошли по пути расширения количества сервисов продукта, наверное надеясь, что так его будет легче продать. Напоминаю, что до 5-й версии продукт был платным и продать один, пусть даже самый навороченный и супербыстрый браузер, это совсем не то же, что продать за ту же цену HTML-браузер, WAP-браузер, news-клиент и ICQ-пейджер в одной коробке.

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

И не стоит, кстати, думать, что «бесплатная» Opera начнет в этом вопросе меняться в лучшую сторону. Почему? Потому что.

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

Во-вторых, откройте глаза, люди. «Опера» не бесплатна. Если вы не заплатили 35$ или не применили определенный «довесок», вы увидите в окне браузера баннер, который будет сопровождать вас во время вашего серфинга по всемирной паутине. Это и есть ваша плата за его пользование. Что из этого следует?

Из этого следует, что ничего не изменилось.

Подпункт первый. Почему Opera не поддерживала KOI-8r? Потому что покупатели софта из нас никакие. А почему не будет поддерживать сейчас? Как почему? Какая в браузере крутится реклама? Правильно, буржуйская. А какие же из нас кликеры буржуйской рекламы? Сделали выводы?

Подпункт два. Чтобы продать побольше рекламы нужно распространить побольше копий. Вот и подумайте, что проще — распространить «пусть даже самый навороченный и супербыстрый браузер» или… Ну, вы понимаете.

Так что, увы. Opera так и останется навсегда браузером с хорошим потенциалом и кучей «шашочек». Пока что-то не изменится кардинально.

P.S. Кстати, для прикола, зайдите на opera.ru, а потом на opera.com.

Оставить комментарий

Микромечта по Unix

Есть у меня маленькая мечта. Прикупить новый жесткий диск, старый поставить на вторую мою машину, что пылится в кладовке, поставить на нее Linux, соединить это все коаксиалом и делать все проекты исключительно дома.

Все что мне нужно от второй машины — это наличие там Apache, Perl, PHP, MySQL и PostgreSQL. Пока приходится довольствоваться одной, и при каждой переустановке Виндов, все настраивать заново. Занятие весьма утомительное. Или было таковым до вчерашнего дня.

Вчера я узнал о существовании некого проекта, поддерживаемого, как я понял, группой энтузиастов, который позволяет ставить на машину с Windows 95/98/NT/2000, Apache, PHP, Perl и MySQL при помощи одного файла setup.exe. Как я понимаю, там есть какой-то мастер для установки всего этого хозяйства быстро и без проблем. По-моему, то что нужно. Буду качать.

Обойдусь пока тем что имею. Хотя мучаться и соблюдать совместимость с Unix мне порядком поднадоело. Вот сделаю рывок и прикуплю все-таки себе новый жесткий диск.

P.S. Дистрибутив скачался, но оказался битым. :( i опять что-то напутал с множественным соединением. Жаль, но сегодня рассказать, что же это такое, уже не получится. Буду качать повторно.

Оставить комментарий

Гагаузы

Вчера, просматривая найденные ссылки по 26-му кадру, я наткнулся на упоминание о некой странной народности, называемой гагаузами. Странная она своей национальной музыкой, цитирую «она вся 9/16 (девять шестнадцатых), 7/16, 11/16». Я не совсем понимаю, что это значит, но, опять цитата, «ездили с концертами в Беларусь. Там музыканты удивлялись: „Видели как музыканты ошибаются, но что-бы так ВМЕСТЕ!!!“». Это все меня заинтересовало, и я решил узнать об этой национальности побольше. Просто так, для расширения кругозора.

Я просмотрел 380 ссылок, выданных мне Yandex’ом, но узнал совсем немного. Гагаузы — небольшой народ, проживающий, в основном, на территории Молдавии (3,5% процента за 1990 г), Украине и Российской Федерации. Общая численность на 1992 год 220 тысяч человек. Какое-то время назад активно боролись за собственную независимость, в более поздних источниках упоминается Гагаузия, значит чего-то они все-таки добились. Язык гагаузский, письменность на основе русского алфавита. Слово «гагауз» в переводе с турецкого означает «предатель» (это не по моему мнению, это компиляция из того, что мне выдал «Яндекс» в 2001 году — более позднее примечание). Что бы это значило я не знаю.

Что еще? 99% источников говорят о том, что гагаузы — православные и только сайт Ethnomuseum утверждает, что…

  • конфессиональная принадлежность: Ислам: суннизм;
  • языковая принадлежность: Алтайская семья: тюркская группа: гагаузский язык.

Правда, у меня к нему доверия мало. Татар (а я живу в Татарстане) сайт относит:

  • конфессиональная принадлежность: Христианство: католицизм, протестантизм;
  • языковая принадлежность: Индоевропейская семья; славянская группа; польский язык.

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

Больше мне ничего найти не удалось, кроме разве что того, что флаг гагаузов — изображение белой полной луны и головы волка на голубом фоне.

P.S. Просматривая информацию о гагаузах, я случайно наткнулся на список национальностей, проживающих на территории бывшего СССР. Он наверняка не полный (например, нет русских :), но все же, очень любопытный. Никому не в обиду, как вам названьица «самоеды» и «зыряне»?

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

26-й кадр

Ребята, ну не верю я в магическое воздействие на сознание человека штуки, под названием 26-й кадр. Не верю! Знаете почему? Я скажу.

Что вообще известно об этой «технологии»? 26-й кадр практически не заметен, сознание его не воспринимает, воспринимает подсознанием и понимает как сигнал к действию. Теперь последовательно.

Я сейчас сижу на работе, за монитором со 100-герцовой разверткой, дома у меня — 85 герц и все, что мигает с частотой ниже последней цифры, для меня заметно на глаз. За монитором с 75Hz я долго просидеть не смогу, а телевизор вблизи для меня ТАК мерцает, что смотреть я его могу только с расстояния 3-4 метра. У большинства людей, работающих за мониторами с хорошей частотой обновления, те же проблемы.

Лично для меня 26-й кадр заметен и читаем, не удивительно — изображение обновляется 26 раз в секунду. Я успеваю заметить, что там что-то написано и частично осознать, что же именно. Кстати меня всегда интересовало, почему именно 26-й кадр, а не 27-й, или 40-й? Больше не нужно или дальше и подсознание не успевает воспринимать?

Теперь о том, что слова, написанные в этом самом кадре, воспринимаются подсознанием, как сигнал к действию.

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

Второе. Даже если фраза проскочила мимо сознания в подсознание, не факт, что она воспримется так, как того хотели люди, туда ее внедрившие. Я бы даже сказал, совсем не факт. Знаете почему? Потому что это текст, а не речь, он печатный. Вы когда-нибудь пробовали общаться с человеком исключительно текстом? Наверное, пробовали. В письменном общении трудно передать свои эмоции, особенно есть фраза короткая. Для этого в Интернете придумали смайлики. Кроме того, мы все под одинаковыми словами понимаем разные вещи.

Пример. Когда-то слово «секс» говорить было стыдно. Многие говорили «ЭТО». Большими буквами и громким шепотом. :) Теперь представьте себе рекламу… ну, скажем, стирального порошка, где в 26-м кадре написано «КУПИ ЭТО». Логическая цепочка: упоминается «это» без привязки, речь идет о сексе, предлагается секс купить, говорят о проституции. И, если предположить, что каждая такая фраза должна подтолкнуть к какому-то действию, то человек пойдет и снимет проститутку. Фраза привела не к тому действию, которое планировалось, если это, конечно, не реклама проституции. А у другого человека слово «это» может прочно ассоциироваться с местом его работы, если работает он в электротехническом отделе или в экспериментальном творческом объединении.

Третье. В нашем мире «картинка» перед глазами часто меняется очень быстро. Так, что сознание «зацепить» ее не может. Например, близкостоящие деревья за окном автомобиля, несущегося на солидной скорости. Да, то, что это деревья — видно, а вот какие, сидят ли на них птицы? Информация об этом в сознание не попадает, тогда должна, по той же идее, попасть в подсознание и заставить меня что-то сделать… Что же я должен сделать, увидев дерево? Знак «проезд запрещен» (пусть веду не я)? Суслика, стоящего столбиком? Я — не просто смотрю. Так что, как говорится, «фиг вам».

P.S. Кстати, в фильме «Бойцовский клуб», есть кадр, который появляется на экране только одно мгновение — за спиной человека, сидящего на стуле, появляется девушка (кажется в красном, давно смотрел не помню), держащая руку на плече сидящего, и тут же исчезает. Возможно, в кассетной версии этого момента нет, я не знаю.

Оставить комментарий

PalmOS. Секурность

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

В базовых приложениях этой ОС есть возможность пометить часть данных как «Private», закрыв их от любопытных глаз паролем. Само собой, пароль хранится где-то в системе. Причем. Промах номер раз: пароль хранится в базе, доступной для прочтения любому приложению. И, промах номер два: догадайтесь, какой выбран алгоритм для шифрования паролей? Да, практически никакой. Для шифрования используются два так называемых «алгоритма». Разные, для паролей длины менее пяти символов, и для длины более четырех. Но оба они сводятся к применению операции xor, за использование которой, в криптовании паролей и прочей частной информации, по-моему, давно пора отдавать под суд.

Такого шока я не испытывал с тех времен, когда обнаружил, что хваленая утилита из комплекта Norton Utilites (DiskReet, кажется), позволяющая создавать диск с доступом по паролю, хранит этот самый пароль также за’xor’енным по константе.

Будем надеяться, фирма Palm хватится за голову или другое место (чем они там придумывали этот алгоритм шифрования?) и выпустит в скором времени патч, предотвращающий дешифрование пароля обратным преобразованием. А пока, владельцам «наладонников» с PalmOS рекомендуется запирать свой Palm и не давать его в руки злым кул хацкерам.

P.S. А вы говорите WindowsCE…

Оставить комментарий

Всех с Рождеством. Новый TheBAT! и PostgreSQL

Что поделать? Опять праздники, я, право, не виноват. В конце концов, могу же я отдохнуть еще разок? Рождество — штука странная. Вроде, в Рождество родился Христос, так? Причем, по разным версиям, родился либо где-то в районе 25-го декабря, либо что-то ближе к 7-му января. Тем не менее, летоисчисление у нас ведется прямехонько от рождества Христова. А еще более странную вещь я услышал в свое время на лекции по истории религии. Мне тогда очень хотелось спать и я плохо соображал, но, кажется, понял все верно. Иисус aka Христос aka Иешуа родился не в первом году, а вовсе даже в четвертом до нашей эры.

Тем не менее, всех вас с уже неоднократно прошедшим Рождеством, сами уж разберитесь, кого с каким. :)

Хе-хе-хе… С этим Рождеством пропустил выход новой версии моего любимого TheBAT!. Всем интересующимся — немедленно качать новую версию! 1.49 Christmas Edition порадовала нас, кроме кучи новых макросов для шаблонов и исправлений пары-тройки багов, затыком, как там написано, «потенциальной проблемы в безопасности, связанной с содержащимися в именах приаттаченных файлов слешами». Так очень рекомендуется… проапгрейдить…

Кроме того, из приятных (по крайней мере для меня) новостей на сегодня — выход так мной ожидаемой версии 7.1 СУБД всех времен и народов — PostgreSQL (поклонникам Oracle, Informix и прочего просьба не беспокоить). Правда это еще beta3, но скорость, с которой эти самые беты появляются, вселяет надежду на скорый выход релиза. Ждал я выхода этой версии по одной простой причине — в этой версии (уже начиная с beta2) тип поля text наконец-то стал неограниченной длины. И это радует. В предыдущих версиях он мог вмещать от 8 до 32Кб в зависимости от ядра и конфигурации. И необходимость использовать large object для хранения текста меня огорчала.

Кстати, о временах и народах. Вот-вот выйдет новая бета (уже 3-я по счету) всех времен и народов файлового менеджера FAR. Жду с нетерпением. Все, что я знаю о ней, это то, что найденный лично мной баг, связанный с копированием из менеджера процессов, будет как-то пофиксен. Скорее всего, списываться процесс будет под другим именем. В общем, выйдет — все сами узнаете.

На этом, разрешите откланяться, у моего хорошего друга сегодня день рождения, люди ждут. :)

Оставить комментарий

Как звери друг друга били. Найдено в FIDO

Медведь был безобразным, косолапым и грязным животным. Однако, добрее его не было никого во всем лесу. Hо звери замечали только его внешность, на что Медведь жутко обижался, ловил их и жестоко избивал ногами. Поэтому звери его не любили. Хотя он был очень добрым. И веселым. Он любил задорные шутки. За эти шутки звери его скоро жутко возненавидели и били. Да, трудно быть на свете добрым и веселым.

Волк был тоже безобразным и грязным. И еще он был очень злым и жестоким. Hо звери не испытывали к нему ненависти и не били. Потому, что Волк умер еще в раннем детстве. Потому, что Медведь родился раньше Волка. Да, хорошо, когда Добро побеждает Зло.

Заяц тоже был злым и жестоким. И грязным. И еще он был трусливым. Гадостей Заяц никому никогда не делал. Потому, что боялся. Hо его все равно сильно били. Потому, что Зло всегда должно быть наказано.

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

Крот был маленьким и слепым. Он не был злым. Он просто хорошо делал свое дело. Это он подъел дерево, которое упало на дятла. Об этом никто не узнал, и поэтому его не избили. Его вообще били редко. Чаще пугали. Hо его было очень трудно испугать, потому что он был слепой и не видел, что его пугают. Когда не удавалось испугать Крота, звери очень огорчались. И били Медведя. Потому, что им было очень обидно. Однажды Медведь тоже захотел испугать Крота. Hо Крот не испугался. Потому, что Медведь его убил. Нечаянно. Просто Медведь был очень неуклюжим. И звери его очень сильно избили. Даже, несмотря на то, что Медведь сказал, что пошутил. Плохо, когда твои шутки никто не понимает.

Лиса была очень хитрой. Она могла запросто обхитрить кого угодно. Когда ей это удавалось, то ее не били. Hо иногда ей не везло. И ее били. Били всем лесом. И она уже не могла кого-нибудь обхитрить. Потому, что очень трудно кого-нибудь обхитрить, когда тебя бьют. Однажды ее избили до смерти. Да, жилда всегда на правду выйдет.

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

Козел не был ни злым, ни добрым. Он был просто Козел. Он часто козлил. И его боялись бить. И он своим козловством всех достал. И тогда его избили до смерти. Потому, что иначе он бы умер от старости. Когда-нибудь. Когда Козел умер, Медведь сильно плакал. Потому, что он в тайне любил Козла. Да, любовь зла, полюбишь и Козла.

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

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

Хомяк был тоже очень жадным. И богатым. Если бы он делился своим богатством, его бы били не так сильно. Hо он был очень жадным. За это его били сильно. И ему все равно приходилось делиться. И он горько плакал. Да, богатые тоже плачут.

Лев был царь зверей. Он правил лесом. Царей бить не положено. Это закон. Hо звери давно забили на закон. Звери били и льва. Hи за что. Потому, что так уж здесь повелось.

2 комментария

Хибер. Нате

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

Жаль, но в то время эта задача была практически невыполнимой, а то бы я, возможно, уже сказочно разбогател. :) Или не я. Вряд ли мне принадлежит первенство в рождении этой идеи. Как показала практика, трудность не в сохранении дампа базовой (как тогда это называлось) памяти и содержимого XMS, да и с сохранением состояния контролера клавиатуры и прерываний (как не странно некоторые игры перепрограммировали и то и другое) я бы справился. Мне помешал защищенный режим и оставшееся оборудование.

Сначала на моем пути встал EMM386, этот менеджер VCPI— и EMS-памяти переводил процессор в защищенный режим (protected mode). Программировать под него я не умел, но из того, что знал, я сделал, может быть ошибочный, вывод — я не смогу после восстановления состояния компьютера сделать «так как было». Я решил на защищенный режим «забить» и загружать содержимое EMS уже после старта DOSа и самого EMM386. VCPI я не трогал, да он нигде и не использовался.

Потом появился DOS4GW. Его требовали DOOM и другие игрушки. Эта библиотека (или как это еще назвать?) так же использовала для своих темных дел защищенный режим. Я узнал слово «DPMI». С DPMI так же легко как с EMS я работать не умел, не было документации. Это стало первым гвоздем в гроб моей идеи.

Вторым, и последующими гвоздями, оказалось оборудование. Слово драйвер тогда рождало несколько другие ассоциации, ни о какой универсализации работы с оборудованием речи не шло. Так что нелегкий труд по опросу и сохранению состояния какой-нибудь карточки ложился целиком на плечи программиста. Для примера, со своей видеокарточкой, монстром от фирмы Trident с 512К на борту я бы еще как-то справился, но поддержка видеокарт всех фирм и моделей — задача для меня одного непосильная. То же и с другими компонентами.

Шли годы…

Незаметно появилась и вошла в нашу жизнь ОС Windows. Операционная система встала над защищенным режимом. Слово «драйвер» получило другой смысл, прослойка между операционкой и оборудованием… Слова XMS, EMS и VCPI стали забываться, а DPMI — расшифровываться по-другому. Появился ACPI и, как его часть, «OnNow». И Windows2000, как первая, по крайней мере в линии Windows, которая умеет его поддерживать. Ну хотя бы часть — ту что, «suspend-to-disk». И при условии поддержки ACPI оборудованием. Мы, не все конечно, узнали слово «Hibernate».

Идея «suspend-to-disk» или, как он называется в W2K, «Hibernate» недалека от того, что придумал в свое время я. На диске создается файл, куда после входа в этот режим за 10—20 секунд сбрасывается все, включая содержимое памяти машины и состояние его многочисленных компонентов, после чего предлагается нажать на кнопку «Откл.». После включения, компьютер говорит «Hibernating» и примерно за полминуты (у кого как) загружается. WinAmp продолжает играть с того места, где вы его «схибернатили», Word показывает содержимое ранее открытого документа, браузер — страницу… В общем все так, как будто компьютер и не отключали.

«Здорово», — подумал я, и отправился в недра настроек своей W2K — искать, где у меня спрятан этот самый режим. Найти с первого раза мне его не удалось. Пришлось идти в большой Интернет и читать. Все оказалось просто. Оказывается, по умолчанию возможность использования этого режима отключена. Так исторически сложилось. А для его включения необходимо выполнение двух условий:

  • все оборудование, включая материнскую плату, должно уметь работать с ACPI;
  • BIOS, который на этот самой плате стоит так же должен знать, что это такое.

Выяснить, как дело обстоит у вас просто — достаточно зайти на «Панель управления» («Control Panel»), там найти «Управление энергопитанием» («Power») и посмотреть, есть ли у вас закладка «Hibernate». Если есть — включайте режим, в списке «Lock-Restart-Shutdown» появится новый элемент. Если нет, вам не повезло, но не отчаивайтесь, возможно, не все еще потеряно, перейдите по первой ссылке внизу страницы и попробуйте поэкспериментировать.

Мне повезло. У меня машина «белой сборки» IBM-IntelliStation-чего-то-там и «Hibernate», теперь одна из причин, которая примеряет меня с существованием Windows 2000. :)

Ссылки по теме

Hibernate и Win2000
Hibernate и Windows 98
Технология Hibernate и Win2000

Оставить комментарий

Базы данных. Наведем порядок

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

Устав бороться со своей и чужой ленью, я решил принять какие-то меры, чтобы облегчить жизнь себе и другим. Одна из таких мер — файл описания таблиц, который мы теперь вкладываем в корневой директорий каждого проекта. Я обычно называю его .tables (естественно в настройках Apache прописывается запрет на получение этого файла через Web), где в достаточно свободном формате описываются таблицы, поля, связи между ними и все остальные объекты.

Естественно, что файл предназначен для описания достаточно небольших баз данных (менее 7—10 таблиц). В этом случае больших баз без хорошо составленной наглядной документации все равно не обойтись. Не надейтесь. :)

Четкий формат представления имеют пока только таблицы, в силу того, что остальными объектами приходится пользоваться достаточно редко, да и синтаксис их описания различается для разных СУБД, но, возможно, в следующих версиях формата появятся правила и их описания тоже.

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

[/usr/local/pgsql/bin/psql eshop]

items / товары
-----------------------
id              serial / идентификатор
gid             int4   / категория товара -> group.id
name            text   / наименование
price           real   / цена
comment         text   / описание товара

CREATE INDEX items_price_idx ON items (price)

group / категории
-----------------------
id              serial  / идентификатор -> items.gid
parent          int4    / родитель в дереве. -1, если верхний уровень -> id
name            text    / наименование

Думаю из примера и так все понятно, но я все-таки дам пару комментариев.

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

Инструкции заведения секвенсоров, представлений и хранимых процедур записываются в одну строку.

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

Интепретатор файлов таблиц: intp.pl

#!/usr/bin/perl

sub StripComment
{
        my ($line) = @_;
        unless ($line=~s{^([^/]*)\s+/.+}{$1}o)
        {
                print "Предупреждение: не указан комментарий [ $line ].\n"
                unless ($line=~/^CREATE/o);
        };

        return $line;
};

sub AddData
{
        my ($table, @query) = @_;
        my $query  = join ',', @query;
        my $result = '';

        if ($todrop)
        {
                for (@query)
                {
                        if (/([^ ]+) serial$/)
                        {
                        $result.= "DROP SEQUENCE ${table}_${1}_seq\\g\n";
                        last;
                        };
                };


                $result.= "DROP TABLE $table\\g\n";
        };

        $result.= "CREATE TABLE $table ($query)\\g\n";

        return $result."\n";
};

sub AddDrop
{
        my $table = $_[0];

        if ($todrop && $table=~/^CREATE ([^ ]+ +[^ ]+)/o)
        {
                return "DROP $1\\g\n$table\\g\n";
        } else
        {
                return "$table\\g\n";
        };
};

unless (open F, (shift or '.tables'))
{
        print <DATA>;
        die "\n"
};

@query  = ();
$table  = '';
$result = '';
$comm   = '';
$todrop = shift or 0;

while (<F>)
{
        chomp;
        next if ($_ eq '' || /^\-\-/);

        if (/^\[(.+?)\]$/)
        {
                $comm = $1;
                next;
        };


        @data =  split (/       +/,StripComment $_);
        if (@data < 2)
        {
                $result.= @query?AddData($table, @query):AddDrop ($table)
                if ($table ne '');

                $table  = $data[0];
                @query  = ();
        } else
        {
                push @query, "$data[0] $data[1]";
        };
};

close F;

$result.= AddData ($table, @query) if (@query);

if ($result ne '')
{
        if ($comm ne '')
        {
                open  F, "|$comm";
                print F "$result\\q";
                close F;
        } else
        {
                print "Ошибка: не указана команда для приема данных.";
        };
} else
{
        print "Ошибка: файл для обработки пуст.";
};

__END__

Интерпретатор файлов таблиц для СУБД.
Написал Евгений Степанищев (2000 год).

Использование: inpt.pl имя_файла [DROP]

DROP - предварительно сделать DROP для таблиц и SEQUENCE

Формат:

-- БД stat                              комментарий

tablename / описание                    имя таблицы
---------------------                   оформительский элемент

поле1   тип / описание                  поля таблицы,
поле2   тип / описание                  описание интепретатор игнорирует
и т.д.

[/usr/local/mysql/bin/mysql stat]       комманда, принимающая данные

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

Оставить комментарий

Mu/\EHHuyM

Всех с Новым годом, счастьем и всем прочим, с чем принято поздравлять при смене года и тысячелетия. :) Надеюсь, всем удалось отдохнуть.

Прошу прощения за молчание в весь период праздника Нового года, но, в конце концов, могу я расслабиться или нет?

Честно говоря, расслабиться в этот Новый год не получилось, не позволил туго набитый едой живот. Наученные предыдущим горьким опытом прогулок по праздничному городу, мы, с моей женой, решили на этот раз не толкаться на заполненных до отказа народом улицах, а набрать побольше еды (долларов на 50) и, засев перед телевизором, провести весь праздник вдвоем. Можно считать, что праздник удался. :) Жаль только, что наша маленькая кошка Кошмарка уронила бутылку шампанского, которое немедленно вспенилось и мне, успевшему его подхватить, посчастливилось оценить всю красоту шампанского, выстреливающего в крышку стола и льющегося обратно. На ковер. :)

Кошмарку тошнит от шампанского (на самом деле она чихает).

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

Хотя вспомнить в общем-то и нечего, но способом и местом проведения Нового года я остался доволен. Потому что впервые за несколько месяцев мне удалось по-настоящему отдохнуть. И поесть, никуда не торопясь, растягивая удовольствие от еды. Правда, все съесть не удалось, несмотря на то, что ели мы весь день и всю ночь. Возможности человеческого желудка ограничены, а последовать примеру древних римлян мы бы не рискнули. Будем доедать  —впереди еще целые сутки. Ночью заснуть вряд ли удастся — несмотря на то, что новогодняя ночь давно уже прошла, хлопки петард и прочей китайской пиротехники не утихают. Народ запасся основательно.

Время есть. И пить.

Оставить комментарий

99 бутылок: ASP (JScript и JavaScript), Parser

Жаждались? Судя по кислым лицам — нет. Итак, представляю очередную серию из мыльного сериала «99 бутылок пива на стене». На этот раз, на стене амбициозный Парсер с хорошей родословной, но плохой внешностью и братья-почти-что-близнецы JavaScript и ASP.

9. Parser (втрой версии) студии Артемии Лебедева. Предпроцессор для генерации Веб-страниц «на лету».

^var[i;99]
^while[i>0;

^var[i] bottle^if[i!=1;s;] of beer on the wall, ^var[i]
bottle^if[i==1;s;] of beer.<BR>
Take one and pass it around,<BR>
^var[i;-;1]
^if[i;^var[i];No] bottle^if[i!=1;s;] of beer on the wall.<BR>
<BR>
]
No more bottles of beer...<BR>
Go to the store and buy some more...<BR>
99 bottles of beer.

10. ASP JScript и JavaScript. Одновременно. Первый — серверный язык, второй — клиентский. Испытано под IE 5.0, Opera 5.01, Netscape 4.75, Netscape 6.0 и IIS5.

<!-- <%@ LANGUAGE = JScript %>

<% //>
//</%> --> <SCRIPT LANGUAGE=JavaScript>
for (k = ' of beer on the wall',o='', i = 99; i>0; i--)
{
    a = i+' bottle'+(i-1?'s':'')
    o+= a+k+', '+a+' of beer...<BR>'+
    'Take one down, pass it around.<BR>'+
    (i-1?i-1:'No ')+' bottle'+(i-2?'s':'')+k+'.'+
    '<BR><BR>'
}

o+= 'No more bottles of beer...<br>'+
'Go to the store and buy some more...<br>'+
'99 bottles of beer.'

if (typeof(document)!='undefined') document.write (o); else
if (typeof(Response)!='undefined') Response.Write (o)
// </SCRIPT> <!-- // < %> -->


Оставить комментарий

Opera 5.01. Опять Парсер. Etc

Только что узнал о выходе Opera 5.01. С чем и поздравляю всех немногочисленных пока поклонников этого, потенциально популярного браузера. Краткий список изменений со слов сайта «Абсолютно все о браузере Opera» выглядит так:

  • Добавлены функции поиска на кнопку «Go» (ввод)
  • Новые shotcuts в почтовой программе
  • Исправлены проблемы с прокси
  • Оптимизирована работа ICQ
  • Косметические изменения в окне новостей
  • Изменения в самом файле Оперы
  • Исправлена ошибка в Ecmascript

Да, чуть не забыл представить эту замечательную программу тем, кто с ней еще не знаком: это очень маленький, быстрый браузер с поддержкой практически всего чего только можно. Для программистов и верстальщиков: к сожалению пока нет нормальной поддержки DOM, в HTML— и WAP— отрисовке еще множество глюков. Радует, что проект быстро развивается, возможно к версии так 6-й из него получится мощная альтернатива Internet Explorer.

Лебедевский «Parser» до сих пор не дает покоя сетевым обозревателям. Сегодня журнал «Интернет.Ру» разродился интервью с создателем Парсера Константином Моршневым. Интервью коротенькое (а о чем говорить-то?), но для меня интересное. Интересное тем, что в нем упоминается о другой разработке студии Лебедева — «Imprimatur!». Как вам фраза: «этот продукт совершенно не похож на все остальные наши разработки — его нет в какой-то стандартной версии, он подгоняется под каждый конкретный сайт»? Которую любой человек, имеющий какой-то опыт создания Веб-интерфейсов, с легкостью расшифрует как: «это не продукт, а обычный Веб-интерфейс к сайту, каких — тысячи, для каждого сайта на базе предыдущих создается новый Веб-интерфейс».

По-моему, ход гениальный. Завтра же вставлю в свои коммерческие предложения: доступ к вашему сайту будет осуществляться по нашему оригинальному протоколу «Русская Линия», базирующемся на HTTP и FTP, поисковая машина «Ванга», которую мы каждый раз переписываем под конкретный сайт, ну и так далее. :)

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

Оставить комментарий

Баннерная реклама. Только не бейте…

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

Для начала отмазка. Почему-то считается, что баннеры — это зло. Они засоряют канал и снижают скорость загрузки любимого ресурса. Никто и не задумывается, как и на какие деньги, эти самые «любимые ресурсы» существуют. Так вот, открою вам глаза. Любимые ресурсы существуют за счет показов так нелюбимых баннеров. А внося свой вклад в урезание баннерных показов, вы тем самым способствуете банкротству Веб-проектов.

Итак. Для начала надо разобраться, как собственно осуществляется фильтрация подобного рода. Все очень просто. Пользователь (или изготовитель фильтра) прописывает некий набор правил, согласно которым, программа определяет, что есть баннер, а что — нет. Напрашивается вывод: чтобы ваши баннеры проходили «фейс-контроль» надо:

  1. Либо назвать их так или сунуть в такой каталог, что бы правила, заданные в программе, их не опознали;
  2. Либо сделать что-то, что бы добавить правило (а значит отличить баннер от не-баннера) не представлялось возможным.

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

Нужно будет внести кое-какие изменения в баннерную систему и в настройки Веб-сервера. Начнем с баннерной системы.

Во-первых, баннеры нужно называть совершенно произвольным образом, не придерживаясь никаких правил. Например: tri-gusia-i-utka.gif, a.gif, 1808500.jpg и т. д.

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

<IMG SRC=http://your.host.ru/aa12/a.gif>
<IMG SRC=http://your.host.ru/priale/sila/duaa1/1808500.jpg>

и т. д.

Популярные Веб-сервера (по крайней мере Apache и IIS) предоставляют возможность задать произвольную реакцию на ошибку 404 (файл не найден). Изготавливается скрипт, который будет вести себя следующим образом: при запуске он проверяет какая страница была запрошена, если это GIF— или JPEG-файл (для Apache — анализируется переменная REQUEST_URI), то скрипт пытается найти баннер с таким именем. Если находит — показывает, не находит — сообщает об ошибке «файл не найден».

Остается добавить, что схема успешно испытана и скоро будет запущена под одним из региональных порталов. Парочку подводных камней предлагается найти и разбить самостоятельно. Чтобы жизнь малиной не казалась. :)

Оставить комментарий

Дядя Ваня — это вкусно…

Смотрю фильм ужасов, который, по обыкновению всех фильмов, перемежается рекламой. Фильм вызывает лишь смех (ковыряют ножом какого-то монстра, из него вываливаются черви, коллективный разум наверное?), зато от рекламы — волосы встают дыбом. Цитирую, «дядя Ваня — это вкусно». Как вам? Как говорит Хрюн Моржов из «Тушите свет» — «внушает».

Раз уж затронули рекламу, давайте поговорим поподробнее. Для меня вообще реклама — штука странная. В том смысле, что, по идее, она должна создать у меня положительный настрой по отношению к товару. То ли у креаторов что-то не ладится, то ли у меня в голове мозги не той модели, но не действует она на меня так как должна. Помните девочку из рекламы чего-то-там-молочного от «Милая Мила»? Ту самую, которая лезет в кувшин с этим самым молочным, пальцем, а потом его, палец, облизывает? Меня в этот момент просто тошнит. И _это_ мне предлагается купить? Предлагаю создателям этой рекламы для полноты картины поместить в рекламу следующий «рекламный трюк» — две зеленые сопли в нос этой самой девочки. Тогда меня наконец перестанет тошнить. Потому что стопроцентно вырвет.

Конечно это крайний случай. Обычно реклама у меня не вызывает никаких эмоций вообще, разве что кроме скуки.

Было время, когда я, на протяжении примерно трех лет, каждый день прочитывал примерно по одной фантастической книге, которыми меня снабжали три моих друга, каждый из которых собрал более чем солидную библиотеку. Мне настолько нравилось читать, что не засыпал пока не прочитывал все, что мне приносили. Однажды я засиделся до 7 утра.

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

У моей матери собственного иммунитета нет. По-моему, она покупает все что рекламируется. Зато у нее есть мой отец. Он, так и не выработав внутренних способов защиты, изобрел защиту внешнюю. Когда на экране появляется реклама, он переходит на другой канал или, если переходить некуда, просто _выключает_ звук. Похоже, это им помогает.

Кто-то может спросить, как же выбрать товар, не посмотрев рекламу. Все очень просто. Интернет у вас есть? Читайте, узнавайте, почему одно лучше другого, анализируйте. Фильтруйте аргументы, типа «лучше потому что лучше», и выбирайте, думая своей головой.

Оставить комментарий

Парсим Лебедева, Emax, PHP 4.0.4

Артемий Лебедев и компания опубликовали язык своего заочно знаменитого Парсера. Непонятно, чем они так гордились? С точки зрения программиста — обычный предпроцессор, тот же PHP — гораздо логичнее, понятнее и функциональнее, а с точки зрения не программиста, как мне кажется, — кошмарное нагромождение скобочек, стрелочек и значков «@». Нет, увольте.

Сегодня я решился все-таки посмотреть то, о чем говорит весь РуНет уже примерно неделю, — на проект Emax’a («Три сестры»). Я абсолютно не понял почему вокруг всего этого столько шуму. Будем считать, что идеей этого проекта я не проникся. Зато проникся идеей соседнего → www.sight.ru. Для того чтобы понять, что представляет из себя сайт, достаточно взглянуть на несколько работ, там представленных. Вот список наиболее понравившихся мне из просмотренных:

  • Девушка молодая, задумчивая;
  • Пора пришла;
  • Я птица слабая, мне тяжело лететь;
  • Двое в сторонке;
  • Дуб Ангела;
  • Монастырь.

Особенно понравилась первая, причем до такой степени, что я, активный противник фотографий и рисунков на десктопе, не удержался. Хотя понимаю, что ставить такое на десктоп — кощунство, ничего поделать с собой не могу.

Не скажу, что с нетерпением этого ожидал, но все-таки выход каждой новой версии PHP для меня — событие. Вот и сегодня, узнав о выходе PHP 4.0.4, я внимательно изучил change log, выкачал новую версию и документацию. Несмотря на то, что изменилась лишь вторая цифра после запятой, изменений довольно много. Если оценивать с точки зрения количества, то на моем домашнем разрешении (800×600) список занимает девять экранов. Качественного, как и ожидалось, скачка нет, обширный список багфиксов, с редкими вкраплениями новых возможностей. Особенно меня заинтересовала поддержка новой версией модуля OpenSSL и ключ «F» к функции preg_replace (за что он отвечает посмотрите сами), из багфиксов, цитирую, «fixed mysql_close(), pg_close(), msql_close() and sybase_close() — they weren’t properly closing the SQL connections». При всем уважении к создателям PHP у меня просто нет слов…

Оставить комментарий

Мой дедушка — хакер. Найдено в FIDO

Увидел сегодня в fido7.ru.anekdot. Помещаю без всяких комментариев, кроме одно — автор не я. А жаль…

Мой дедушка - хакер

     Мой дедушка никогда не работал. "Якi ж хакер работает!"
- говаривал он. Он не писал интегрированных систем, утилит и
даже  вирусов  -  он  избегал  операционных  систем.  Он  не
пользовался окнами.  Hе было в его комнате и дверей. Общался
он только  со  своими старыми друзьями по  сетям: обменяются
парой сообшений, а потом Дедушка подвесит систему, обратится
к порту напрямую, и приговаривает:
        - Теперь позвольте пару слов без протокола...

Jump

     "JMP IP", - подумал однажды Дедушка и повис.

Завтрак

     Дедушка  никогда  не  завтракал  дома.  Рано  утром  он
надевал свой макинтош,  клал в карман apple  и отправлялся в
Space bar,  где заказывал hot  keys  с  инвалидной  мидией и
стаканчиком холодного ребута.

Power user

     В соседнем доме жил Power User. Каждое утро он открывал
окно и говорил "Hello,  world!". Hа это Дедушка презрительно
фыркал - он не любил user'ов, особенно power.
        - Утюг тоже power user, - говаривал он.

Ignored

     Однажды к Дедушке прибежала молоденькая лаборантка:
        - Мистер  Hackerley,  это ужасно!  Я  беременна! Что
делать? Может, аборт?
     Поскольку    Retry   был   явно    неуместен,   Дедушка
игнорировал, и дал мне возможность написать эти строки.

Hаследство

     Однажды  Дедушка  застал  своего  пятилетнего  сына  за
вызовом системного прерывания,  и устроил ему головомойку. И
сколько баловник не оправдывался, что, дескать прерывание-то
было UNDOCUMENTED, Дедушка лишил его наследства.
     Поэтому мы,  Дедушкины  потомки,  и не унаследовали его
монографию `Hacker's Methods'.

Far Call

     Однажды  Дедушка отсиживался от  multiuser'ов в верхних
адресах видеопамяти.  Вдруг в IP он увидел свой адрес. "FA",
-  издал  Дедушка  боевой  КЛИч  и  запретил  прерывания. Hе
помогло  -  процессор  неумолимо  приближался  к  дедушкиной
run-time библиотеке.
        - Far call! - выругался дедушка и подвесил систему.

4 комментария

Софт. FAR 1.70b2, MySQL, PostgreSQL…

Новость дня — вышел FAR 1.70b2 build 321. С некоторый пор этот, один из лучших (скажу лучший — заклюют :) файловых менеджеров, разрабатывается не одним человеком, а группой разработчиков (FAR Team). С этих же самых пор список WhatsNew каждой новой версии поражает своим размером. Вот и на этот раз, я насчитал 64 пункта! Приставки Beta бояться не нужно, FAR Team обещает выпустить release только в случае полного отсутствия багов. То есть никогда :). Так что — качать!

Продолжая тему FARa. 14-го декабря появилась новая версия одного из моих любимых плагинов к FARy — ProxyNews 1.0 b8. Исправление только одно — пофиксен баг с листингом сообщений.

Смешно, но факт — я знаю людей, которые пользуются FARом, начиная чуть ли не с первой версии и не знают о существовании такий вещи, как плагины. На всякий случай, сообщу. Сам FAR — это еще не все. К нему существуют «довески», называемые плагинами, которые сильно расширяют его функциональность. Например, есть плагины для чтения почты, работы с FTP через Proxy-сервер, проигрывания музыкальных файлов (точнее управления WinAMP’ом) и многого другого. Плагины можно взять на сайте PlugRing, ссылка на который есть в конце статьи (см. «ссылки по теме»).

Из других новостей мира вареза — появление MySQL 3.23.29a-gamma. В списке изменений — в основном исправление ошибок.

Почему-то, MySQL считается лидером по производительности в мире Веба. По-моему, мнение это распространяется за счет испытаний на время обработки одного простейшего запроса. На мой взгляд, у PostgreSQL достоинств гораздо больше. Во-первых, он производительнее MySQL, если запросов несколько (надо только запустить его в асинхронном режиме), при условии, что сайты, обращающиеся к СУБД, достаточно посещаемы, наличие нескольких запросов одновременно — обычное дело. Во-вторых, в PostgreSQL есть несколько встроенных языков для определения хранимых процедур. В-третьих, в PSQL есть подзапросы, в отличие от MySQL, где их можно найти только в TODO list. В-четвертых, в PSQL есть UNION. В MySQL приходится пользоваться временными таблицами. Да и вообще, что перечислять? В MySQL есть, на мой взгляд, только две вещи, которых нет в Postgres: переменные (которые, кстати, не везде могут быть использованы) и условие IF (которое с успехом заменятся CASE и процедурами).

Так что, если будете выбирать СУБД для Веба… вы знаете, что я бы посоветовал.

Оставить комментарий

Грамотно

Все кругом поправляют, замечают, советуют. Говори, пиши, употребляй слова правильно. Одно забываю сказать — как это сделать? В прямом смысле. Нет, конечно, на меня еще не посмотрят как на идиота, если я употреблю в приличном обществе слово «позвонишь» с ударением, как ему и положено, на последнем слоге. Но уже при слове «красИвее» на меня начинают коситься, а упоминание «строчна́я» вызывает у собеседников нервный смешок.

Вывод? Какие бы усилия я не делал, мне не подняться по уровню грамотности над людьми из основного моего круга общения. Моя речь неизбежно будет стачиваться, меняться, упрощаться. И с этим ничего не поделаешь, да и делать я ничего не собираюсь.

А как же, скажете вы, письменная грамотность? Не знаю, не пробовал. А если серьезно, то на ее наличие/отсутствие влияют другие факторы. Текстовая часть Интернета и книги. И то и другое я читаю каждый день и, в максимально допустимых количествах. Я не обладаю заученной грамотностью, так что приходится пользоваться грамотностью заимствованной. Проще говоря, пишу я, руководствуясь не правилами, почерпнутыми из учебников, а интуицией, базирующейся на обобщениях, сделанных на основе прочитанного. Наверное, как и многие из вас. Это еще, кстати неверно, называют «врожденной грамотностью»… или безграмотностью. :) У кого как.

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

Так что буду писать как пишется, говорить как слышится и обильно снабжать все это ошибками разнообразных мастей. :) И уберите свои грязные манипуляторы, это святое, мое личное право. :) На худой конец, считайте, что пишу я не на русском, а, скажем, на украинском (для украинцев — болгарском). С сим позвольте откланяться…

Оставить комментарий