среда, 28 декабря 2011 г.

Фишка с прайвет полями

В яве позволено обратиться к приватному методу/полю параметра внутри обьекта, который того же класса, что и параметр.

Java Enum Types


public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}
Множества определяют набор констант, поэтому рекомендуется их писать заглавными буквами, но это только общепринятая норма, а не обязательное условия языка, поэтому можно и написать строчными. При этом Java множества более мощные чем в других языках, ключевое слово enum определяет класс, который называют enum type, в классе реализован метод values(), который позволяет получить все значения множества массивом. В множество мы можем вписать любое количество полей и методом, но только с одним условием, они должны идти за определением констант, при этом за последней константой должна идти семиколон. Мы не можем определить конструктор в конкретном множестве, он определен в реализации языка и озадачен тем, чтобы выделить константы, которые находятся в самом начале определения множества.
public enum Planet {
    MERCURY (3.303e+23, 2.4397e6),
    VENUS   (4.869e+24, 6.0518e6),
    EARTH   (5.976e+24, 6.37814e6),
    MARS    (6.421e+23, 3.3972e6),
    JUPITER (1.9e+27,   7.1492e7),
    SATURN  (5.688e+26, 6.0268e7),
    URANUS  (8.686e+25, 2.5559e7),
    NEPTUNE (1.024e+26, 2.4746e7);

    // in kilograms
    private final double mass;
    // in meters
    private final double radius;
    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }
    private double mass() { return mass; }
    private double radius() { return radius; }

    // universal gravitational 
    // constant  (m3 kg-1 s-2)
    public static final double G = 6.67300E-11;

    double surfaceGravity() {
        return G * mass / (radius * radius);
    }
    double surfaceWeight(double otherMass) {
        return otherMass * surfaceGravity();
    }
    public static void main(String[] args) {
        if (args.length != 1) {
            System.err.println("Usage: java Planet ");
            System.exit(-1);
        }
        double earthWeight = Double.parseDouble(args[0]);
        double mass = earthWeight/EARTH.surfaceGravity();
        for (Planet p : Planet.values())
           System.out.printf("Your weight on %s is %f%n",
                             p, p.surfaceWeight(mass));
    }
}

четверг, 22 декабря 2011 г.

Отключение форматирования цифрового поля

в vardef нужно этому полю установить параметр:


'disable_num_format' => true,

воскресенье, 4 декабря 2011 г.

Интересный запрос с селектом в селекте + оператор IN



SELECT     view.id, view.name, view.quote_stage FROM (     SELECT         id, name, quote_stage     FROM         quotes     WHERE id in ('7abd9dae-c07d-e5c5-f383-4ed8f60e89f7','929d4052-f10f-80fe-226f-4ed8c47efdab') ) AS view WHERE view.quote_stage NOT IN ('inBearbeitung','binitaet');

суббота, 3 декабря 2011 г.

array_slice AND array_splice

$arr1 = array(
    "a1" => "a1",
    "a2" => "a2",
    "a3" => "a3",
    "a4" => "a4",
    "a5" => "a5",
);

$t1 = array_slice($arr1, 2);//$t1==array("a3"=>"a3","a4"=>"a4","a5"=>"a5",);
$t2 = array_slice($arr1, -2);//$t2==array("a4"=>"a4","a5"=>"a5",);
$t3 = array_splice($arr1, 2);//$t3==array("a3"=>"a3","a4"=>"a4","a5"=>"a5",); $arr1==array("a1"=>"a1","a2"=>"a2",);
$t4 = array_splice($arr1, -2);//$t4==array("a4"=>"a4","a5"=>"a5",); $arr1==array("a1"=>"a1","a2"=>"a2","a3"=>"a3",); 


четверг, 24 ноября 2011 г.

интересный запрос с алиасами таблиц и уловиями в джоинах


На что интересное обратить внимание в этом запросе?
  • на то, как присваиваются алиасы, как для колонок, так и для таблиц.
  • на то, что мозно создавать синтетические колонки в выводе запроса, если задать стороку 'Users' modified_by_name_mod, то в результате запроса будет создана колонка modified_by_name_mod, и в эту колонку всех рекордов будет продублировано стоку 'Users'
  • На то, что условия джоина не обязательно выносить в блок WERE, можно сразу за джоином прописать AND и условие.

Интересные запросы


SELECT 
   fz_fahrzeuge.name, fz_fahrzeuge_cstm.baujahr_c     
FROM
   fz_fahrzeuge   
LEFT JOIN 
   fz_fahrzeuge_cstm ON fz_fahrzeuge.id = fz_fahrzeuge_cstm.id_c
INNER JOIN 
   accounts_fz_fahrzeuge_c ON fz_fahrzeuge.id = accounts_fz_fahrzeuge_c.accounts_f3f04hrzeuge_idb
WHERE   
   fz_fahrzeuge.deleted=0 AND
   accounts_fz_fahrzeuge_c.accounts_fd950ccounts_ida='83d2cf92-ab3f-d21a-bb1a-4d6b4e5ce188'
ORDER BY 
   fz_fahrzeuge.name ASC 


понедельник, 21 ноября 2011 г.

Smarty/internals/core.read_cache_file.php

Smarty/internals/core.read_cache_file.php
Этот файл содержит функцию:

 


function smarty_core_read_cache_file(&$params, &$smarty){

   ...

   return true/false; 

}



Она определяет можно ли считать шаблон из кеша без перекомпиляции, решение могут определять настройки, факт изменения файла шаблона, и наверно что-то еще.

архивирование

Создание архива:

$ tar -zcvf archive.tar.gz /path/to/directory/with/substructure 


  • -z: Compress archive using gzip program
  • -c: Create archive
  • -v: Verbose i.e display progress while creating archive
  • -f: Archive File name


$ tar  -zxvf archive.tar.gz

  • -x: Extract files

пятница, 18 ноября 2011 г.

Модуль Teams

Модуль Teams определяет права доступа к записям(рекордам), а Роли - к модулям.
Юзер видит только эккаунты юзеров своей группы, возможности своей группы и т.д.
Этот модуль прошивается на сколько я понимаю и в ядро и в модули, он изменяет таблицы других модулей.

В комьюнити версию мы можем установить такой комьюнити модуль. В про он установлен по умолчанию. Чтобы в него попасть нужно в админке посмотреть в панель с юзерами, ролями и паролями - рядом будут и тимы.

четверг, 17 ноября 2011 г.

YUI3 WidgetPositionAlign Class и AUI ToolTip

Этим классом можно расширять класс виджет, чтобы придать ему возможности позиционирования. С помощью align метода можно позиционировать виджет в следующий значения:
  • BC static
  • BL static
  • BR static
  • CC static
  • LC static
  • RC static
  • TC static
  • TL static
  • TR static
Это применимо, например, в Alloy UI тултипе:
var tltp = new A.Tooltip({
    trigger: node,
    align: { points: [ 'br', 'tl' ] },
    title: true
});
tltp.render();
Где первое значения опеределяет позиционирование самого виджета, а второе - точку на тригере от которой производится позиционирование этого виджета.

вторник, 1 ноября 2011 г.

svn switch на другой домен(сервер)



svn switch --relocate svn(http|https)://domain1 https(svn|http)://domain2

четверг, 27 октября 2011 г.

Startup Windows 7

Чтобы добавить приложение в стартап пользвателя:
Start->All Programs->Startup, на папке контекстное меню-> Explore(Explore All - для всех пользователей). Добавить в окрывшуюся папку ярлык необходимого приложения.

