Мой новый блог

середа, 30 вересня 2009 р.

Юридические услуги

Магазин юридических услуг

Юредические услуги любого типа , от магазина юредических услуг.
готовые фирмы 2008

середа, 16 вересня 2009 р.

NetHack. Об игре

Многие, уверен, знают эту замечательную игру и убили на нее не одну неделю своей жизни. По моему скромному мнению — это одна из лучших игр из ныне существующих.
Появилась она очень давно — в 1987 году, через семь лет после выхода Roque — прародителя нетхака и основателем жанра "rogue-подобных игр".
Nethack — самый яркий ее представитель.


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



Графика


Основная проблема современных игр с современными требованиями — это нарисовать все то, что происходит. Я думаю, поэтому в современных играх нельзя взять чей-то труп и орудовать им, как оружием. Или взять гранатомет и использовать его в качестве дубинки. Или освежевать убитого дракона и натянуть на себя его шкуру.
Как это нарисовать? Как должен себя вести персонаж и окружение в таком случае? Не нарисуют, а если нарисуют, то схематически. Приходиться додумывать :)
В nethack'е эта проблема решена гениально — додумывайте все сами. Впрочем, это общая особенность всех ASCII-art игр.
«Видите, символ процента? Это еда. Она зеленая? Тогда это или труп лепрекона, или водоросли.» Собственно графическим адаптером выступит ваше воображение :)
Через некоторое время вы будете рефлекторно бояться пурпурной «L», ибо для вас это уже страшный монстр Архи-Лич, который проклянет ваш магический рюкзачок (что если не смерть, то жизнь высокой ценой) и практически не обращать внимание на ужей (newt) ползающих у вас под ногами в виде желтеньких двоеточий.
Конечно же есть графические версии этой игры. Даже про 3D слышал. Но это все — только мешает. Попробовать, конечно, стоит. Я, например, попробовал и вернулся назад к любимому ASCII-art.

По просьбам читателей. Графическая версия выглядит вот так:


Кстати, еще есть изометрические графические версии: заброшенная Falcon's Eye и ныне здравствующая Vulture's Eye. (Infernalподсказал)


Сюжет


Сюжет прост до безобразия. Вы, искатель приключений, спускаетесь в глубокое-глубокое подземелье в поисках амулета Йендора. Спустись, возьми, принеси и получи вечную жизнь в подарок. Хеппи энд.
Сюжет не отвлекает от игрового процесса и абсолютно не указывает вам что нужно делать сиюминутно. И это самое главное.
И, в качестве бонуса у вас будет один единственный квест (уникальный для типа персонажа), по окончанию которого получаете замечательный актефакт… Какой? It depends
Одна игра — одна цель. Ничего лишнего.


Геймплей и возможности игры



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

Типичная ситуация: ваш персонаж в трех шагах от смерти. Стоит рядом агрессивно настроеный жирный тролль, который и не собирается умирать. Типичная RPG предлагает на ваш выбор весьма скудный набор действий: дерись до смерти, бутылочка жизни и дерись до смерти или беги со всех ног.
А в нетхаке набор решений ситуации безграничен. Можно, например взять волшебную палку-копалку (wand of dig) и колдонуть под ноги. Провалимся на этаж ниже, зато выживем. Или взять маркер и написать на полу волшебное слово «Elbereth». Ни один монстр не смеет ступить на эту надпись. Или вообще — использовать заклинание полиморфа на монстра и надеятся, что он превратиться в что-то маленькое и жалкое. Или, достать из заначки труп кокатриса и вмазать тролю что есть силы. Кокатрис превращает в камень всех, до кого дотронется (надеюсь, ваш персонаж надел перчатки?). Вместо тролля у вас будет статуя тролля. Живем дальше. Свиток телепортации тоже весьма эффективно спасет вас он немируемой гибели. Телепортируйтесь подальше. Оденьте кольцо невидимости. И ваш персонаж тихонечко уберется зализывать раны. Прочитайте свиток земли (scroll of earth) на тролля свалится огромный валун. Читайте свиток геноцида (scroll of genocide) и уничтожте всех троллей. Помолитесь, наконец своему божеству (alt + p)! Бог услышит ваши молитвы и восстановит вам здоровье на правах чуда. Впечатляет?


