*
  Мысли   Галерея   Проекты   Тексты  
  Мысли   Галерея   Проекты   Тексты  
Giver: коан  (2019-08-29 15:09:19)
я себе расстраиваюсь последние два года.
Мне кажется, я думал о себе больше чем следует.
Но это не значит что я неправ

Giver: суть буддизма  (2019-08-29 03:25:34)
Монах запитав Сейґена: «Яка суть буддизму?» Сейґен відповів: «Яка ціна рису у Рорьоо?»

Giver: секрет жизни  (2019-05-10 18:46:57)
Секрет покоя в этой жизни
В наипростейшей из идей:
"Не принимайте близко к сердцу
Больных на голову людей!" 

Giver: bliss  (2019-03-29 11:58:22)
One for sorrow,
two for joy,
three for a girl,
four for a boy,
five for silver,
six for gold,
seven for a secret,
never to be told,
eight for a wish,
nine for a kiss,
ten for a time
of ignorant bliss.

Giver: синиться  (2018-12-18 12:09:02)
СИНИЧКА

За окном синичка
Тихо хмурит бровь.
Глазки без ресничек,
Ротик без зубов.

Нету у синички
Ни ушей ни рук.
И с тоской нептичьей
Зрит она вокруг.

А вокруг погода -
Снегу до хуя.
Злая ты природа!
И недобрая!

Лео Каганов. 18 марта 1993, Москва

Giver: universal darkness  (2018-11-28 23:04:10)
Nor public flame, nor private, dares to shine;
Nor human spark is left, nor glimpse divine!
Lo! thy dread empire, Chaos! is restored;
Light dies before thy uncreating word:
Thy hand, great Anarch! lets the curtain fall;
And universal darkness buries all.”

Giver: мухоморье  (2018-11-20 22:27:22)
 За мглистыми горами
За бесконечными лесами
На берегу чужой реки
Стоит кристально-дивный замок
Без замков и оград
На побережье Мухоморья
Единорог кричит я хау
И вся астральная природа
Безмолвной стало всё вокруг

Я хау на мухоморье-3

Giver: Красть игрушки из кармана.  (2018-10-14 22:36:48)
Позабыла все, что было
И не видит в том потери.
Аx, вернись, вернись, вернись,
Ну оглянись по крайней мере.

Все, что было - позабыла,
Все, что будет позабудет.

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

Giver: картинки в цсс  (2018-03-27 12:46:54)

Делаю расширенике для хрома, с загрузками картинок из статики проблемы, поэтому мы делаем вот так:

#!/bin/bash
for a in *.png;do
    echo .`echo $a |sed 's/./_/'` '{' background:url(data:image/png';'base64,`base64 -w 0 $a`) no-repeat';}'
done > img.css

Pазмер всех картинок выростает из 57кб до 75, но кого это волнует сегодня? А если пожать гзипом, то получаем те же 58кб. Так что это даже быстрее загрузится. Прям статья на хабор готова!


Giver:   (2018-02-14 19:22:22)
Как работает type hinting в ява скрипте?
$('.clist div').sort(function(a,b) {
     return a.dataset.sid > b.dataset.sid ? 1 : -1; //be carefull, string comparaison
}).appendTo('.clist');
Вот так!

Giver: они  (2018-01-26 01:48:51)
мой бог да это ж те же грабли
не разглядела в темноте
а ну ка наступлю еще раз
да те

Giver: между строчек  (2018-01-12 11:08:10)
— Учитель, скажите, когда же я наконец обрету долгожданную свободу?
— Свободен! Следующий…

Giver: волна  (2017-11-30 00:38:47)
Идёт Будда с учениками по дороге. Видит: яма, в ней вол, крестьянин пытается его вытянуть, но сил не хватает. Будда кивнул ученикам, они быстро помогли вытянуть животное. Идут дальше, снова яма, в ней вол, на краю сидит крестьянин и горько плачет. Будда прошёл мимо и как бы не заметил. Ученики его спрашивают:

— Учитель, почему ты не захотел помочь этому крестьянину?

— Помочь плакать?


Giver:  One country blues  (2017-11-20 21:05:54)
у полицая нет души
у полицая нет души
у полицая нет души
у полицая нет души

хорошо любить пока есть кого
хорошо любить пока есть чем
плохо любить в неудачный год
плохо любить всех вообще

хорошо скитаться когда есть дом
хорошо скитаться когда есть с кем
плохо скитаться вдвоем с котом
плохо скитаться по колено в песке

хорошо воевать когда есть с кем
хорошо воевать когда есть чем
плохо воевать по колено в песке
плохо воевать со всеми вообще

у полицая нет души
у полицая нет души
у полицая нет души
а у кота есть
— BUFF

Giver: 2017  (2017-10-14 16:44:06)

Внезапно NeCMS исполнилось 10 лет.

Проект стартовал в сентябре 2007. я не помню точной даты, но хорошо помню те солнечные осенние дни, ICQ, e16 и системные винчестер на 600мб. Многие решения дизайна

В свое семилетие система попыталась пережить перерождение, но получилось не особо хорошо. Зато произошел неплохой редизайн админки. А на гитхабе всего 2 месяца зарегистрировали проект NeCMS. Тоже на пхп, ко мне не имеет никакого отношения, но забавано. Жаль, но формально имя уже занято.

Можно подвести итоги ее существования. В сети гарантированно существует два сайта на нецмс. Этот блог и mpal.ho.ua, который был создан на одной из первых версий. поэтому это еще и живой музей. Интересно, сколько существует сайтов на PowerME сейчас?. Сама NeCMS и ее части больше не развиваются и мало используются для держания контента. Использование PHP было переосмысленно и на нем родились намного более живучий фреймворк fitz, а на нем уже написано несколько проектов: Сайт Мурки designer.giver.guru, сайт ивент агенства Premier Event и мой новый блог. Для тяжелых проектов на яве используется Rocket. Она постоянно пытается возродить имя NeCMS, но нет ничего того, что можно было бы назвать ей сейчас. Может быть скоро это изменится и таки возродится NeCMSj. Зато на рокет активно возникают и пропадают проекты. Первый из них был магазин Secret Room, который жив и сейчас. Ну и конечно же сайт детского пионер-лагеря render.camp. Оба были созданы в 2015 и серьезно переделаны в 2017. Осальные еще не стали плотно на землю, о них нет смысла говорить. Важно то, что NeCMS создал почву для обоих направлений.

Какой можно сделать вывод? PHP всегда старался снизить порог вхождения и сложность разработку. Java всегда была за монументальность и величие. NeCMS пыталась принести монументальность в PHP. Оказывается это не нужно. В результате упрощения появился fitz, в результате усложнения появился Rocket. Трудно сказать, с какой целью что-то новое может быть рождено на NeCMS, но может быть NeCMS просто живет в своих потомках?


Giver: GET CSV  (2016-10-25 13:21:11)

Тестирую тут один REST-серсив, все довольно стандартно: POST, PUT, DELETE, но есть что-то странное — не могу найти поинтов с методом GET.

То есть даже получить список сущностей получить невозможно, но после вдумчивого прочтения документации (а не кода) стало все понятно.

Оказалось что список всех сущностей в деноморализованом виде передается в формате CSV заваренном нотариусом по другому каналу связи, и вот там уже все идишники, так что GET не нужен

Пример такого файлика

TypeNameID
GroupTelevizors100500
SupplierGnusmas13500
SupplierLT13500
ProductLT 312675600
GroupTosters100502
GroupFrying Pans100501
ProductFP 4l13500
SupplierLaiters13500

Giver: камень  (2016-09-12 09:49:33)
Подобно тайфуну, крушащему скалы,
Кулер процессору камень разбил —
Стихия коварна (иль руки кривы?)

Giver: свитчер  (2016-05-05 12:31:11)

Так уж повелось что в моем блоге довольно много записей про клавиатуру в линуксе и ее переключение, Хотя при переходе на шиндошс на работе во многом клавиатура унифициорлвалась, даже использую винкейс и не исползую caps в виде бекспейса, но написать все равно есть о чем. Странно, но за 10 лет в линуксе с переключением раскладки стало все только хуже, теперь она тормозит и вообще ведет себя недостойно. При переходе на гном 3 осенью 2011 она начала тормозить и тормозит до сих пор. И вот наконец найдено решение!.

Причиной этого торможения является винчестер. Дело в том что при каждом переключении перезаписывается файл ~/.config/dconf/user Самое простое решение купить ссд, тогда все будет работать быстрее, но можно и смонтировать туда tmpfs, тогда переключение передачь будет еще быстрее. Так что итоговое решение получаем такое: в /etc/fstab добавляем строчку.

none /home/giver/.config/dconf tmpfs default

Есть и другой вариант, просто сделать каталог dconf симлинкой на tmp, если он тоже в раме, но это может быть несекурно, и кроме того однопользовательски получится. Зато не требует прав рута для реализации.


Giver: оракле  (2016-02-29 11:22:29)

Ну что, теперь я настоящий ынтырпрайзный программист. С ораклем, хибернейтом, ликвибейзом и множеством других интересных штук. Теперь можно писать функции в три строчки, обмазывать их километрами тестов, тестировать "order by" и другие встроенные в базу функции. А еще наконец начались веселые ситуации. так давно их не было. Все коммитят прямо в мастер, хотя это уже гит, а не свн, даже есть мержреквесты и CI, но ломать мастер это никому не мешает. Каждый раз Очень сходные ощущения испытывал когда писал на PHP и MySQL, что было уже целых десять лет назад! То есть через 4 месяца будет 10 лет как я коммерчески занимаюсь программированием!

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

Caused by: liquibase.exception.MigrationFailedException: Migration failed for change set 
conf/migrations/tables/table_name.xml::2016.23.02 09:30::Vasiliy_Leonidov:
     Reason:
          conf/migrations/changelog.xml : 
liquibase.precondition.core.TableExistsPrecondition@7a663206 : Found multiple catalogs matching DARKS

        at liquibase.changelog.ChangeSet.execute(ChangeSet.java:517)
        at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:51) 
        at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:73) 
        at liquibase.Liquibase.update(Liquibase.java:210) 
        at liquibase.Liquibase.update(Liquibase.java:190) 
        at liquibase.Liquibase.update(Liquibase.java:186) 
        at liquibase.Liquibase.update(Liquibase.java:179) 
        at com.marks.css.utils.liquibase.impl.LiquibaseServiceImpl.update(LiquibaseServiceImpl.java:41)
        ... 29 common frames omitted
Caused by: liquibase.exception.PreconditionErrorException: Precondition Error
        at liquibase.precondition.core.TableExistsPrecondition.check(TableExistsPrecondition.java:65) 
        at liquibase.precondition.core.NotPrecondition.check(NotPrecondition.java:38)
        at liquibase.precondition.core.AndPrecondition.check(AndPrecondition.java:43)
        at liquibase.precondition.core.PreconditionContainer.check(PreconditionContainer.java:202) 
        at liquibase.changelog.ChangeSet.execute(ChangeSet.java:474)
        ... 36 common frames omitted

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

Оказалось что оракл создал два пользователя, один маленькими буквами, другой большими. Практически всегда он нормально их раделял, но иногда возникали проблемы. Тогда я начал пытаться его удалить. Но не тут то было. Говорит ORA-28014: cannot drop administrative users!

Исправляется это с помощью такой конструкции:

alter session set “_oracle_script”=true;
drop user "admin" cascade;

Giver: ничего страшного  (2015-12-23 11:23:13)
the smoke is rising
the vision's getting clearer
and words become a song
in a dreamtime

Giver: .  (2015-11-12 09:30:00)
нет больше тихих слез

Giver: мельница  (2015-07-30 08:05:02)
Мельница Бога очень хороша.
Мельница Бога мелет не спеша.
Медленно, но верно ходит колесо.
Будет перемелено абсолютно все.

Giver: шутка  (2015-07-18 11:01:10)

Giver: имя  (2015-06-28 21:57:14)
Вы таки представляете! Я - дарун! Дарун темряви, що дощить!

Giver: сна  (2015-05-09 09:09:49)

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

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

Даже страдания не совсем применимы в этом случае, ведь это не желаемое состояние, не бывшее когда-то, но утраченое, это вообще ничего, по сути, но ведь так явственно ощущается.


Giver: я работаю  (2015-03-03 21:59:17)

Как-то Сисадмин спросил:

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

— Почему ты думаешь, что мой нынешний wallpaper хуже? — спросил в ответ Инь Фу Во.

