вторник, 22 февраля 2011 г.

Последняя версия Mono для Ubuntu

Вот тут есть описание установки последней версии mono для ubuntu. Жалко, что не через пакетный менеджер.

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

LibreOffice в OpenSuSe

Вот так ставится libreoffice в opensuse:

zypper ar -f http://download.opensuse.org/repositories/LibreOffice:/Stable/openSUSE_11.3/ LibreOffice

zypper ref

zypper in --from LibreOffice libreoffice

пятница, 11 февраля 2011 г.

Выделение участков кожи на изображении

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

R>95 and G>40 and B>20 and max(R,G,B)-min(R,G,B)>15 and |R-G|>15 and R>G and R>B and [(R*100)/(R+G+B)]<57 and [(G*100)/(R+G+B)]<35 and [(B*100)/(R+G+B)]<35

где R,G,B - количество красного, зеленого и синего соответственно.

Судя по тестам, эта штука работает достаточно неплохо.

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

TexLive 2010 и OpenSuSe 11

В репозитории Publishing/openSUSE_11.3 есть пакет texlive-2010. Добавляем и пользуемся.

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

Вкусности mono-2.10

Что нового ожидается в mono-2.10(вкусности, которые интересны мне):

- csharp - интерактивный repl/shell. Можно будет писать скрипты на C# с #!/usr/bin/csharp в первой строке. Или писать так: csharp -e 'from l in System.IO.Directory.GetFiles ("/bin") where l.Length > 18 select l;' или так csharp -e 'Math.Sin(0.1);'
- Интерпретаторы языков f#, ironpython.
-"Новый" (он появился еще 2.8) сборщик мусора SGen ускорил (на некоторых задачах) скорость на 35-40%.

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

Рекомендуемые репозитории для fedora

Рекомендуемые репы для fedora:

texlive -
fedorapeople
RussianFedoraRemix  -

Список дополнительных репов есть тут
Установка google-chrome тут

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

C# DirIterator

сделал такую простую, но нужную мне, штуку:


using System;
using System.IO;
using System.Collections.Generic;

namespace Program
{
        class MainClass
        {
                public delegate void PathDelegate(FileInfo di);
                /// 
                /// Вызывает pd для каждого файла во всех поддиректориях в rd
                /// 
                ///                 /// root directory
                /// 
                static void dirMap(DirectoryInfo rd,MainClass.PathDelegate pd)
                {
                        FileInfo[] files= null;
                        DirectoryInfo[] subdirs=null;
                        try
                        {
                                files=rd.GetFiles("*");
                        }
                        catch(Exception ex)
                        {
                          Console.WriteLine("error on "+rd.FullName+": "+ex.ToString());
                        }
                        if (files!=null) {
                                foreach (FileInfo file in files) {
                                        pd(file);
                                }
                        }
                        subdirs=rd.GetDirectories("*");
                        foreach (DirectoryInfo d in subdirs) {
                                dirMap(d,pd);
                        }
                }

                public static void Main (string[] args)
                {
                        if(args.Length<1){
                           Console.WriteLine("usage: yatsrobot path");
                        }


                        Console.WriteLine("scaning "+args[0]);

                        if(Directory.Exists(args[0])){
                                Console.WriteLine("directory extists");
                                var di=new DirectoryInfo(args[0]);
                                dirMap(di,x=> Console.WriteLine(x.FullName));
                        }
                        else{
                                Console.WriteLine("directory not extists");
                                return;
                        }
                }
        }
}