Временно отключить в стартапе, или отключить системные стартапные приложения можно через команду msconfig и во вкладке Startup снять флажки с ненужных приложений и нажать Применить.

пятница, 14 октября 2011 г.

Java аннотации

Java аннотации - это один из главных инструментов метапрограммирования в языке джава (другой интрумент -параметризируемые классы(=шаблоны=Generics).

Аннотации могут использоваться:
  • компилятором - чтобы диагности ровать ошибки или подавить предупреждения на этапе копиляции.
  • на этапе компиляции и развертывания - чтобы сгенерировать код, хмл и другие ресурсы.
  • на этапе выполнения - чтобы выполнять рефлективную адаптацию приложения.

четверг, 13 октября 2011 г.

Понятие рефлексии в разработки ПО. Метапрограммирование

Рефлексия(reflection) - это способность программы коректировать свое поведение на этапе исполнения(рантайм), наблюдая за процессами которые происходият внутри ее или снаружи.
Это характерно для интерпритируемых языков, но также есть реалицация для копилируемых и для языков со статической типизацией.
Рефлексия - это ключевая стратегия в метапрограммировании.

Метапрограммирование - это когда данными для программы являются другие программы или собственный код, а результатом - новые(адаптированные) программы.
Есть две стратегии:
1) Программы адаптируются на этапе их компиляции.
2) Программы (само)адаптируются на этапе их исполнения. Эта стратегия и есть рефлексией.

четверг, 6 октября 2011 г.

DOM-дерево


Документы хтмл и хмл представляются иерархичной структурой, DOM-деревом.

document - это корень документа.
У него есть следующие дети:
  • document.documentElement - html тег.
  • document.body - body тег.
  • И еще одним ребенком представляется <!DOCTYPE >, но это незачем использовать.
Узлами этого дерева являются текстовые ноды и ноды тегов, также нодами являются атрибуты тегов, но в веб-програмировании принято об этом не говорить, атрибуты принято считать свойствами нодов-тегов.

Пример дампа базы

Создание дампа:
$ mysqldump -hhostname -uusername -p******** database_name >filename.dump

А такой дамп, когда поднимается, то удаляет уже существующие таблицы в базе, имена которых совпадают с именами дампа:
$mysqldump -uUSERNAME -pPASSWORD -hHOST.COM --add-drop-table dfb>dfb.sql

Добавив ключ --routines мы сохраняем также хранимые процедуры
Подьем дампа:
$ mysql -hhostname -uusername -p******** database_name <filename.dump

среда, 5 октября 2011 г.

Liferay Image Galery

Это модуль в контрольной панели. Сюда мы можем загружать картинки, а потом их использовать в вебконтенте, в шаблонах вебконтента и подобное.

воскресенье, 2 октября 2011 г.

LDAP


LDAP - Lightweight Directory Access Protocol, протокол в ip-сетях уровня приложений, служит для предоставления доступа и поддержки сервисов распределенного деревоподобного каталога. Все это началось из телефонных каталогов, и эти принципы были пренесены на компьютерные сети, определив X.500 станадрт и его протокол DAP. Слово Lightweight было добавлено к этой абривиатуре, но это не означает эмолюцию протокола DAP, это означает совершенно другой протокол. Совеременные сервера каталогов поддерживают оба протокола.
Сервер каталогов( Directory System Agent (DSA) ) - это плоская база данных, в отличии от реляционных она лучше подходит в условиях, где нужно много и часто предоставлять данные для чтения, а редактирование и запись происходит наоборот редко.

четверг, 29 сентября 2011 г.

Привязка сервера Tomcat к порталу Liferay

Нужно в окне "Run/Debug Configuration" в табе сервер, возле селекта Application Server нажать на кнопку Configure...
Там нужно чтобы были правильные пути к "Tomcat home" и "Tomcat base directory", если это винда и в ней воспользоваться окном выбора, то в путях будет обратный слеш "\", его же для того, чтобы все заработало нужно поменять на слеш "/".

вторник, 20 сентября 2011 г.

Кодирование спецсимволов

 escape(string) The escape() function encodes a string. This function makes a string portable, so it can be transmitted across any network to any computer that supports ASCII characters. This function encodes special characters, with the exception of: * @ - _ + . /
 encodeURI(uri) This function encodes special characters, except: , / ? : @ & = + $ #
 encodeURIComponent(uri) This function encodes special characters. In addition, it encodes the following characters: , / ? : @ & = + $ #

YUI Array

Y.Array - это класс из стандартного модуля ЮАЙ. Дополнительные классы для работы с массивами и расширения к этому можна найти в модулях collection и array-extras.

понедельник, 19 сентября 2011 г.

YUI модуль

Юай представлется также более обобщенным понятием как модули, а не просто классы-утилиты. Модуль - это набор классов, которые решают задачи связанные между собой, задачи одной сферы.

Модуль под названием как билблиотека-фреймворк( тоже YUI) состоит из следующих классов:
  • Array
  • config
  • Get
  • Intl
  • Lang
  • Object
  • Queue
  • rls
  • UA
  • YUI
Или со следующих подмодулей:
Подмодуль Классы подмодуля Описание
get Get Предоставляет механизм загрузки удаленных ресурсов и их вставки в документ
rls
rls = {
    rls_done: function(data) {...},/*data - loaded modules*/
    rls_oncomplete: function(cb){...} /*cb - call back*/ 
}
Обеспечение Remote Loader Service
yui-base
  • Array
  • config
  • Lang
  • Object
  • Queue
  • UA
  • YUI
UA - User agent, помошник в определении клиента в который загризили скрипт.
yui-later В класс YUI добавляет метод: later(when, o, fn, data, periodic)
  • when - время в милисикундах
  • o - обьект контекста
  • fn - функиця или имя метода в o, которая/который будет выполнятся по истечению времени,
  • data - массив аргументов который передадутся в fn. Поскольку в ie нет механизма apply/call, то реализовано для него просто вызов метода и передача 4-х аргументов - это нужно учитывать - для ие максимум 4-е аргумента
  • periodic - булиновское значение, которое определяет будет ли это setTimeout или setInterval
Этот метод возвращает обьект timer, через которого можно остановить таймер timer.cancel()
Представлены обертки для setTimeout/setInterval
yui-log В класс YUI добавляет метод: log(msg, cat, src, silent )
  • msg - сообщение
  • cat - категория сообщения: "info", "warn", "error", "time". Можно и свои кастомные.
  • src - строка ориентир откуда прилитело сообщение. Пример:
    src: msg
  • silent - булиновская переменная, определяет запускать ли событие по логированию
Этот метод возвращает инстацию YUI
Механизм логирования
yui-throttle В класс YUI добавляет метод: throttle(fn, ms)
  • fn - ограничиваемая функция
  • ms - Время задержки в милисекундах
Этот метод возвращает обертку для fn, которую нужно использовать для получения механизма задержки
Механизм наложения временной задержки на частоту вызова определенной функции( если время задержки не закончилось, а функцию вызвали, она не будет выполнена)

понедельник, 12 сентября 2011 г.

ie preventDefault

В ие этот метод не работает.
Но зато в ие есть глабальный обьект event, которому можно установить
event.returnValue=false;
и таким образом добиться тогоже эффекта. Вот кроссбраузерный пример обработчика:

function(e){
if(testIe)
    window.event.returnValue = false;
else
    e.preventDefault();

.....
}

воскресенье, 28 августа 2011 г.

четверг, 18 августа 2011 г.

От какого места начинать отсчет относительного пути?

