фильм Toast (2010)
dimitrykakadu
Спорим, что режиссер вначале снял нормальный фильм? Потом пришли пиарщики и сказали, что без гомосятины фильм в рейтингах не пойдет. Добавили гомосятину --- испортили впечатление.
Tags:

И что мне надо?
dimitrykakadu
Универ кончил, заодно имевшаяся работа-подработка ради стажа заканчивается. Подработка была хороша тем, что она полчаса пешком от дома. Плоха тем, что у нас на районе компания всего одна, следовательно платят не особо. Но, текущий проект закрывается, и меня хотят в другой. Варианты
первый: Опять же полчаса от дома. Хорош тем, что там фэшарп, т.е. функциональщина. Плох по той же причине, я накушался фадиеза и кактусов во время диплома на виртуальной венде. Ещё он плох тем, что в этом проекте постоянный аврал.
второй вариант: плюсы: на работе появляться 1 день для митинга, задачи главное за неделю сделать, а сколько чаосв потратишь --- как хочешь. Плох тем, что меня хотят туда надолго (см. ниже почему это плохо) а также тем, что я ненавижу эту блядскую динамическую типизацию в яваскрипте и РНР! И писать на ней особо не писал.

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


ИЗГНАНИЕ НОРМАННОВ ИЗ РОССИЙСКОЙ ИСТОРИИ (сенсационное открытие Лидии Грот)
dimitrykakadu
Кхм, прикольно!

Оригинал взят у zelenyislon в ИЗГНАНИЕ НОРМАННОВ ИЗ РОССИЙСКОЙ ИСТОРИИ (сенсационное открытие Лидии Грот)
- Ну что, Ватсон, продолжим? Что сияете?

- Я в нетерпении: обещали сенсацию! Ну же?

- Мне тоже, Ватсон, не терпится хоть кому-нибудь поведать о потрясающем открытии. Но пока только Вам. А Вы тоже клянитесь, что никому не расскажете. Раньше времени не должны знать даже журналисты: испортят, как сейчас говорят, драйв грядущего праздника. Согласны? Тогда слушайте…

Помните, я Вам говорил, Ватсон, о кусочке шведской земли – Рослагене? Согласно норманнской теории слово «Русь» от него якобы и произошло. Рослаген – местечко в южной Скандинавии на берегу Балтийского моря, небольшой ошмёток земли, откуда якобы пришли варяги-рус, которые якобы были шведами, потому и добавляли к слову «варяги» словечко «рус» – мол, с Рослагена, не ошибитесь. В качестве косвенного доказательства приводят то, что финны называют шведов «руотси», то есть руссами! Ну и соответствующие выводы: руссы – это шведы!

Я всегда понимал, что такого быть не могло. Видите эти книги на моём столе? Это всё летописи, хроники, анналы и другие работы средневековых, а также античных летописцев и хроникёров. Почти во всех встречаются слова «рос», «рус», «рас», «руны», «роги», «руги», «руяны»… Причём за несколько столетий до образования Руси и до рождества Христова! Множество речушек, посёлков, полянок, местечек в самых разнообразных уголках Европы называются словами, в которые вошли эти корни. Немало слов с теми же корнями «рус»/»рос» расшифровывают ныне в надписях на древних камнях, стелах… А вот записи арабских летописцев. В них ещё до наступления новой, христианской эпохи, арабы называли славянских купцов с севера… руссами! А на берегу Балтийского моря уже в начале новой эры существовали страны под названием Боруссия, Пруссия (Поморская Руссия). Причём, ещё раз подчёркиваю: Швеции в то время не было.



Read more...Collapse )



Lablqt
dimitrykakadu
I'm writing this post to say a world about current sutuation in my repository https://github.com/Kakadu/lablqt.


That main target is to create some library to write cool glamoures GUI using OCaml. I like QT, but I'm not so good in C++, that's why coding in C++ is difficult for me.


I'm using a patched version of qtjambi to generate XML specification of C++ classes. (this patch is not in public repository, I'm going to  show it... but I don't know when). My XML generator parses this XML and  generates some temporary presentation of class hierarchy. Than it produces code for C++ bindings and OCaml bindings.


Not all classes's members are good. For example I know what to do with

QWidget::QWidget ( QWidget *  ) but I dont understand what to do with copy constuctors... I think that not all meths can be translated to OCaml.


