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

Dec 14, 2009

Augmented Reality: ресурсы

Написав программу, видео которой поместил в предыдущем посте, решил погуглить на тему AR и нашел несколько интересных ссылок:
1. AUGMENTED REALITY WITH WPF - автор использует для поиска шаблона специальную библиотеку ARTOOLKITPLUS. Думаю, что это хороший выбор по сравнению с "моей" громоздской OpenCV.
2. Готовый проект также с использованием WPF и ArToolkitPlus.

Если вы занимаетесь подобными вещами - напишите, мне интересно :)

Dec 12, 2009

DirectShow: Augmented Reality Experiments


DirectShow, OpenCV and WPF:


Sources: http://dl.dropbox.com/u/3530378/WpfAugumentedReality.zip

Dec 3, 2009

Media Foundation: Конвертирование аудио и видео

В блоге Media Foundation появился пост о создании конвертера аудио и видео в различные форматы http://blogs.msdn.com/mf/archive/2009/12/02/mfsimpleencode.aspx

Удачи!

Sep 9, 2009

OpenCV: IP-камера AXIS

Для того, чтобы использовать OpenCV под .NET, подключаю обертку EMGU CV. Эта обертка пока лучшая из тех, что я встречал, но не без глюков.

Контекст IP-камеры создается следующим образом. Создается потомок Capture:

private class IpCapture: Capture
{
[DllImport("opencv_ffmpeg111.dll", CharSet = CharSet.Ansi)]
private static extern IntPtr cvCreateFileCapture_FFMPEG([MarshalAs(UnmanagedType.LPStr)] string filename);

[DllImport("opencv_ffmpeg111.dll", CharSet = CharSet.Ansi)]
private static extern void cvReleaseCapture_FFMPEG(IntPtr capture);

public IpCapture(string fileName)
{
_ptr = cvCreateFileCapture_FFMPEG(fileName);
if (_ptr == IntPtr.Zero)
{
throw new NullReferenceException("Error: Unable to create capture from camera");
}
}

protected override void DisposeObject()
{
base.DisposeObject();
cvReleaseCapture_FFMPEG(_ptr);
}
}




Затем создается объект, используя url-камеры:




private static Capture _cameraCapture;
...
_cameraCapture = new IpCapture("http://webcam.oii.ox.ac.uk/mjpg/video.mjpg");


Ну а дальше работаем как с обычной USB-камерой или видеофайлом.

OpenCV: Введение

Презентация о возможностях OpenCV

Sep 3, 2009

Наука: интерполяция сплайнами

Выкладываю пример (Delphi) интерполяции сплайнами. Основан на примерах из книги Мудров А.Е. “Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль (Томск, 1991)”

// Пример интерполяции сплайнами
// Игорь Подсекин (wonderu@gmail.com)
// Лицензия LGPL
//
// http://dotnet.wonderu.com
// http://directshow.wonderu.com

program spline;

{$APPTYPE CONSOLE}

type
vec = array[0..100] of Real;

var
i, k, n: Integer;
x1, x0, x9, h, p, p1,p2:Real;
x, f, c: vec;

//Формирование таблицы
procedure Tab(n: Integer; var x, f:vec);
var
i: Integer;
begin
for i := 0 to n do
begin
Write('X', i:2, ',F',i:2,'?');
Readln(x[i], f[i]);
end;
end;

//Расчет коэффициентов сплайна
procedure CalcCoeff(n: Integer; x, f: vec; var c:vec);
var
i, j, m: Integer; a, b, r: Real; k: vec;
begin
k[1] := 0.0; c[1] := 0.0;
for i := 2 to n do
begin
j := i - 1; m := j - 1;
a := x[i] - x[j]; b := x[j] - x[m];
r := 2 * (a + b) - b * c[j];
c[i] := a / r;
k[i] := (3.0 * ((f[i] - f[j]) / a -
(f[j] - f[m]) / b) - b * k[j]) / r;
end;
c[n] := k[n];
for i := n - 1 downto 2 do
c[i] := k[i] - c[i] * c[i + 1];
end;