Сохраняйтесь почаще

Все эти потуги оправданы, ибо самое мощное заклинание всех времен и народов «save and load» не работает, как и в diablo, например. Только «сохраниться и выйти». И, как в диабло на хардкоре, персонаж может умереть лишь один раз :) Крепко задумайтесь, прежде чем что-либо сделать. Это может оказаться фатальным для вашего персонажа!


Знание английского и переводы

Было сделано куча попыток русифицировать nethack, дабы сделать его более популярным среди русскоязычного населения. Но пара ночей и красные глаза позволят вам свободно ориентироваться в английской версии. Могу только дать совет ставить сразу английскую версию, и переводить все, что непонятно со словарем. Сложности с языком испытываешь первых десять смертей.
Тем, кто все-таки решился на русский нетхак — вот вам ссылка. Русский неполноценный, вперемешку с английским, но все же есть. Но, умоляю! Попробуйте в английскую! :)


Ссылки

На последок — порция ссылок на все случаи жизни.

* Официальный сайт игры
* Нетхако-вики
* Сообщество живого журнала «nethack_ru»
* Русская википедия о нетхаке со своей порцией ссылок
* Английская википедия о нетхаке со своей порцией ссылок
* Спойлеры. (самая полезная ссылка, после того как разобрался с управлением)



Понравилось? Тогда продолжение следует.


Бесславно убит продавцом магазина. Поделом! Не нужно было дверь ногой вышибать :)
Если сообщество оценит — напишу еще что-нибудь.
P.S.В «Игры» бы перенести... Спасибо. Перенес в «Игры»

Навіщо Білайну Камаз за 5 мільйонів?

Коли в одній невеликій точці на карті збирається стотисячний натовп, за нею треба око та око, а то накоїв ще чого-небудь - потім клопоту. От і доводиться нашим правоохоронцям, про доблесть яких ходять легенди, приїжджати туди і стежити своїми пильними очима за тим, щоб все було добре. Та й медики не залишаються осторонь: ці чудові люди в білих халатах складають компанію панам в сірій формі на той випадок, якщо комусь раптом стане не дуже добре. Але це тільки вершина айсберга! Насправді, на заходах, подібних до реконструкції Бородінської битви, яка відбулася 6 вересня в ста кілометрах від Москви, працюють тисячі інших людей, які роблять багато різних корисних справ, щоб усім, хто приїхав туди відпочити, було максимально комфортно. У їх рядах можна було зустріти також і двох людей у чорно-жовтих куртках на білому Камаз вартістю п'ять мільйонів рублів.

У стороні від основних гулянь, в чистому полі ці двоє розмістили першу і поки єдину в Росії мобільний базову станцію, що забезпечує в місцях скупчення людей до 200 додаткових каналів голосового зв'язку в один момент часу. Проходив повз люди навряд чи здогадувалися про призначення вантажівки зі зростаючою з нього 17-метрової щоглою, і лише ті, хто курсував зовсім поруч, могли помітити на його бортах емблеми компанії Білайн і сказати глибокодумно: «Ах от чому в мене такий гарний прийом!»

Строго кажучи, згаданих грошей коштує, звичайно, не сам Камаз (для довідки: новенький камаз коштує близько 1 млн. руб), і навіть не здоровенний білий контейнер позаду кабіни, а те, що знаходиться всередині нього: стійки з комунікаційним обладнанням Ericsson і Alcatel , а також антени, що ростуть з даху.

