вторник, 28 февраля 2012 г.

Знакомство с руби

Интерпритируемый язык с функциональной и обьектно-ориентированной концепцией. Создан японцем Yukihiro Matsumoto ("Matz"), первый релиз вышел в 1995, с мыслью, чтобы язык был ориентирован на человека, а не на машину. Он должен был быть мощнее Perl и более обьектно-ориентированный чем python.

Интерпритатор написан на С и имеет название Matz's Ruby Interpreter or Ruby MRI (also called CRuby). Он достаточно медленный, что является главным недостатоком руби.

 Koichi Sasada решил переписать интерпритатор и открыл проект YARV (Yet another Ruby VM). Этот интерпритатор дал прирост на 15%, но стартап руби остается достаточно меделенным, как и работа с базой через ActiveRecord.

Matsumoto в 2007 году смерджил проект YARV со своим кодом, и YARV входит в официальный руби с версии 1.9. YARV после этого прозвали KRI (Koichi's Ruby Interpreter.

пятница, 24 февраля 2012 г.

Умер воркспейс. Что делать?

1)
./eclipse -clean
Не помогло? - Тогда второе:

2)
cd ~/Documents/workspace/.metalog/.plugins
rm -rf  org.eclipse.core.resources

суббота, 18 февраля 2012 г.

Примеры, когда замыкания вредят

1. Допустим, мы на определенные ссылки хотим добавлять аргумент, который будет предаваться на сервер, и который непостоянный и вычисляется определенным образом на странице (в нашем примере он будет статическим;)):
var quantaty = 5;

function addGlobalQueryOnClick(linkRef){    
    if(linkRef){        
        linkRef.onclick = function(){            
            this.href += ('?quantaty='+escape(quantaty));
            return true;
        };
    }
} 
Не достаток такого подхода вот в чем. Каждый раз когда мы вызываем эту функцию, то внутри создается НОВАЯ анонимная, которая подхватывает для себя еще и замыкание. Если функция addGlobalQueryOnClick будет достаточно много раз вызвана на странице, то будет задействовано кучу лишних ресурсов - созданных анонимных обработчиков и их замыканий со ссылками на свою линку. Фцнкция же обрабочик события ни чем не отличается для каждой из ссылки, поэтому будет хорошо, если все они будут использовать ее одну, да еще и без существования ненужного замыкания.

О замыканиях в js детально

Вот класический пример замыкания

Разница между параметрами и аргументами процедуры(функции)

Параметрами называются переменные которые указываются в месте определения(дифиниции) функции.
На примере яваскрипта:


function myFunc(param1, param2){//these are parameters
//..........
}


Аргументами называются переменные, которые передаются как пераметры в функцию в момент ее выполнения.
На примере яваскрипта:


var arg1 = 1,
      arg2 = '2';
myFunc(arg1, arg2);//these are arguments


Параметры еще называются формальными параметрами.
Агрументы - актуальныни параметрами.

четверг, 16 февраля 2012 г.

Cross-Origin Resource Sharing

Протокол который позволяет использовать оригинальный XMLHttpRequest обьект для крос-доменных запросов(XDR).
Суть его в том, что предварительно браузер в котором находится страница с одного сервера, и ее скрипты будут пытаться делать кросс-доменные запросы на другой сервер, должен предварительно договориться о подобном с этим другим сервером. Он предварительно спрашивает разрешения может ли скрипт с такого-то домена к нему обратиться.

среда, 15 февраля 2012 г.

scrollTop кроссбраузерно

document.documentElement.scrollTop - похоже кроссбраузерное свойство для получение длины прокрученной части документа в окне браузера.

вторник, 14 февраля 2012 г.

Теория расспространения транзакций

Вот пример на Java, в котором применены пропагейшины(расспространения):


 @Transaction( propagation=... )
void method1() {
  ...
}

@Transaction( propagation=... )
void method2() {
  ...
  method1();
  ...
}

среда, 8 февраля 2012 г.

Запуск Liferay через IntelijIDEA on Windows

Не нужно забывать, что для переменных CATALINA_HOME и CATALINA_BASE нужно обязательно менять обратный слеш на слеш в путях.
Например было:
c:\projects\prname\bundeles\tomcat\

А нужно:
c:/projects/prname/bundeles/tomcat/

суббота, 4 февраля 2012 г.

Архитектура "CommonJS Promises/A" и jQuery

Суть патерна состоит в том, что мы получаем обькт обещяния, который имеет набор методов, в которые можно передавать колбеки, а они вяжутся в очереди. Если мы добавили колбек, а событие на которое мы подписываемся через конкретный метод уже произошло, колбек немедленно выполнится, если же не произошло, то колбек попадает в очередь, и он будет выполнен в порядке очереди, как только событие произойдет.