Збулося
20.01.2012
07.01.2012
Для тієї самої групи. Цього разу вже хоч з якимось сюжетом. Знімали чотири дні… протягом трьох тижнів
Зате класно – за 2 години встигаю все відзняти і можна їхати додому, бо втомлююсь так, що більше нікуди не хочеться. Монтаж, звісно, зайняв більше часу. І дороблював вже на святах
17.12.2011
Цього року в мене є курсова з дисципліни “Штучний інтелект”. Нічого особливо складного, окрім того, що навчитися користуватися бібіотекою SWI-Prolog, в моєму випадку вона не представляла, тому розробка ПЗ загалом зайняла два дні.
Оскільки серце програми написано на Prolog, а від нас вимагають прикрутити його до якогось нормального інтерфейсу (щоб не викликати команди з консолі), потрібно було розібратись з використанням бібліотеки SWI-Prolog у Qt, котрий я обрав для створення інтерфейсу. А обрав я його, бо був з ним знайомий і він написаний на С++, а на С++ якраз і є написаний інтерфейс для бібліотеки. Далі опишу процес, бо знайти потрібну інформацію в інтернеті було непросто, тому нехай десь буде ще одна копія.
На всяк випадок — я користувався реалізацією прологу SWI-Prolog, писав усе під віндовс і папка, куди встановлено пролог називається pl.
1. Найперше, що ми маємо знайти це заголовочні файли, dll-ка пролога (swipl.dll) та ще одна dll-ка, яку використовує пролог – pthreadVC.dll. Заголовочні файли знаходяться тут: pl/include, dll-ки тут – pl/bin.
2. Як підключати dll в Qt всім, мабуть, відомо. Просто прописуєте у pro-файлі проекту таку штуку:
LIBS += "G:\Documents\workspace\ai\ai-diff-build-desktop\debug\swipl.dll"
Дивіться, щоб dll були у папці з debug-версією вашої програми, бо коли ви запустите її, вона почне шукати їх там само, де лежить її ехе. А за замовчуванням він буде лежати у папці <назва проекту>-build-desktop/debug.
Детальніше про підключення сторонніх бібліотек до Qt тут.
3. Заголовочні файли мабуть можна і не копіювати в папку проекту — в принципі нічого не зміниться, якщо ви вкажете, де їх шукати, в pro-файлі такою строкою
INCLUDEPATH += "pl-include"
Я їх скопіював, тому вказав відносний шлях.
В нашій програмі ми підключимо лише два: SWI-Prolog.h та SWI-cpp.h. В першому знаходиться С-інтерфейс, в другому С++-інтерфейс. З першого використовуються ф-її ініціалізації. З другого все інше, бо з об’єктами працювати простіше.
4. Ініціалізація прологу виконується таким кодом:
#define PROLOG_PROGRAM "G:/Documents/My Dropbox/Personal/Univ/ai/diff.pl" static char * av[] = {PROLOG_PROGRAM}; if(!PL_initialise(1,av)) { PL_halt(1); return; }
В PROLOG_PROGRAM зберігається шлях до програми на пролозі, що буде завантажена відразу після ініціалізації. Власне, в ній знаходиться вся логіка. Ще може виникнути така помилка: “FATAL ERROR: Could not find system resources”. Вирішується просто – http://www.swi-prolog.org/FAQ/FindResources.html
5. Виклик наших предикатів робиться таким чином:
PlTermv terms(3); terms[0] = PlCompound(function.toStdString().c_str()); terms[1] = PlCompound(variable.toStdString().c_str()); PlQuery q("d", terms);
Про те, що таке клас PlCompound, можна прочитати тут, а про інші класи для створення термів тут. Взагалі у пролога гарна документація, правда мені в ній мало що зрозуміло, і прикладів використання майже нема.
Моя курсова вміє рахувати похідні складних функцій, тому параметри мого предиката (d) такі:
1. функція, похідну якої треба знайти
2. аргумент, по якому шукається
3. відповідь
Відповідь знаходитиметься в terms[2] і виводиться через приведення до char*.
ui->derivEdit->setText(QString(terms[2]));
Ну а перед тим, як звертатись за відповіддю варто перевірити, чи знайшлись взагалі якісь рішення. Це робиться через метод next_solution(). Через нього ж можна перевірити всі рішення.
if(q.next_solution()) ui->derivEdit->setText(QString(terms[2])); else ui->derivEdit->setText("no solution");
5. Обробка помилок у пролозі нескладна. Якщо щось трапилось, вам кинеться PlException. Після приведення його до char* зможете побачити текст помилки. Так це зроблено у мене:
try { PlTermv terms(3); terms[0] = PlCompound(function.toStdString().c_str()); terms[1] = PlCompound(variable.toStdString().c_str()); PlQuery q("d", terms); if(q.next_solution()) ui->derivEdit->setText(QString(terms[2])); else ui->derivEdit->setText("no solution"); } catch(PlException &ex) { QMessageBox::warning(this, "Prolog Exception", QString("Prolog has thrown an exception: ")+QString((char*) ex)); }
6. На останок кілька посилань, з яких я черпав інформацію.
http://www.swi-prolog.org/pldoc/doc_for?object=section(1,’9′,swi(‘/doc/Manual/foreign.html’)) - документація по використанню пролога в інших мовах програмування.
http://www.swi-prolog.org/FAQ/ - faq по прологу, мені знадобився.
http://www.swi-prolog.org/pldoc/package/pl2cpp.html - документація по С++ інтерфейсу, описання класів та іншого.
http://electricbacon.wordpress.com/2010/09/08/calc-example-using-swi-prolog-and-c/ - звідси я взяв ініціалізацію пролога, гарний приклад програми на С++.
http://stackoverflow.com/questions/2690296/class-problem-c-and-prolog - ще один приклад роботи з прологом на С++
Це все. Сподіваюсь, комусь допоможе.
01.12.2011

