Home
FallenGameR's blog
Чтобы зло восторжествовало, хорошим людям достаточно ничего не делать (Бёрк)

Advertisement

FallenGameR
Date: 2009-11-25 23:40
Subject: Winamp + win7shell
Security: Public
Music:Мельница - А если бы он
Tags:windows 7, музыка

Я очень привык к Winamp. Пробовал другие плееры, у которых было: (судя по отзывам) более удобная навигация по библиотеке, лучший звук, больше всяких фишечек... Но как показала практика, мне нравится старый скин yaXamp, который использую наверное уже больше 10 лет, нравится звук, который выдает Winamp, и я не могу жить с плеером у которого нет привычных global hotkeys.

Не хватало только интеграции с таскбаром семерки. И вот сегодня я нашел плагин который эту интеграцию осуществляет: http://code.google.com/p/win7shell/

1 Comment | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-11-20 03:30
Subject: Декларативный LINQ
Security: Public
Tags:linq

Я аж сам офигел от выразительности запроса. Фактически все что в комментариях написал в коде так же и описано:

// Для каждой четверти оригинального прямоугольника найти
// ближайший дискретный центр в районе центра четверти, такой
// что он лежит и в центроиде и в четверти. Если такого дискретного
// центра нет, то четверть нужно покрывать простой закраской.
return
    from quarter in Quarters
    let suitableCenters =
        from cellCenter in Grid.Default.GetNearestCellCenters( quarter.Center )
        where Centroid.GetLocation( cellCenter ) != PointLocation.Outside
        where quarter.GetLocation( cellCenter ) != PointLocation.Outside
        orderby ( cellCenter - quarter.Center ).Length
        select cellCenter
    let isSimpleCover = !suitableCenters.Any( )
    select new CoverFrame
    {
        Rectangle = isSimpleCover ?
            quarter :
            RecenterAndCover(
                suitableCenters.First( ),
                quarter.GetMostDistantPoint( Center ) ),
        IsSimpleCoverNeeded = isSimpleCover,
    
};

PS В ближайший месяц начну серию статей про тестирование.

6 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-10-27 18:51
Subject: Плеяда динамических языков на .NET
Security: Public
Tags:.net

Сегодня узнал что на DLR будет хостится еще один динамический язык - IronScheme (вышел RC1). Это один из диалектов LISP.

Также на DLR хостятся: IronPython, IronRuby, VB10.NET.

.NET существует 8 лет. В свое время я читал Рихтера и очень удивлялся - если платформа позволяет писать на разных языках, то почему же везде только C# и VB... Теперь выбор есть.

3 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-10-27 01:55
Subject: Считывание данных напрямую от мышц
Security: Public
Tags:будущее, интерфейсы

Электрод в висок уже на горизонте =)

Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-10-10 10:29
Subject: Visual Studio 2008 Windows PowerShell Command Prompt
Security: Public
Tags:powershell, studio

Пока пересобирается Qt4 (что не самоцель, это я примеры к CGAL хочу собрать, чтобы потом их заюзать через C++/CLI... потом расскажу =) хочу рассказать про то как настроить PowerShell на использование Visual Studio 2008 Command Prompt переменных.

 

Мне нравится PowerShell, он не в пример функциональнее и более читаем чем cmd. Но вот незадача — иногда приходится открывать командную строку Visual Studio, а она не PowerShell. Выполнять же из одной консоли ls и nmake хочется.

 

Как вариант можно было бы взять vsvars32.bat и переписать его, но это откровенное надругательство над свободным временем и есть путь проще -