//Вычисление значения и производной
procedure CalcSpline(n: Integer; x, f, c:vec;
var p, p1, p2: Real; x1: Real);
var
i, j: Integer; a, b, d, q, r: Real;
begin
i := 1;
while (x1 > x[i]) and (i <> n) do
begin
i := i + 1; j := i - 1;
a := f[j]; b := x[j];
q := x[i] - b; r := x1 - b;
p := c[i]; d := c[i + 1];
b := (f[i] - a) / q - (d + 2 * p) * q / 3.0;
d := (d - p) / q * r;
p1 := b + r * (2 * p + d);
p2 := 2 * (p + d);
p := a + r * (b + r * (p + d / 3.0));
end;
end;

begin
Write('n, x0, x9, h?');
Readln(n, x0, x9, h);
Tab(n, x, f);
CalcCoeff(n, x, f, c);
k := Round((x9 - x0) / h + 1.0);
x1 := x0;
for i := 0 to k do
begin
CalcSpline(n, x, f, c, p, p1, p2, x1);
Writeln(x1:5:5, ' ', p:5:5, ' ', p1:5:5, ' ', p2:5:5);
x1 := x1 + h;
end;
readln;
end.



Expression Encoder 3.0 SDK: Вещание в сеть

В продолжение темы: http://dotnet.wonderu.com/2009/07/expression-encoder-30-sdk.html

Пример вещания в сеть видео-аудио потока, используя Microsoft Expression Encoder 3.0 SDK.

#region Copyright
//
// Пример вещания видео-аудио потока, используя Microsoft Expression Encoder 3.0
// Игорь Подсекин (wonderu@gmail.com)
// Лицензия LGPL
// http://dotnet.wonderu.com
// http://directshow.wonderu.com
//
#endregion

using System;
using Microsoft.Expression.Encoder.Live;

namespace Com.Wonderu.Samples.Expression.Encoder
{
/// <summary>
/// Класс вещателя
/// </summary>
public class Broadcaster: IDisposable
{
private LiveJob _job;

/// <summary>
/// Конструктор
/// </summary>
public Broadcaster()
{
_job = new LiveJob();
}

/// <summary>
/// Освобождение.
/// </summary>
public void Dispose()
{
if (_job != null)
_job.Dispose();
}

/// <summary>
/// Старт
/// </summary>
public void Start()
{
if (_job == null)
throw new NullReferenceException("Live Job не существует");

//Выбор устройств
LiveDevice videoDevice = _job.VideoDevices.Count > 0 ? _job.VideoDevices[0] : null ;
LiveDevice audioDevice = _job.AudioDevices.Count > 0 ? _job.AudioDevices[0] : null;

LiveDeviceSource liveSource = _job.AddDeviceSource(videoDevice, audioDevice);

// Активация
_job.ActivateSource(liveSource);

// Создание формата вещания
WindowsMediaBroadcastOutputFormat outputFormat =
new WindowsMediaBroadcastOutputFormat
{
//Порт
BroadcastPort = 8080,

//Максимальное число подключений
MaximumNumberOfConnections = 10
};

// Установка выходного формата
_job.OutputFormat = outputFormat;

// Начало вещания
_job.StartEncoding();
}

/// <summary>
/// Стоп
/// </summary>
public void Stop()
{
if (_job == null)
throw new NullReferenceException("Live Job не существует");

_job.StopEncoding();
}
}
}



}




Ссылка на видео-аудио поток будет следующего вида mms://<server name>:8080.

PKI: Курс "Инфраструктуры открытых ключей"

Нашел бесплатный учебный курс "Инфраструктуры открытых ключей" на сайте INTUIT.RU. Просмотрел по диагонали, ляпов не заметил, поэтому советую.

Jul 31, 2009

Dev Tips: Сборка, упаковка и публикация проектов на FTP

Приведу ниже пример небольшой уловки по сборке и публикации .NET проектов на ваш FTP-сервер. Естественно, с помощью данного метода можно публиковать что угодно.

Метод состоит из 4-х этапов:

  1. Запуск скрипта publish.bat c параметром – номером сборки;
  2. Сборка проекта с помощью Visual Studio;
  3. Упаковка проекта с помощью бесплатного 7zip;
  4. Публикация архива на ftp.

publish.bat:

rem Удаляем все архивы
del Manager\bin\Release\*.zip

rem Собираем проект
"%VS90COMNTOOLS%..\IDE\devenv" Manager.sln /Rebuild Release

cd Manager\bin\Release