Томакат имеет следующую структуру в файловой системе:
./bin
./webapps
...

В webapps разворачиваются приложения. Из ява-классов бывает нужно считать файл из файловой системы, который находится за пределами приложения. Можно обращаться к нему по абсолютному пути, но бывает необходимость относительного пути)

Тут и возникает вопрос, с какого места начинать отсчет. Если немного прикинуть, то очевидно, что главное приложение(процесс) это сам tomcat, которое было запущено из ./bin, поэтому все веб-приложение подгружаются и выполняются(как потоки) в его контексте. Так что отсчет относительного пути нужно начинать от /path/to/tomcat/bin.

четверг, 28 июля 2011 г.

Момент при использовании setStyle

В YUI3 при использовании метода нода setStyle имена стилей, который имют дефисы, нужно заменять на кемелкейсы:

node.setStyle("zIndex", 1000); 

среда, 27 июля 2011 г.

Средства для работы с навигацией браузера

Для этого у обьекта window есть два свойства-обьекта location и history.

понедельник, 11 июля 2011 г.

Подмена переменных в шаблонных строках

Есть в ядре юая подходящий метод:

YUI().use("*", function(Y){
  Y.log(Y.Lang.ubstitute('My name is {name}. My surname is {surname}.',{
      name: "John",
      surname: "Smith"
    })
  );
}); 

воскресенье, 3 июля 2011 г.

Отличие между интернационализацией( i18n) и локализацией( l10n)

Интернационализацией( i18n) -- это процесс втраивания модуля(функционала) в приложение, который позволяет подключать и переключаться между разными языковыми пакетами.

Тогда как локализацией( l10n) -- это конкретный пакет, который понимается модулем интренационализации и отображает приложение с характерным языковым переводом.

i18n - это модуль, l10n - это ресурс.

пятница, 1 июля 2011 г.

Тег aui:script

Нужно подключить таглиб <%@taglib prefix="aui" uri="http://liferay.com/tld/aui"%>, чтобы можно было пользоваться aui:script

У этого тега есть два атрибута, position - у кого меньше позиция того код раньше вставляется в хтмл-сприпт-тег, и use - тут мы указываем какие модули "Alloy UI" нам необходимы.
Прикол его в том, что все скрипты портлетов страницы оборачиваются одним тегом <script>...</script> и одной обверткой AUI().use("..{список модулей}..",function(A){}) , а в список необходимых модулей попадают все, что нужны каждому отдельному портлету страницы, так у нас получается только один запрос аутолоудера на сервер за скриптами.

Внутри тега aui:script мы сразу можем обращаться к обьекту A без каких либо обверток и обьявления этого обьекта.

Только нужно быть внимательным, когда пишешь список необходимых модулей нельзя ставить между запятой и именем модуля пробел!!!!!!!


<aui:script use="get,test,console,substitute,aui-jquery-bootstrap-modal">
</aui:script>

пятница, 24 июня 2011 г.

Большой "секрет" о директории work Томката)

Оказывается в этой папке хранятся не только файлы сессий, а переведенные JSP-файлы в *.java-классы, при этом рядом с каждым таким файлом находится его откомпилированный коллега *.class-файл.

воскресенье, 19 июня 2011 г.

Другие jsp конфигурации кроме теглибов в web.xml

Кроме указания где находятся дескрипторы библиотек, можно внести для подходящих к шаблону урла джееспешок. Вот пример участка web.xml:
<jsp-config>
    <!--paths to tag descriptors-->
    <jsp-property-group>
        <description>
  Special property group for JSP Configuration JSP example.
        </description>
        <display-name>JSPConfiguration</display-name>
        <url-pattern>/jsp2/misc/config.jsp</url-pattern>
        <el-ignored>true</el-ignored>
        <page-encoding>ISO-8859-1</page-encoding>
        <scripting-invalid>true</scripting-invalid>
        <include-prelude>/jsp2/misc/prelude.jspf</include-prelude>
        <include-coda>/jsp2/misc/coda.jspf</include-coda>
    </jsp-property-group>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

Как видно из примера, мы можем указать кодировку, шапку и футер, включение/выключение языка выражений, включение выключение скпритлетов...

Динамические атрибуты тега

Теги могут работать и с динамическими атрибутами.
Пример JSP:
....
<h2>Invocation 1 (six attributes)</h2>
<ul>
    <my:echoAttributes x="1" y="2" z="3" r="red" g="green" b="blue"/>
</ul>
<h2>Invocation 2 (zero attributes)</h2>
<ul>
    <my:echoAttributes/>
</ul>
<h2>Invocation 3 (three attributes)</h2>
<ul>
    <my:echoAttributes dogName="Scruffy" 
                       catName="Fluffy" 
                       blowfishName="Puffy"/>
</ul>
....

Использование в тегах jsp-фрагментов.

jsp-фрагменты -- это куски кода, которые могут динамически исчисляться в момент запроса. Эти таких кусков состоит вся джееспе-страница. Эта сущность представляется классом javax.servlet.jsp.tagext.JspFragment.

Группа тегов jsp:element

Начнем с примера:

<jsp:element name="${content.headerName}" 
   xmlns:jsp="http://java.sun.com/JSP/Page"> 
   <jsp:attribute name="lang">${content.lang}</jsp:attribute> 
   <jsp:body>${content.body}</jsp:body> 
</jsp:element>

Эта группа тегов динамически генерирует элемент иксемель.

Подключение библиотеки тегов из jar-архива

Все очень просто. Нужно просто рядом с пакетами в архиве в папке META-INF разместить все дескрипторы библиотек тегов, которые есть в архиве. Контейнер через класспаз найдет эти десприпторы и соберет все ури, которые указаны в  ..., и теперь через эти ури можно получать доступ к тегам библиотек из любой джееспе-страницы или тег-файла нашого проекта.

Упрощенное создание тегов в JSP 2.0

Теперь теги можно создавать намного проще, не зная языка Java. Можно тег описать в определенном формате в виде хмл в файле *.tag, контейнер эти файлы умеет читать и создавать из них классы тегов.

Чтобы иметь доступ к этому тегу необязательно даже описывать его в дескрипторе тегов, можно просто указать путь на него из ссылки джееспе:
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>


суббота, 18 июня 2011 г.

Создание функций в библиотеках тегов

В дескрипторе библиотеки тегов можно кроме тегов определять функции которые потом можно использовать. Вот пример фрагмента такго дескптора:
............
<function>
 <description>Converts the string to all caps</description>
        <name>caps</name>
 <function-class>jsp2.examples.el.Functions</function-class>
 <function-signature>java.lang.String caps( java.lang.String )</function-signature>
    </function>
............

Добавление скиптовых переменных из JSP тэгов

Из тегов можно добавлять в контекст страницы переменные, которые могут использовать скриптлеты и выразжения на странице. Чтобы добавить такую переменную нам необходимо об этом упомнить в дескрипторе библиотеки тегов в том теге, которые и будет добавлять эту пременную:
...
<tag> 
  <name>secondtag</name> 
  <tagclass>com.stardeveloper.tag.test.SecondTag</tagclass>
  <tei-class>com.stardeveloper.tag.test.SecondTagTEI</tei-class>
  <bodycontent>JSP</bodycontent>
  <info>Your second JSP Tag</info>
</tag>
... 
Тэг что нас интересует это <tei-class>, который означает: класс TagExtraInfo. В теге указывается путь к классу, который и опишет, что он добавляется и когда оно станет доступным:
package com.stardeveloper.tag.test;