З «похідного» стану в робочий МБС може перейти приблизно за годину: у боку висуваються гідравлічні упори, шасі вирівнюється, далі починається інтеграція привезеного обладнання та існуючої мережі. Вибір способу зв'язку цілком і повністю залежить від умов, в яких опинився високотехнологічний Камаз: автоматика може самостійно навестися і налагодити передачу даних через супутник, через релейну антену або навіть за допомогою лазера. Правда, максимальна відстань, на якому можна ефективно використовувати лазер, - порядку півтора кілометрів.

Природно, для забезпечення безперервного зв'язку на 200 голосових лініях одночасно потрібно досить багато енергії, а тому оператори мобільного базової станції насамперед шукають місцеве джерело електрики. Але навіть якщо його не вдається знайти, вони не журяться довго, тому що на МБС встановлений дизельний генератор, а поруч з ним стоїть 700 літрова каністра з дизельним паливом, та й у баках у Камаза теж не 95-й бензин, так що час автономної роботи такої станції досягає двох тижнів, а то й більше. В цьому випадку мова йде про те, скільки витримає екіпаж: у наявності хоч і є два спальних місця, розраховані вони більше все-таки на нетривалі терміни.

Постає питання, навіщо я вам це розповідаю вдруге, якщо презентація цієї ж самої мобільної базової станції пройшла в минулому році? Справа в тому, що тоді тільки проводилися її випробування, і виходили різні дозволи. А зараз - це вже цілком працездатний зразок, який побував у кількох «гарячих точках».

Чи варто чекати відповіді від інших операторів на введення в експлуатацію першого МБС Білайну, поки сказати складно. МТС ні про що таке не заявляла, а в Мегафоні взагалі вважають подібні розробки безперспективними. Але факт залишається фактом: на минулому святі найбільш мобільними себе відчували абоненти жовто-смугастих, радісно повідомляючи оточуючим про наявність впевненого прийому і про відсутність збоїв в мережі.

Вахтер: на сторожі системи

«Одного разу, в холодну зимову пору,
Залили на сервер бекдорчіков гору ... »

Народне адмінское творчість



Вобщем як то раз на одному з серверів виявився php-shell, через який злобні хакери зламали затишний дневничок ™ хорошої людини.
Після двогодинного колупання в логах Апача знайшлася діра, через яку залили шелл.
Діру прикрили, дневничок повернули до життя з резервних копій, і сіли думу думати.

Після третьої пляшки пива народилася ідея: «А чому б не відловлювати виконання системних викликів з php скриптів?».
Сенс у тому, що більшість php-Шелл так чи інакше використовують функції exec ();, system ();, shell_exec (); або passthru ();. Відповідно до виконання цих функцій можна перехопити і тихенько в лог записати, що такого-то числа такий-то скрипт на такий-то рядку викликав функцію exec () з параметром «rm-rf /».
Сказано-зроблено. Доброму людині kastigar було поставлено тех. завдання і робота закипіла.
Вже як він расковирівал тонкощі Zend Engine я розповідати не буду, але врешті-решт народилося розширення для PHP4/PHP5 під кодовим ім'ям BAXTEP.
Спочатку ми не планували викладати код в загальний доступ, бо писалося все загалом і в цілому «для себе» і «від і до» не тестувалося, але дух open source все-таки взяв своє - і исходники були викладені на GoogleCode.

Структура байт-коду віртуальної машини Java

Останнім часом на Хабре з'явилися статті які зачіпають маніпуляцію байт-коду. Що змусило мене опублікувати дотримуюся статтю присвячену його структурі.

У платформи java є дві особливості. Для забезпечення платформ програма спочатку компілюється в проміжна мова низького рівня - байт-код. Друга особливість завантаження виконуваних класів відбувається за допомогою розгортаються classloader. Це механізм забезпечує більшу гнучкість і дозволяє модифікувати виконуваний код при завантаження, створювати і довантажувати нові класи під час виконання програми.

Така техніка широко застосовується для реалізації AOP, створення тестових фреймворк, ORM. Особливо хочеться відзначити terracotta, продукт з гарною ідеєю кластеризації jvm і на всю котушку використовує модифікації байт-коду. Ця замітка буде присвячена огляду структури байт-коду, першій частині цієї сильної зв'язки.