rem Пакуем необходимые файлы в архив с помощью бесплатного 7zip
..\..\..\Utils\7zip\7za.exe a Release%1.zip Test.exe
..\..\..\Utils\7zip\7za.exe a Release%1.zip Manager.exe
..\..\..\Utils\7zip\7za.exe a Release%1.zip template.doc

cd ..\..\..\

rem Запускаем ftp.exe с текущим файлом в качестве параметра
ftp -s:%0.bat
goto done
lcd Manager\bin\Release
open ftp.example.com
user
password
cd /domains/example.com/public_html/MainReleases
prompt
binary
mput *.zip
bye
:done

Удачи :)

Jul 29, 2009

Блог Alex Zambelli: Silverlight, streaming media, Windows Media, VC-1, H.264

Обращаю Ваше внимание на блог Алекса Замбелли (Alex Zambelli), посвященный технологиям Silverlight, streaming media, Windows Media, VC-1, H.264.
Ссылка на блог: http://alexzambelli.com/blog/

Expression Encoder 3.0 SDK: Склеивание медиафайлов

Добрались наконец-то руки до Microsoft Expression Encoder 3.0. Подробнее о продукте можете узнать по ссылке http://blogs.msdn.com/kichinsky/archive/2009/07/23/9846410.aspx .

Советую обратить внимание на .NET API. Он прост и удобен. Приведу небольшой локализованный примерчик из SDK для наглядности:

using System;
using Microsoft.Expression.Encoder;
using Microsoft.Expression.Encoder.Profiles;

namespace MergeMedia
{
/// <summary>
/// Пример последовательного склеивания нескольких медиафайов в один
/// </summary>
class Program
{
/// <summary>
/// Точка входа
/// </summary>
/// <param name="args">аргументы командной строки</param>
static void Main(string[] args)
{
if (args.Length < 2)
{
// Используйте командную строку для задания имен входных медиафайлов
Console.WriteLine("Использование: MergeMedia <MediaFile> <MediaFile> ...");
return;
}

// Создание job и MediaItem для выходного медиафайла
Job job = new Job();
MediaItem mediaItem = new MediaItem(args[0])
{
OutputFormat = new WindowsMediaOutputFormat()
};

// Задание профилей

// Использование видеопрофиля источника, если это возможно
mediaItem.OutputFormat.VideoProfile =
mediaItem.SourceVideoProfile ??
new AdvancedVC1VideoProfile
{
Size = mediaItem.MainMediaFile.VideoStreams[0].VideoSize,
Bitrate = new ConstantBitrate(1000)
};

// Использование аудиопрофиля источника, если это возможно
mediaItem.OutputFormat.AudioProfile =
mediaItem.SourceAudioProfile ?? new WmaAudioProfile();

// Добавление источников
job.MediaItems.Add(mediaItem);
for (int i=1; i<args.Length; i++)
{
mediaItem.Sources.Add(new Source(args[i]));
}

// Установка callback-функции отображения прогресса
job.EncodeProgress
+= OnProgress;

// Задание выходной директории.
job.OutputDirectory = @"C:\output";

// Кодировка
job.Encode();
}

/// <summary>
/// Сallback-функция прогресса
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void OnProgress(object sender, EncodeProgressEventArgs e)
{
Console.WriteLine(e.Progress);
}
}
}



Jun 23, 2009

Cкачать OpenAL

Часто на старый сайт приходили за OpenAL инсталлятором. Поэтому опубликую ссылки и здесь на инсталлторы: http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx

Создатели Firefox о DirectShow

Ссылка: http://url4.ru/8v
Создатели Firefox делятся своими мыслями о поддержке тега <video> и о том, что DirectShow не будет использоваться для отображения видео в браузере.

PS. Напомню, что DirectShow уже поддерживается браузерами при условии использования JavaFX.

DirectShow: Статус окно Xvid-кодировщика

Не раз наверное замечали, что при кодировании видео кодеком Xvid, отображается статус окно с не очень веселыми графиками.
Отключается это просто:
1. Запускаем Xvid Configure Encoder;
2. Жмем Other Options;
3. Убираем галку Display Encoding Status.

Есть и альтернативный вариант - поправить реестр:
[HKEY_CURRENT_USER\Software\GNU\Xvid]
"display_status"=dword:00000000