My generator generates OCaml class for each C++ class.  Now I don't know what is better to use: modules or classes. Earlier I thought that modules are cool, but inheritance is cool too. But when I have written generator what produces ocaml classes I have undestand that I cant use inheritance normally, because classes are too cross-recursive (Maybe I've done very speed decisions and I don't know some cool features of OCaml to use full inheritance's power).


So, if I dont' use inheritance i topologically sort my classes and fall down members from base classes to childrens. I think, that it is not very fun coding.(C++ have very strange features, and i should all six cases (public,private,protected) x (normal,pure_virtual) ...


Totally my bindings are generating compilable code for many methods and many constructors of XML specification. I can translate to OCaml primitive types like int,double, char*, QString and represent QT objects as pointer on OCaml side. I don't know what to do when some argument is sending by a value, not by pointer, I've postponed default values (I don't think it is difficult to translate it for pointers to an object). Now I'm trying to implement compilable translating C++ slots to OCaml side.



I'll be glad to see any contributions including recomendations about how OCaml code should be generated for best usability, how generator should be written or projected, what features shoult have high priority for me and any other things you believe should say.
Tags: ,

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

public static function forceMerge(acc, data) {
        var empty = StringUtils.emptyString;
        var nub = function (s1: Array<String>, s2: Array<String>) {
            for (i in 0...s1.length)
                s1[i] = StringTools.trim(s1[i]);
            for (i in 0...s2.length) 
                s2[i] = StringTools.trim(s2[i]);
            
            for (x in s1)
                s2.remove(x);
            return s2.concat(s1);            
        }
        
        var toString = function(s) {
            return (empty(s)) ? "" : s;
        }
        var mergeCat = function(a, b) {
            return toString(a) + toString(b);
        }
        var last = function(a, b) { 
            return (b != null) ? b : a;
        }
        var mergeUniq = function(s1, s2) {
            s1 = toString(s1); 
            s2 = toString(s2);
            var e = new EReg("[.,;]", "g");
            var arr1 = e.split(s1),
                arr2 = e.split(s2),
                ans  = nub(arr1, arr2);
            return ans.join(", ");
        }
        var attribs: Array<ContentItem> = [];
        Lambda.iter(["priority", "completion", "smiley", "flag", "star", "arrow"], 
            function (name) {
                var a = getAttributeValue(data, name), 
                    b = getAttributeValue(acc, name);
                attribs.push( { name: name, value: last(a, b) } );
        });
        var features = unifyIcons(acc.features, data.features);
        
        var dateHelper = function (a, b, last) {
            if (empty(a) && empty(b))
                return last;
            if (empty(a))
                return b;
            if (empty(b))
                return a;
            return last;
        }
        
        var mergeTasks = function(t1: Types.Task, t2: Types.Task): Types.Task {
            if (t1 == null)
                return t2;
            if (t2 == null)
                return t1;
            var start = dateHelper(t1.start, t2.start, if (t1.start < t2.start) t1.start else t2.start);
            var dead  = dateHelper(t1.deadline, t2.deadline, 
                                   if (t1.deadline < t2.deadline) t2.deadline else t1.deadline);
            return { responsible: mergeUniq(t1.responsible, t2.responsible), 
                     start: start, deadline: dead, 
                     estimate: last(t1.estimate, t2.estimate) };
        }
        features.push( { name: "task",
                         value: mergeTasks(getFeatureValue(acc, "task"),
                                           getFeatureValue(data, "task") ) });
                               
        var note1 = getFeatureValue(acc, "note"),
            note2 = getFeatureValue(data, "note");
        var note = mergeCat( (note1 == null) ? "" : note1.text,
                             (note2 == null) ? "" : note2.text );
        features.push( { name: "note", value: { text: note } } );
        
        return {
            id: acc.id,
            text: mergeCat(acc.text, data.text),
            attributes: attribs,
            features: features
        };
    }

Вчера сидел и слушал товарища Д.Булычева
dimitrykakadu
Думаю, что это был самый интересный семинар кафедры --- нам рассказывали про компиляторы и окамль. Семинар был самым интересным, видимо, только для меня - так как посещаемость в этот день была самая низкая из тех, что я видел.

В Швейцарии проводилсят как-то турнир по писанине компиляторов (вроде Tool Challenge) - 5 языков последовательно вложенных друг в друга (паскалеподобных), и 5 задач (от парсинга до генерации кода). Cобрались ученые-компиляторщики и решили превратить ученые наработки во что-то промышленное. Д.Булычев затащил первые три задачи для всех языков и занял второе место по количеству кода (на первом месте был какой-то мужик со скалой).

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

Как я фэйлил на хакдэе
dimitrykakadu
А к нам какие-то хакеры приезжали, которые в соревнованиях учавствуют. Ну я собрал +3 человека и мы пошли фэйлить.

5 часов фэйлили. Задания были примерно такие. У каждой команды крутится сервачок с сервисами (одинаковые сервисы у всех), сервисы что-то делают и иногда печатают некоторые "флаги" - тарабарщина из 32 символов. Сервисы написаны на чем попало, от пролога до Mono (и на долбаном обфусцированном х-е). Цель всего соревнования заключается в том, чтобы выдирать флаги с чужих сервисов, посылать это в жюри и попутно не давать утащить свои флаги. У кого больше - тот и выиграл.

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

Говорят, что эти соревнование круче чем ACM, ибо можно учавствовать сколько хочешь, и твоя сила пропорционально твоему опыту. Согласен, меня от ACM уже давно тошнит. вот ещё в icfp поучавствовать, да в неудобное оно время очень((. 

Самый забавный сервис был про tftp. На серваке крутится демон, в /home/tftp/лежат файлы, в которых нужные нам флаги. Мы можем скачать файл, если знаем его имя. Но мы не поможем получить список файлов напрямую, так как tftp этого не умеет. Перебор не работает - имена длинные. Что делать - не понятно. 

Наверное стоит подождать сессию - время освободится на такие размышления...
Tags:

Немного про корею или чем стоит занять наркоманящихся подростков.
dimitrykakadu
На днях один хороший человек - Руслан Баженов - отправился в Южную Корею. На людей посмотреть и себя проверить на корейском сервере. Эти корейцы сумели после 1998 года очень развить в своей стране киберспорт до такого же уровня как развит футбол в Бразилии. На видео некоторая зарисовка впечатлений Руслана и его видеокамеры при посещении матча.


Я оговорюсь - это не самый важный матч в лиге. Поэтому зрителей не так много. Но на финалах из много больше, к тому же StarCraft Broodwar вытесняется недавно вышедшим StarCraft 2.

Я пишу это всё для того, чтобы подумать - можно ли что-то подобное сотворить в России. Пускай наши дети играют и одновременно занимаются спортом - киберспортом. В StarCraft, StarCraft2, WarCraft 3 есть достаточно соревновательной составляющей чтобы называть это спортом и вызывать интерес. Я могу даже допустить сравнение с шахматами, и я имею право сравнивать, так как звание КМС по шахматам говорит, что я не во дворе играл. Я предлагаю как-то отучить людей от World of WarCraft, линеек, рагнарёков и прочего MMORPG ибо эти игры --- это тупик, имхо. А на киберспорте при должном финансировании можно и денег заработать игрокам. Пускай не ходят бухать по квартирам - пусть лучше сидят по квартирам и тренируются. Или пускай ходят на матчи. 

Сейчас в России киберспорт не развит почти --- русских боятся только в Counter Strike  --- наши бегаю с калашами и всех мочат без разбора))). Может тогда нашим футболистам будут платить поменьше и они начнут бегать по полю. 