Кожному класу в java відповідає один скомпільованій файл. Це справедливо навіть для підкласів або анонімним класів. Такий файл містить інформацію про ім'я класу, його батьки, список інтерфейсів які він реалізує, перерахування його полів і методів. Важливо відзначити, що після компіляції інформації що містить директива import втрачається і всі класи іменуються тепер через повний шлях. Наприклад в місце String буде записано java / lang / String.

Найцікавіше як будуть виглядати методи класу в байт-коді. Будемо спостерігати во, що трансформується наступний клас:

package org;

class Test (
private String name;

public String getName () (
return name;
)

public void setName (String name) (
this.name = name;
)
)


Почнемо з заголовка. У ньому міститься інформація про назву методу те, що метод викликається без параметрів і тип повертається аргументу.

Байт-код стекол-орієнтована мова, схожий за своєю структурою на асемблер. Що б провести операції з даними їх спочатку потрібно покладе на стек. Ми хочемо взяти полі у об'єкт. Що б це сделять потрібно його покласти в стек. У байт-коді немає імен змінних, у них є номери. Нульовий номер у посилання на поточний об'єкт або у зміною this. Потім йдуть параметри для виконання методу. Потім інші змінні.

Команда ALOAD 0 кладе змінну this на стек. Що б на стек покласти тип даних, відмінний від посилання потрібно скористатися іншою командою. Для long буде LLOAD, а для doubles [] буде DALOAD.

Наступна команда GETFIELD, прибирає зі стека посилання на об'єкт і кладе примітивний тип або посилання на поле даного об'єкта. У неї є два параметри. Перший ім'я класу, друге ім'я змінної. Якщо ж змінна статична, то попередньо класти на стек нічого не потрібно, а команду потрібно замінити на GETSTATIC з темі ж параметрами.

Остання команда говорить, що метод завершений і повертає значення типу посилання зі стека.

Сетер має трохи більш складну структуру.

public setName (Ljava / lang / String;) V
ALOAD 0
ALOAD 1
PUTFIELD org / Test name
RETURN


Даний метод нічого не повертає. Перші дві команди кладуть на стек змінну this і параметр для виконання методу. Потім викликається команда PUTFIELD (PUTSTATIC для статичного поля) яка встановить значення поля об'єкту і прибере зі стека останні два значення. Остання команда вихід з методу.

Додамо до нашого об'єкт ще пару методів і подивимося який байт-код їм відповідає.

public void forTest (Boolean b) (
System.out.prinln (b);
)

public Long testMethods (Collection testInterface) (
Long a = System.curretM ();
forTest (testInterface.contains (a));
return a;
)


testMethod має такі уявлення.

INVOKESTATIC java / lang / System currentTimeMillis () J
LSTORE 2
ALOAD 0
ALOAD 1
LLOAD 2
INVOKESTATIC java / lang / Long valueOf (J) Ljava / lang / Long;
INVOKEINTERFACE java / util / Collection contains (Ljava / lang / Object;) Z
INVOKESTATIC java / lang / Boolean valueOf (Z) Ljava / lang / Boolean;
INVOKEVIRTUAL org / Test forTest (Ljava / lang / Boolean;) V
LLOAD 2
INVOKESTATIC java / lang / Long valueOf (J) Ljava / lang / Long;
ARETURN


Перша команда викликає статичний метод у класу System. Друга запам'ятовує результат виклику методу currentTimeMillis у змінній з другим номером. Потім ми кладемо змінну this, параметр методу і змінну з номером 2 на стек. Перетворять змінну до типу java / lang / Long. І перевіряємо, що вона в нас міститься в колекції, викликаючи метод у параметра виконується. У нас параметр інтерфейс, тому застосовується команда INVOKEINTERFACE. Для методу класу необхідно використовувати INVOKEVIRTUAL. Що б викликати метод у об'єкт або інтерфейсу необхідно, що б на стеку лежав об'єкт, потім параметри методу що викликається. У результаті виклику методу вони замінюватися на результат або просто заберуться з стека, якщо метод нічого повертає. Остання три команди кладуть зміну на стек, перетворюють її на об'єкт і повертають її як значення методу.

Що б завершити наш екскурс в байт-код додамо останній метод і подивимося на цикли і умовні оператори.

public void testAriphmentics () (
int i = -17;
while (i <10) (
if (i <0) (
i = i + 7;
)
i = i * 13;
)
)


Він в байт-коді буде виглядати так

ACC_FINAL -17
ISTORE 1
Label: L1466604866
ILOAD 1
ACC_FINAL 10
IF_ICMPGE L329949514
ILOAD 1
IFGE L658705244
ILOAD 1
ACC_FINAL 7
IADD
ISTORE 1
Label: L658705244
ILOAD 1
ACC_FINAL 13
IMUL
ISTORE 1
GOTO L1466604866
Label: L329949514
RETURN


Перші дві команди ініціалізує змінну i (з номером 1) значенням -17.

Далі у нас починається тіло циклу. Для реалізації якого буде потрібно мітки,
команда переходу і умовний оператор. У тілі нашого методу аж цілих три позначок. Перша позначка означає початок циклу. Друга потрібна для умовного оператора, а остання знаменує кінець циклу. Умовного оператор має один параметр мітку переходу. Перед тим, як його викликати сравніваеми значення повинні лежати на стеку. Для порівняння з нулем використовується окрема команда. Для кожного типу є свій оператор порівняння. Для int він IF_ICMPGE. Після порівняння сравніваеми значення забираються зі стека. Для арифметичних дій з двома змінним їх так само як і для умовного оператора потрібно попередньо покласти на стек. Після виконання вони знімаються з стека, а на їх місце кладеться результат.

На це короткий екскурс в байт-код закінчено, деякі питання такі як виключення, синхронізація не були порушені. Я сподіваюся, що маючи уявлення про байт коді читач легко впоратися з ними. У наступній частині ми розглянемо інструменти які застосовуються для модифікації байт-коду.

http://math-and-prog.blogspot.com

Питання безпеки у веб-технологіях / Microsoft відмовилася патчити Windows XP

від Хабрахабр: автор: alizar
Кількість користувачів, яким сподобалася ця запис: 4
На подив фахівців з безпеки, компанія Microsoft відмовилася патчити недавно виявлену уразливість TCP / IP у Windows XP і Windows 2000. Один з провідних менеджерів з безпеки програм Microsoft Едріан Стоун сказав, що цей фрагмент исходников занадто старий, має вік від 12 до 15 років, і розібратися в коді на цьому рівні «просто нереально» [backporting that level of code is essentially not feasible]. Ця фраза була сказана в прямому ефірі щомісячного вебкаста з безпеки (стенограма), відповідаючи на запитання слухачів.

Два бага в стеку TCP / IP були виявлено 8 вересня. Уразливість зачіпає також Windows Vista, Windows Server 2003 і Windows Server 2008. Для трьох згаданих систем вийшов апдейт MS09-048, а от до Windows 2000 і Windows XP патча можна не чекати. Для захисту від шкідливих TCP / IP-пакетів користувачам Windows XP рекомендовано скористатися функціоналом вбудованого файрвола.

Потрібно нагадати, що Windows XP - найпопулярніша в світі ОС на сьогоднішній день. За умовами угоди для користувачів, Microsoft зобов'язана випускати апдейти безпеки для Windows XP аж до квітня 2014 р., пише Computerworld.

Відмова патчити знайдену уразливість для системи, яка знаходиться на підтримці - досить рідкісне явище. За словами Стоуна, останній раз Microsoft йшла на такий крок у березні 2003 року з Windows NT 4.0.

Блог

ВІн знову оживе !!
Мой блог