Jun 15, 2009

DirectShow: .NET и Windows Mobile

Найден проект: DirectShow.NET для Windows Mobile-платформы.
Ссылка: http://alexmogurenko.com/blog/directshownetcf/

Jun 3, 2009

Использование Delphi DSPack + GMFBridge

Форуме создателей DSPack обсуждается тема использования GMFBridge совместно с DSPack. Читаем и смотрим примеры.

Jun 1, 2009

How to: создание re-twitter'а

Для того, чтобы собрать интересующие ленты пользователей twitter.com, необходимо проделать ряд несложных действий:
1. Создаем пайп на http://pipes.yahoo.com (это сервис для обработки RSS-потоков)

2. В Fetch Feed вносим все ссылки на RSS-ленты (на странице пользователя Twitter это ссылка вида "RSS feed of 's updates");
3. Сортируем с помощью Sort;
4. Сохраняем и публикуем;
5. Получившуюся RSS-ленту кормим сервису http://twitterfeed.com/;
6. Радуемся увеличившейся энтропии Вселенной.

May 24, 2009

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

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

UPD: Скачать OpenAL

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


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

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

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

Apr 16, 2009

Моделирование падения в черную дыру

Увлечение черными дырами у меня началось еще в школе. В 97-году я выступал на собрании школьного научного общества с докладом “Черные дыры”. К сожалению, в нашем маленьком городке тогда литературы было крайне мало, поэтому пришлось перерыть все библиотеки в округе.

Увлечение этими странными объектами Вселенной осталось и поныне. Любая новость меня приводит чуть ли не в восторг :) Вот последнее, что попалось на глаза:

Астрономы смоделировали то, что предстанет перед глазами человека, падающего в черную дыру.

С исследованием вы можете ознакомиться на сайте Inside Black Holes. Меня порадовало предупреждение:

warning 

Вольный перевод:

Предупреждение: Если вы упадете в черную дыру, то погибните. Вы не попадете через нее в другое время и пространство.

Mar 28, 2009

MS Word: Ссылки на рисунки

Набирая диссер в MS Word, столкнулся с проблемой установки ссылок в тексте на изображения. MS Word есть стандартный механизм вставки ссылки, доступный в меню Insert/Cross-References (Вставка/Перекрестная ссылка). Здесь можно выбрать рисунок и вставить на него ссылку. Получаем примерно следующее:

Структурная схема системы представлена на следующем рисунке (см. Рисунок 36)

"Рисунок 36" - является полем и отредактировать его не удасться, поэтому приходится извращаться и пытаться приспосабливать предложение под именительный падеж поля. Наиболее простым решением мне видится сокрытие текста "Рисунок ". Т.е. пишем текст:

Структурная схема системы представлена на рисунке Рисунок 36

Для этого выделяем "Рисунок ", нажимаем правой кнопкой по выделенному участку, выбираем меню Font... (Шрифт...). Дальше выбираем опцию hidden (скрытый). После этого текст скрытый текст подчеркнется

Структурная схема системы представлена на рисунке Рисунок 36

, а при печати его вообще видно не будет:

Структурная схема системы представлена на рисунке 36

Mar 19, 2009

Новая проблема: Internet Explorer 8

Сегодня вышел финальный релиз IE8. Ура :)
Коллега интересную мысль подал. Теперь требование заказчика к сайту: "IE6+" - принесет веб-программистам еще больше головной боли. Я бы сказал, что процентов так на 50 :)
Удачи, коллеги по несчастью ;)

Mar 13, 2009

MS SQL Server: sp_sproc_columns, sp_sproc_columns_90 и varchar(max)

При использовании хранимки sp_sproc_columns для получения информации о хранимках в БД под MS SQL Server 2005, нашел баг: если хранимка содержит аргумент с типом varchar(max), то sp_sproc_columns этот тип отображает как text. Такая же история с nvarchar(max) и varbinary(max). Лечится данная проблема использованием sp_sproc_columns_90, которая корректно отображает типы.

Mar 3, 2009

Windows 7 beta: первые критические ошибки

После того как Windows 7 beta (build 7000) возвращается из спящего режима через минуту отключаются мышь и клавиатура. Помогает лишь ИТ-истина:  7 бед - один reset :)

Feb 26, 2009