Ох уж это QT
dimitrykakadu
Вот скажите, что это напечатает?

const char *d1 = (QString("1")+QString("asfd")).toStdString().c_str();
const char *d2 = (QString("2")+QString("qwe")).toStdString().c_str();
printf("%d = %s\n", d1, d1);
printf("%d = %s\n", d2, d2);


1asdf а потом 2qwe? неа. Оба раза 2qwe.
А если поменять 1е 2 строчки? Оба раза 1asdf.
Кто сможет объяснить?
Tags:

Надо бы уместиться в 6 строчек.
dimitrykakadu
Задача. Дано число n. Породить все двуупорядоченные списки длины n из чисел 0..(2n-1). Двуупорядоченный список, такой список, что элемент на четных местах образуют упорядоченный список, и элементы на нечетных местах - также свой упорядоченный список.

Желательно получить что-то сравнимое с 

gen(N,X):-gen2(N,0,0,X).
inc(N,N,N):-!.
inc(I,_,I).
inc(I,N,R):-I1 is I+1, inc(I1,N,R).
gen2(N,_,N,[]):-!.
gen2(N,I,L,[I1|X]):-N1 is 2*N, inc(I,N1,I1), I1<N1, I2 is I1+1, L1 is L+1, gen2(N,I2,L1,X).


Вот найду время и сам подумаю над этой надуманной задачей для демонстрации крутизны языка, который вроде как мертв.

P.S. писать можно на чем нравится.
Tags:

?

Log in

No account? Create an account