SDev.Pro - разработка на заказ

http://sdev.pro - это:

1) Разработка программного обеспечения

Мы используем платформы ASP.NET MVC, LAMP, Atmel, Android, iOS, DirectShow и базы данных MS SQL, Oracle, PostgreSQL, а также облака на MS Azure и Amazon AWS для реализации любых Ваших идей.

2)Внедрение программного обеспечения

Мы предлагаем настройку и доработку решений на базе систем электронного документооборота MS SharePoint Server, геоинформационных систем на GeoServer, систем отчетности на MS SQL Reporting Services, а также облачных решений на MS Office 365.

http://sdev.pro

May 24, 2009

Удалил старый скрипт на wonderu.com

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

UPD: Скачать OpenAL

Наука: микроскопим


Нарисовал тут за недельку, вернее обвесил "пустую" чужую модель.

May 18, 2009

DirectShow: DSPack для CodeGear Delphi 2009

Выложил компоненты DSPack для CodeGear Delphi 2009. Скачать

May 13, 2009

url4.ru: Гаджет для Google Toolbar

Создан гаджет для Google Toolbar, позволяющий одним кликом создавать короткие ссылки для текущей страницы. Гаджет поддерживается Google Toolbar версий 5 и 6 для Firefox и Internet Explorer.
Установить гаджет можно, нажав на кнопку "Добавить кнопку на Google Toolbar" на странице http://url4.ru. Если у вас не установлена панель Google Toolbar, то скачайте ее по адресу: http://toolbar.google.com/.

May 8, 2009

Запуск преальфа-версии сервиса коротких ссылок url4.ru


Настало время рассказать миру о сервисе коротких ссылок url4.ru. Идея сервиса не нова, но в Рунете пока не получила широкого распространения. Суть ее в следующем:

Главная страница url4.ru имеет форму ввода, которая используется для преобразования длинных ссылок в короткие. Каждому введенному адресу сервер создает соответствие с коротким идентификатором и возвращает короткую ссылку, например, вводим http://ru.wikipedia.org/wiki/Заглавная_страница и получаем на выходе короткую ссылку http://url4.ru/5q.
Если адрес уже есть в БД, то возвращается существующий идентификатор и копия не создается, при этом свой алиас (см. ниже) игнорируется. Нажав на короткую ссылку http://url4.ru/5q, мы переходим на первоначальную страницу http://ru.wikipedia.org/wiki/Заглавная_страница.
Система позволяет также использовать алиасы - собственные дружественные имена, например, ссылка на английскую Википедию выглядит так http://url4.ru/wikipedia, т.к. при ее создании был указан алиас wikipedia.
url4.ru имеет простейший API для создания ссылок внешними приложениями. Для этого необходимо лишь отправить POST запрос с двумя полями:
urlText=<ссылка>
source=api
Несколько сервисов уже начали интегрировать данный API в свои веб-приложения. Помните, что через API алиас задать нельзя.

Короткие ссылки полезны, т.к. легко пишутся и запоминаются, также очень трудно ошибиться при диктовке ссылки по телефону. Полезно использовать короткие ссылки на визитках, если хотите задать на карте расположение своей фирмы, полагаю, что ссылка вида http://url4.ru/5s, лучше будет смотреться нежели http://maps.yandex.ru/?text=%D0%92%D0%BE%D0%BB%D0%BE%D0%BA%D0%BE%D0%BB%D0%B0%D0%BC%D1%81%D0%BA%D0%BE%D0%B5%20%D1%88%D0%BE%D1%81%D1%81%D0%B5%2C%204&sll=37.503208%2C55.807936&sspn=0.001%2C0.001&ll=37.504106%2C55.807521&z=17&l=sat. Ну и конечно же, короткую ссылку очень просто и экономно отправить по SMS.

Почему нужно пользоваться именно сервисом url4.ru?
1. Удобно!
2. Все по-русски!
3. QR-коды, которые позволяют открыть ссылку на мобильном телефоне, просто сфотографировав небольшой штрих код! Вот видео запись примера.
4. Наличие ускорителя для Internet Explorer 8. Добавив его с главной страницы url4.ru, вы сможете создавать короткие ссылки прямо из контекстного меню браузера!
5. Удобный API!
6. Открытость разработчиков к новым и интересным предложениям!