Формулы конвертации RGB<-->YUV

R = Y + (1.4075 * (V - 128));
G = Y - (0.3455 * (U - 128) - (0.7169 * (V - 128));
B = Y + (1.7790 * (U - 128);

Y = R * .299 + G * .587 + B * .114;
U = R * -.169 + G * -.332 + B * .500 + 128.;
V = R * .500 + G * -.419 + B * -.0813 + 128.;

Feb 16, 2009

Free SVN Hosting - бесплатный хостинг SVN

После того, как замечательный бесплатный хостинг assembla.com запретил размещать приватные проекты бесплатно, я решил поискать другие решения. Привожу список найденного.
  1. http://unfuddle.com/
  2. http://xp-dev.com/ (судя по заявленным опциям - самый лучший хостинг)
  3. http://www.codespaces.com
  4. http://cvsdude.com (несерьезно, всего 2 Мб)
Если найдете еще чего-нибудь - сообщайте!

Feb 5, 2009

Windows 7: Настройка AVerMedia AVerTV 307

Откуда проблема:
1. Поставил Windows 7
2. Естественно нет ПО и драйверов для ТВ-тюнера AVerMedia AVerTV 307, в результате он даже не обнаруживается.

Решение:
1. Ставим программу AVerTV 6.3.0 (ищем на http://www.avermedia.com/avertv/ru/Support/Download.aspx?Type=APDriver)
2. Запускаем: звук есть, а вот картинки нет.
3. Добавляем настройки в секцию [AVerMedia M151 PCI Analog] файла C:\Users\Ваш_Пользователь\Documents\AverTV\ Ваш_Пользователь.ini:
Brightness=128
BrightnessVMR=128
Contrast=68
ContrastVMR=68
EnableBrightness=1
EnableContrast=1
EnableGain=1
EnableSaturation=1
Gain=144
Saturation=64
SaturationVMR=64

Решение найдено здесь.

Windows Media Center не заработал, говорит, что нет тюнера. Может кто решил эту проблему?

Feb 1, 2009

киберсквоттеры и до меня добрались

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

Jan 19, 2009

Jan 11, 2009

Windows 7: Обновление Media Foundation

Дождались! Наконец-то добавлена поддержка устройств видеозахвата в Media Foundation.
Технология Microsoft Media Foundation была представлена в Windows Vista как замена DirectShow. DirectShow также будет доступен и в Windows 7 (видимо COM с нами навсегда), но, все же, за MF - будущее.

Нововведения в MF кратко можно описать несколькими предложениями:
  • Улучшенная поддержка форматов, включая MPEG-4
  • Поддержка устройств захвата и аппаратных кодеков
  • Упрощенная модель программирования
  • Улучшения в платформе
Поддержка форматов
MF изначально была куцей платформой с урезанной поддержкой медиа-форматов, поэтому разработчики были вынуждены скатываться обратно к DirectShow. Windows 7 привнесла в MF новые кодеки, медиа-источники и медиа-рендереры:
  • AVI/WAVE file source
  • MP4/3GP file source
  • MP4/3GP file sink
  • DV video decoder
  • H.264 video decoder
  • MJPEG decoder
  • ASF streaming sink
  • MP3 file sink (не включает MP3-кодер).
Аппаратная часть
MF теперь поддерживает следующие устройства:
  • UVC 1.1 устройства видеозахвата, например, веб-камеры
  • Устройства аудио-захвата
  • Аппаратные кодеры и декодеры
  • Аппаратные видео-процессоры, например, преобразователи цветового кодирования
Аппаратные кодеры могут быстро перекодировать видео из одного формата в другой, например, конвертация WMV в 3GP в реальном времени в фоновом режиме.

Ссылка на SDK.

DirectShow форум: обновление


Обновился "DirectShow форум" http://forum.wonderu.com.
[+] Появилась поддержка RSS. Теперь можно подписаться на темы
или на все сообщения форума;
[*] Исправлена ошибка "обрушения" дизайна форума при заходе
неаутентифицированным пользователем под IE или FireFox.

Jan 2, 2009

Stop Motion

Очень симпатичный клип Fat City Reprise - Long Gone. Клип создан путем склеивания 45000 фотографий, сделанных камерой Nikon D200 DSLR. Смотрим шедевр: