Archive for Березень 2009
Як швидко перейти на Лінукс?
Неможливо перейти на Лінукс, поки є можливість користуватися віндовсом. Принаймі так було для мене. І от вчора мені віндовс таки осточортів доконечно. До того в таких випадках. я ставив Убунту на розділи розміром 4-5 Гб (скільки було вільного місця). І потім не розібравшись з настройкою інтернету, перезавантажувався назад в звичне середовище.
Але цього разу. мені ніхто не допомагав ставити Лінукс. Я знайшов на ФТП дистрибутив Ubuntu_8.10_i386_server і поставив його. Перше що мені сподобалось – LAMP, який ставиться одною галочкою. Після завантаження встановленої системи перше що мені не сподобалося – відсутність графічної оболонки. З команд BASH я знав лише cd ls man help sudo halt. За допомогою них, мені вдалося виявити, що графічна оболонка навіть не інстальована. Одним словом – чистий сервер.
Прийшлось знову ставити віндовс, качати з ФТП Ubuntu_8.10_i386_desktop і перезаписувати образ. Я вирішив все таки залишити вінді життя, і при установці Убунти відрізав їй 40 гігабайт, віндовсу залишалося 20 гігабайт. Після повідомлення про успішну установку я перезавантажив комп’ютер, і…
Виявилось, що GRUB погано настроївся, тому завантажується все одно віндовс. Ніякого меню вибору ОС, чи ще щогось в тому роді. Тоді я зовсім розізлився. Ще раз запхнув LiveCD в комп’ютер, і зніс віндовс повністю.
Знищивши таким чином шляхи до відступу, я почав лазити по локальних форумах, і довідці в надії знайти спосіб проватися сюди. Нічого зрозумілого мені я не знайшов, тому ліг спати. Була вже 3 ночі.
Десь в десятій ранку, я почав шукати місцевих пінгвіноводів ( на щастя я живу в гуртожитку), і от нарешті в результаті редагування кількох системних файлів, настройці якихось таємничих роутів, і частому вживанню заклинання sudo, я знову в ефірі!
Правда враження таке, ніби квартиру поміняв. Навіть не квартиру, а країну. Тут всі так дивно говорять. І провідна релігія GNU. І якщо задавати забагато питань прямо в обличчя тобі скажуть: “RTFM”. І поки що немає .avi кодеків, анімації Flash, і багатьох інших зручностей. Що поробиш, квартира нова, робочий стіл поки що порожній. Але думаю скоро звикну. Звісно я буду скучати за моєю Visual Studio, але зі мною все ще залишився вірний ВогнеЛис. А через нього думаю можна буде познайомитися з іншими членами його GNUшної компанії.
Як намалювати графік на веб-сторінці
Інколи потрібно розмістити на веб-сторінці якийсь графік. Зазвичай найпростіше це зробити за допомогою картинки. Але, в тому випадку, якщо ми хочемо унаочнити якусь динамічну інформацію, наприклад температуру повітря, чи статистику відвідувань, потрібно використати щось інтерактивніше.
Якщо припустити, що сторінка генерується за допомогою PHP, то можна обрати кілька рішень.
- Використати графічні можливості PHP.
Зазвичай використовується при створенні капчі. Сам поки що не користувався. Єдиний мінус, який я знаю — те що картинка є картинкою, і тому важка для передачі. Хоча, при сучасних лініях … - За допомогою чистого HTML.
Правда таким чином можна зробити тільки стовпчикову гістограму. Беремо якусь картинку 2 на 2 пікселі, потрібного нам кольору. І зі скрипта PHP виводимо:<img src="..." width="..." height="висота_нашого_стовпчика"/>. Ось так. Тільки такий спосіб доволі незвичний. Таке я бачив тільки в одній онлайн-грі, де таким чином показували залишок здоров’я. - За допомогою Flash.
Так можна добитися дуже хорошої графіки, і анімації. На Flashі працюють діаграмки Wordpres — CMSки оцього от сайту. Правда як це зробити — шукайте тут. - За допомогою JavaScript.
От як це зробити, я вам зараз і розкажу…
Намагаючись вирішити вищеописану проблему, я наткнувся на один сайтик, де розміщено безплатну графічну бібліотеку для JavaScript – Рафаель. І з її допомогою задачка розв’язується.
Перше що потрібно зробити — підключити бібліотеку рядком:
<script src="raphael0.js" type="text/javascript" charset="utf-8"></script>
Далі, потрібно визначитись, а де саме будем малювати? Є два варіанти — прямо в вікні, або в якомусь елементі HTML. В обох випадках створюється щось на зразок канви (полотна для малювання). В першому випадку в функцію створення канви передається чотири координати області малювання (всі координати в пікселях), а в іншому — ідентифікатор елемента, і його розміри. Наприклад:
var canvas = Raphael("diagram",300,200); //Для конкретного id
var canvas = Raphael(100,100,400,300); //Для всього вікна
Варто також зауважити, що якщо ми описуємо скрипт до того, як завантажиться елемент, по якому він буде малювати, то дістанемо фігу. Тому, варто починати малювання, вже після завантаження сторінки. Для цього просто пишіть код в функції, яку присвойте події window.onload . Тепер, коли, всі приготування до малювання відбулися, можна робити пробу пензля.
var c=canvas.circle(100,100,100); //Ану здогадайтеся, що я хотів намалювати?
Якщо при завантаженні сторінки ви десь побачили коло, значить запрацювало. Якщо ж ні — треба шукати помилку
. Обережно, JavaScript чутливий до регістру.
Тепер, спробуймо намалювати щось більш схоже на графік. Для початку — задамо інформацію, яку будемо виводити. Думаю, найзручніше це робити масивом:
var f=Array(11,100,120,70,150,39,45,120,173,13,140,123);
Далі — створюємо об’єкт лінії.
var ln=r.path({stroke:"#040"});
Поясню, що за дивні параметри в функції. Об’єкти, які ви малюєте, мають атрибути, такі як розміри, координати, кольори, і тому подібне. От, ці атрибути можна задавати за допомогою методу attr двома способами: attr("fill","#000"), і attr({fill:"#000"}). В обох прикладах, ви бачили як змінювати колір заливки об’єкту на чорний. Параметр stroke задає колір рисок. Загалом все віддалено нагадує Windows GDI.
Далі задаємо початкову позицію пера, за допомогою методу moveTo(x,y). І малюємо лінії методом lineTo(x,y). Для любителів чогось на зразок LineRel(x,y) — можна включити опцію, коли всі координати будуть відносні. Для цього викликаємо метод relatively(). Приклад:
var c = paper.path({stroke: "#036"}).relatively().moveTo(10, 10).lineTo(50, 50);
В принципі, цього має вистачити, щоб намалювати графік. Що вийшло в мене — дивіться на картинці, і код нижче. Хочете знати більше — читайте документацію. Якщо не зрозуміло — питайте в коментарях, відповім.
<!-- Прошу вибачення за негарний заголовок, але WordPress, трохи неадекватно сприймає тег <html>, тому буде такий.--> <html> <head> <title>Graphics</title> <script src="raphael0.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" charset="utf-8">
window.onload = function()
{
var r = Raphael("picture",300,200);
var f=Array(11,100,120,70,150,39,45,120,173,13,140,123);
function line(x1,y1,x2,y2)
{
var ln=r.path({stroke:"#040"}).moveTo(x1,y1).lineTo(x2,y2);
}
for(i=30;i<300;i+=30) line(i,0,i,200);
for(i=10;i<200;i+=10) line(0,i,300,i);
var curve=r.path({stroke:"#000"}).moveTo(0,f[0]);
for(i=0;i<=10;i++)
{
curve.lineTo(i*30,f[i]);
var c= r.circle(i*30,f[i],3).attr({stroke:"#00f", fill:"#00f"});
}
curve.attr("stroke","#f00");
};
</script> </head> <body bgcolor="#000f00"> <table align="center" height="100%"> <tr><td> <table border="1"> <tr><td id="picture" width="300" height="200" bgcolor="#000000"></td></tr> </table> </td></tr> </table> </body> </html>
Антиаукціон
Як тільки я вивчив PHP, одразу взявся робити глобальні онлайн проекти
. Першою моєю задумкою була проста для користувача, і програміста гра — антиаукціон. І хоча мені казали, що ідея не оригінальна, і що таку гру вже проводили десь по телевізору, я все одно старався переконати, в цікавості. Тим більше, що онлайн гри, та і ще безплатної я не бачив. А про той антиаукціон, що по телевізорі, я випадково почув від тата. Як і мало бути — проект провалився, і в ньому взяли участь лише ті люди, яким я особисто, кілька десятків хвилин пояснював в чому тут цікавість.
Вирішив записати згадку про цей проект, для історії. Крім того, так як мій блог, є трохи успішнішим, ніж перші спроби в web (Я вже мовчу про мій шкільний narod.ru, де я тренувався в старенькому HTMLі, і де за 2 роки було 20 відвідувачів). Правильно: „який продукт — такий і попит”
. Тому думаю тепер в антиаукціон може зіграти більше людей. Наводжу копію сторінки проекту:
Антиаукціон – це гра, з дуже простими правилами. Кожен учасник вказує додатнє число – ціну, за яку він купить приз в копійках. Учасник який назвав найменшу унікальну ціну – переміг. Кожен грає лише раз.
Унікальна ціна – ціна названа лише одним учасником.
Суть гри полягає в відсутності хоч якоїсь стратегії. Найменша можлива ціна – 1. Меншу за неї точно ніхто не назве. Але якщо ви назвете 1, то яка гарантія того, що хтось не зробить так само? Тому добре було б назвати 2. Але знову ж таки якщо ви до такого додумались, то де гарантія що до цього не додумався хтось інший? Власне моя перша стратегіяя полягала в тому що моє улюблене число – 13. Але знову ж таки хто зна в кого ще воно улюблене? Приходиться думати що ви знаєте про людей. Так можна придумати і свою нумерологію.
В оригіналі, кожен учасник гри мав би заплатити свою ціну, таким чином окупивши організаторам приз. Але так як наша гра – онлайн, то переможець отримає файл з записами всіх чисел гри. Згодьтесь, інформація цікава. Забув сказати. Отримає, якщо введе правильну адресу пошти. Або добре. Якщо зіграють сто людей, то переможець дістане пиво/шоколадку. Одним словом подивимось.
Поки що безпека лежить в основному на совісті користувачів. База даних захищена паролем, пароль в секретному файлі, а файл PHP. Тобто теоретично все надійно. Але я не спеціаліст з захисту інформації, тому гарантії не даю. Я не заставляю вас вводити всякі циферки, які прочитати не можливо, і не відправляю листи з вказівками перейти за такою то адресою для продовження регістрації. Тому будьте добрі, і зробіть все акуратно. Крім того ввести ціну можна лише раз. Думайте добре.
Першу гру робим на сто учасників. Тобто коли учасників стане 100, то переможець отримає файл. Потім подивимось. Може переведемо гру в гру з вебманями, кількість учасників збільшиться і призом стане автомобіль. Але то дуже далеке майбутнє.
Цю сторінку було завантажено 262 раз.
А ось теперішній результат:
userID value 0000000006 1 0000000002 4 0000000015 4 0000000016 4 0000000008 11 0000000005 12 0000000004 17 0000000003 46 0000000009 53 0000000010 97 0000000007 254
Результатів звичайно мало, для точної статистики, але видно, що чомусь лідирує 4. І звісно, переміг самий наглий. Діставши більше результатів, можна точніше говорити, про якісь правила для досягнення виграшу. Скоріше за все, ціну треба вказувати залежну від кількості учасників. Виграв якийсь user1, а я чомусь був серед тих, хто запропонував четвірку. А тепер, стираю базу, можна придумувати свої ціни знову.
Дизайн-документ гри
Хороші ігри виходять не так завдяки новітній графіці, і крутизні програмістів, а завдяки продуманому дизайну. Цим займається гейм-дизайнер. Саме він пише гру, і пояснює програмістам що саме вони роблять. Робиться це за допомогою дизайн-документу. Я звісно не гейм-дизайнер, але вчитися ніколи не пізно. Тому спробував написати свій перший дизайн-документ, до одного навчального проекту КПІ, який і виставляю на ваш осуд:
Зоряні лицарі
Дизайн-документ
Жанр — аркада з елементами багатокористувацької онлайн рольової гри.
Мета — передати атмосферу ігрової класики: „Астероїдів” і „Космічних воєн”, з додаванням сучасного елементу багатокористувацької гри.
Опис
Гравець отримує спадок від батька, який вже занадто старий для космічних польотів, і хоче пожити вдома, на своїй рідній зірці Сонце. Батько є великим феодалом — космовласником, і зірка належить йому. Щоправда, старіючи він дуже збіднів, тому в його власності тільки одна зірка. Син має купити за гроші спадку космічний корабель, і навчитись літати.
Синові потрібно відродити колишню могутність батькового маєтку. Для цього він має захоплювати інші зірки, і ремонтувати і вдосконалювати свій корабель. Крім того, він може мати васалів, які будуть допомагати йому за гроші.І союзників, з якими можна обмінюватись ресурсами. Гра не має кінця, так як кількість зірок — безмежна. Захоплювати зірки гравцю можуть перешкодити інші гравці. На населення зірок, можна накладати данину, з якої і купується пальне, патрони, броня, і інші потрібні речі. Гра закінчується, коли гравця вбивають.
Об’єкти гри
Всі об’єкти гри мають свої координати, і бувають двох видів — рухомі і нерухомі. Рухомі рухаються відповідно до законів Ньютона. Для краси всі тіла мають кутові швидкості.
Небесні тіла
Зірки — нерухомі об’єкти. Вони розміщені дуже далеко одна від одної. Кожна зірка має радіус і масу. Крім того, кожна зірка має населення, яке визначає дохід від податку.
Планети — космічні тіла, які теж мають масу, але також мають і швидкість. На них діє гравітаційна сила найближчої зірки, тому вони рухаються по еліптичних траекторіях. На планетах можна виконувати ремонт і вдосконалення корабля. Крім того на планетах можна зберігати гру.
Астероїди— майже, як планети, тільки на них крім притягування сонця діють також і планети. Крім того їх можна кришити за допомогою різної зброї. Астероїди пошкоджують броню корабля, з певною долею випадковості, і також сильно залежно від маси. Астероїди випадково генеруються за межами екрану, і при вильоті за межі — зникають.
Озброєння
Кулі поводяться аналогічно астероїдам, тільки не мають маси і розміру (маленькі), і наносять більші пошкодження. Вони зникають після попадання в якийсь об’єкт, або після певного часу (за межами екрану). Параметром є розмір ушкоджень.
Ракети не мають маси, а мають тільки розмір ушкоджень. Ракети запускаються з корабля, і летять з постійним прискоренням. Зникають як і кулі. Крім розміру ушкоджень, мають швидкість прискорення. Чим вона більша, тим легше попасти в ціль.
Лазери ушкоджують все, що перетне їх шлях. Астероїди від їх дії випаровуються, але за певний час. Вони не потребують час, щоб долетіти до цілі. Параметри — ушкоджень на секунду (кадр).
Корабель
Корабель — рухомий об’єкт, поведінка якого, при виключених двигунах схожа на поведінку астероїдів. Але ним можна керувати вмикаючи і вимикаючи двигуни.
Основний двигун — характеризується силою, з якою він діє на корабель, а також витратою пального, і масою.
Рульові двигуни — характеризуються кутовим прискоренням, і міняють кутову швидкість корабля. Також витрачають пальне, і мають масу. Їх є два. При ввімкненні двох зразу, корабель автоматично гасить свою кутову швидкість. (Система стабілізації)
Тип зброї — на корабель можна поставити всі три типи, варто тільки пам’ятати, що кожен з них має масу.
Кількість куль — без коментарів.
Кількість ракет — аналогічно.
Лазер — витрачає ядерне пальне для своєї роботи.
Баки — розмір і наповненість.
Обшивка — захищає вміст корабля від зовнішніх факторів. Тверда, і надійна, але все одно зношується.
Силове поле — вмикається в екстрених випадках, забирає дуже багато енергії, але добре захищає корабель. Рухомі тіла при попаданні в силове поле змінюють траекторію, а лазери заломлюються.
Радар — дозволяє визначати куди втікає ворог. Має певний радіус
Карта — так як радар бачить не все довкола, ті зірки, які ви відвідали заносяться на карту, щоб потім можна було знайти їх знову.
Економіка
Зірка — зірки приносять дохід своїм власникам через податок. Зірка міняє власника, якщо її ніхто не захищає, а в той час новий власник, протягом певного часу буде надсилати сигнал контролю. Сигнал контролю такий потужний, що не дає можливості вкючати силове поле, і двигуни, а також стріляти. Крім того забирає багато пального. Під час захоплення населення зірки зменшується, тому постійні війни знищують системи.
Магазин — знаходиться на планеті, і дозволяє купувати нові, кращі двигуни, баки, обшивку, чи силове поле.
Арсенал — дозволяє купувати нову зброю, і поповнювати боєзапас. Також звісно не безплатно.
Майстерня — ремонтує обшивку.
Заправна станція — заправляє корабель пальним.
Казарма — дозволяє найняти васалів (ботів).
Дім — дозволяє зберегтися і виспатися. При збереженні, ніхто не може захопити систему, бо її власник вдома. Сигнал контролю не посилається.
Інтерфейс
Найбільшу частину часу, гравець проводить керуючи кораблем. Всі команди віддаються з клавіатури. Можна вмикати основний двигун утримуючи клавішу „вверх”, а також бічні двигуни, за допомогою клавіш вліво, і вправо. Також можна вмикати силове поле, утримуючи клавішу „назад”, і стріляти „пропуском”. Утримування одночасно клавіш „вліво”, і „вправо” стабілізує обертання корабля, і приторможує його. Корабель завжди знаходиться в центрі екрану, повернений носом вверх. По краях екрану розміщені:
Радар — показує найближчі астероїди, планети, зірки і космічні кораблі.
Карта — показує тільки зірки, і їх власників для полегшення навігації. Карта також зорієнтована як світ.
Прилади — показують рівень пального, боєзапас, стан обшивки, швидкість (як вектор).
Радіоконсоль — показує стан ефіру, і дозволяє передавати свої повідомлення.
Банківський рахунок — показує кількість грошей на рахунку, прибуток, витрати, доступність послуг.
Якщо якась послуга доступна (коабель достатньо близько до планети), то з’являється її іконка. Тоді гравець може її замовити, натиснувши відповідну кнопку. При виборі послуги магазину, на екрані з’являється список товарів. Але гра не спиняється, тому в той час все одно варто бути обережним.
Сценарій
Гравець реєструє свій аккаунт вводячи логін і пароль. Якщо такий логін вже є, йому пропонують вибрати інший. Далі можна вибрати собі корабель, в межах наявної готівки. Після вибору корабля (по деталях) і завантаження його пальним і боєприпасами, він з’являється в космосі. Для нового гравця з’являється нова зірка. Вони додаються по спіралі, щоб бути приблизно рівномірними, і зкупченими, але з певним випадковим зміщенням. Гравець може полетіти воювати за нові зірки, чи захищати свою. Також він може укласти союз, і взяти кредит від іншого гравця.
Демо версія
Так як проект дуже великий, перед тим, як вкладати такі ресурси в невідомо що, можна спробувати реалізувати трохи менший проект, де мультиплеєр обмежити двома гравцями, зброю одним видом, а кораблі не ремонтуються і не апгрейдяться, а є початково заданими. Дуель проходить в межах одної зірки, а економіка відсутня. На даному етапі побудувати ієрархію класів, таку як нерухомий об’єкт, рухомий об’єкт, системи частинок, кулі, астероїди, корабель. Радар і прилади мають бути присутні, так як пальне — основний стратегічний об’єкт. Основним тактичним ходом буде ввмімкнення силового поля, на дуже короткі проміжки часу, і дуже вчасно. Можна спробувати додати реалізацію штучного інтелекту.
Така демо версія допоможе проробити фізику управління, і бойову частину геймплею, а також відпрацювати основні взаємодії клієнт — сервер. Вона дасть змогу уточнити, і вдосконалити даний дизайн — документ, який є доволі поверховим і непродуманим. Також з’явиться можливість приблизно окреслити баланс гри. Терміни виконання окресляться після продумування загальної структури проекту, і взаємозв’язків між модулями. Тоді ж буде поділена робота над частинами.
Кілька моїх фото
От, вирішив показати вам кілька цікавих фото з мого життя. Якщо клацнути по них, вони збільшаться.
Фото перше
Гідропоніка в гуртожитку
Гідропоніка — система вирощування рослин без грунту, за допомогою розчину потрібних поживних речовин. Одного разу, я хотів з’їсти цибулю, заліз під ліжко, і виявив, що цибуля хоче рости. Раз вона в темряві, без води росте, то як вона буде рости з водою, і світлом. А так як в моїй кімнаті банок ціла купа, то зайнятись гідропонікою не було проблем.
От результат десь півтора тиждня:
Хоча мої сусіди казали, що якщо б я був терплячіший, міг би виростити і з’їсти більше
Фото друге
Рука ідей
Люблю ставити собі хрестики на руках. Для пам’яті. Але сьогодні, після прочитання статтей на блогосфері, одного хрестика виявилось мало. В результаті, я вже подумував навчитися писати правою рукою по лівій
Рука зфотографована в процесі виконання галочок.