За мотивами “Вредного кино“
Классно, когда снимают римейки старых фильмов. Когда-то я задавался вопросом — как же эволюционировало кино за 20, 30 или 40 лет? Что изменилось, и почему? Правда, изменения касаются только технической части фильма. Зрителя теперь можно попытаться ярче впечатлить, сильнее удивить и оставить впечатления намного лучше, чем Н лет назад. А вот сама суть кино, драматургия, совсем не изменилась. Правда, ее хороших примеров в кино стало меньше, или я просто о них больше слышал. Мой кровавый валентин 3D — римейк почти одноименной картины 1981 года. Сюжет нашего современника практически повторяет своего предка. Не буду парится и выложу описание с Кинопоиска:
Том возвращается в родной городок, спустя 10 лет после ужасных событий, произошедших в День святого Валентина. С приездом молодого человека жители города начинают умирать от рук неизвестного маньяка, и подозрения сразу же падают на Тома. Вместе с девушкой Сарой, в которую он когда-то был влюблен, Том обязан найти неуловимого убийцу…
Интересно, что и римейк, и оригинальный фильм получили практически одинаковые оценки — 6.022 и 6.058 соответственно. Выходит, что даже с мощью 3D фильм смог потерять 0.3 балла (хоть и собрал в десятки раз больше денег)? После этого я просто обязан посмотреть оригинал, ведь то, что я увидел в римейке, с точки зрения здравого смысла меня очень разочаровало.
Начинается все с предыстории, в которой описываются эти “ужасные события”, заинтриговало. Продолжается вечеринкой школьников в день святого Валентина возле заброшенной шахты, в которой проведено освещение — все светло и ярко. Наши герои, 2 парочки, заходят в шахту. После этого внезапно появляется маньяк и начинает убивать. Убивает он не всех, а только случайно попавшихся под руку других школьников. Наши герои выживают.
Такая вот завязка. Потом маньяк будет так же внезапно появляться в других людных местах — в работающей шахте, на парковке, у дома одного из героев.
Сами убийства происходят по-голливудски. Конечно, сначала маньяк таинственно появляется. Потом от него пытаются убежать. Это, конечно же, не получается, и маньяка пытаются одолеть. Это тоже не удается. Но не удается только героям второго плана. Все главные спасутся.
Интересно, как же это все происходит в оригинале?
Когда я только начинал смотреть этот фильм, мне даже нравилось. Такая классическая американ-хорор-стори про подростков. Но всегда ждешь чего-то нормального, а не маньяка появляющегося в любом месте из ниоткуда и уходящего в никуда. Даже если брать Крик (первые три части), где происходит практически то же самое, то там персонаж убийцы окутан какой-то тайной. Он действует скрытно, терроризирует по телефону и у него есть странная маска с застывшим выражением ужаса. Во время его появления почему-то не хочется задать вопрос “Откуда ты здесь взялся и какого черта?”
В “Валентине” маньяк чувствует себя хозяином положения — он абсолютно не беспокоится, что его кто-то увидит, что, в общем, добавляет происходящему абсурдности. Думаю, такой оглушительный успех этого римейка в большой степени из-за кровавых сцен убийства, в которых нам дают понять, что это именно 3D, а не черт-знает-что (хотя такое 3D иначе как черт-знает-чем не назовешь), и сцены с голой проституткой, которая будет голая бегать по номеру мотеля и стоянке.
Но есть и хорошие новости. Думаю, если бы фильм было действительно неинтересно смотреть, его бы никто и не смотрел, или по крайней мере не оценивал так высоко (я поставил 6). Помимо естественного желания узнать, кто же убийца, интересно слушать детали происшествия десятилетней давности, и “ощущать” атмосферу малонаселенного шахтерского городка где-то в глуши. Стоит сказать, что в фильме все-таки есть неожиданные повороты, которые, хоть и не сильно впечатлят, но, по крайней мере, встряхнут и добавят интереса к происходящему. Но так же стоит напомнить, что сцены убийства в этом фильме превращают его в малобюджетный ужастик 80-х, что, похоже, является тонкой отсылкой к оригиналу.
А тепер напишіть, будьласка, як вам.
07.11.2011
Схоже, люди часто жалкують про щось, що було з ними в минулому без всякої на то причини.
Наприклад, на випускному вечері комусь може бути шкода, що школа скінчилась, що її більше не буде і всі робочі школярські будні не можна буде пережити заново. Хоча до цього ніхто особливо і не радувався тому, що треба вставати о сьомій, а то й раніше, що треба розв’язувати задачки, писати диктанти, читати і характеризувати вірші, оповідання, їх героїв, що врешті-решт треба вчити ці вірші, що ти щодня зайнятий до 3-4 години вечора, а після треба робити уроки, або займатися з репетитором, і що навіть коли тебе це сильно задовбало, ти не можеш просто кинути все і нічого не робити, бо від цього залежить твоя четвертна оцінка, а від неї семестрова, а від неї річна, і якщо ти вже відмінник, то тобі не личитиме четвірка в табелі чи деінде.
Всім згадується лиш хороше. Це як дивитися “фільми про фільми” якихось блокбастерів. Спочатку вражаєшся, на скільки це круто, потім мрієш сам таке знімати, а як спробуєш зняти хоч щось примітивне, відразу розумієш, який це головний біль, і який колосальний труд за цим стоїть. Хоча згадати приємно. Головне, щоб ці спогади не викликали плаксивих емоцій. А викликаються вони тому, що ти думаєш, що такого більше ніколи не буде. Тому моя аналогія зі зйомкою фільму не дуже коректна.
Зйомки будуть, а школа ні. Але в обох випадках приємно згадати те, що було.
А чому я це все пишу? Бо відкрив у блокноті чужу лабу з другого курсу, яка валялась у корні диску D, і зрозумів, що більше такого не зможу пережити. Цього курсу, з цими людьми і викладачами . А за кадром лишаються тяжкі (вибірково) будні.
P.S. А викладачі не люди
25.10.2011
Нарешті ми доробили його. Хто не зрозумів, що тут відбувається, хто ці люди, та чому вони так діють – не сумуйте. Смисл в тому, щоб випробувати зйомку 50fps, зняти перестрілку та загалом повправлятись у зйомці, монтажі, обробці та супутніх речах. Надзвичайний експіріенс.
До речі, почитайте опис відео – там трохи розкрито сюжет. Приємного перегляду
10.10.2011
02.10.2011
Сфотографував на днях. Хочу придбати собі нормальний фотоапарат, а то з цим у мене в розпорядженні лише одна кнопка, і жодної можливості змінити діафрагму/витримку.
30.09.2011
В житті мені подобається його непередбачуваність.
От була вчора проблема – як провести вчора дві пари, і чи взагалі йти на першу. А життя все вирішило по-своєму!
По-перше, я дізнався, що на першу пару можна було не йти — нічого б не пропустив. На другу довелось піти, бо домовились з Мішою поїсти піцу, а в нього вона якраз останньою була. На цій парі сказали, що всі мають піти на лекцію Тигипка у першому корпусі. Там щось про ІТ-бізнес. Це ніби обов’язково і будуть відмічати. Оскільки я не думав, що там скажуть щось дійсно корисне, і хотілось піццу, то не пішов.
Піцца була просто чудова. Мені навіть здалося, що я ніколи раніше такої не їв. Хоча взяли дві середні, але дуже наїлися.
Коли прийшов на пару, виявилося, що разом зі мною був лише один одногрупник. Потім ще виявилось, що у зв’язку з лекцією нас відпустили, але лише після того, як прийшов куратор тих груп, які з самого початку мали йти на ту лекцію, бо нам повідомили лише перед самою лекцією. Заплутано, але розуміти не обов’язково.
Головний посил запису — піцца просто неймовірна і в університет варто було йти хоча б заради неї!