C# && Jabber. Компонеты. Использование
Гугл подсказал: jabber-net
Коротко: набор контролов для работы с jabber'ом.
Лицензия: GNU Lesser General Public License.
<html>
<head>
<title> Таскаем картинки </title>
</head>
<body>
<div style="width: 100%; height: 100%;">
<div id=1 style="position:absolute; top: 100px; left: 100px; z-index: 0; width:200px; height:149px; background: url('pictures/image.jpg');" onMouseDown="startDrag(event,1)" onMouseUp="stopDrag()"> </div>
<div id=2 style="position:absolute; top: 100px; left :400px; z-index: 0; width:200px; height:149px; background: url('pictures/image2.jpg');" onMouseDown="startDrag(event,2)" onMouseUp="stopDrag()"> </div>
</div>
</body>
</html>
function startDrag(e, layerName)
{
lay=document.getElementById(layerName); //ищем слой, на котором произошло событие
//следующая часть отвечает за то, чтобы слой при щелчке мышью перемещался наверх. для этого ему ставится максимальный z-index, а остальным z-index раздается в порядке убывания
var layers = document.getElementsByTagName(«div»);
var layerLength = (layers.length — 1);
var layerZindex = lay.style.zIndex;
for(var i=1; i < (layerLength + 1); i++) {
if (parseInt(layers[i].style.zIndex) == 0) { continue; }
if (parseInt(layers[i].style.zIndex) >= parseInt(layerZindex)) { layers [i].style.zIndex = parseInt(layers[i].style.zIndex) — 1; }
}
lay.style.zIndex = layerLength — 1;
//это танцы с бубном для нормального получения координат щелчка мышью в браузере файрфокс
if (!e) e = window.event;
var x=e.clientX;
var y=e.clientY;
//действия, помогающие найти отношение координат слоя к координатам курсора
differenceLeft = parseInt(x) — parseInt(lay.style.left);
differenceTop = parseInt(y) — parseInt(lay.style.top);
//«рычаг» вкл
dragIsStarted = true;
}
function updateCoords(e)
{
//если «рычаг» вкл, то слой должен двигаться за курсором
if (dragIsStarted)
{
//опять танцы с бубном для нормального получения координат щелчка мышью в браузере файрфокс
if (!e) e = window.event;
var x=e.clientX;
var y=e.clientY;
//действия, которые изменяют координаты слоя, зная их отношение к координатам курсора
lay.style.top = parseInt(y) — parseInt(differenceTop);
lay.style.left = parseInt(x) — parseInt(differenceLeft);
}
}
function stopDrag()
{
//«рычаг» выкл.
dragIsStarted = false;
}
'import'=>array(
'application.kohana.Kbridge',
),Kbridge::init();echo num::round($number,5); Что такое MDA — архитектура приложения управляемая моделью.
Что такое DDD — разработка приложений на основе правил предметной области.
Как часто при рарзработке информационных систем нам (архитекторам, программистам) приходится упрощать видение предметной области, чтобы закончить проект в какие-то приемлемые сроки.
в 1998 году группа ребят из Швеции решили сделать что-то интересное. Buisines Object Layer for Delphi BOLD, инструмент который позволил бы имея модель описания предметной области разработать в приемлимые сроки приложение, насколько я помню DDD еще не пахло. Задач стояло много, но одна из задачь уйти от SQL. в качестве языка запросов использовать OCL -object colnstraints language язык ограничений. вот в 2002 году Борланд купила эту компанию, и начала разработку продукта Enterprise Core Objects. К тому времени они успели выпустить ECO 1, который по функциональности даже рядом не стоял в решением BOLD для Delphi. короче история длинная… что мы имеем сейчас:
ECO 5 самый мощный инструмент для разработки приложений по DDD и MDA, который просто НЕ ИМЕЕТ аналогов:
язык запросов OCL, эволюцию базы данных, транзакции, блоки отката, синхронизация нескольких объектных пространств (причем передаются не все объекты а только изменения), подписка на объекты, вычисляемые атрибуты(ocl code), можно создавать свои ocl-операции, испольнение SQL, машина состояний для объекта, куча дата провайдеров(причем написать новый для любой базы данных можно не более чем за один день), возможность регистрации своих и замены стандартных сервисов ECO space, версионные данные, lazy fetch, выполнение ocl по отношениюк объектам в памяти и выполнение удаленных OCL, сейчас даже LINQ и даже Silverlight. собственный редактор модели, с возможностью документирования модели и работы нескольким разработчикам одновременно(новое для ECO5), а так же многое другое.
ECO бесплатна для работы с моделями в 12 классов? проектировать можно сколько хочешь, а вот запускать только модели где не более 12 классов. я считаю этого достаточно чтобы померить.
package ru.itmanblog.web;
import java.io.*;
import java.util.Hashtable;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
@SuppressWarnings( "serial" )
public class LdapImgServlet extends HttpServlet
{
private final String LDAP_LISTEN_ADDR = "192.168.0.1";
private final String LDAP_LISTEN_PORT = "389";
private final String LDAP_BASE_DNAME = "ou=Users,dc=itmanblog,dc=ru";
private final String LDAP_FILTER_LPART = "(objectclass=inetorgperson)";
private final String LDAP_FILTER_RPART = "(businesscategory=general)";
@SuppressWarnings( "unchecked" )
public void doGet( HttpServletRequest req, HttpServletResponse res )
throws ServletException, IOException
{
res.setContentType( "image/jpeg" );
try
{
Hashtable<String, String> ldapParams = new Hashtable
<String, String>();
ldapParams.put( "java.naming.ldap.version", "3" );
ldapParams.put( "java.naming.factory.initial",
"com.sun.jndi.ldap.LdapCtxFactory" );
ldapParams.put( "java.naming.referral", "follow" );
ldapParams.put( "java.naming.provider.url", "ldap://"+
LDAP_LISTEN_ADDR +":"+ LDAP_LISTEN_PORT );
InitialLdapContext ldapLink = new InitialLdapContext(
ldapParams, null );
SearchControls ldapSearchCtrls = new SearchControls();
ldapSearchCtrls.setSearchScope( SearchControls.SUBTREE_SCOPE );
NamingEnumeration searchResults = ldapLink.search(
LDAP_BASE_DNAME, "(&(uid=" + req.getParameter( "uid" ) + ")" +
LDAP_FILTER_LPART + LDAP_FILTER_RPART + ")", ldapSearchCtrls );
Attributes ldapAttrs = ((SearchResult)searchResults.next()).
getAttributes();
byte [] bytePhotoStr = (byte[])ldapAttrs.get("jpegPhoto").get();
for( byte i : bytePhotoStr )
res.getOutputStream().write( i );
res.getOutputStream().close();
}
catch( Exception e ) {}
}
}