Удалил старый скрипт с сайта wonderu.com, теперь он перенаправляет на данную запись. Если вам что-то необходимо со старого сайта, пишите в комментах к записи, выложу.
UPD: Скачать OpenAL
воскресенье, 24 мая 2009 г.
Удалил старый скрипт на wonderu.com
Автор: Игорь Подсекин на 20:58 9 коммент.
Ярлыки: wonderu.com
понедельник, 18 мая 2009 г.
DirectShow: DSPack для CodeGear Delphi 2009
Автор: Игорь Подсекин на 11:27 5 коммент.
Ярлыки: delphi, DirectShow, dspack
среда, 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/.
Автор: Игорь Подсекин на 17:01 0 коммент.
Ярлыки: url4.ru
пятница, 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=<ссылка>Несколько сервисов уже начали интегрировать данный API в свои веб-приложения. Помните, что через API алиас задать нельзя.
source=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. Открытость разработчиков к новым и интересным предложениям!
Удачи!
Автор: Игорь Подсекин на 12:03 0 коммент.
Ярлыки: url4.ru
вторник, 5 мая 2009 г.
воскресенье, 3 мая 2009 г.
суббота, 2 мая 2009 г.
J2ME: Domain Checker - мобильная проверка доменов
Коллеги, запускаю в пре-альфа тестирование мобильный сервис проверки доступности Интернет-доменов.
Требования к телефону:
1. Поддержка Java;
2. Настроенный WAP/GPRS.
Ссылка на jar-файл: http://url4.ru/55
Можете также открыть ссылку с помощью QR-кода:
Хотелось бы услышать от вас отзывы и предложения, а также модель вашего телефона и замечания по работоспособности приложения на нем.
Автор: Игорь Подсекин на 23:48 0 коммент.
Ярлыки: domain checker, j2me, seo tool
пятница, 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;
}
}
}
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
Итоговое изображение:
Автор: Игорь Подсекин на 14:58 0 коммент.
Ярлыки: GraphViz, QuickGraph, графы







