Показаны сообщения с ярлыком javascript. Показать все сообщения
Показаны сообщения с ярлыком javascript. Показать все сообщения

суббота, 20 августа 2011 г.

codejamer.com

Запустил codejamer.com.
Во время участия в Google Code Jam я обнаружил, что испытываю некоторую нехватку технологической базы. Так же я уперся в некоторые ограничения. Производительность javascript безусловно недотягивает до нативного кода. Но если использовать все 4 ядра процессора, а не одно - задача сильно упрощается и недостатки javascript уже не так тяжелы. Только осознание пришло слишком поздно, и в результате в заветные ряды 3000 прошедших на второй этап программистов я не попал. Зато появились задачи для реализации.

Собственно, для решения этих задач я задумал этот сайт. Теперь выложил первую версию в онлайн. Надеюсь, этот инструмент поможет кому-то с code jam на javascript. Сам я пока буду следить за интересом к проекту, если он обнаружится - у меня есть еще несколько идей на реализацию...

четверг, 26 мая 2011 г.

Учимся программировать на JavaScript: выводим себя на экран

Все изучаю JavaScript. Вспомнил, как в институте нам поручали написать программу, которая выводит сама себя на экран. Сделал это же на JavaScript в node.js:


var text = [
'var text = [',
'console.log(text[0]);',
'text.forEach(function(item) {console.log("\'" + item.split("\\\\").join("\\\\\\\\").split("\'").join("\\\\\'") + "\',");});',
'console.log("];");',
'for (var i = 1; i < text.length; i++) { console.log(text[i]); }',
];
console.log(text[0]);
text.forEach(function(item) {console.log("'" + item.split("\\").join("\\\\").split("'").join("\\'") + "',");});
console.log("];");
for (var i = 1; i < text.length; i++) { console.log(text[i]); }

JavaScript eval - передаем данные в вызов

Экспериментировал с qooxdoo и обнаружил неприятную для себя вещь.
Вот этот код работает для source версии, и не работает для build версии:


var qqq = 'qqq'; eval('alert(qqq)');


Оказалось все просто, при генерации build имена переменных хаотично меняются с целью оптимизации. Первым позывом было найти, как отключить оптимизацию. Потом вроде наступило прояснение, которое привело к такому варианту решения проблемы:


var qqq = 'qqq'; eval('(function (a) { alert(a); })')(qqq);


Этот простой трюк позволил работать и build версии, и мне стало казаться, что такой вариант в целом правильнее (насколько может быть правильным использование eval отдельный вопрос).

UPDATE: Оказалось, что я глубоко неправ. Даже когда мой код заработал - это было полдороги. Ведь есть еще IE. Так вот, писать надо как выяснилось вот так:
var f = new Function('a', 'alert(a)');
f('qqq');

А вот тут можно почерпнуть полезную информацию: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function

среда, 17 марта 2010 г.

Ханойская Башня



Осваиваю javascript good parts, пока видимо, обходясь без этих самых good parts. Зато вспомнил очень популярную программистскую задачу с ханойской башней. Один из тех случаев, когда решение короче постановки, и выглядит очень эффектно:

var hanoi = function (disc, src, aux, dst) {
  if (disc > 0) {
    hanoi(disc - 1, src, dst, aux);
    move(disc, src, dst);
    hanoi(disc - 1, aux, src, dst);
  }
};

Это конечно без кода отрисовки, но все равно, вся суть алгоритма, это 4 строчки. Потрясающая вещь. Если вы смотрите это через фид-ридер, чтобы увидеть красоты моих изысков в JS - придется зайти в блог.