import javax.servlet.jsp.tagext.*;

public class SecondTagTEI extends TagExtraInfo {

 public VariableInfo[] getVariableInfo(TagData data) {
  return new VariableInfo[] {
   new VariableInfo("time", "java.lang.String", 
    true, VariableInfo.NESTED)
  };
 }
}

Это означает, что между открывающим и закрывающим тегами(VariableInfo.NESTED) можно использовать переменную строкового типа time. Ну примерно так:
<%@ taglib uri="/WEB-INF/tlds/DemoTags.tld" prefix="star" %>
<star:secondtag>
 <p align="center">Date value retrieved from JSP Tag : 
  <%= time %></p>
</star:secondtag>

А вообще для определения места использования установленных в теге переменных выделенно три константы:
  • VariableInfo.AT_BEGIN Переменная доступна после открывающего тега.
  • VariableInfo.AT_END Переменная доступна после закрывающего тега.
  • VariableInfo.NESTED Переменная доступна в теле тега(между открывающим и закрывающим тегами).
.

четверг, 16 июня 2011 г.

Trancient keyword in java

transient ключевое слово, которое ставится возле полей серилизируемого обьекта, означает, что данное поле серилизировать не нужно.

понедельник, 13 июня 2011 г.

Передавание запросов из сревлетов в JSP и наоборот.

Из сервлетов в JSP:

import javax.servlet.*;
import javax.servlet.http.*;

public class servletToJsp extends HttpServlet {

    public void doGet (HttpServletRequest request,
         HttpServletResponse response) {

 try {
     // Set the attribute and Forward to hello.jsp
     request.setAttribute ("servletName", "servletToJsp");
     getServletConfig().getServletContext().getRequestDispatcher("/jsptoserv/hello.jsp").forward(request, response);
 } catch (Exception ex) {
     ex.printStackTrace ();
 }
    }
}


Альтернативный способ написания JSP-страниц. XML-синтаксис

Узнал, что есть альтернативный вариант написания jsp-страниц. Вместо простой страницы хтмл со вставками директив, сприптлетов, выражений, можно тоже самое делать но под другими именами. Так называемый иксемельный формат. Только вот таким файлам принято ставить расширение *.jspx:

Написание кастомных библиотек тегов

Библиотеки тегов, добавляют дополнительные теги в джееспе страницу, что позволяет реализовывать дополнительную логику дизайна(манипуляции с данными и отображение их с помощью хтмл-тегов).

пятница, 10 июня 2011 г.

Директива <%@ page...%>

Предназначена для того, чтобы применить определенные настройки для поточной страницы. Также эти настройки применяются ко всем статически файлам, которые подключаются к данной странице (это потому что эти файлы становятся частью этой страницы).
Ктати поточная  jsp + подключенные к ней статические файлы называются транслейшин юнит.

Директива <%@ incude..%> и теги <jsp:include /> и <jsp:forward />

Директива <%@ incude..%&gt; предназначена для того, чтобы подключать на страницу джееспе статические файлы. А тег <jsp:include /> умеет подключать как статические так и динамические файлы. Отличие между этими файлами в том, что статические файлы просто подгружаются в то место страницы, где располагается директива,  и компилируются с самой страницей в один сервлет. Динамические же файлы получают запрос, делают исчисления, и возвращают результат в страницу, и именно результат размещается в странице(получается два отдельных сревлета). Вот поэтому атрибуты директивы <%@ page ... %>, которые определяются в джееспе странице, применяются только к статическим файлам(потому что они являются частью этого же сервлета).

среда, 8 июня 2011 г.

Разница между скриптлетом и выражением. Что за зверь декларация.

Скриптлет -- это участок ява-кода в переделах джееспе страницы, который может проверять определенные условия и выводить группы тегов или нет, делать манипуляции с данными, выборку ресурсов и т.д.

Выражение -- это вывод каких-то данных в указанном месте страницы.
The map file has <span style="color: blue;"><%= map.size() %></span> entries. 
Good guess, but nope. Try <b><%= numguess.getHint() %></b>.  

А декларация -- это определение переменной или метода которые будут использоваться на странице.
<%! declaration; [ declaration; ]+ ... %>

Вот примеры деклараций:
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>

подключение на страницу бина

Подключение бина к джееспе:
<jsp:useBean 
  id="beanInstanceName" 
  scope="page|request|session|application"
 { class="package.class" | 
  type="package.class" | 
  class="package.class" type="package.class" |
  beanName="{ package.class | <%= expression %> }" type="package.class"  
 }
 {  /> |  
  > other tags </jsp:useBean>  
 } 

Виды кроссдоменных запросов

Рассмотрим виды кроссдоменных запросов. Также укажу какие модули для этого можно использовать из YUI3.

понедельник, 6 июня 2011 г.

Установка полей бинов в JSP1.2

Так в джееспе подключается бин:
<jsp:usebean class="num.NumberGuessBean" id="numguess" scope="session"></jsp:usebean>

Чтобы установить поля бина нужно воспользоваться тегом

<jsp:setProperty 
  name="beanInstanceName"  
 { property= "*" | 
  property="propertyName" [ param="parameterName" ] |
  property="propertyName" value="{ string | <%= expression %> }" 
 } 
/>

понедельник, 30 мая 2011 г.

js for(var i in arr_or_obj)

Эта штука таки применима не только для обьектов, но и для массивов) Особенно полезно, когда у нас массив ассоциативный, тогда мы получаем последовательно индексы и через них можем получать значения:
var a = [];
a['id=1']=5;
a['id=2']=7;
for(var i in a){
   console.log(i);
   console.log(a[i]);
}

суббота, 28 мая 2011 г.

Отгрузка скриптов по требованию аяксом.

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

среда, 25 мая 2011 г.

Y.NodeList.each()

Y.NodeList.each(func, contenxt) -- нод-лист имеет метод ич. Нод-лист можно получить из Y.all(selector).


func(node, position, nodeList)

node - поточный элемент
position - номер поточного элемента в списке нодов(0...n)
nodeList - весь список для которого применялся метод each

Минус этой штукенции в том, что нельзя разрывать цыкл -- тоесть полюбому функция будет применена ко всем айтемам.
Если же нужно при переборе в какой-то момент остановится, то лучше вопсользоваться страндартным цыклом, а получать айтемы можна так NodeList.item(idex)

среда, 18 мая 2011 г.

Интерфейсы жестких дисков

Жесткие диски используют два вида интерфейс:
  • IDE
    1. ATA(PATA) -- паралельный
    2. SATA -- последовательный
  • SCSI

суббота, 14 мая 2011 г.

Как строится урл страницы с портлетами

http://site.domain/uri/of/page#_portlet_id1=%2Fportlet%2Fspecific%2Furi1&_portlet_id2%2Fportlet%2Fspecific%2Furi2

Где
%2F -- это метакод аски-символа "/". Это называется HTML URL-encoding. Это для того, чтобы на стороне сервера весь урл конкретного портлета передался одним значения гет-параметра урла(например параметр "_portlet_id1" равен значению "%2Fportlet%2Fspecific%2Furi1", если же бы у нас урл выглядел так: ....._portlet_id1=/portlet/specific/uri1...., то параметр вообщебы был равен "", а если еще точнее, то сервер бы принял такай урл за испорченный).

Это походу делают портлеты, у которых есть собственная навигация, она происходит с помошью аякса без перегрузки страницы. Но нужно же, чтобы навигация по портлету сохранялась  в истории браузера, а во вторых нужно предоставлять возможность сделать закладку на поточную страницу, при этом у портлета должен тоже быть выбран конкретный пункт навигации.