— Я не знаю, какая у вас картинка сейчас. Я никогда не видел вашего десктопа. У вас всегда открыто множество окон.

— Я тоже его никогда не видел, — сказал Инь. — Я работаю.


Giver: do {  (2015-03-02 16:29:21)
unfold (сложенное); 
unroll (скатанное); 
unwrap (завернутое);
} while(true);

Giver: was not there  (2015-02-27 11:31:07)
Yesterday, upon the stair,
I met a man who wasn't there.
He wasn't there again today,
I wish, I wish he'd go away...

When I came home last night at three,
The man was waiting there for me
But when I looked around the hall,
I couldn't see him there at all!
Go away, go away, don't you come back any more!
Go away, go away, and please don't slam the door...

Last night I saw upon the stair,
A little man who wasn't there,
He wasn't there again today
Oh, how I wish he'd go away...

Giver: начало начал  (2015-01-31 16:46:00)

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

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

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

Правда, я не уверен что невооруженным глазом будет видно перемены сразу, но со временем - точно.


Giver: сол фетка  (2015-01-31 12:06:41)

Пофракталим на форте, даже не знаю что тут объяснят, все интуитивно понятно или очевидно.

: d s>d 0 d.r ;
: l ." <line x1='" d ." ' y1='" d ." ' x2='" d ." ' y2='" d ." ' style='stroke:rgb(255,0,0);stroke-width:2' />" cr ;
: tri >r 2dup swap r@ - swap r> rot rot >r >r >r r@ - 2dup 2dup r@ 2* + 2dup r> drop r> r> 2dup >r >r l l r> r> l ;
: lol >r 2dup r@ tri r> dup 20 < if 2drop drop exit then
2/ >r 2dup r@ + r@ recurse  2dup r@ - r@ recurse 2dup swap r@ - swap r@ recurse r> drop 2drop ;
cr 500 dup dup lol

Giver: 14888 get  (2014-12-19 01:26:32)
14888 músicas.
1113 álbuns.
1136 artistas.
72 days of bliss.

Giver: непонимаю  (2014-12-02 09:37:49)
[07:33:30] Giver: смотри

[07:35:28] klukvo4ka: что-то я не совсем вьезжаю(
[07:42:22] klukvo4ka: почему-то программирование - это сексуально)

Giver: намайнил  (2014-11-13 18:24:04)

Giver: да  (2014-10-25 21:54:55)

Однажды ученик спросил у Мастера:
— Долго ли ждать перемен к лучшему?
— Если ждать, то долго! — ответил Мастер.
— А если не ждать?
— То недолго! — ответил Мастер.
— А если перемен?
— То не ждать! — ответил Мастер.
— А если к лучшему?
— То недолго! — ответил Мастер.
— А если ли?
— То к! — ответил Мастер.
— Дядя Мастер, вы дурак?
— Да, — грустно признался Мастер.


Giver: flip/flop  (2014-10-21 21:27:23)

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

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

В интернете очень много разных вариантов как подключить периферию через COM и LPT порты, но, что интересно, кроме реле в них участвует набор самых разнообразных деталей, пара-тройка резисторов, конденсатор, тройка диодов, пара транзисторов. Я не совсем понимаю зачем это все и почему нет такой вот простой схемы на просторах. Паяется и собирается из любого подножного мусора, единственно транзистор нужен NPN типа, как видно из схемы. Диод можно и не свето-, естественно. На один COM-порт можно навесить минимум 2 такие схемы, на DTR (пин 4) и RTS (пин 7).

Под этим вашим линуксом управляется еще проще чем паяется. Пример для DTR(прим К.O.: чтобы управлять RTS, нужно DTR заменить на RTS)

#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
 
int main(void) {
    int status = 0, fd;
    if((fd = open("/dev/ttyS0", O_RDWR)) < 0) exit(1); // открываем последовательный порт.
    do {
        ioctl(fd, TIOCMGET, &status); // читаем текущее состояние
        printf("DTR is %dn", (status & TIOCM_DTR)); // выводим на экран
        status ^= TIOCM_DTR; // инвертируем значение линии 
        sleep(1); // ждем секунду
        ioctl(fd, TIOCMSET, &status); // записываем инвертированное значение
    } while(1); // смыть, повторить.
}


Giver: полезен  (2014-10-08 02:04:46)
[17:06:35] Stiletto: это чувство, когда в твой проект из трех строчек, написанный задней ногой, 
                     на отъебись, под одну конкретную задачу, ПРИСЫЛАЮТ ПУЛЛ-РЕКВЕСТ С ПОЛЕЗНЫМ ФУНКЦИОНАЛОМ
[17:06:50] Andor: та же фигня
[17:07:06] Andor: и ты такой
[17:07:07] Andor: понимаешь
[17:07:11] Andor: Я ПОЛЕЗЕН
[17:07:14] Andor: %)
[17:07:18] Stiletto: адада

17:07 < Andor> Thanks. Committed to V3_3_STABLE tree. Next rpm release (3.3.4-2) will have the separate package. 17:07 < Andor> посоны 17:07 < Andor> я полезен :)

Giver: ну офигеть теперь  (2014-10-01 18:42:48)

Пишу тесты/демку к своему ресту, и тут вылетает эксепшон "Михаил != Юрий", я шоке, оказывается:

Rhino 1.7 release 2 2010 11 17
js> arr=[];

js> print(u);
js: "", line 3: uncaught JavaScript runtime exception: ReferenceError: "u" is not defined.
	at :3

js> (function() { for(var u in [0,1,2]) arr.push(function(e) { print(u); } ) })(); 
js> print(u);
js: "", line 7: uncaught JavaScript runtime exception: ReferenceError: "u" is not defined.
	at :7

js> for(var f in arr) arr[f](0);                                                   
2
2
2
js> 

Как они это сделали? Как и зачем?!


upd: Нашлось решение, оно не менее странное, чем сама проблема, но все же работает.

(function() { for(var u in [0,1,2]) with({u:u}) arr.push(function(e) { print(u); } ) })(); 
    

Giver: сканер  (2014-09-20 16:41:24)

Нужно было очень срочно передать цифровую копию некоторых документов, причем камеры фотоаппарата явно не хватает. Очень быстро раздобыл сканер, правда без шнура, но зато с блоком питания. Съездил за шнуром, купил, подключил. Запустил Xsane, он радостно обнаружил сканер и начал сканировать, головка немного дернулась и я получил изображения кислотного трипа, которое, к сожалению, не сохранил, ибо ждал изображения документа. Поняв что линуксоиды должны страдать я перешел к пункту B.

Пункт B. Открыл виртуальную машину с семеркой, быстренько скачал дрова для висты, благо всего 2 мегабайта, установил, устройство обнаружилось, но вот Paint отказался сканировать. Заглянув в менеджер устройств увидел, что "Устройство не может быть запущено (Код 10)", немного пободавшись с виндой плюнул и запустил Windows XP в том же виртуалбоксе. Дрова для экспи весят аж 200мб, притом столько места даже нет на виртуальном приводе, Попробовал дрова с висты 32битной, но они не стали.

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

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

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


Giver: СВОБОДА РАВЕНСТВО ЦВЕТЯЧКА  (2014-03-17 18:11:13)
цветячка

Giver: Primitive Collections  (2014-02-17 14:50:54)

Производительности никогда не бывает мало. Всегда хочется быстрее, компактнее и красивее. В яве сложная ситуация с примитивами. Загвоздка в том, что они есть. И они не объекты. А так хочется иногда карту с целочисленным ключом. И вот в своей разработки применив все мыслимые и немыслимые оптимизации и получив прирост только в 30%, я решил поменять контейнер. Уж тут-то я получу сразу хорошее ускорение. Памяти тоже не хватает, так что и тут должен быть выигрыш.

Для этого я написал небольшой тест. Вот такого плана. У каждой реализации свой API, поэтому примеры весьма отличаются. Но смысл общий.

Map<Integer, Map<Integer, Map<Integer, int[]>>> map;
//Insert
for(Data in : data) {
    Map r = map.get(in.a);
    if(r == null) map.put(in.a, r = new Map());    

    Map k = r.get(in.a);
    if(k == null) map.put(in.a, k = new Map());

    int[] l = k.get(in.a);
    if(l == null) map.put(in.a, r = new int[1]);
    l[0]++;
}
// Walk
int c;
for(Map a : map.values())
    for(Map b : a.values())
        for(int[] k : a.values())
            c++;

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

Framework - class Insert Walk Memory
JCF - HashMap 1005000 in 5055ms (~0,00503ms) 2794144 in 761ms (~0,00027ms) 301,6Mb
JCF - LinkedHashMap 1005000 in 6446ms (~0,00641ms) 2794441 in 646ms (~0,00023ms) 359,4Mb
HCCP - IntObjectOpenHashMap 1005000 in 5113ms (~0,00509ms) 2793747 in 643ms (~0,00023ms) 355,7Mb
GNU Trove - TIntObjectHashMap 1005000 in 5477ms (~0,00545ms) 2793979 in 3134ms (~0,00112ms) 461,1Mb
fastutil - Int2ObjectOpenHashMap 1005000 in 4979ms (~0,00495ms) 2793682 in 960ms (~0,00034ms) 510,8Mb
fastutil - Int2ObjectAVLTreeMap 1005000 in 7201ms (~0,00717ms) 2793393 in 1054ms (~0,00038ms) 287,9Mb

А еще порадовал размер fastutil — его ярка занимает 16 мегабайт. в два раза больше чем мой проект со всеми зависимостями вместе взятыми.


Giver: Свежий сон  (2014-02-07 22:42:01)

Еду на машине от вокзала, с той параллельной маленькой улочки, где базар. Темно на улице, там плохо освещают. Ближний светит, впереди машина. Подъезжаю к перекрестку на достаточной скорости. Смотрю на приборную панель, а подсветка не горит. Думаю, вот те раз, как так? Выключаю свет, включаю. А он не загарается, и так темно на улице, а я без света и понимаю что вот уже на перекрестке и свет не включается вообще. Закрываю глаза, пытаюсь открыть, а ничего не вижу. И тут до меня доходит, я уснул за рулем! Уснул за рулем и выезжаю на перекресток! Давлю на тормоз и выворачиваю руль вправо, кричу себе: "Проснись! Проснись! Ты спишь!". Просыпаюсь. В кровати.

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

А еще вспоминается цитаты из "записок полусталкера":

Hикак не получается осознать себя во сне. Понимаю что видел сон только когда проснусь. А во сне все принимаю за чистую монету. Даже глупости всякие кажутся чем-то само собой разумеющимся. Читал Кастанеду. Он пишет что надо увидеть свои руки во сне. Чудак человек. Как же я увижу там свои руки, если не догадываюсь что это сон?

Сегодня снился странный сон. Иду по какой-то улице, а на заборе огромными буквами написанно - ЭТО ТВОЙ СОH! Приснится же чушь такая...

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


Giver: кулинарии пост  (2014-01-17 23:08:23)

У меня есть 2 пакеты морквы, 750 грамм гречки, 5 упаковок муки, пол-солонки и целое множество специй всех сортов и расцветок, а также варенье, кетчуп, ящик яиц, две бутыки чистого кэфира и картофель. Не то что бы это был необходимый запас для зимовки. Но если начал собирать еду, становится трудно остановиться. Единственное что вызывало у меня опасение - это кефир. Нет ничего более беспомощного, безответственного и испорченного, чем кефирные зомби. Я знал, что рано или поздно мы перейдем и на эту дрянь.

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

Начну с моих любимых эльфийчких лепешек.

Ингредиенты: мука, вода, масло растительное. Начинка по желанию (сахар, мак, творог)

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

После этого кладем получившиеся лепешки на раскаленую сковороду и жарим переворачивая пока не будет прожарена вся.

Ура! Лепешки готовы! Можно собираться в дорогу!


Giver: necms progress  (2014-01-17 02:27:33)

Причесал NeCMS, она практически не менялась за последние пару лет. Так что привел в порядок накопившееся. Даже писать на PHP может быть не так плохо если библиотека хорошая и удобная. Починил проблемы которые были, и добавил несколько нововведений.

  • Теперь галерея - системный модуль.
  • Переверстал все на HTML5, теперь я в тренде. (логотип подтверждает)
  • Отломал поддержку IE6, запилил поддержку IE7
  • Комментарии в блоге, оказывается, были сломаны
  • Запоминание имени для комментариев!
  • Новая панель админки: можно посмотреть слева.
  • Можно перейти непосредственно на редактируемый материал не совершая кучи переходов.
  • Куча внутреннего рефактора и чистки, HTML из PHP выносится в стили и т.д.

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

  • Земли — крестьянам, заводы — рабочим!
  • Запилить наконец пагинатор, можно будет не загружать сразу все одной страницей, хотя и все тоже можно будет.
  • Сделать очередной репозиторий кода для NeCMS, чтобы изменения не терялись. Раньше, правда, это не помогало.
  • Поднять несколько очень популярных сайтов на NeCMS, показывая тем самым ее превосходство над другими системами управления контентом.
  • Добавить в галерею свежие фоточки и скриншоты, ведь так много произошло
  • Добавить еще один интересный раздел
  • Ну и думаю пока этого будет вполне достаточно. Заметил что в 2008 и 2009 я сюда писал практически при каждом удобном более-менее интересному поводу, а сейчас совсем мало. Нужно исправляться. Вот публикую тут сегодняшнюю интересную цитату.

    [19:39:03] klukvo4ka: я слышала
    [19:39:18] klukvo4ka: я видела
    [19:39:32] Giver    : я сказала
    

Giver: Снова on-line  (2014-01-11 19:12:21)

Ура! Моя многострадальная днявочка снова в сети. Да еще и под тем же адресом! Внезапно в этом году ей исполняется 7 лет! Конечно даунтайма было много а пишу я сюда редко, но второе весьма зависело от первого, а первое от отсутствия стабильного хостера и/или интернет канала. В конце концов я таки захостился на подоконнике чему несказанно рад! Как вы поняли спонсор комментария - Хостинг "На Подоконнике".

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


Giver: BinData в MongoDB  (2012-03-26 10:00:49)

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

   case BinData: {
            int lsz = l.objsize(); // our bin data size in bytes, not including the subtype byte
            int rsz = r.objsize();
            if ( lsz - rsz != 0 ) return lsz - rsz;
            return memcmp(l.value()+4, r.value()+4, lsz+1);
        }

То есть записи сортируются сначала по размеру, а только потом по содержанию, и набор данных [11,2,333] будет отсортирован как [2,11,333]. Так что монго сортирует любые наборы бинарных данных как числа, а не как строки и нет никакого способа поменять это поведение. Так и живем, приходится выравнивать все бинарные записи по одной длине.


Giver: Компрессоры  (2012-01-26 15:25:57)

Решил погонять разные компрессоры и выбрать нужный под конкретную задачу, для этого протестировал тройку самых популярных: gzip, bzip2, xz. Все испытания были проведены на одном и том же репрезентативном файле размером 1.6gb в tmpfs, то есть скорость винчестера никак не могла повлиять. Замеры производились с помощью команды time cat data.in | [gzip|bzip2|xz] < data.out, а распаковка с помощью [zcat|bzcat|xzcat] data.out < /dev/null. Так же немаловажным фактором для меня была скорость распаковки средствами Java. Тестовый код: byte[] buf = new byte[4096]; while (zis.available() > 0) zis.read(buf);

Компрессор Время сжатия Выходной размер Время расжатия Java
gzip 1:02,71 404M 0:11,351 0:11,029
bzip2 4:29,65 204M 1:19,91 3:24,169
xz 14:09,06 136M 0:14,905 0:23,444
xz -1 1:46,64 197M 0:21,330 0:31,429

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


Giver: GTK2.0 Emacs keys  (2011-04-21 13:27:34)

Элегантной командой консоли гламурное гтк превращается в замечательный удобный Эмакс

echo -e 'include "/usr/share/themes/Emacs/gtk-2.0-key/gtkrc"\ngtk-key-theme-name = "Emacs"' >> ~/.gtkrc-2.0

Giver: червячок  (2011-03-31 15:29:49)

Вот чурвяка нарендерил. На четырех ядрах при 3.2ггц рендерилось сие чудо 6 с половиной часов


Giver: дно  (2011-02-02 11:21:27)

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

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

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

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

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


Giver: Верблюд  (2010-06-29 10:28:35)
Лошадь
    сказала,
        взглянув на верблюда:
"Какая
    гигантская
        лошадь-ублюдок".

Верблюд же
    вскричал:
        "Да лошадь разве ты?!
Ты
 просто-напросто -
         верблюд недоразвитый".

И знал лишь
    бог седобородый,
что это -
    животные
        разной породы.

    1928. Владимир Маяковский.

Giver: хмл  (2010-03-31 06:16:25)

Прекрасный конфиг из jira в Ъ-ява-ынтырпрайз стиле. Вы не умеете писать конфиги? тогда мы идем к вам!

<values>
  <value>
    <key>false</key>
    <value>admin.service.common.handler.uses.ssl.no</value>
  </value>
  <value>
    <key>true</key>
    <value>admin.service.common.handler.uses.ssl.yes</value>
  </value>
</values>

Giver: Year with blender.  (2010-03-28 05:29:51)

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


Giver: Веселые разукрашки  (2010-01-10 08:03:18)

Бочонок намоделили, a теперь нужно его раскрасить. Причем в это же время нужно оставить alpha-канал в покое, то есть закрасить остальное, поэтому метод через g2d.setColor(new Color(цвет, 127)); g2d.fillRect(); отпал сразу. Долго ковырял Composite, но никаких положительных результатов это не дало. Уже ближе к полуночи в голове начал вызревать хитрый план.

Исходная картника(1) у нас в градациях серого , и это замечательно. То есть все каналы равны, кроме альфы. Убрав ненужный канал мы получим бочку, залитую оставшимися. Например если убрать красный и синий канал, оставив лишь зеленый выйдет бочка нумер 2, если же наоборот закрыть только зеленый, то выйдет пурпурный (3), закрыв синий канал получим желтую бочку (4). Спрятав все каналы получим силует бочки (5), или ее маску, вещь тоже иногда полезную.

Смотрим как у явы с каналами, видим что очень печально. Люди либо используют страшный обход всех пикселей копии картинки накладывая битовую маску. Другой, более, но недостаточно красивый вариант, использовать ColorLookupOp, для этого нужны еще два 256-элементных массива типа short, и картинка, опять же, на выходе будет копия. Ее хотелось бы избежать.

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

public class ShadowColorModel extends ComponentColorModel {
    boolean red, green, blue;

    /**
     * Копируем параметры из родитеслькой цветовой модели и сохраняем парамтртры преобразования 
     */
    public ShadowColorModel(ColorModel parent, boolean red, boolean green, boolean blue) {
        super(parent.getColorSpace(), parent.hasAlpha(), parent.isAlphaPremultiplied(), 
              parent.getTransparency(), parent.getTransferType());
        this.red = red;
        this.green = green;
        this.blue = blue;
    }

    /**
     * Если красный цвет разрешен, возвращаем значение, иначе 0
     */
    public int getRed(Object inData) {
        return red ? super.getRed(inData) : 0;
    }

    /**
     * Таким же образом поступаем с остальными цветами
     */
    public int getGreen(Object inData) {
        return green ? super.getGreen(inData) : 0;
    }

    public int getBlue(Object inData) {
        return blue ? super.getBlue(inData) : 0;
    }
}

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


Giver: Намоделим бочечку  (2010-01-10 06:53:12)


Giver: typical vimmer  (2009-12-30 21:17:45)

Giver: флейта  (2009-12-04 07:04:49)

Шотландский студент поступил в Оксфордский университет. Через год приезжают к нему родители. Он показывает свою комнату в общежитии.

— Сынок, тебя тут не обижают?

— Нет. Вот на этой кровати спит один мой однокурсник. Отморозок полный. Ночью вскакивает с постели и начинает орать не своим голосом. В общем я с ним не общаюсь. А на этой кровати спит другой мой содед. Этот тоже не лучше. Подрывается среди ночи и бъётся головой в стену. Дурак наверное.

— Сынок, а как же ты в таких условиях живешь!?

— Очень просто. Я их игнорирую и всю ночь играю на волынке...

А причем тут я со своей флейтой?

Giver: переход  (2009-10-15 08:31:28)
e16> StumpWM
mrxvt >mlterm + screen
Firefox > Vimperator
Azureus >ctorrent
sonata >ncmpc
gqview >qiv
mouse >keyboard
What next? (Правильный ответ — emacs)

Giver: Super key  (2009-09-12 21:03:17)

Как то я уже минимизировал количество неиспользуемых клавиш на клавиатуре, но всё же остались несколько незадействованных непонятных клавишь в нижнем ряду, я решил и им найти применение.

Изначально клавиатуры для МежДелМаш-совместимых компьютеров проектировали с учетом лишь английского, 27 значного алфавита, поэтому русскому места в ней маловато, вернее самому алфовиту места хватает, а вот самим частоиспользуемым знакам — точке и запятой — отдельных клавишь не хватило, поэтому их подселили к цифрам 7 и 6, заставляя нажимать пользователя шифт при этом. Корпорация Microsoft решила выделиться перенеся их на место вопросительного знака и слеша, коего до сих пор нет в русском алфавите на основной клавиатуре.

Но вспомним о наших неиспользуемых клавишах со странным символом, их какраз две, почему бы не повесить точко и запятую именно туда? Сказано — сделано. Дописываем это в ~/.Xmodmap и получаем прибавку к скоросте набора.

keycode 115 = comma
keycode 116 = period

Giver:   (2009-09-06 16:29:17)

Ура! я стал засирать рабочие столы намного продуктивнее, теперь мне четырех нуникак не хватает, добавил еще два, стало неудобно )=. Хочу чтобы было еще миннимум одно измерение.


Giver: борода  (2009-09-03 19:11:20)
Борода моя, бородка,
До чего ж ты отросла!
Говорили раньше счетка,
Говорят теперь метла.
Хоть я парень молодой,
Но хожу я с бородой.
Но я не беспокоюсь,
Пусть растет по пояс.
Прийдет время бриться, наряжаться
С милой целоваться.

Giver: blender animation  (2009-08-28 18:58:09)

Начал разбиратся с анимацией в blender. Вот мой первый рендер. Содержит много недочетов уже даже с моей точки зрения, но время рендера (4 секунды видео, 100 фреймов, 30 минут рендера) не позволяет рендерить каждое видео, поэтому это моя первая, и пока последняя отрендеренная анимация.

Кроме того решил разобратся с новомодным HTML5 и залить видео используя тэг <video>, а также пожать свободными кодеками — Ogg Theora. В итоге имеем полностью свободный способ выведения видео, поддерживаемый современными браузерами.


Giver: xputs v0.2 is here!  (2009-08-04 18:26:32)

Наконецто зарелизил xputs — эмулятор нажиматий клавиш для иксов. Удобный инструмент для скриптописцев и для написания макросов и облегчения прочей рутины. Реализовал всё что планировал, даже поддержку альтернативных локалей (хотя это нужно потестить, ибо никаких других локалей кроме С и ru_RU.koi8-r не имею в наличии, так что хотел бы услышать отзывы счасливых обладателей этих самих альтернативных локалей, особенно utf8, которая нынче преобрела популярность).


Giver: alpha  (2009-07-16 19:19:18)

Вот и дожили до альфа версии интерпретатора. Работают все основные «фишки» URQL:

  • print/println формат
  • Процедуры
  • braindamaged #$ и иже с ними
  • Полноценная реализация выражений
  • Некоторые специальные переменые как то rnd, inv_, current_loc, previous_loc

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

Исходный код открою в SVN репозитории и к релизу думаю поднять Trac. А пока можно поиграть в классику — Гарри Гаррисон - Стань Стальной Крысой


Giver: об ошибках  (2009-07-01 11:39:43)

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

© 1998 В.Тихонов. Теория ошибок


Giver: Игрушки  (2009-06-25 21:58:19)

Подборочка игр, которые успешно работают на моём интерпретаторе.

  1. Древний кинжал v0.8
  2. Древний кинжал 2 v1.6
  3. Похождения отважного хомяка Семена: Побег
  4. Похождения отважного хомяка Семена-2: КРУТОЙ СПУСК
  5. ДЕМОНЫ ТЕМНОЙ СТОРОНЫ 1.01

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


Giver: URQ  (2009-06-23 20:32:47)

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

Релизнул пре-пре-пре-альфа версию с зашитой игрушкой "Древний кинджал". Для этой игры возможностей хватает впритык. Пощупать можно тут

Проект разбит на три независмых части:

  1. Парсер
  2. Интерпретатор
  3. Интерфейс