http://blogs.msdn.com/domgreen/archive/2009/05/03/visual-studio-command-prompt-via-powershell.aspx. Я немного изменил скрипт, подчистив из него мусор:

 
#
# Выполнить bat файл и экспортировать из него
# переменные среды в
PowerShell
#
function Get-BatchFile( $batFile ) {
   
$command = "`"$batFile`" & set"
    cmd /c $command | Foreach-Object {
       
$name, $value = $_.split('=')
       
Set-Item -path env:$name -value $value
    }
}

#
#
Сконфигурировать PowerShell на использование Visual Studio 2008 Command Prompt
#
function SetupVisualStudio2008Prompt( ) {
   
# Установить переменные среды
    $batFile = [System.IO.Path]::Combine( $env:VS90COMNTOOLS, "vsvars32.bat" )
    Get-BatchFile
$batFile
    $title = "Visual Studio 2008 Windows PowerShell"
   
   
# Определить находимся ли под админом
    $wid = [System.Security.Principal.WindowsIdentity]::GetCurrent( )
   
$principal = new-object System.Security.Principal.WindowsPrincipal($wid)
   
$isAdmin = $principal.IsInRole( [System.Security.Principal.WindowsBuiltInRole]::Administrator )
   
if( $isAdmin ) {
       
$title = $title + " (Administrator)"
    }
   
else {
       
$title = $title + " (Non-Administrator)"
    }
   
   
# Установить титул окна
    [System.Console]::Title = $title
}

#
#
Выполняется при запуске PowerShell
#
SetupVisualStudio2008Prompt
cls

 

Сохраняем скрипт в Documents/WindowsPowerShell/profile.ps1. При запуске PowerShell выполнит содержимое профиля и будет радовать наличием ls и nmake (нужно только разрешить выполнение скриптов в PowerShell):

 


А настроив еще и
TotalCommander на вызов PowerShell при нажатии Ctrl+X вообще наступает счастье =)

 

PS Как вставить lj-cut и при этом не порушить форматирование кода я не знаю, так что сегодня без ката.

Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-10-06 23:28
Subject: Быстрый доступ к оснасткам Windows
Security: Public
Tags:windows

Вводить в диалоге "Выполнить" или в поисковой строке Пуска (начиная с Vista). Для домашних версий некоторые оснастки могут отсутствовать.

 

ncpa.cpl - сетевые подключения. Всегда раздражало, что в Vista нет прямого доступа к сетевым подключениям, а смотреть свойства и включать/выключать сетевые интерфейсы надо. Для Windows 7 это менее актуально - там сеть как-то ближе.

 

compmgmt.msc - управление компьютером. Я часто захожу туда, чтобы посмотреть что расшарено,   как размечены диски, чтобы остановить или перезапустить какой-либо сервис. Там же список устройств подключенных к компьютеру.

 

secpol.msc - политики безопасности. В WinXP SP2, помню, только там можно было поставить флаг чтобы компьютер мог быть перечислен в любом сетевом окружении. Для Vista более интересен флаг, который позволяет убрать UAC для админов. Если ты под админом, то не нужно постоянно подтверждать каждое свое действие. В Windows 7 по умолчанию настройки таковы, что изменения системных предпочтений не приводит к появлению окна UAC. Что сильно уменьшает желание его отломать =)

 

control userpasswords2 - хранящиеся в системе пароли. Здесь можно обнулить запомненный пароль. Более интересный вариант - возможность зайти в другую системы под другим аккаунтом. А то зайдешь на расшареное на другом компьютере, потом настройки безопасности перетрясешь - а стучишься по-умолчанию со старыми credentials...

 

msconfig - перечисление запускаемых при старте ОС программ. ИМХО лучше использовать Autoruns от SysInternals, но когда их нет, msconfig тоже может помочь отключить всякую гадость которая тормозит старт системы.

rundll32.exe sysdm.cpl, EditEnvironmentVariables - переменные окружения. Да, запомнить невозможно. Но один раз введя в диалог выполнить, можно потом вызывать из истории команд.


1 Comment | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-10-06 22:21
Subject: Mouse 2.0
Security: Public
Tags:будущее



Мне последняя мышка очень понравилась. Может только еще пальцы добавить...
Все остальные ИМХО неюзабельны, хотя интересны.

3 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-28 20:18
Subject: Сын
Security: Public
Tags:дети

У меня вчера сын родился =)

26 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-25 14:23
Subject: Алгоритм нахождения образов
Security: Public
Tags:алгоритмы, ии

    Нашел очень интересный алгоритм, который можно использовать для распознавания людей и объектов с изображений.

     

    Идея в том, что по силуэту объекта строится полигон, для которого находится срединные оси, после чего оси сокращаются. В итоге по силуэту человека строится знаковый с детства человечек из палочек. Такими образами уже можно оперировать в программе. Алгоритм устойчив к шумам.

     

     

  1. http://www.cis.temple.edu/~latecki/Papers/skeletonPAMI06.pdf  - алгоритм и результаты его работы. Особено интересна 29 страница.
  2. http://www.cis.temple.edu/~latecki/Programs/skeletonPruning07.htm - реализация алгоритма, ссылки на исследование и сопроводительные материалы.
  3. http://knight.cis.temple.edu/~shape/partshape/overview/5.php - примеры результатов распознавания.
  4.  

    PS Срединные оси (они же скелет полигона) образуют диаграмму Вороного на многоугольнике. Что это такое лучше посмотреть на анимации.

Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-24 22:46
Subject: Хитрое LINQ выражение
Security: Public
Tags:linq

Буду использовать как reference по языку.

А вообще это ray tracing за один запрос (http://blogs.msdn.com/lukeh/archive/2007/10/01/taking-linq-to-objects-to-extremes-a-fully-linqified-raytracer.aspx).

Я немного его причесал, чтобы он читался. А то в оригинале объявление переменной computeTraceRay сводило с ума (это функция, которая принимает функцию и возвращает функцию; но пока не дорисуешь {} и return не поймешь что в ней написано).

var pixelsQuery =
    from y in Enumerable.Range(0, screenHeight)
    let recenterY = -(y - (screenHeight / 2.0)) / (2.0 * screenHeight)
    select
    from x in Enumerable.Range(0, screenWidth)
    let recenterX = (x - (screenWidth / 2.0)) / (2.0 * screenWidth)
    let point = Vector.Norm( scene.Camera.Forward + recenterX * scene.Camera.Right + recenterY * scene.Camera.Up )
    let ray = new Ray { Start = scene.Camera.Pos, Dir = point }
    let computeTraceRay = (Func< Func<TraceRayArgs,Color>, Func<TraceRayArgs,Color> >) (f =>
    {
        return traceRayArgs =>
        {
            var color =
                from isect in
                    from thing in traceRayArgs.Scene.Things
                    select thing.Intersect(traceRayArgs.Ray)
                where isect != null
                orderby isect.Dist

                let d = isect.Ray.Dir
                let pos = isect.Dist * isect.Ray.Dir + isect.Ray.Start
                let normal = isect.Thing.Normal(pos)
                let reflectDir = d - 2 * Vector.Dot(normal, d) * normal
                let naturalColors =
                    from light in traceRayArgs.Scene.Lights
                    let ldis = light.Pos - pos
                    let livec = Vector.Norm(ldis)
                    let testRay = new Ray { Start = pos, Dir = livec }
                    let testIsects =
                        from inter in
                            from thing in traceRayArgs.Scene.Things
                            select thing.Intersect(testRay)
                        where inter != null
                        orderby inter.Dist
                        select inter
                    let testIsect = testIsects.FirstOrDefault()
                    let neatIsect = testIsect == null ? 0 : testIsect.Dist
                    let isInShadow = !((neatIsect > Vector.Mag(ldis)) || (neatIsect == 0))
                   
where !isInShadow
                    let illum = Vector.Dot(livec, normal)
                    let lcolor = illum > 0 ? Color.Times(illum, light.Color) : Color.Make(0, 0, 0)
                    let specular = Vector.Dot(livec, Vector.Norm(reflectDir))
                    let scolor = specular > 0
                        ? Math.Pow(specular, isect.Thing.Surface.Roughness) * light.Color
                        : Color.Make(0, 0, 0)
                    select isect.Thing.Surface.Diffuse(pos) * lcolor + isect.Thing.Surface.Specular(pos) * scolor
                let reflectPos = pos + 0.001 * reflectDir
                let reflectColor = traceRayArgs.Depth >= MaxDepth
                    ? Color.Make(.5, .5, .5)
                    : isect.Thing.Surface.Reflect(reflectPos) * f( new TraceRayArgs(
                        new Ray { Start = reflectPos, Dir = reflectDir },
                        traceRayArgs.Scene, traceRayArgs.Depth + 1))
                select naturalColors.Aggregate( reflectColor, (color, natColor) => color + natColor );
           
            return color
                .DefaultIfEmpty(Color.Background)
                .First( );
        };
    } )
    let traceRay = Y(computeTraceRay)
    select new { X = x, Y = y, Color = traceRay(new TraceRayArgs(ray, scene, 0)) };


2 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-18 19:56
Subject: Еще немного LINQ
Security: Public
Tags:c#, linq

Все еще помнят уравнение прямой? Begin + t * (End - Begin) для t [0..1] (для отрезка; t - любое действительное для линии)
Сегодня решал обратную задачу - по точке найти значение параметра t. Получилось так:

/// <summary>
///
Определить параметр, соотвествующий точке на линии
/// </summary>
///
<param name="point">Точка линии</param>
/// <returns>
///
Значение параметра t соответсвующего указанной точки.
/// NaN если точка не принадлежит линии.
/// </returns>
public double GetParameter( Vector point )
{
    var axis_t =
        from t in new List<double>
        {
            ( point.X - Begin.X ) / Direction.X,
            ( point.Y - Begin.Y ) / Direction.Y,
            ( point.Z - Begin.Z ) / Direction.Z,
        }
        where !double.IsInfinity( t ) && !double.IsNaN( t )
        select t;

    if( axis_t.Count( ) > 0 )
    {
        var average = axis_t.Average( );
        if( axis_t.All( t => Math.Abs( t -
average ) < Const.Precision ) )
        {
            return
average;
        }
    }
    return double.NaN;
}

А теперь вопрос - сколько бы я if'ов написал если бы не использовал LINQ?

6 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-17 11:22
Subject: Lund University
Security: Public
Tags:университеты

Я поражен какие, оказывается, бывают атмосферными универы.

Факультет философии:


Абитуриентов принимают здесь:

8 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-14 14:35
Subject: Декларативное программирование
Security: Public
Tags:c#, linq

Вот чем хорош LINQ, так это тем что позволяет писать такие элементарные вещи и не реализовывать при этом цикл с четырьмя вспомогательными переменными.

/// <summary>
///
Найти описывающую полилинию прямоугольную оболочку
/// </summary>
public Shell GetShell( )
{
    return new Shell
    {
        Min = new Vector
        {
            X = Points.Min( v => v.X ),
            Y = Points.Min( v => v.Y ),
        },
        Max = new Vector
        {
            X = Points.Max( v => v.X ),
            Y = Points.Max( v => v.Y ),
       
},
    };
}


Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-14 12:01
Subject: IPoAC протокол
Security: Public
Tags:юмор

http://en.wikipedia.org/wiki/IP_over_Avian_Carriers

IP через почтовых голубей =)
В ЮАР на крупных пакетах данных работает быстрее чем крупнейший местный провайдер.

2 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-10 15:01
Subject: Статья Дмитрия Медведева
Security: Public
Tags:будущее, политика

http://www.kremlin.ru/news/5413

ИМХО правильно.

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

UPD Интересное наблюдение http://zt.livejournal.com/351254.html.

15 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-09 13:30
Subject: Подписался еще на одного MVP
Security: Public
Tags:архитектура

Про проектирование систем в которых соблюдается Command Querry Separation и к чему это приводит. Просто физически чувствуешь как просвящение нисходит на тебя.
http://www.infoq.com/presentations/greg-young-unshackle-qcon08

А это просто шутка юмора =)
http://codebetter.com/blogs/gregyoung/archive/2009/08/13/ddd-is-a-dense-book.aspx

Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-08 15:42
Subject: Синтаксис C#
Security: Public
Tags:c#, syntax

Про ?? оператор слышали? Ну, думаю, скорее всего да.
А вот про такое:

/// <summary>
///
Ага, оно компилится =)
/// </summary>
public IEnumerable<int> Create( int count )
{
    while( count --> 0 )
        yield return count;
}

16 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-07 11:46
Subject: Киборги близко
Security: Public
Tags:будущее

Да, забываю все выложить видео, ссылкой на которое поделился со мной matrosakabeeper.
Завораживает эта нечеловеческая точность движений.

1 Comment | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-09-07 11:24
Subject: Making Roles Explicit
Security: Public
Tags:архитектура

Читаем книжки по паттернам, пытаемся применить, а система все равно распухает и становится неуправляемой. Что не так? Принципы чувствуется что верные, но что-то упускаем.

Udi Dahan на примере показывает как важно делать явными роли в приложении. Что такое делать явными понятно. Но что такое роль? В конечном счете роль - это интерфейс. Возможно даже маркерный, без методов. Главное, это что он позволяет более точно описать что из себя представляет объект. Он позволяет явно выразить свои знания о предметной области.

Что конкретно это позволяет сделать? Например, бескровно добавить особую валидацию к уже написанной системе. Или оптимизировать конкретную группу запросов к БД. Или изменять pipline обработки сообщений добавлением одной строчки кода.

http://www.infoq.com/presentations/Making-Roles-Explicit-Udi-Dahan

3 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



FallenGameR
Date: 2009-08-28 19:34
Subject: Беспроводное электричество
Security: Public
Music:P.O.D. - Find My Way
Tags:будущее

Открытия Теслы потихоньку переоткрываются:
http://www.geeksaresexy.net/2009/08/27/wireless-electricity-demo/

В конце есть демка - телевизор, совмещенный с DVD плеером, работает без проводов.
"Любая достаточно развитая технология неотличима от магии" (c) Артур Кларк

4 Comments | Post A Comment | Add to Memories | Tell a Friend | Link



Advertisement

browse
my journal
November 2009