Большая Тёрка / Мысли /
fuse, habr, programming, kids, microsoft
Беспардонно свиснуто с Хабра.
В Майкрософт задумываются над проблемами обучения детей, в частности, уже писалось про проект Kodu Game Lab.
Kodu – это интерактивная среда создания трехмерных игр, доступная одновременно на Xbox 360 и на ПК. Я решил написать о ней подробнее, поскольку начиная с сегодняшнего для любой желающий может скачать и попробовать версию для ПК.
Как же устроена игра на Kodu? Для разработки игры вам по сути необходимо создать игровой мир, в котором будут жить внедрённые вами персонажи, и взаимодействовать по установленным вами правилам (а также с учётом законов физики). При начальном запуске игры вы можете загрузить множество существующих миров, или же начать с пустого мира.
Внутри мира живут объекты – это могут быть яйцеголовые “коду”, яблоки, деревья, пушки, снаряды и т.д. Объекты уже наделены некоторым поведением – например, пушка, добавленная в игровой мир, может вдруг сама по себе опрокидываться на спину и “улыбаться”. Другие действия можете добавлять вы – например, при нажатии на пробел можно попросить пушку “выстрелить” снарядом, а при нажатии на стрелки – повернуться. Снаряд, по умолчанию, столкнувшись с каким-то объектом взорвётся, уменьшив “здоровье” этого объекта. Когда здоровье уменьшится до нуля – объект сам умрёт.
Всё это заложенная по умолчанию функциональность – поэтому чтобы получить работающую игру, надо не так много – поместить объекты в мир и наделить минимальным поведением. В ответ на события (нажатие клавиш, перемещение мыши, столкновение и т.д.) можно просить объекты исчезать, испытывать эмоции (да-да, “улыбнуться” – это примитивное действие, и разные объекты делаю его по-разному!), перемещаться, исчезать, или переходить в новое состояние (которое в коду называется страницей).
Приведённые скриншоты демонстрируют весь процесс создания игры-стрелялки на Коду: создаём пустой мир, добавляем объекты (дерево, затем пушку), модифицируем свойства пушки, добавляя реакцию на клавиши – вот, собственно, и вся игра!
А более подробно процесс показан на видео (рекомендую смотреть на YouTube в HD):
Как вы думаете – насколько такой подход к созданию игр близок к программированию? Можно ли это рассматривать как обучение программированию, или скорее как способ перетащить детей от пассивной роли игрока к более творческому процессу создания игры? Именно это, как мне кажется, самое главное, что позволяет сделать Kodu – показать, что компьютер может использоваться для создания чего-то нового, для воплощения в жизнь своих идей. Конкретные технологии, языки программирования и библиотеки всё время будут меняться, но этот принцип – свобода творчества, возможность создания виртуального творения своими руками – будет оставаться всегда.
programming, IT , Программирование, C
For all the IT‑People and C‑Programmers out there. If you heard this song you will never try to use programming languages other than C again^^ I don't know who wrote the lyrics but I like them :D
programming, Тупость, lulz, коллайдер
Для начала — работы на конкурс самой долбоебической валидации данных формы. Проходит под грифом «без комментариев».
1. Рубрика «валидация e‑mail строгонах по RFC»:
function checkemail ($email) {
$email = trim ($email);
$pos1 = strpos ($email, "@");
$pos2 = strpos ($email, ".");
if (!$pos1 || !$pos2) {
return false;
} else {
return true;
}
}
2. Рубрика «ачотакоерегэкспйобана»:
$account_allowed_chars = $account_allowed_symbols . «0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ»;
$acct_username = trim($_POST['acct_username']);
$length1 = strlen($acct_username);
$length2 = strlen($account_allowed_chars);
for($count1 = 0; $count1 < $length1; $count1++) {
for($count2 = 0; $count2 < $length2; $count2++) {
if ($acct_username[$count1] == $account_allowed_chars[$count2]) {
$goodchar = true;
}
}
if (!$goodchar) {
error(0,str_replace("[[allowed_chars]]",$account_allowed_symbols,$language['invalidname']),"");
}
$goodchar = false;
}
3. Немного фалломорфирующей магии:
// The next step is to make sure the password is at least 3 characters long, and then we hash it
if (trim($_POST['password1']) == trim($_POST['password2']))
if (strlen(trim($_POST['password1'])) > 5)
4. А вот так охрененно нужно от SQL Injection защищаться:
SELECT * FROM `blahblah` WHERE acct_email = \«" . trim($_POST['acct_email']) . »\";
Нахер люди мозг парили, писали всякие нипанятные addslashes() да mysql_real_escape_string() — ковычги‑та надежнее.
З.Ы. И это при том, что уже пару‑тройку раз до этого работали с acct_email. Но, видать, памяти жалко в рег‑скрипте — пральна, нахера ее выделять лишний раз под удобочитаемую переменную, значение которой прошло валидацию, когда можно из поста подергать. У нас же есть суперглобальные массивы!
5. Рубрика «лолштобля?»:
if ($_POST['acct_email'] && $_POST['acct_email'] <> "")
6. Немного верстки:
<P align="center"><P align="center"><a rel=«nofollow» href="http://www.blahblah.org/"><img src=«themes/blahblah/blahblah.jpg» width=«675» height=«87» border="0"></a></P>
<P align=«center» class="errortext"><b>[[lang_error]] [[errormsg]]</b></P>
<P align="center">[[footer]]</P>
P.S. И — да! Это все в одном скрипте! Вебдев, учитесь xD
Багрепорт:
Date: Wed, 23 Apr 2008 12:20:35 +0200
Hi,
since SVN revision r4027 quodlibet's source code is personally insulting
me, probably as reaction of Debian bug #421167 which was caused by a
mistake on my side:
===================================================================
--- player.py (Revision 4026)
+++ player.py (Revision 4027)
@@ -287,7 +287,9 @@
def init(pipeline, librarian):
gst.debug_set_default_threshold(gst.LEVEL_ERROR)
- if gst.element_make_from_uri(gst.URI_SRC, «file://», "«):
+ if gst.element_make_from_uri(
+ gst.URI_SRC,
+ „file:///Sebastian/Droge/please/choke/on/a/bucket/of/cocks“, »"):
daniel@bert:~/1/quodlibet‑1.x$ svn log -r 4026:4027
------------------------------------------------------------------------
r4027 | piman | 2007–04–27 05:17:05 +0200 (Fr, 27 Apr 2007) | 1 line
player.init: Give a fake filename to trick GStreamer 0.10.12's filesrc.
------------------------------------------------------------------------