В идеале первые два абсолютно независимые, но благодаря генерации кода парсер частенько приходится подтягивать. Невозможно даже построить вменяемый байткод, приходится делать текстовые замены и парсить в рантайме )=. Зато интерфейс очень абстрактен, уже готовы два: SwingInterface и ConsoleInteface, в задумках еще два: IrcInterface и WebInterface.

Сам уже не рад что взялся за это дело, но игрушки очень даже доставляют, да и фаллометрия тоже.


Giver: shaste  (2009-05-01 00:19:38)

Носился по файловой системе, увидел файл shaste.zip, почему то решил что там счасть, а там всего лишь игрушка. Эх.. нет в жизни счастья.

Хотя игрушка — Speed Haste — классная, чуть ли не единственные 3D гоночки для DOS. Качественная начинка: восемь красивых карт, два класса автомобилей, в каждом из которых по 6 машин, возможность играть по сети или через модем. И самое крутое то, что игрушка могла рисоваться в потрясном разрешении экрана 640x480, поражая всех своей красотой и детализацией. И всё это 1995 год.

В DosBox и на nVidia GeForce 2 она отказалась переключаться в высокое разрешение, но играть вполне можно. Попробую запустить еще на других реальных картах, ибо хочеться снова насладиться игрой в полной красе.


Giver: A good lesson  (2009-04-28 08:56:22)

Once a rich English woman called Mrs. Johnson decided to have a birthday party. She invited a lot of guests and a singer. The singer was poor, but he had a very good voice.

The singer got to Mrs. Johnson's house at exactly six o'clock as he had been asked to do, but when he went in, he saw through a door that the dining-room was already full of guests, who were sitting round a big table in the middle of the room. The guests were eating, joking, laughing, and talking loudly. Mrs. Johnson went out to him, and he thought she was going to ask him to join them, when she said, "We're glad, sir, that you have come. You will be singing after dinner, I'll call you as soon as we're ready to listen to you. Now will you go into the kitchen and have dinner, too, please?"

The singer was very angry, but said nothing. At first he wanted to leave Mrs. Johnson's house at once, but then he changed his mind and decided to stay and teach her and her rich guests a good lesson. When the singer went into the kitchen, the servants were having dinner, too. He joined them. After dinner, the singer thanked everybody and said, "Well, now I'm going to sing to you, my good friends." And he sang them some beautiful songs.

Soon Mrs. Johnson called the singer.

"Well, sir, we're ready."

"You are ready?" asked the singer. "What are you ready for?"

"To listen to you," said Mrs. Johnson in an angry voice.

"Listen to me? But I have already sung, and I'm afraid I shan't be able to sing any more tonight."

"Where did you sing?"

"In the kitchen. I always sing for those I have dinner with."


Giver: Indian/Chinese Examples  (2009-04-19 11:04:11)

Ворочаю документацию по иксам и смотрю примеры — их качество поражает воображение, например вырезка из официальных примеров :

  rc = XAllocNamedColor(display, screen_colormap, "red", &red, &red);
  if (rc == 0) {
    fprintf(stderr, "XAllocNamedColor - failed to allocated 'red' color.n");
    exit(1);
  }
  rc = XAllocNamedColor(display, screen_colormap, "brown", &brown, &brown);
  if (rc == 0) {
    fprintf(stderr, "XAllocNamedColor - failed to allocated 'brown' color.n");
    exit(1);
  }
...

И так на каждый цвет, коих в примере используют 6, о циклах ребята не слышали, о массивах, видимо, тоже. А вот еще один кусок кода, который на третьем месте у гугла:

int get_byte_order (void) {
        union {
                char c[sizeof(short)];
                short s;
        } order;

        order.s = 1;
        if ((1 == order.c[0])) {
                return LSBFirst;
        } else {
                return MSBFirst;
        }
}

....
    if ((LSBFirst == get_byte_order ())) {
        img->byte_order = LSBFirst;
    } else {
        img->byte_order = MSBFirst;
    }

Если примеры нацелены на новичков, зачем так учить? И не удивительно, что начитавшись таких "примеров" появляются такие перлы в реальных продуктах


Giver: 99 бутылок  (2009-04-14 20:15:19)

Играли каналом в 99 бутылок пива по полному тексту, я писал сначала на схеме, затем на перле, резульатат на схеме — 404 байта, перл - 272. Scheme:

(let* ((& string-append)(b " bottle")(o " of beer")
(w " on the wall")(t ".nTake one down and pass it around, ")(m " more")(q(& b "s" o)))
(define (s . z)(map display z))(define (v n N g)(s t n g w ".nn" N g w ", " n g))
(define (f n e) (v n n q)(if (= n 2)(begin(v 1 1 (& b o))(v "no" "No" (& m q))
(s"nGo to the store and buy some" m ", 99" q w "."))
(f (- n 1) 's)))(s 99 q w ", " 99 q)(f 98 's) 0)

Perl:

$b=$q=" bottles of beer";$b=~tr/s//d;$w=" on the wall";
sub p{print @_}sub v{($n,$g)=@_;p
".nTake one down and pass it around, $n$g$w.nn".uc($n)."$g$w, $n$g"}
p "99$q$w, 99$q";v 98-$_,$q for 0..96;v 1,$b;v "n","o more$q";p
"nGo to the store and buy some more, 99$q$w."

Итого финишировал вторым. Первое место занял парень на dc с результатом 266 байт. Правда потом нашли соревнование взрослых дядь, но текст у них упрощен. Зато лучший результат 165 байт на перле, как и вся десятка лучших, кроме девятой позиции на PHP

UPD: После упорного колупания пёрла удалось вырваться на первое место со счетом 216, а "взрослые дяди", как оказалось, играют по сокращенному тексту, без последнего куплета. Вот что вышло после изменений:

print 99,$q=" bottles of beer",$w=" on the wall",$m=", 99$q",(map{/^1 /&&s/s//;$l=lc;".
Take one down and pass it around, $l$w.

$_$w, $l"}((map-$_.$q,-98..-1),"No more$q")),".
Go to the store and buy some more$m$w."

Попутно уловил баг перла — lc модифицировала $_ при обращении к ней, после пересборки перла баг исчез.


Giver: листок  (2009-04-03 13:18:58)

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


Giver: физики шутят  (2009-04-01 17:54:09)
— Ты куришь?
— Нет.
— Пьешь?
— Нет.
— Наркотики??
— Нет.
— Тогда как же ты расслабляешся?
— Я не напрягаюсь

Giver: blender  (2009-03-23 20:53:34)

Наконец собрал себе blender, штука очень интересная, после часика выдал такое:

Накачал книжек пачку, но читать их не выходит, хочется результата, вот и клацаю всё что вижу.


Giver: rxvt-2.6.4  (2009-03-19 21:29:28)
#ifdef SUPPORT_BROKEN_APPS_WHICH_RELY_ON_UNDEFINED_BW_BEHAVIOUR_AS_XTERM
            screen.flags &= ~Screen_WrapNext;
#else
            screen.cur.col = TermWin.ncol - 1;
            screen.cur.row--;
#endif

Giver: Compaq Evo N150  (2009-03-15 21:02:54)

Не так давно один парень попросил меня о помощи в установке ОС на ноутбук Compaq Evo N150. Дело в том, что привод сего устройства напрочь игнорирует все диски, которые ему показывали, с флеш-накопителей загрузка невозможна, других сменных носителей нет. По его словам ОС отсуствовала. Зато у меня есть переходник MINIIDE и привод от старшего брата ноутбука.

И вот в назначенный день ко мне явилась компания: сам парень, девушка, владелица ноутбука, сам ноутбук и диск с пиратской WIndows XP которому было предначертанно занять просторы винчестера. Причина неработоспособности ОС была на лицо — отсутствовал NTLDR, его девушка удалила посчитав вирусом — программно не отделатся — в руку легла отвертка. Ставить новую систему не было вообще никакого желания, хотелось просто подбросить NTLDR на его место и отпустить человека с миром. Но нужно было взгянуть на содержимое винчестера, что затруднительно сделать без загрузки ОС. Чем мы и занялись. Для начала попытались подтсавить привод, но он оказался неподходящим не только по интерфейсу, но даже по габаритам — на несколько миллиметров выше щели, предназначенной для него. После извлечения винчестера из нед машины обнаружилась вторая неудача — винчестер был неформатный, может и было имя сему стандарту, но подключать его у меня было не к чему. Единственным вариантом загрузки была загрузка по сети. Тогда место отвертки в руке занял бубен.

После включения соответсвующего пункта меню в CMOS SETUP ноутбук стал усиленно искать DHCP сервер при загрузке. Я реализовал его желание путем включения DHCP сервера у моего роутера. Но ноутбук отказался принимать его, сказав что не указано имя загрузочного файла. Тогда было решено заняться этим вопросом серьезно.

Ноутбук пытался загружаться с помощью технологии PXE, которая требовала наличие DHCP/BOOTP и TFTP демонов, а так же необходимые для загрузки файлы на TFTP. Итак приступаем к установке необходимого софта:

Забираем дистрибутивы BOOTP (http://www.sfr-fresh.com/linux/misc/bootpd-4.3.tar.gz) и TFTP (ftp://ftp.kernel.org/pub/software/network/tftp/tftp-hpa-5.0.tar.gz) демонов, распаковываем, ставим привычным ./configure && make && make install, после чего получаем полностью рабочую среду для старта по сети. Оба демона работают через inetd, прописываем их в конфигах:

/etc/inetd.conf:
        tftp         dgram   udp wait    root    /usr/sbin/tcpd  in.tftpd -s /home/giver/src/tftp
        bootps  dgram   udp wait    root    /usr/sbin/bootpd bootpd -i

/etc/services:
        bootps          67/udp          bootp           # BOOTP Server
        bootpc          68/udp                               # BOOTP Client

Теперь нам нужен загрузчик — берем PXELINUX входящий в состав коллекции загрузчиков syslinux (http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.73.tar.bz2), после сборки ложим файл pxelinux.0 в корневой каталог TFTP сервера. Теперь возник вопрос: «что грузить?». Нужно было что то легковесное, умеющее работать с сетью и имеющее набор инструментов для работы с жестким диском. Выбор пал на мой дистрибутив ShadowFly, который удовлетворял все требования, а если чего не хватало, можно будет быстро дособрать. Для загрузки кладем ядро (vmliuz) и образ файловой системы (initrd.img) на TFTP, затем настраваем загрузчик и BOOTP демона:

/etc/bootptab:
.192-168-1-10:ip=192.168.1.10:ha=00D0592AB123:gw=192.168.1.2: 
              ds=192.168.1.2:td=/home/giver/src/tftp:bf=/pxelinux.0:

/home/giver/src/tftp/pxelinux.cfg/C:
DEFAULT linux
LABEL linux
      KERNEL vmlinuz
      INITRD initrd.img
      APPEND initrd=initrd.img root=/dev/ram vga=4

После этих манипуляций ShadowFly успешно загрузился, сетевая карточка (Intel EEPRO100) поднялась без проблем пинком модуля в ядро. Винчестер объемом 15гб имел единственный NTFS раздел, важных данных, по заверениям владелицы, на нем не было. NTFS я смог смонтировать только для чтение (из-за использованя ядерного модуля, fuse+ntfs-3g в дистрибутиве нет), на нем оказалась почти голая WinXP с небольшим набором дополнительного прграмного обеспечения. Linux был, но как теперь установить женскую операционную систему? Можно было разбить и отформатировать винчестер в FAT32, затем залить на него дистрибутив, а вот как загрузить DOS, необходимый для запуска программы инсталяции? Тогда достаем из закромов дискету с IBM PC DOS и начинаем шаманство с квему. На образ дискеты помещаются: ibmbio.com, ibmdos.com, command.com, fdisk.com и format.com, затем создаем пустой файл — будущий винчестер — и грузимся в qemu:

$ dd if=/dev/zero of=dos.img bs=1M count=5
$ qemu -hda dos.img -fda floppy.img -boot a

В эмулируемой среде разбиваем винчестер и форматируем его с переносом системы — format c: /s. Вобщем этого хватит для начала, но лучше смонтировать единственный раздел виртуального винчестера и положить на него полезные утилиты типы PowerQuest Partition Magic, Volkov Commander, драйвера мыши, расширенной памяти и локализатор. После чего полученный образ выкладыаем на FTP и забираем. Забирать оказалось некуда, поэтому выделяем под свои нужды еще один RAM-disk:

# mke2fs /dev/ram1
# mkdir /mnt/loop
# mount /dev/ram1 /mnt/loop
# cd /mnt/loop
# wget ftp://i815/dos.img
# cat dos.img > /dev/hda

Последней коммандой мы перезаписываем таблицу раздело, загрузчик, и прочую информацию, хранящуюся в первых пяти мегабайтах винчестера. И после перезагрузки мы видим приглашение DOS. Разбиваем винчестер: 2гб FAT16 под дистрибутив (PC DOS не умеет FAT32) и всё остальное под FAT32. После сих манипуляций сново грузим по сети ShadowFly. На моей машине нет привода, диск с WinXP отправился в мой ноутбук, с которого файл можно забрать лишь по протоколу SAMBA — монитруем шару в каталог внутри FTP на рабочей станции и забираем дистрибутив оттуда. Снова в дос, пытаемся запустить i386winnt и получаем сообщение: «Имя файла или каталога указано неверно». Оказалось что либо pure-ftpd, либо samba урезала каталог до 512 файлов, а их там существенно больше. Пакуем i386 таром, забираем из под линукса и распаковываем — все файлы целы и на своих местах, перегружаемся в ДОС, запускаем winnt и получаем приветствия и бурные овации от инсталятора.


Giver: море  (2009-02-20 07:57:47)

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

Макс Кудеров


Giver: ВЕСНА  (2009-02-17 16:50:59)

ВЕСНА

Розсуває сонце хмари,
Кличе новий день — весну!
А вона готує чари
І відходить віді сну.

В небесах хмарки прозорі,
Їх поглинула блакить.
А вночі палають зорі,
Тихо вітер шелестить.

Ясний промінь землю гріє,
Обіймає кожен лист,
А людина весь час мріє
Осягнути буття зміст.

Ніч — володарка покою,
День — розгойдує думки.
Навесні вони з рікою
Випливають за буйки.

Все у просторі вирує,
Це все скоїла вона.
Все чарує і чарує,
І гойда думки весна!

Wesnjanka — 2008р.


Giver: CD Wallet  (2009-02-13 07:30:16)

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

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


Giver: Креатив  (2009-02-06 19:47:49)

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

Бенгальский тигр

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

Страус ест картошку

Жаль, но больше сей мастер доски и мела не давал о себе знать...


Giver: qip license  (2009-01-22 08:13:10)

Вы читаете лицензии когда с ними соглашаетесь? Вот после аськокапца захотел проверить ее смерть в новом квипе, и заодно прочитать соглашение. Вот некоторые перлы:

  • Вы согласны с тем, что QIP может быть несовместим со всеми операционными системами и устройствами Вашего компьютера.
  • QIP создан как решение, которое позволит своим Пользователям эффективно использовать мгновенную передачу информации через Интернет, и, что более важно, соединяться с общедоступными серверами, разработанными ТРЕТЬИМИ ЛИЦАМИ, для мгновенной коммуникации через Интернет
  • Такие риски включают в себя без ограничений:
    1. повреждение вашего компьютера,
    2. повреждение каких-либо данных или файлов, хранящихся в вашем компьютере,
    3. возможность для других Пользователей видеть ваш IP-адрес,
    4. просмотр и распространение ваших файлов другими Пользователями без вашего ведома.
  • QIP является собственностью Создателя QIP. Название каждой копии QIP и все относящиеся права интеллектуальной собственности Создателя QIP принадлежат Создателю QIP пожизненно, так же как и другие права, не предоставленные вам по данному Соглашению.
  • Создатель QIP вправе без уведомления Пользователя удалить материалы и информацию Пользователя, не соответствующие требованиям действующего законодательства и условиям настоящего Соглашения.
  • Через Qip вы не можете отправлять предоставленные добровольно текстовые послания и символы. (сломал моск)
  • Вы согласны защищать Создателя QIP и уберегать его от любых потерь, убытков, жалоб и ответственности (включая расходы на оплату адвокатских гонораров), которые могут вытекать из использования QIP или любой другой информации, файлов, данных или материалов, полученных или доступных через QIP.
  • Доступ к некоторым серверам, сервисам и сетей ТРЕТЬИХ ЛИЦ обеспечивается ТРЕТЬИМИ ЛИЦАМИ для удобства.
  • Инициативное послание – это послание, отправленное реципиенту, который его не запрашивал. (написано отдельным параграфом, к чему относится — неясно)
  • Ни при каких обстоятельствах Создатель QIP не несет ответственности или обязательств, прямо или косвенно, за убытки и потери, понесенные вами в результате использования или вашей убежденности в правильности контента, товаров и услуг, имеющихся на СЕРВЕРАХ И СЕТЯХ ТРЕТЬИХ ЛИЦ.
  • Вы подтверждаете, что вы в курсе, что при использовании QIP [...] вы можете подвергатся [...] cреди которых: неразрешенное вторжение в вашу частную жизнь; спуфинг, сниффинг, подслушивание, жульничество, флуд, спам, взлом паролей, электронное преследование, мошенничество, фальсификация, порча системы [...]
  • ЕСЛИ ВЫ НЕ ХОТИТЕ ПОДВЕРГАТЬСЯ ДАННЫМ РИСКАМ, СОВЕТУЕМ ВАМ НЕ ИСПОЛЬЗОВАТЬ QIP.

Поистине, QIP — спокойное общение.

UPD: http://forum.ixbt.com/topic.cgi?id=15:61933 — глас народа.


Giver: See it!  (2008-12-25 13:07:12)

Пытался читать уроки под своим миниксом, с графикой там проблемы.. Раньше не было, а сейчас написал штуку которая переключается в графический режим и пытается что-то рисовать, вот с ней проблемы, но рассказ не об этом. Сидел я, читал уроки. Математики пачками, и все они, формулы, набиты картинками, которые links ну никак не показывает. Решил думать, как быстрее всего увидеть графику.

Слышал о программах типа asciiview, так же есть libaa, да и много чего, все они только и занимаются что выводом псевдографической графики в консоли, есть даже aavga, которая эмулирует svgalib через aa, но у них есть один большой минус — если общая картина еще в них понятна, что неплохо для игр/фильмов, то точная точечная графика совершенно непросматривается, а именно она мне и нужна. Выход — писать что-то своё.

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

И вот оно, решение — перегрузить шрифт разными комбинациями пикселей и этим рисовать ими. Считаем — в байте восемь бит, то есть до восьми точек. Размер символа — 8x16 пикселей. Если разбивать равномерно, плучаются квадратные с ребром 4 пиксела. Правда первая строка символов -- служебные, врядли они будут нормально выглядеть — остается 7 бит. Разбить так символ довольно трудно, выбрасываем еще один бит — 6 бит. Идеал. Так и делаем.

О механизмах перегрузки шрифта в linux/minix я понятия не имел, лезть низко не хотелось, да и нельзя. Поэтому лучше было сформировать файл шрифта и загрузить его штатными средствами. Формат файла очень простой, но писать программу, кототаря формаровала такой файл было очень лень. «Так нарисую» — подумал я. Но когда открыл редактор, понял что мне нужно изобразить 26, то есть 64 символа, и желание это делать резко пропало. Тогда количество бит на символ сократилось до 4 и быстренько нарисовал 16 символов, необходимых для отображения моих пикселов. Основал шрифт на стандартном шрифте, это дало еще один плюс — смотреть картинки можно было постоянно не перегружая системный и "графический" шрифт.

Шрифт загрузился на ура осталось написать сам просмотрщик. Языком был выбран си, тянуть сюда яву смысла не имело. Большинство картинок из документа было в формате GIF, писать его парсер очень не хотелось, а на minix библиотек для его открытия не видел (да и зачем они там, без графики-то?). Написание своего заняло бы много времени, тоже отпадало. Тогда решил использовать стоящую в соседней комнате машину с linux через telnet. В роли библиотеки для работы с графическими файлами взял libgd, пусть не самая быстрая, но зато имеющая очень удобное и краткое API.

Программа вышла менее килобайта. Результат ее работы рядом (=. Итак, что мы имеем — программу показывающую гифы, разрешение экрана в таком варинате выходит 80*2x25*2 = 160x50. Не так уж и много, но для моего случая с маленькими формулами — самое то. Если бы написал с шестибитными символами, разрешение было 160x75, что особо не спасает ситуацию, но делает пикселы более квадратные. Если изображение более 160 пикселей в ширину, то его жестоко рвало, и смотреть после этого было невозможно. Вместо своего скроллера можно приспособить миднайт, получилось довольно неплохо, правда медленно (учитывая телнет, нуль-модем и 386).

Смотреть так картинки из HTML документа, показываемого links в соседнем окне screen очень неудобно, поэтому пришлось встать из-за тройки, и читать за своей линуксовой машиной. Но фан засчитан. (=


Giver: Яйца!  (2008-12-25 07:20:27)

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

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

(define (show . z) (map display z) (newline))
(define (nth l n) (if (= n 0) (car l) (nth (cdr l) (- n 1))))
(define (rand ls) (nth ls (floor (* (length ls) (random)))))

(define (shuffle ls)
    (define (iter tail head) (if (null? tail) head
            (let ((s (rand tail))) (iter (remove s tail) (cons s head)))))
    (iter ls '()))

(define (sorted? ls)
    (define (iter n ls)
        (if (null? ls) #t (if (< (car ls) n) #f (iter (car ls) (cdr ls)))))
    (iter (car ls) (cdr ls)))

(define (randsort ls)
    (define (iter n)
      (let ((l (shuffle ls)))   
        (show n " " l)
        (if (sorted? l) l (iter (+ n 1)))))
  (iter 1))

(show (randsort '(2 1 3)))

Giver: псих  (2008-11-24 18:13:53)

Стоило Геку взглянуть в его глаза, и он понял - этот человек ненормальный.

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

* * *

— Ну значит вот. А так чтобы ни одной книги...

— Я-на-диете. — перебила Нюка, отколупнула еще один кусок штукатурки и бросила в открытое окно.

— При чем тут диета? — удивился Гек, — Да и зачем тебе диета? Ты же не толстая?

— Интеллектуальная-диета-гораздо-важнее-плотской. Это-ты-жрешь-чего-попало. Журналы-он-читает... А-кто-их-приготовил? Из-каких-продуктов? Вот-я-ограничиваю-себя-в-пище-духовной.

— Зачем?

— Чтобы-разум-не-жирел-от-избытка-информации. Чтобы-все-усваивалось-организмом-равномерно. Тщательное-пережевывание-духовной-пищи-залог-психического-здоровья.

Леонид Каганов. Коммутация


Giver: Коан  (2008-11-19 12:24:00)

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

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

Рйонан сидел нагой, любуясь луной. «Бедный парень, — задумчиво сказал он. — Мне бы так хотелось подарить ему эту прекрасную Луну.»

* * *

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

«Я оставил девушку там, — сказал Тандзан. — а ты все еще тащишь ее?»

* * *

Человек пересекал поле, на котором жил тигр. Он бежал со всех ног. тигр за ним. Подбежав к обрыву, он стал карабкаться по склону, уцепившись за корень дикой лозы, И повис на нем. Тигр фыркал на него сверху. Дрожа, человек смотрел вниз, где, немного ниже другой тигр поджидал его. чтобы съесть. Только лоза удерживала его.

Две мышки, одна белая, другая черная, понемногу стали подгрызать лозу. Человек увидел возле себя ароматную землянику. Уцепившись одной рукой за лозу, другой он стал рвать землянику. Какая же она была сладкая!

* * *

Дзёсю начал изучать Дзен в 60-летнем возрасте, и учился до 80-ти лет, когда он реализовал Дзен. Он учил с 80 до 120 лет. Однажды студент спросил его:

«Если у меня нет ничего в голове, что мне делать?»

Джошу ответил: «Выброси его оттуда.»

«Но если у меня нет ничего, как же я могу это спросить?» — продолжал спрашивать студент.

«Ну, — сказал Дзёсю, — тогда вытащи его.»


Giver: D-link DSL-2640U  (2008-09-28 13:49:51)

Прогресс не стоит на месте, и WiFi входит в каждый дом, наконец он посетил и мой дом: приобрел PCMCIA карточку D-linl DWL-G650+ и роутер D-link DSL-2640U. Карточка поднялась без проблем, и двумя коммандами — «emerge acx wifi-radar; modprobe acx», ну и роутер тоже поднялся практически сразу. Вдоволь налазившись по Web-админке роутера наткнулся на лог, в котором увидел что ОС — линукс. «Интересно, что можно выжать из этой железяки?» — подумал я и попытался залогинится через ssh, и у меня это вышло:

[giver@xaero ~]% ssh admin@router
admin@router's password:
>

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

help logout reboot adsl atm brctl cat ddns df dumpcfg echo ifconfig kill arp defaultgateway dhcpserver dns lan passwd ppp remoteaccess restoredefault route save swversion wan tr69c ping ps pwd sntp sysinfo tftp wlctl

Нет даже ls, не говоря уже о других составляющих coreutils. df показал что смонтированы три файловые системы: /dev/mtdblock0 обьемом 2.5 мегабайта, без свободного пространства в корень, /proc и tmpfs размером 320кб в /var, при этом наполовину полную. sysinfo показал 14мб общей памяти, меньше мегабайта свободной. На удачу попробовал cat /etc/fstab, и получил желаемый результат:

proc /proc proc defaults 0 0
tmpfs /var tmpfs size=320k 0 0
none /proc/bus/usb usbdevfs defaults 0 0

По каким-то причинам /proc/bus/usb смонтирована не была. Тогда я попытался прочитать стандартные файлы с информацией о системе из /proc: meminfo, cpuinfo, version, mounts, filesystems, /etc: fstab, passwd, group. Вот мои наблюдения: Система основана на процессоре BCM6348, который, как показал гугл построен на архитектуре MIPS32, и создан специально для роутеров. В системе было 4 пользователя, все имели uid 0, а также одна группа. Ядро поддерживало файловую систему sysfs но она не была смонтирована. Особо порадовала версия системы — Linux version (@) ().

Оболочка была крайне простая, не позволяла выполнять никакие синтаксические конструкции, но вот звездочки и вопросительные знаки раскрывала. Это дало возможность просматривать структуру файлов и каталогов — echo /*. С помощью cat можно было читать и записывать файлы. После этого выяснилось, что в /bin, /usr/bin и /sbin обитает немало полезных программ:

> echo /bin/* /sbin/* /usr/bin/*
/bin/adsl /bin/adslctl /bin/atm /bin/atmctl /bin/bftpd /bin/brctl /bin/busybox /bin/cat /bin/cfm /bin/chmod /bin/date /bin/ddnsd
/bin/df /bin/dhcpc /bin/dhcpd /bin/dhcpr /bin/dmesg /bin/dnsprobe /bin/dumpmem /bin/ebtables /bin/echo /bin/epi_ttcp /bin/ethctl
/bin/false /bin/hotplug /bin/igmp /bin/iptables /bin/kill /bin/ln /bin/mkdir /bin/mount /bin/msh /bin/nas /bin/nas4not
/bin/netctl /bin/openssl /bin/ping /bin/pppd /bin/ps /bin/pvc2684ctl /bin/pvc2684d /bin/pwd /bin/reaim /bin/ripd /bin/rm
/bin/sendarp /bin/setmem /bin/sh /bin/snmp /bin/sntp /bin/sysinfo /bin/tftpd /bin/true /bin/udhcpd /binпо/upnp /bin/wlctl
/bin/zebra /sbin/ethctl /sbin/hotplug /sbin/ifconfig /sbin/init /sbin/insmod /sbin/klogd /sbin/logread /sbin/reboot /sbin/rmmod
/sbin/route /sbin/syslogd /sbin/vconfig /usr/bin/[ /usr/bin/expr /usr/bin/ftpget /usr/bin/ledctrl /usr/bin/logger /usr/bin/test /usr/bin/tftp /usr/bin/top /usr/bin/tty
> cat /etc/modules_install
#!/bin/sh
cd 
for f in *
do
    case $f in
    bcmatmtest.ko)
        echo "skip $f"
    ;;
    *.ko)
        insmod $f
        ;;
    *)
        {$form} $f
        ;;
    esac
done


Giver: осень  (2008-09-23 20:52:38)

Вновь окно закрыто, и одежды стали черны — закончилось лето, зима на подходе.


Giver: Антуан де Сент-Экзюпери — Маленький принц  (2008-09-12 13:11:14)
— Что это ты делаешь? — спросил Маленький принц.
— Пью, — мрачно ответил пьяница.
— Зачем?
— Чтобы забыть.
— О чем забыть? — спросил Маленький принц. Ему стало жаль пьяницу.
— Хочу забыть, что мне совестно, — признался пьяница и повесил голову.
— Отчего же тебе совестно? — спросил Маленький принц. Ему очень хотелось помочь бедняге.
— Совестно пить! — объяснил пьяница, и больше от него нельзя было добиться ни слова.
* * *
— Кто ты? — спросил Маленький принц. — Какой ты красивый!
— Я Лис, - сказал Лис.
— Поиграй со мной, — попросил Маленький принц. — Мне так грустно...
— Не могу я с тобой играть, — сказал Лис. — Я не приручен.
— Ах, извини, — сказал Маленький принц.
Но, подумав, спросил:
— А как это — приручить?
— Ты нездешний, — заметил Лис. - Что ты здесь ищешь?
— Людей ищу, — сказал Маленький принц. — А как это — приручить?
— У людей есть ружья, и они ходят на охоту. Это очень неудобно! И ещё они разводят кур. Только этим они и хороши. Ты ищешь кур?
— Нет, - сказал Маленький принц. — Я ищу друзей. А как это — приручить?
— Это давно забытое понятие, — объяснил Лис. — Оно означает: создать узы.
— Узы?
— Вот именно, — сказал Лис. — Ты для меня пока всего лишь маленький мальчик, точно такой же, как сто тысяч других мальчиков. И ты мне не нужен. И я тебе тоже не нужен. Я для тебя только лисица, точно такая же, как сто тысяч других лисиц. Но если ты меня приручишь, мы станем нужны друг другу. Ты будешь для меня единственный в целом свете. И я буду для тебя один в целом свете...
— Я начинаю понимать, — сказал Маленький принц. — Есть одна роза... Наверно, она меня приручила...
* * *
— Вы ничуть не похожи на мою розу, — сказал он им. — Вы ещё ничто. Никто вас не приручил, и вы никого не приручили. Таким был прежде мой Лис. Он ничем не отличался от ста тысяч других лисиц. Но я с ним подружился, и теперь он — единственный в целом свете.
Розы очень смутились.
— Вы красивые, но пустые, — продолжал Маленький принц. — Ради вас не захочется умереть. Конечно, случайный прохожий, поглядев на мою розу, скажет, что она точно такая же, как вы. Но мне она одна дороже всех вас. Ведь это её, а не вас я поливал каждый день. Её, а не вас накрывал стеклянным колпаком. Её загораживал ширмой, оберегая от ветра. Для неё убивал гусениц, только двух или трех оставил, чтобы вывелись бабочки. Я слушал, как она жаловалась и как хвастала, я прислушивался к ней, даже когда она умолкала. Она — моя.
И Маленький принц возвратился к Лису.
— Прощай... — сказал он.
— Прощай, — сказал Лис. — Вот мой секрет, он очень прост: зорко одно лишь сердце. Самого главного глазами не увидишь.
— Самого главного глазами не увидишь, - повторил Маленький принц, чтобы лучше запомнить.
— Твоя роза так дорога тебе потому, что ты отдавал ей все свои дни.
— Потому что я отдавал ей все свои дни... — повторил Маленький принц, чтобы лучше запомнить.
— Люди забыли эту истину, — сказал Лис, — но ты не забывай: ты навсегда в ответе за всех, кого приручил. Ты в ответе за твою розу.
— Я в ответе за мою розу... — повторил Маленький принц, чтобы лучше запомнить.

Giver: Java Native Look  (2008-08-08 14:44:24)

Многим очень не нравится внешний вид программ написаных на Java с использованием swing, ибо они мягко говоря выбиваются из общего вида системы. С различиями gtk и qt можно бороться с помощью gtk-qt-engine и QGtkStyle соответсвенно. Использование нативного вида в яве есть из коробки, но по-умолчанию включено только в Windows. Под Linux и Solaris swing может быть отрисован либо через gtk, либо через motif, за это отвечают классы com.sun.java.swing.plaf.gtk.GTKLookAndFeel и com.sun.java.swing.plaf.motif.MotifLookAndFeel. Для того чтобы Java использовала один из них вместо стандартного кроссплатформенного Metal достаточно создать файл swing.properties в каталоге lib внутри Java Runtime Environment с таким содержанием:

swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel

Это будет действовать только в тех случаях, когда программа явным образом не указывает какой L&F хочет использовать, что в большинстве случаев.

Так же интересно заметить, что для Gtk используются системные библиотеки, а для motiff библиотеки, поставляемые с java. Поэтому motiff может быть использаван на любой платформе. И еще, в новой Java (>= 1.6.10) появился новый L&F — Nimbus, Очень симпатично выглядет, рекомендую посмотреть.


Giver: Безкнопочная мышка  (2008-07-15 00:32:58)

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

xmodmap -e "pointer = 4 2 5 1 3"

Сразу же после этого поведение вашего грызуна изменится. Если же вам такое поведение пришлось по душе, можно создать файл .Xmodmap в домашнем каталоге с таким содержанием:

pointer = 4 2 5 1 3

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

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

xmodmap -e "pointer = 1 2 3 4 5"

Giver: djvu  (2008-07-13 16:42:59)

Нужда заставила просмотреть книгу в DjVu, и тут я внезапно столкнулся с проблемой — чем смотреть? eix мне подсказал два варианта — evince и djviev(3/4). Первая из них тянула за собой половину гнома (окло 26 мегабайт), вторая полностью куте (чуть меньше 50 мб). Такой расклад меня никак не устравил, толку от GNOME и Qt мало, и только ради DjVu держать их глупо, да и по месту выходило немало, стал даже подумывать о wine+WinDjVu — места заняло бы меньше, а вайн в полезнее вышеперечисленного, но в обсуждении к WinDjVu был упомянут некий JavaDjVu, который сразу меня заинтересовал.

Скачав и распаковав архив с программой я получил замечательный просмотрщик DjVu, никак не привязаный к платформе. Jar файл весит 200кб и, естественно, не требует установки. Еще интересно то, что работает только как плагин к браузеру, поэтому к ней прилагается небольшой семикиллобайтный браузер. Огорчило то, что нельзя листать страницы колесом мыши, но это мелочи.


Giver: -  (2008-07-06 00:20:11)
Гроза за окном.
Печаль в глазах.
Грусть на душе.
Боль в сердце.

Giver: ...  (2008-06-19 16:33:10)
Наивное искусство — искусство умирать

Giver: Apple Macintosh  (2008-06-09 16:50:36)

Нахожусь за адской машиной Apple Macintosh G4. Впечатления смешанные. Причем очень. Первый старт прошел нормально, все красиво, кроме яблока при загрузке я ничего не увидел, но, по слухам, знать мне это не положено. На 21" мониторе разрешение автоматом стало 1024х768. Месный центр управления нашелся довольно быстро, потыкав разрешение от 1600х1200 хотел остановится на 1280х1024, но не тут то было, монитор сказал " Frequency out of range" и отказался показывать что-либо. Ожидание ничего не дало, он не менял автоматически найтройки, если они не валидны;После нескольких холодных перезагрузок он снова сбросил разрешение на 1024х768. На этот раз установил нормальное разрешение без проблем. После этого приступил к исследование софта, который стоял на машине.

Из иконок на панеле узнал Фотошоп, фаерфокс и квиктайм. Firefox версии 2.0.0.6 был тут же обнавлен до 3.0rc2. Настолько интуитивной установки софта я еще не видел, а когда увидел, даже немного растерялся. Никаких каталогов, просто перетянуть одну иконку на другую. Стал вроде без проблем, но запускатся отказался. И тут выходит на сцену консоль, в этот раз она нашлась сразу, так как была на панеле. Полюбовался выводом унэйм и приступил к запуску файерфокса более грубым методом

designer:~ designer$ uname -a
Darwin designer.local 7.0.0 Darwin Kernel Version 7.0.0: Wed Sep 24 15:48:39 PDT 2003; root:xnu/xnu-517.obj~1/RELEASE_PPC Power Macintosh powerpc

А файерфокс отказался запускать, ссылаясь что не может найти /usr/lib/libstdc++.6.dylib. Гугл подсказал, что нужно обновить систему, и вот, 117 мегабайт обновлений залилось. Кстати Сафари, штатный браузер, не справился с рендером моего сайта, но самое странное, даже гугла, логотип налезает на строку поиска, так что искать приходиться только в строке поиска. В итоге пришлось откатится до второй ветки

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

UPD:Единственное что заставило тормозить мак — это упячка!


Giver: (=  (2008-06-01 00:50:52)
— Ты не куришь?
— Нет, не курю и не пью.
— Как же ты живешь??
— Да вот пью, курю и вру.

Giver: Веселые переименования  (2008-05-30 13:07:03)

Задача стояла — переименовать все файлы из .. c суффиксом jpg в файлы вида 00001.jpg и так далее. Делается это одной строчкой на баш:

C=0;for a in ../*.jpg;do C=$(printf "%04d" $(($C+1))); mv "$a" $C.jpg;done

Ничего особо сложного нет, просто заводим счетчик и понемного инкрементируем его. Функция printf занимается дополнением нулей. Иногда еще возникает задача просто сменить у файлов суффикс, или просто какую-нибудь простую замену, можно воспользоваться такой коммандой:

for a in *;do mv "$a" "`echo $a | sed -e 's/dat/avi/'`";done

Ну и последнее, есть множество файлов, которые нужно разложить по каталогам по определенному принципу, ну скажем по первой букве:

for a in *;do C=`echo $a | cut -c 1 `;[ -d $C ] || mkdir $C;mv "$a" $C/;done

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

for a in *;do C=`date -r "$a" +%y.%m.%d`;[ -d $C ] || mkdir $C;mv "$a" $C/;done

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


Giver: radio  (2008-05-22 17:14:18)

Поднял жопорез через блютус, ради смеха решил послушать своё любимое радио — SomaFM: Groove Salad. Как ни странно, но радио пролизит в канал на ура. Качество правда не фантан, но динамики в любом случае большего не дают, так что как фоновая музыка это идеальный вариант. Трафика ест тоже не особо много, как для обладателя безлимитного нета, но для постоянного прослушивания такое никуда не годится, разве что если иметь гигабайт трафика, а с мои 100 метров испарятся вмиг. Ну не вмиг, но за дней пять точно. Это если экономить.


Giver: section completed  (2008-05-13 00:28:47)

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

Давно я не слушал психеи, нет в ней ничего хорошего, только моск рушит, а вот сейчас потянуло, просто появилось желание. Крепкие ассоциации у меня с психеей. А еще с катарсисом. И с ангрой. И книга Антона Чехова "Черный монах" сразу же всоминается. Как же давно это было. И ведь тогда видел всё совсем в ином свете. Но время прошло и его не вернуть. Да и сейчас не многим лучше не стало, сплошные колебания из прошлого в мечты и обратно, а в реальности меня нет. Вот такие у меня эмо мысли, бред же, сам понимаю, а всё равно хочется куда то всё высказать. Многое просто не могу выразить, а жаль. Вот что мне с таким собой делать?

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

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


Giver: Multimedia keyboard  (2008-04-14 01:58:26)

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

Для начала выясним при помощи утилиты xev, создают ли нужные нам кнопки какие-либо события, и имеются ли у них символика. На моем примере клавиша Wake посылала 223 код и не имела символа. Таким образом, собрав коды всех символов, можно сформировать ~/.Xmodmap примерно такого содержания:

keycode 227 = XF86AudioLowerVolume
keycode 223 = XF86AudioMute
keycode 222 = XF86AudioRaiseVolume

Некоторые среды, например XFCE, имеют предпрописанные действия к данным клавишам, так что дополнительных рукодвижений не потребуется. В остальных окружениях необходимо прописать их действия. Фрагмент файла сочетаний клавиш Enlightenment DR16 (~/.e16/bindings.cfg):

KeyDown - XF86AudioLowerVolume exec amixer sset PCM 2-
KeyDown - XF86AudioMute exec amixer sset PCM toggle
KeyDown - XF86AudioRaiseVolume exec amixer sset PCM 2+

Эти кнопки можно использовать с каким либо из модификаторов, например Control. Таким образом получаем не только изменение громкости, но и смену трека. Пример реализации в e16 с плеером sonata:

KeyDown C XF86AudioLowerVolume exec sonata prev
KeyDown C XF86AudioMute exec sonata pp
KeyDown C XF86AudioRaiseVolume exec sonata next

Giver: смена версий  (2008-03-31 19:02:39)

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

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

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

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

В заключении был составлен список дальнейших действий.


Giver: о пустоте  (2008-03-20 15:15:24)

Иногда возникает потребность в неком пустом символе, обычно это пробел, но не всегда он помагает. Например, если строке " " сделать trim(), то она станет пустой, и не валидной. Также иногда нужно сделать неразрвный пробел. HTML дает на то возможности с помощью тега <nobr>, но в некоторых местах он недоступен, и вообще недоступны какие либо средства форматирования. Тогдна на помощь приходит любой символ, отображение которого отсутсвует, например #160 (более известный как  &nbsp;) или #173. Различие между ними состоит в ширине. У последнего она равна нулю, и строка любой длины также будет не видна. В HTML его можно использовать как &#173;. Довольно часто в формах бывают обязателные поля, которые можно заполнить этим символом тогда его следует скопировать из таблицы символов или отсюда: '­'. Можно скопировать вместе с ковычками а затем удалить их. Символ останется. Еще одно применение в подделывании строк, в то время как строки идентичны визуально, вторая содержит несколько таких знаков.

Аналогичным образом можно поступить и с картинками. Создать gif или png с прозрачным фоном размером 1x1. В некоторых местах картинка проходит предварительное пережатие, и прозрачный становится черным (или неким другим цветом), в таких случаях можно воспользоватся пипеткой или скриншотом страницы, одним словом сделать картинку незаметной для человеческого глаза.

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


Giver: firefox  (2008-03-17 14:24:50)

Почти паралельно с Firefox 3.0b4 вышла и Firefox 4.0a1 которую можна загрузить с фтп. Основана четвертая версия на движке Gecko версии 2.0a1pre. Отичий от третей лисицы практически нет, кроме окошка about и лучшего результата в тесте Acid3, правда не на много — 70, в то время как третья ветка набирает 66. Кроме того тут отказались работать все плагины, даже те, которые нормально работали в тройке. Конечно, на данном этапе обновляться до четвертой версии смысла нет.

Кстати, есть интересный способ заставить работать плагины в более свежих версиях лисы. Для этого нужно в about:config установить значение false свойству extensions.checkCompatibility. По умолчанию его нет, но ведь никто не мешает создать (=.

Проблема в том, что со старыми дополнениями лисичка работает нестабильно, а иногда даже вылает. Особенно обидно если нужен какой то один, но важный плагин, который как раз не работает. Для этого находим файл install.rdf (можно менять как в .xpi архиве, так и в установленной версии), ищем место с описанием версий:

  <RDF:Description RDF:about="rdf:#$hnB9b2"
                   em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
                   em:minVersion="2.0"
                   em:maxVersion="2.0.0.*" />

И прописываем нужную версию, скажем 3.0b4. Обычно это приводит плагин в сознание. Но проблемы могут иметь место, так что лучше дождатся обновление плагина.


Giver: робочий ASP  (2008-03-12 13:33:01)

Через два дня после того как я попробовал Firefox 3.0b3 вышла четвертая бета, но узнал об этом я только сегодня. Первым делом решил применить ее на работе. После загрузки девятимегабайтного архива меня ждало разочарование — минимальная версия GTK, требуемая для ее запуска, 2.10. В системе оказалась 2.8. Решил обновится штатными средствами — yum update gtk2

Насобирав полсистемы (ну, большую ее часть), yum отвалился с фразой "Error: Missing Dependency: howl = 0.9.8 is needed by package howl-libs". yum install howl не нашел такого пакета. Тогда плюнул я на все и решил обновить весь дистрибутив, и сразу до Fedora Core 8, найдя простой мануал по обновлению, я приступил.

Установив пакет fedora-release восьмой весрии я попробовал запустить yum upgrade. Теперь проблема со старыми репозиториями. От асповских репов теперь мало толку так как обновление идет именно к федоре. Решил проблему удалением /etc/yum.d/asplinux*.

Еще одна попытка yum upgrade. Репозитории принял и начал качать загаловки обновленных пакетов. Итого:

Added 8439 new packages, deleted 0 old.

На сей раз обновление остановилось из-за устаревших пакетов, которые не имеют обновленй. yum отказался работать как следует для уже установленных пакетов, пришлось удалять через rpm с помощью внешнего разрешителя зависимостей. Так же в список deprecated пакетов попали hal и jack, в зависимостях которых gnome и kde были почти в полном составе, удалил с --nodeps. Снова yum upgrade.

На этот раз получаем конфликт с ядром. Насильственным образом удаляем kernel из базы: rpm --nodeps --justdb kernel kernel-smp, затем очищаем кеш юма и снова yum upgrade.

И вот долгожданное:

Install 387 Package(s)
Update 668 Package(s)
Remove 0 Package(s)
Total download size: 1.0 G

Cкачка пакетов началась. С двух дня до восьми вечера качались пакеты, еще два часа они ставились. Во время установки ядра процесс приостановился, при этом gkrellm показал загруженность процессора 100%. top показал что систему грузит grubby, мне ничего не оставалось как прибить его, но к моему удивлению установка продолжилась. Вобщем установка пакетов прошла успешно. Прописав новое ядро в конфиге граба руками я отправил машину в poweroff.

При первой загрузки системы отказала клавиатура. Проблема решилась подключением выпавшего провода (=. Первым сюрпризом был lilo, которого в теории быть не должно. Криво загрузившись поставил граб:

grub-install /dev/hda
Перегружаемся, наблюдуаем кернел паник — Не может найти корневого раздела, хотя ядро аспа находит без проблем. Оказалось новое ядро использует SCSI драйвера и для ATA контроллеров, поэтому винт стал sda. Русские шрифты слелтели, Х не поднялся, ссылаясь на невозможность загрузить модуль pcidata. По неизвесным причинам, Xorg продолжал искать модули, шрифты и другие данные в /usr/X11R6/, хотя теперь они лежат в /usr/lib/xorg и /usr/share/xorg, сильно заморачиватся не стал, сделал симлинки и поменял пути щрифтов на нужные в конфиге xfs. Также были проблемы и со сборкой модуля ядра для видео карты nvidia. Инсталятор упорно не видел исходные коды ядра. Пришлось распаковать сорцы модуля и собрать руками, пройдясь по makefile'ам напильником. Еще перезагрузка. Х загрузился нормально и e16 порадовали мой взор и даже восстановился мой прежний сеанс, но xmms не заиграл, выдав окно о патентном ограничении на mp3. Firefox 3.0b4 запустился успешно, sonata и sylpheed стали из репозитория. Интересно что самого mpd в репе не оказалось, что ж, прийдется собирать руками. Удивило отсутсвтие в репе mplayer.

Итого: Дистрибутив обновился, версии софта и библиотек увеличелись на порядок, из-за чего часть граблей исчезла. Остальная часть осталась и к ним добавились свои грабли федоры. Быть может обновление с дисков дало бы лучший результат. Репозитории не отличаются количеством софта, но зато почти всё свежее. Некоторое время будем работать в этой системе. В крайнем случае обновлюсь до дебиана. (=


Giver:   (2008-03-10 01:13:17)
Giver: понимаешь, в чем соль?
Лакки: В сиваше...
Giver: смутно представляю где это
Лакки: А представлюешь,что это?
Giver: памоему дета недалеко
Giver: или в уркаине
Лакки: Да это где-то в КРЫМУ И НАВЕРНО НЕ ТОЛЬКО ХРЕНЬ ПОХОЖАЯ НА ОЗеро,только гораздо больше!Вода очень соленая,потому что в сиваше образуется соль!Не знаю от чего!Ее от туда добывают,обрабатывают и едят!Вот в чем соль,а ты спрашиваешь... *JOKINGLY*

Giver: ие сцук. продолжение  (2008-03-08 13:30:08)

Делал уборку, апач неспешно показывал лог. Приглянувшись заметил такую картину:

catv-gw.skif.net - - [08/Mar/2008:13:25:12 +0200] "GET /img/shads/23.png HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"
catv-gw.skif.net - - [08/Mar/2008:13:25:13 +0200] "GET /img/1.gif HTTP/1.1" 304 - "http://sendsms.org.ru/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"
catv-gw.skif.net - - [08/Mar/2008:13:25:13 +0200] "GET /css/pngbg.htc HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"

Как-то я уже писал об этой проблеме и о возможных вариантах ее решения, но после увиденного думаю надо ее исправлять быстрее. Странно то, что пнг используется повсеместно, и такие проблемы наверняка возникают не у меня одного. А вот вменяемых решений что то не видно. Использование png.htc/pngbg.htc окончательно идет лесом.

Еще усложняет ситуацию то, что под рукой нет ИЕ для проверки, а ie4linux не держит фильтров, через которые решаются проблемы с png.


Giver: галактеко безопасносте  (2008-03-07 00:28:07)

Да! Мы сделали это! Мы победили адского инфернального кота, который в прошлом был шредером, а потом стал излучать луч, облученный гаммаизлучением. Безпощадная роликовая стена помогла нам в этом.

УГ побежден. Пост захвачен. Галактика в безопасности. Понимаете в чем соль?


Giver: черная няко  (2008-02-27 22:40:01)

Шел я домой. Никого не трогал. Когда уже подходил к своей улице, был буквально в нескольких минутах пути от нее, от дерева, стоящего рядом с дорогой, отделилась тень, и бросилась мне под ноги. Я не придал этому особого значения, сказал краткое "ня" и пошел дальше. Но тень упорно следовала за мной, дошла до моей улицы, и продолжила путь со мной, то перегоняя меня, то немного отставая назад.

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

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

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


Giver: (=  (2008-02-23 18:19:57)
-=carcass=- (18:33:40 23/02/2008)
вчера ради стёба зашел на канал #windows
Razanur (18:33:58 23/02/2008)
и что там?
-=carcass=- (18:33:58 23/02/2008)
таких долпаеппов давно не видел
Razanur (18:34:11 23/02/2008)
оглянись:)

Giver: Холод, да  (2008-02-21 22:00:37)

Холод, да

Поспешно твердеют лужи,
Застенгуты снова куртки
И странно внушает ужас
Пронзительный ветер жуткий.

Он песни поет под вечер,
Ознобом влетая в уши,
И чудятся злые речи
Соседей, что брюки сушат

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

 Колючка


Giver: харьков  (2008-02-14 00:21:45)

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

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


Giver: )=  (2008-02-10 17:45:36)

Частицы прошлого снова догоняют меня. Хотелось бы перестать существовать до завтра. До утра, вроде вот и выходные, классно отдых.. а делать определенно нечего. А из того что можно поделать, нет никакова желания что то делать. Сижу подсвченый синим светом монитора и думаю тяжелые думы. KoЯn и Amatory у же не вставляют, мягкая мелодичная музыка, ага. Те, с кем хотелось бы поговорить или не в сети или заняты. Денег на счету хватает чтобы позвонить только одному человеку, но вряд ли она сейчас хочет слышать меня, да и занята она, как мне и сказала. Ничего не хочу писать, мысли не идут никакие и желания нет совсем, даже не знаю за какой из незаконченных проэктов братся, хотя они в широком ассортименте. Про игры и фильмы я вообще молчу.

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


Giver: еще ие  (2008-02-10 11:23:47)

После детального изучения логов апача, оказалаось, что не кешируются те картики, которые грузятся динамически, и интересная деталь #&151; ИЕ не реагирует на внешние события когда отрабатывают htc. Следовательно, большинство решений на стороне клиента отпадают. На стороне сервера можно поступить следующими путями: либо компанент, либо трансформация страницы непосредственно перед выводом. Как вариант, еще вспоминается предзагрузка картинок из JS и можно будет потом попробовать клонировать саму картинку. Может это и не так рационально, но даже в теории намного быстрее чем сейчас.

Использование компонента очень неудобно, поэтому это на крайний случай, трансформация страницы увеличит загрузку на сервер, чего тоже не хотелось бы. А скрипты могут просто не работать, хренова )=

Еще одна странность ИЕ, он просчитывает offsetHeight и offsetWidth не после загрузки элемента, как все нормальные браузеры, а после загрузки страницы, от этого и не работают зеркала. Также свойство opacity тут завется filter: opacity ну и размеры тоже иногда берет с потолка. Ничего в нем нет хорошего вобщем..


Giver: ие сцук  (2008-02-08 18:55:32)

Посмотрел сюда с ИЕ из-под вмтвари... это ппц. Зеркала так и не работают, действительно, с чего им работать если их никто не фиксил. Но более важная проблема не в этом. Интересным методом устроен кеш в ие. Он-то вроде как и кеширует, но как-то выборочно, мол что хочу то закеширую, что не хочу — нет. Конкретнее эта проблема вылезла вовремя исправления проблемы с альфа каналом в пнг (тоже, кстати, чисто ИЕшнпя проблема), так вот, AlphaImageLoader не кеширует однопиксельные прозрачные гифки, больше того, ие не кеширует png.htc с яваскриптом. Поэтому эти два файла грузяться на каждую пнг-картинку, а, так как теней много и канал не широкий, то прогружается это довольно долго.

Аналогичная проблема и с прозрачными фонами у ячеек таблицы. Как вариант, вынесение вызова pngbg.htc в отдельный класс стилей, и вызов его оттуда. Относительно первичного, результат улучшился, но все равно для нормального отображения недостаточен.

Несколько мыслей по поводу их, правда еще не воплощеных, но идеи следующие:

  1. Заставить ИЕ всё-таки закешировать эти файлы(png.htc, pngbg.htc, 1.gif), например передав особые заголовки HTTP. Хотя все заголовки, необходимые для кеширования, уже передаются.
  2. Добавить модуль xJSc который будет генерировать тег img соответсвенно браузеру. Но тут остается возможность того, что ИЕ не будет кешировать саму картинку, а будет грузить ее каждый раз с сервера, хотя не буду утверждать. Даже в таком случае можно будет вообще избавится от png.htc и pngbg.htc
  3. Загружать все что нужно при загрузке страницы, и потом скриптом делать прозрачность. Вопрос о динамических встваленных картинках, например в том же зеркале
  4. После вывода страницы, заменять все вхождения тега img подогнанный под ие.

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


Giver: хачуууу такой винт  (2008-02-07 22:31:34)

Интересная цена на винт в одном магазине родила такую ситуацию

22:23:25 Razanur: HDD SATA 750Gb Seagate Barracuda 7200.11 32Mb cache
Гарантия: 12 мес. Наличие: +
Цена: 184 грн.
22:23:37 Razanur: ф чем подвох :)
22:26:05 Bes: HDD SATA 750Gb Seagate Barracuda 7200.11 32Mb cache
Гарантия: 12 мес. Наличие: +
Цена: 184 грн
22:26:09 Bes: где найоп?

Giver:   (2008-02-07 15:13:44)
Что человек есть - экземпляр

Что человек есть - экземпляр
Объект из класса человеков
В своем живет неймспейсе
Имеет метод поеданья чебуреков
И в поликлиннике больничный формуляр

От предков унаследован как класс
Статические методы хранит
Полиморфизмом обладает
Ночами в дырки две сопит
И вместо данных потребляет квас

Но, зачастую, действуя спонтанно
Он потребляя памяти не в меру
Инкапсулирует в себе
Избыточность терпения и веру
Что очень хорошо, но странно

  Бабичев Николай

Giver:   (2008-02-06 04:23:39)

* * *

Я могу тебя очень ждать,
Долго-долго и верно-верно,
И ночами могу не спать
Год, и два, и всю жизнь, наверно!

Пусть листочки календаря
Облетят, как листва у сада,
Только знать бы, что все не зря,
Что тебе это вправду надо!

Я могу за тобой идти
По чащобам и перелазам,
По пескам, без дорог почти,
По горам, по любому пути,
Где и черт не бывал ни разу!

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

Я могу для тебя отдать
Все, что есть у меня и будет.
Я могу за тебя принять
Горечь злейших на свете судеб.

Буду счастьем считать, даря
Целый мир тебе ежечасно.
Только знать бы, что все не зря,
Что люблю тебя не напрасно!

Эдуард Асадов


Giver: бессоница  (2008-02-06 03:48:54)

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

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

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

Что ни говори а продуктивность работы в течении дня заметно падает от нехватки сна ночью. И решения проблемы тоже не видно. Пока. А дальше видно будет. Не исключен вариант что само собой пройдет. Хотя хотелось бы как нибудь побыстрее..


Giver:   (2008-02-05 12:58:30)

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

Или поставить полноценный офис в 10 мегабайт.. вот пытался ставить Siag Office. Как ни странно — успешно. Только вот офис оказался неполноценным (=. Работы дивелоперам немеряно, но для неприхотливого пользователя (у которого нет другого выбора) в самый раз

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

Что то вообще последнее время стал задумываться о прошлом, и хотеть обратно...


Giver: читая логи..  (2008-02-04 15:09:06)
SilentTears:слушай если я сейчас начну тебе объяснять французские падежи и принцип подбопа окончание в пассиве ты что т опоймешь?
Giver:если дома
Giver:то буду стараться изо всех сил
SilentTears:я просто не разбираюсь
SilentTears:старайся не старайся перед этимм надо учить его

* * *

SilentTears:ну чт ты еще можешь делать кроме как работать
Giver:могу отдыхать
Giver::))
SilentTears::-)
Giver:я работаю только на работе
SilentTears:логично
Giver:учусь в учебнице
Giver:и отдыхаю в ......

Giver: Cтих, пришедший ко мне вместе с каськой  (2008-02-04 03:31:23)
Осень

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

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

/Киев - 1990 год/

Giver: система управления  (2008-02-04 03:19:48)

Такс, вроде доделал добавление/редактирование/удаление в модуле для NeCMS2 для обработчика blog, который в будущем должен стать neSimple. точне доделал neModule, базовый класс модуля для системы управления, пока, правда, на примитивном уровне отображение таблицы все равно требует отдельного конфига, но форма уже генерируется полностью по структуре базы.

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

Сейчас докачиваю Eclipse-php может с ним займусь рефактором, хотя желания нет ни малейшего.


Giver:   (2008-01-21 15:40:11)
You're afraid she might turn you down
All your hopes dashed to the ground
Nobody loved you, nobody will
Why should you even try...but still...

Ayreon - Love

Cold winter nights, cold winter dreams,
Reflecting the sound of my heart; it`s my taste of freedom.
Cold winter nights, cold winter dreams,
Don`t try to tear me apart; cold winter dreams

Accept - Winterdream

Life is short
So learn from your mistakes
And stand behind
The choices that you made

Face each day
With both eyes open wide
And try to give
Don't keep it all inside

Don't let the day go by
Don't let it end
Don't let a day go by in doubt
The answer lies within

Dream Theater - The answer lies within

Giver:   (2008-01-16 18:10:06)
— О да, — оживилась леди Эстер, видимо, садясь на любимого конька. — Найти свой путь — самое главное в жизни любого человека. Я глубоко убеждена, что каждый человек неповторимо талантлив, в каждом заложен божественный дар. Трагедия человечества в том, что мы не умеем, да и не стремимся этот дар в ребенке обнаружить и выпестовать. Гений у нас — редкость и даже чудо, а ведь кто такой гений? Это просто человек, которому повезло. Его судьба сложилась так, что жизненные обстоятельства сами подтолкнули человека к правильному выбору пути. Классический пример — Моцарт. Он родился в семье музыканта и с раннего детства попал в среду, идеально питавшую заложенный в нем от природы талант. А теперь представьте себе, дорогой сэр, что Вольфганг Амадей родился бы в семье крестьянина. Из него получился бы скверный пастух, развлекающий коров волшебной игрой на дудочке. Родись он в семье солдафона — вырос бы бездарным офицериком, обожающим военные марши. О, поверьте мне, молодой человек, каждый, каждый без исключения ребенок таит в себе сокровище, только до этого сокровища надобно уметь докопаться! Есть очень милый североамериканский писатель, которого зовут Марк Туэйн. Я подсказала ему идею рассказа, в котором людей оценивают не по их реальным достижениям, а по тому потенциалу, по тому таланту, который был в них заложен природой. И тогда выяснится, что самый великий полководец всех времен — какой-нибудь безвестный портной, никогда не служивший в армии, а самый великий художник так и не взял в руки кисть, потому что всю жизнь проработал сапожником.

Борис Акунин. Азазель

Giver:   (2007-09-12 22:11:12)
форма вставки сообщения еще не готова, вставляею через пхпмайадмин
уловил себя на мысли что тру кодеры должны вставлять только через консольного клиентка mysql

Giver: всем привет!  (2007-09-05 23:15:48)
ну вот я и добавил первый пост, особого смысла он не несет, толька для тестинга, но скора тут будут живые посты:)