Удачи!

May 5, 2009

Наука: восстанавливаем вазу по картинке

Все таки восстанавливать вазу на порядок проще, чем лицо человека :)
Оригинал:


Рельеф:

May 2, 2009

J2ME: Domain Checker - мобильная проверка доменов

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



Требования к телефону:
1. Поддержка Java;
2. Настроенный WAP/GPRS.

Ссылка на jar-файл: http://url4.ru/55

Можете также открыть ссылку с помощью QR-кода:


Хотелось бы услышать от вас отзывы и предложения, а также модель вашего телефона и замечания по работоспособности приложения на нем.

May 1, 2009

Работа с графами и их визуализация (.NET, C#)

Если в вашем проекте возникла потребность в работе с графами, то вам поможет связка QuickGraph + GraphViz.
Алгоритм внедрения в .NET приложение следующий:
1. Используя пространства имен QuickGraph и QuickGraph.GraphViz, формируем граф и записываем его в файл .dot. Также можно отсортировать граф топологически, это полезно для выявления последовательности выполнения связанных процессов, например, у нас в пакете 20 сборок, и нам нужно откомпилировать все, учитывая связи между сборками. Отсортировав топологически, мы можем найти последовательность компиляции всех сборок.
2. С помощью командной утилиты из dot.exe из пакета GraphViz формируем png-файл и отображаем в своем приложении.
Все просто :) В результате получаем изображение графа с автоматической расстановкой связей и элементов.
Добавлю, что с помощью dot.exe можно экспортировать в другие форматы, например, SVG, GIF, JPEG. У себя мы использовали следующую связку PNG + CMAP карта изображения для тега img. Таким образом, мы получали автоматически сформированное интерактивное изображение процесса с подсказками и ссылками в нашем ASP.NET приложении.