понедельник, 9 мая 2011 г.

Семафоры, мьютексы, спинлоки

Эти обьекты применяются для синхонизации нитей или процессов:

make

Это утилита юникс-систем(есть версия линкуса и бсд), которая помагает собирать приложения восновном на языке си. Каталог с исходниками приложенения должен содержать специальный файл(возможные имена: GNUmakefile, Makefile, makefile) в котором описаны связи между отдельными файлами, по которому утилита компилирует исходиники в обьектные файлы, а потом их компонует линковщик.

Процесс компиляции утилитой gcc внутри

Выполняя команду gcc, внутри происходят поэтапно следующие шаги:

воскресенье, 8 мая 2011 г.

Форматы в каких может храниться приложение

Для того, чтобы программа заработала на определенном компьютере, она должна попасть в процессор в виде определенных команд(тех которые он умеет выполнять). Такие комманды могут храняться в так называемом исполняемом файле в двоичных кодах.

пятница, 6 мая 2011 г.

Создание ветки каталогов одной командой

Иногда нужно создать не одну директорию, а сразу несклько вложенных друг в дружку, для этого нужно исльзовать ключ "парент":
mkdir -p /tmp/a/b/c

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

Java launcher


Резюме
java [ options ] class [ argument ... ]
java [ options ] -jar file.jar [ argument ... ]

options
Опции командной строки.
class
Имя класса который нужно вызвать.
file.jar
Имя архива, котрый нужно вызвать. Используется только из ключем -jar.
argument
Аргументы, которые передаются в функцию main.

среда, 4 мая 2011 г.

JNI

JNI(Java Native Interface) -- это фреймворк, который позволяет приложению, которое работает в виртуальной ява-машине, вызывать родные для данной платформы( ОС + хардвеа ), а также быть вызванным из этих родных приложений. Также это позволяет использовать ява-приложению библиотеки родные для данной платформы( написанные на языках С,С++ и ассемблер ).

JVM(ТМ) Tool Interface

Это интерфейс доступа к виртуальной машине джава для утилит разработки и мониторинга(н-р: дебаг, профайлинг, мониторинг работы приложения, аналитика нитей).

пятница, 29 апреля 2011 г.

компилятор javac. Как работать с утилитой?

Это инструмент для компиляции джава приложений. С верисии java 6 он также замещает утилиту для работы с аннотациями apt.
javac [ options ] [ sourcefiles ] [ classes ] [ @argfiles ]
Порядок аргументов произвольный.

Чначение аргументов:
options
Опции.
sourcefiles
Один или больше файлов для компиляции (пример такого файла MyClass.java).
classes
Один или больше классов, в которых нужно обработать их аннотации (пример: MyPackage.MyClass).
@argfiles
Один или больше файлов, которые содержат опции и список файлов для компиляции. -J опции нельзя использовать в таких файлах.

четверг, 28 апреля 2011 г.

Java assertions

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

среда, 27 апреля 2011 г.

java анотации. Что это и с чем их едят?

Это штуки, которые мы можем встретить в коде. Они начинаются из символа @.

CLASSPATH что это такое и с чем его едят?

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

пятница, 22 апреля 2011 г.

awk

Скриптовый язык поверх скриптового языка баша. Для работы с текстовыми файлами и входящими тектовыми потоками.
awk скрипт состоит из
шаблон {операция}

На месте шаблона могут быть выражения, шаблоны и их комбинации. Под шаблоном подразумевается регексп.

Утилита find

ключи и их параметры обрабатываются слева направо:

find /home -type f -atime +30 -size +1000 -print \
-name core -exec rm {} \;

Эта команда сработает так:
• покажет все файлы в папке хом, к которым обращались больше 30 дней назад, которые размером больше в 500 кБт.
• при этом те, у которых имя кор, будут удалены.
Если не указать принт перед нейм кор, то будут отображены только файлы кор. Это потому что в новых дистрибутивах принт поумолчанию ставится в конец указанных команд. (в старых системах принт нужно всегд указывать явно).

Как получить инфу о сервере?



uname -a
cat /etc/issue
- по дистр

rpm -qa и аналоги
- по софту

cat /proc/cpuinfo
cat /proc/meminfo
lspci
lsusb
- по хардваре

Некоторые команды ви

vi

Перейти на нужную строку

1) ESC , number , shift+G

2)ESC , :number


:set ft=xml        -- формат хмл

открыть два файла паралельно:
а) горизонатально:  sp ../path/to/file
б) вертикально: vp ../path/to/file

четверг, 21 апреля 2011 г.

Что такое Ant и с чем его едят.

Apache Ant -- это ява библиотека и утилита командной строки. Его мисия состоит в том, чтобы выполнять задачи, которые описаны в билд файлах( build.xml). Наиболее известное применения анта -- это создание(билдинг) ява-приложений.
Он уже поставляет готовые решения задач компиляции, сборки, тестирования и запуска ява-приложений.

Стратегии кастомизации и разработки платформы Лайфрея.

Лайфрей обьявил, что портал можно расширять теми средствами, с какими кто больше знаком. Это могут быть: JSF 2, Icefaces, Struts 2, Spring MVC, Vaadin, Alloy UI & YUI, jQuery, Dojo и другие.

Краткое описание функционала Liferay

Liferay -- это платформа портала уровня предприятия.

среда, 20 апреля 2011 г.

Связка Netbeans и Tomcat

Вообще-то все работает с поставкой нетбинса. Но у меня так работать перестало)
Поставил два нетбинса 6.9.1 и 7.0rc2. Первый заточен под 6-й томкат, второй под 7-й.

Процесс загрузки linux коротко

1) После включения компьютера находится бутлоудер либо Груб либо Лило.
2) Который загружает ядро линкуса в оперативку.
3) Потом запускает процесс init(или, в случает Ubuntu, upstart).
4) Init читает файл /etc/inittab(upstart читает что-то другое), определяет какой ран-левел и запускает соответсвующие левелу сервисы.
5) Init предоставляет соответсвующий логон метод - метод входа в систему.

Сервисы в Linux

Сервисы - это демоны, процессы которые выполняются в фоне и делают свою важную работу в системе.

У Debian и Fedora есть центральное хранение сервисов /etc/init.d. Тут создаются файлы под все сервисы системы. Файл сервиса это баш-скрипт, которому дали права на выполнение и который ожидает параметро старт/стоп/рестарт+другие.

У Linux есть понятие ран-левела(run-level), у BSD его нет.

Создание сервисов в linux

На примере tomcat. Статья скопирована с http://www.howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu/

понедельник, 18 апреля 2011 г.

Клиентская валидация в SugarCRM

В глобальном массиве validate['form-name'] храняться айтемы, которые определяют какие поля нужно валидировать и как.

Структура metaDataDefs


metaDataDefs – это массив из двух елементов templateMeta и panels. Он определяет как будет выглядеть лейаут к примеру EditView, а точнее что будет располагаться на форме правки.

суббота, 16 апреля 2011 г.

Настройка Томката. Файл $CATALINA_BASE/conf/*/context.xml

И так контекст(веб-приложение) можно определять под сервер(тоже сомое, что под контейнер сервелетов) или виртуальных хост.

Это:

1) $CATALINA_BASE/conf/context.xml
2) $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default -- эти настройки будут полюбому подгружатся для каждого контекста хоста.
3) $CATALINA_BASE/conf/[enginename]/[hostname]/foo#bar.xml - это так называются файлы с настройками конкретных контекстов, в данном случае это контекст foo/bar/.
4) Если в $CATALINA_BASE/conf/[enginename]/[hostname]/ не существует файл под конкретный контекст, то ищется файл /META-INF/context.xml и он копируется в данную директорию под именем этого контекста.

пятница, 15 апреля 2011 г.

Разница между CATALINA_HOME и CATALINA_BASE.

Обычно эти две переменные среды ссылаются на одно физическое место на диске, куда был установлен Томкат.
Вариант когда эти переменные отличаются присутсвует тогда, когда нам необходимо иметь две отдельные инстанции Томката на разных портах одного сервера. При этом эти инстанции будут пользоваться классами из одного места.

четверг, 14 апреля 2011 г.

Насройка Tomcat. Файл $CATALINA_BASE/conf/server.xml

Этот хмл содержит рутовый тег <Server ...="">...</Server> - этот тег представляет контейнр сервлетов Каталину, через него мы настраиваем контейнер сервлетов. Ну только вот это еще не совсем контейнер, это более тег подготовки среды.

Разница между Internet(IP) Sockets и Unix Domain Sockets

Unix Domain Sockets - более правильное название POSIX Local IPC Sockets(IPC-межпроцессное соединение) - это технология передачи данных между процессами позикс ОС. То как эта передача производится похоже на IP Sockets, но только внешне, потому что не использется низлежащий протокол TCP/IP, эти данные не выходят за предел локального компьютера.
Может показаться, что это одной и тоже с POSIX named pipes, но данные могут передаваться как байтовыми потоками, так и датаграмными последовательносями. А неймд пайпы передают только в байтовых потоках.

JNDI

JNDI (Java Naming and Directory Iterface) -- реализация под яву нейминг и директори сервиса -- это система, которая сохраняет, организовывает и пердоставлет доступ к информации в виде каталога.

Каталог -в понятии софтверной инженерии, это мап между именами и значениями. К именам прикрепляюся также атрибуты, по которым можно производиь поиск.

Примеры нейминг и директори сервисов: LDAP, NDS, DNS, and NIS(YP), более узкий пример: явовски обьект DataSource. С помощью унифицированного интерфейса вы можем обращься к разным сервисам.

среда, 13 апреля 2011 г.

Архивы JAVA

JAR( Java ARchive) -- зип-архив ява приложения. Внутри находятся директория-пакеты с откомпилированными классами и обязательно среди них класс со статическим методом мейн. Когда запаковывается приложение, в архиве рядом с дирекориями пакетов появляется еще одна META-INF. Эта директория содержит файл MANIFEST.MF, в нем указывается какой класс и из какого пакета содержит метод мейн(так запускает архив виртуальная машина, она по манифесту находит какой класс запустить). Также в манифесте содержися другая мета-информация. Пример манифеста:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.1
Created-By: 1.6.0_22-b04 (Sun Microsystems Inc.)
Main-Class: jettytest.AddressBook
Class-Path: lib/jetty-6.1.22.jar lib/jetty-util-6.1.22.jar lib/servlet-api-2.5.jar lib/xstream.jar
X-COMMENT: Main-Class will be added automatically by build

вторник, 5 апреля 2011 г.

Рабочие команды

find  .  -name '.svn' -exec rm -R  .svn {} \;  -- найти все файлы(папки) .svn иерархично с поточного места и удалить их
В этой команде {} \; -- знак конца выполнения команд в опции -exec

Найти директорию:
find . -type d  -name dirname

Найти файлы по имени и с текстом внутри:
find . -type f -name "*.java" -exec grep -l StringBuffer {} \;

Сделать свн-апдейт и после этого этим файлам выставить собственность и права:
svn  --no-auth-cache --username=user1 up; find . -name '.svn' -prune -o -exec chown -h warpcore.websiteos.com:hdev {} \; -exec chmod 700 {} \;


tar cf archivename.tar file1 file2

Скопировать из удаленного сервера
scp ayeremenko@remotehost.com:/home/ayeremenko/myarch.tar /home/temp/

mysqldump -uUSERNAME -pPASSWORD -hHOST.COM --add-drop-table dfb>dfb.sql

вторник, 22 марта 2011 г.

Набор утилит-классов для виджета(2. Base & Plugin)

yui3 предлагает автоматизировать аугментацию утилиты Attribute в свой кастомный класс, для этого существует класс Base, который и выполняет в себе аугментацию Атрибута. Если нужно реализовать в своем классе специализацию атрибута нужно просто наследовать класс Base.

суббота, 19 марта 2011 г.

Набор утилит-классов для виджета(1. Attribute)

Attribute --  эта утилита служит, для предоставлению классу функционала по добавлению в него атрибутов, что в себе несет гетер/сетер для атрибута, валидатор, возможность создавать слушателей, которые реагируют на изменение атрибута.

Для того чтобы применить этот функционал к своему классу его нужно расширить by Y.augment() атрибутом.

суббота, 12 марта 2011 г.

YUI3 Event utility

Подключать можно вот так:
YUI().use('node-base', function(Y) {
    var handleClick = function(e) {
        // pass the event facade to the logger or console for inspection:
        Y.log(e);
    }; 

    //elements can be targeted using selector syntax:
    Y.on("click", handleClick, "#foo p"); //targets all p elements that are descendants
                                          //of #foo
 
    //elements can be targeted by Node references:
    var foo = Y.one("#foo");
    Y.on("click", handleClick, foo);
    foo.on("click", handleClick); //same as above
 
    //elements can be passed in as direct references:
    var foo = document.getElementById("foo");
    Y.on("click", handleClick, foo);
 
    //In all cases, you can pass in an array instead of a
    //single item:
    Y.on("click", handleClick, ["#foo p", "#bar"]);
});

пятница, 11 марта 2011 г.

Понития facets and artifacts

facet -- аспект, плосткая часть геометрической фигуры между гранями, точка зрения, впечетление(вид) с определенной стороны.

артифакт -- с латыни "сделанный руками", результат процесса, который бы таким не был, если бы на него не влияли.

Аспект -- до процесса разработки, в модулях идея определяет, что за модуль, какая техногия в нем применена - и создает определенные дескрипторы и предоставляет нужный автокомплит, загружает нужные библиотеки если это фреймворк.

Артифакт -- после процесса разработки, как я понял, куда деплоить, как все вместе размещать. Как сказано в документации это конфигурации пакета (packaging configurations).

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

четверг, 10 марта 2011 г.

Cron

crontab -e -- открыть список кронтабов поточного юзера для редактирования
crontab -l -- показать список кронтабов поточного юзера
crontab -r -- наверное), удалить список кронтабов поточного юзера


Формат кронтаба:

minute (0-59), hour (0-23, 0 = midnight), day (1-31), month (1-12), weekday (0-6, 0 = Sunday), command

Можно использовать также * -- типа "на каждый". Пожно испозовать диапазоны 1-3 и списки 1,3,4 для первый 5 пунктов.

Можно также выполниться последовательно комманды если соединить их &&

Создать иерархию каталогов одной коммандой

mkdir -p apache2/logs/sitename.loc

директива p означает создать parent кому нужно

среда, 9 марта 2011 г.

Установка переменных среды

Например нужно установить JAVA_HOME и CLASS_PATH

Самое правильно место в Убунте будет:
/etc/environment

PATH="/usr/local/Java/jdk1.5.0_07/bin:.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games"
LANG="en_AU.UTF-8"
LANGUAGE="en_AU:en"
JAVA_HOME="/usr/local/Java/jdk1.5.0_07"
CLASSPATH="/usr/local/Java/jdk1.5.0_07/lib:."

Также могут быть варианты:
/etc/bash.bashrc
/etc/profile
 
А для конктретного юзера то в
/home/username/.bashrc
/home/username/.profile 

Структура жесткого диска

Нумерация цилиндров жесткого диска идет снаружи внутрь. Цилиндр это группа дорожек, которые находятся друг под другом. Дорожки(треки) состоят из секторов. Сектор имеет размер 512 байт.

Сектора нумеруются от 1, а цилиндры и головки от 0.

суббота, 5 марта 2011 г.

Домены, сети Windows

Домен - група комтьютеров, которые обьединяются общей политикой безопасности и централизированным администрированием.


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

Чтобы создать домен, нужно иметь в сети минимум один сервер с серверной операционной системой(WinServer2003-2008), он называется контроллером домена(КД). Чтобы пк с серверной операционной системой стал КД, нужно на нем установить Active Directory. В домене может быть несколько КД, это увеличивает отказоустойчивость системы, при этом изменения на одном КД реплицируется на все остальные.
Active Directory - это сетевая служба, которая хранит каталог обьектов сети (учетные записи, принтеры, компьютеры, сервера) и предоставляет к этим обьектам доступ при успешновой аутентификации.

среда, 2 марта 2011 г.

YUI.Node

Методы получения элементов:
Y.one("selector");
Y.all("selector"); // тут на выходе мы получим так называемый NodeList

Методы получения атрибутов элементов:
Y.one("selector").get('id');
Y.one("selector").get('parentNode');
Y.one("selector").get('innerHTML');

Ядро YUI3

Частью ядра стал загрузчик. Параметры для него предаются в метод создание экземпляра юай.
YUI({......})

четверг, 24 февраля 2011 г.

Что является this в функции

Чтобы дать исчерпывающий ответ на этот вопрос приведу следующий пример:

var myFunc = function(){
  console.log(this);
}

var myObj = new myFunc(); // тут myObj
myFunc();// тут window

Из этого примера следует, что если мы в методе обьекта вызываем функцию и она что-то присваивает в this, то это заносится в тело нашего обьекта.

среда, 23 февраля 2011 г.

JSONP

Один из видов реализоации кросс-доменных запросов - вставка тега скрипта в тело страницы.

Это родило JSON with padding(JSONP), формирую строку запроса мы передаем параметр, который указывает с помошью какого колбека мы готовы обработать полученный джейсон. Сервер предоставляющий джейсон обворачивает свой ответ в этот колбек:
<script type="text/javascript"
         src="http://server2.example.com/getjson?jsonp=parseResponse">
 </script>


Сервер отвечает:
parseResponse({"Name": "Cheeso", "Rank": 7});

Осознал какую опасность может приносить такой сприпт, он может придти попробовать прочитать куку и сам вставить тег-скрипта или картинки с сорсом на свой сервер, а в ури указать секретные данные -- все данные прочитаны)

Разница между Get Utility и Connection Manager

Второя это обвертка над XMLHttpRequest-ом в YUI2, а на этот обьект накладывается политика одного источника (тот же домен, тот же протокол, тот же порт).
А первое это вставка в код тегов скприпт и стайл, что позволяет использовать кроссдоменный скриптинг(его подвид JSONP). В эти скрипты приходит джейсон, который выполняется и предоставляет данные с дргугого домена, но кроме этого он может рыть куки и делать другие гадости поэтому нужно JSONP использовать только из надежных источников.

YUI2

В YUI2 YAHOO.util.Event -- обьект, который отвечает за вобытия.
С помошью его можно прикручивать как существующие браузреные события, так и собственные-кастомные

YAHOO.util.Event.addListener("id_of_container", "click", handler); // так прикручиваются события

В хендлере мы можем исользовать:
stopEvent
preventDefault
stopPropagation  --- яваскипт стандарт прочитать в jquery об этом.
Они реализованы через яху обьект, что позволяют срабатывать им даже в тех браузерах, в которых не реализована поддержка.
YAHOO.util.Event.preventDefault(e); -- так вызывается превентДефолт в хендлере, где е- это событие которое приходит первым аргументом в обработчик(хендлер)

понедельник, 14 февраля 2011 г.

Встроеная функция Function

Эта встроенная функция-конструтор вызывается каждый раз, когда мы создаем функцию в javascript.

function myFunction(arg0,arg1,...argN){...}
myFunction = function(arg0,arg1,...argN){...}

Первые два варианта обьявления функции это эквивалент:
myFunction = new Function(arg0,arg1,...argN,{...});

суббота, 12 февраля 2011 г.

VLAN

VLAN -- виртуальный лан. ЛАН - широковещаетльный домен - это компьютеры соеденены свичем и для общения в этой сети не нужен маршрутизатор. Виртуальный лан -- это когда имитируется ш.домен для избранных компьютеров из разный подсетей(ланов), которые обьединены между собой марштрутизаторами.
Не путать св ВПН, потому что это создание сети через небезопасные соединения, через интернет. В случае влана, компьютеры находятся в одной физической сети предприятия, но в разных подсетях, а им нужно создать среду какбуд-то они в одной подсети.

воскресенье, 6 февраля 2011 г.

ООП javascript

Если нужно выбрать только свойства обьекта, а не его прототипа то:
for(prop in object) if (object.hasOwnProperty(prop)) {
    //...
}

Наследование в javascript
В самом языке есть только одно наследование - наследование на прототипах. Наслдеование на классах, это ручное наследование - трюк.
Классом для обькта, является функция, которая через оператор new создала этот обьект. Чтобы проверить на принадлежность обьекта определенному классу, нужно использовать оператор instanceof. Эта функция называется функция конструтор(пример с javascript.ru):
function Animal(name) {
  this.name = name
  this.canWalk = true
}
 
var animal = new Animal("скотинка")

Родное наслдование это наследование через прототип, что означает что обьект наследывает свойста и методы другого существующего на этот момент обьекта. Каждый обьект имеет прототип, ссылка на него хранится в свойстве [[prototype]], по стандарту она не обязана быть окрыта для чтения/записи, но в фаерфоксе это обычная ссылка __proto__. Единственный кроссбраузерный способ задать прототип это через функцию конструтор через параметр обьекта Function.prototype:
Animal.prototype = thing;

среда, 2 февраля 2011 г.

Изменение значение автоинкримента

Бывает в MySQL когда нужно почистить всю таблицу и начать ее заполнять с нуля, при этом было бы не плохо сделать ресет и счетчику автоинкрементного значения. Делается это так:
ALTER TABLE tablename AUTO_INCREMENT = 1

Теперь после этого следующий вставленные рекорд будет под номером 1.

суббота, 29 января 2011 г.

Получить что есть:)

Мегаполезные функции php:
get_defined_vars -- получить многоуровневый массив всех переменных, которые были инициализированы в скрипте.

get_defined_functions -- получить массив функций, которые были инициализированны на данный момент и доступны для выполнения.

get_defined_constants -- получить константы.

пятница, 28 января 2011 г.

дамп базы mysql

Так дапм можно слить:
mysqldump -uusername -ppassword -hhostname --add-drop-table databasename > dumpname.sql

А вот так поднять:
mysql -uusername -ppassword -hhostname databasename < dumpname.sql

среда, 26 января 2011 г.

svn серверная часть и администрирование

Subversion -- это клиент-серверное приложение. Расмотрим что же такое сервер.
Для управления репозиториями используется утилита svnadmin. Чтобы создать новый репозиторий нужно написать в поточном каталоге, который выбран под хранение репозиториев:

svnadmin create REPOSNAME

воскресенье, 23 января 2011 г.

Шпаргалка

services.msc -- окно консоли управления службами винды.
sc.exe -- консольное приложение для запуска, остановки, создания служб виндоус.

*.msi -- расширение инсталяционных пакетов.

services.exe(Service Control Manager) -- сервер, который управляет службами виндоус, общение со службами реализовано RPC(remote procedure call) технологией. Этот сервер может также управлять службами удаленных компьютеров. Доступ к нему осуществляется через консоль управления MMC, название у этой консоли services.msc(именно это расширение указывает на то, что это консоль управления MMC).


Сервисы поумолчанию запускаются под правами юзера LocalSystem, права этого юзера даже превышают права Administrator. Рабочим каталогом будет %WinDir% (это либо C:\WINDOWS или С:\WINNT), а каталогом временных файлов %WinDir%\TEMP. Можно также создать юзера под конкретную службу и настроить ему необходимый набор прав, теперь рабочим каталогом будет каталог новосозданного юзера. LocalSystem юзер виртуальный, поэтому у него нет домашнего каталога, что означает

суббота, 22 января 2011 г.

Что нового в очередном тесте знаний?

PHP
Обратил внимание на установку register_globals. Она была до php 4.3 включена по умолчанию. Делела она следующее - переменные EGPCS (Environment, GET, POST, Cookie, Server) регистрирует как глобальные. Тоесть у нас если есть некая переменная, которая хранит результат аутентификации, инициализируется она где-то в скипте и хранит булиновское значение. При включенной опции мы можем угадать имя этой переменной и прислать ее например как гет переменную со значением 1, что означает взлом входа. Это все можно исключить, но ceществование этой дыры решили прикрыть, так что из php 5.3 это деприкейтид опция.

среда, 19 января 2011 г.

Связь между таблицами баз данных

Наконец-то понял, почему слева на схемах мало обьектов, а справа много в связе many-to-one. Смысл вот в чем:

Слева находится обьек, который может быть связанным со многими правыми обьектами. А справа обьект может быть связан только с одним левым обьектом.
One-to-many все точно также только наоборот.
Many-to-many, это когда левый обьект может быть связан с каким угодно количеством правых обьектов, а правый обьект - с каким угодно количеством  левых.

воскресенье, 16 января 2011 г.

Апдейтсейвное добавление полей в модули

Это нужно сделать в каталоге /custom/Extension/modules/modulename/.
Например:
/custom/Extension/modules/Products/Ext/Vardefs/kc_orders_products_Products.php
$dictionary['Products']['fields']['kc_order_name']= array(
   'name' => 'kc_order_id',
   'type' => 'id',
   ...
);

Таким же образом мы можем редактировать уже существующие поля(изменять их параметры):
$dictionary['Bug']['fields']['fixed_in_release']['importable'] = 'required';

Связи в SugarCRM

В папках "/metadata"("/custom/metadata") хранятся связи под которые созданы отдельные таблицы в базе данных. Это видно по тому что связь указывается в переменной:
$dictionary['product_bundle_quote']=...

В файле vardef.php любого модуля тоже все его поля хранятся в этой переменной:
$dictionary['Product']=...


Связи же, под которые не нужны отдельные таблицы в базе, определяются в файле vardef.php, и тоже хранятся в переменной дикшенери, но уже под индексом своего модуля:
$dictionary['Product']['relationships']['products_accounts']=...

Так что такое переменная $dictionary?
Это переменная, которая представляет таблицы базы данных, которые могут выражаться либо модулями, либо связями между модулями. Под индексом первого уровня этого массива находится следующая структура:
'table' - имя этой таблицы в базе данных
'fields' - поля, которые находятся в этой таблице (также могут быть поля которые и не хранятся в базе, а просто временно сохранятся в обьекте, которые отображает эту таблицу. Нужен соответсвующий флаг в таком поле. Такие поля скорее всего калькуляционные -- динамически вычисляются по определенным состояниям приложения)
'indexes' - пометка на поля, которым нужно индексирование в базе.
'relationships' - определяются связи с другими таблицами в базе данных.
'comment' - описание предназначения таблицы
'audited' - булиновское значение, которое определяем хранить ли история этой таблицы в отдельной таблице(логи).

понедельник, 10 января 2011 г.

Система меню Drupal

Система меню друпала стоит на трех китах:


1. Колбек маппинг.
2. Контроль доступа.
3. Кастомизация.


Ядро системы живет в /include/menu.inc, а опциональная часть (такая как кастомизация) в modules-menu.


Задачей системы меню является диспетчеризация (или роутинг), это еще один синоним первого кита "коллбек маппинга". В таблице menu_router храняться пути сайта и имена функций, которые обрабатывают каждый конкретный путь, а также параметры для передачи в эти функции. В таблице menu_link хранятся айтемы менюшек(которые присутсвуют на сайте) связанные с путями в menu_router.

среда, 5 января 2011 г.

Во что выводят модули

Тема имеет следующие шаблоны:

page.tpl.php -- это каркас страницы, модуль может воспользоваться этим шаблоном, чтобы представить свой результат.

node.tpl.php -- это каркас елементарного контент тайпа, в него тоже модули могут выводить, можно также создавать более специализированные шаблоны под контент-тайпы наследники от нода. Если контент-тайп не видит под себя шаблон, то он ищет ближайший отцовский.

block.tpl.php -- это каркас блока, блоки можно размещать в разных регионах страницы. При этом все модули, которые делают вывод в блоки, пользуются этим шаблоном. С помошью panels/ctools можно из блока узнать, на какой странице располагается результат данного модуля через блок.

вторник, 4 января 2011 г.

cck

С 6-го друпала уже в ядре включен функционал создания нового типа нода. Сontent Сonstruction Кit же позовляет создавать новые поля к этому ноду в базу.

понедельник, 3 января 2011 г.

Архитектура приложения

SugarApplication не расширяется, но зато в SugarController есть метод preProcess(), в котором до вызова контроллера можно выполнить дополнительные проверки или инициализации.
Когда приходит запрос приложение получает контроллер от ControllerFactory, который основываясь на строке запроса выбирает нужный.
Эта фабрика ищет в /custom/modules/moduleName/ файл contoller.php, потом в modules/moduleName/, если не там не там файла нет, то создает екземпляр из includes/MVC/Controller/SugarController.php.

SugarBean

У шугарбина есть метод
function retrieve_by_string_fields($fields_array, $encode=true)

Который позволяет по набору полей выбрать запись из модуля который представляет этот бин. Такой себе поиск. Метод возвращает ссылку на свой обьект ($this), при этом в него уже заполнены остальные поля из базы. Наверно если введенный массив не четко определяет одну запись из базы, то обьект будет представлять массив записей, которым подходят поля. Проверил, выбирает первый из списка подошедших.

SugarCRM Studio

Применяется для:
1) Добавление кастомных полей.
2) Изменение лейблов полей.
3) Изменение лейаутов во вьюшках(эдит, серч и т.д.,), сабпанелях.
4) Создание релейшинов.

SugarCRM hooks & Workflows

В шугаре можно вмешиваться в цикл приложения на определенных этапах, таким образом влиять на работу приложения. Есть следующие пункты, куда можно подключиться хуком:

Module Builder SugarCRM

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

Для начала создается пакет, а уже в пакете модуль, так мы можем поставлять связанный функционал одним пакетом.