Ниже пример построения графа последовательности одевания человека (C#):

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using QuickGraph;

using QuickGraph.Algorithms;

using QuickGraph.Graphviz;

using System.Drawing;

using System.Diagnostics;

namespace gr

{

class Program

{

static void Main(string[] args)

{

var g = new AdjacencyGraph<string, TaggedEdge<string, string>>();

g.AddVertex("Часы");

g.AddVertex("Носки");

g.AddVertex("Туфли");

g.AddVertex("Трусы");

g.AddVertex("Брюки");

g.AddVertex("Рубашка");

g.AddVertex("Ремень");

g.AddVertex("Галстук");

g.AddVertex("Пиджак");

g.AddEdge(new TaggedEdge<string, string>("Носки", "Туфли", "a"));

g.AddEdge(new TaggedEdge<string, string>("Трусы", "Туфли", "s"));

g.AddEdge(new TaggedEdge<string, string>("Трусы", "Брюки", "d"));

g.AddEdge(new TaggedEdge<string, string>("Брюки", "Туфли", "f"));

g.AddEdge(new TaggedEdge<string, string>("Брюки", "Ремень", "g"));

g.AddEdge(new TaggedEdge<string, string>("Рубашка", "Ремень", "h"));

g.AddEdge(new TaggedEdge<string, string>("Рубашка", "Галстук", "j"));

g.AddEdge(new TaggedEdge<string, string>("Галстук", "Пиджак", "k"));

g.AddEdge(new TaggedEdge<string, string>("Ремень", "Пиджак", "l"));

foreach (var elem in g.TopologicalSort<string, TaggedEdge<string, string>>())

{

Console.WriteLine(elem);

}

var graphViz = new GraphvizAlgorithm<string, TaggedEdge<string, string>>(g, @".\", QuickGraph.Graphviz.Dot.GraphvizImageType.Png);

graphViz.FormatVertex += FormatVertex;

graphViz.FormatEdge += FormatEdge;

graphViz.Generate(new FileDotEngine(), "ww");

Console.ReadLine();

}

private static void FormatVertex(object sender, FormatVertexEventArgs<string> e)

{

e.VertexFormatter.Label = e.Vertex;

e.VertexFormatter.Shape = QuickGraph.Graphviz.Dot.GraphvizVertexShape.Box;

e.VertexFormatter.StrokeColor = Color.Yellow;

e.VertexFormatter.Font = new Font(FontFamily.GenericSansSerif, 12);

}

private static void FormatEdge(object sender, FormatEdgeEventArgs<string, TaggedEdge<string, string>> e)

{

e.EdgeFormatter.Head.Label = e.Edge.Target;

e.EdgeFormatter.Tail.Label = e.Edge.Source;

e.EdgeFormatter.Font = new Font(FontFamily.GenericSansSerif, 8);

e.EdgeFormatter.FontColor = Color.Red;

e.EdgeFormatter.StrokeColor = Color.Gray;

}

}

}

После выполнения приложения получаем файл ww.dot:
digraph G { 0 [color="#FFFF00FF", fontsize=12, label="Часы", shape=box, fontname="Microsoft Sans Serif"]; 1 [color="#FFFF00FF", fontsize=12, label="Носки", shape=box, fontname="Microsoft Sans Serif"]; 2 [color="#FFFF00FF", fontsize=12, label="Туфли", shape=box, fontname="Microsoft Sans Serif"]; 3 [color="#FFFF00FF", fontsize=12, label="Трусы", shape=box, fontname="Microsoft Sans Serif"]; 4 [color="#FFFF00FF", fontsize=12, label="Брюки", shape=box, fontname="Microsoft Sans Serif"]; 5 [color="#FFFF00FF", fontsize=12, label="Рубашка", shape=box, fontname="Microsoft Sans Serif"]; 6 [color="#FFFF00FF", fontsize=12, label="Ремень", shape=box, fontname="Microsoft Sans Serif"]; 7 [color="#FFFF00FF", fontsize=12, label="Галстук", shape=box, fontname="Microsoft Sans Serif"]; 8 [color="#FFFF00FF", fontsize=12, label="Пиджак", shape=box, fontname="Microsoft Sans Serif"]; 1 -> 2 [ fontsize=8, fontcolor="#FF0000FF", color="#808080FF", taillabel="Носки", fontname="Microsoft Sans Serif", headlabel="Туфли"]; 3 -> 2 [ fontsize=8, fontcolor="#FF0000FF", color="#808080FF", taillabel="Трусы", fontname="Microsoft Sans Serif", headlabel="Туфли"]; 3 -> 4 [ fontsize=8, fontcolor="#FF0000FF", color="#808080FF", taillabel="Трусы", fontname="Microsoft Sans Serif", headlabel="Брюки"]; 4 -> 2 [ fontsize=8, fontcolor="#FF0000FF", color="#808080FF", taillabel="Брюки", fontname="Microsoft Sans Serif", headlabel="Туфли"]; 4 -> 6 [ fontsize=8, fontcolor="#FF0000FF", color="#808080FF", taillabel="Брюки", fontname="Microsoft Sans Serif", headlabel="Ремень"]; 5 -> 6 [ fontsize=8, fontcolor="#FF0000FF", color="#808080FF", taillabel="Рубашка", fontname="Microsoft Sans Serif", headlabel="Ремень"]; 5 -> 7 [ fontsize=8, fontcolor="#FF0000FF", color="#808080FF", taillabel="Рубашка", fontname="Microsoft Sans Serif", headlabel="Галстук"]; 6 -> 8 [ fontsize=8, fontcolor="#FF0000FF", color="#808080FF", taillabel="Ремень", fontname="Microsoft Sans Serif", headlabel="Пиджак"]; 7 -> 8 [ fontsize=8, fontcolor="#FF0000FF", color="#808080FF", taillabel="Галстук", fontname="Microsoft Sans Serif", headlabel="Пиджак"]; }

Формируем изображение с помощью dot.exe:
dot -T png ww.dot > ww.png

Итоговое изображение: