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

1 Comment | Post A Comment | Add to Memories | Tell a Friend | Link
Я аж сам офигел от выразительности запроса. Фактически все что в комментариях написал в коде так же и описано:
// Для каждой четверти оригинального прямоугольника найти // ближайший дискретный центр в районе центра четверти, такой // что он лежит и в центроиде и в четверти. Если такого дискретного // центра нет, то четверть нужно покрывать простой закраской. 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
Сегодня узнал что на 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
Электрод в висок уже на горизонте =)
Post A Comment | Add to Memories | Tell a Friend | Link
Пока пересобирается 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
Вводить в диалоге "Выполнить" или в поисковой строке Пуска (начиная с 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
Мне последняя мышка очень понравилась. Может только еще пальцы добавить... Все остальные ИМХО неюзабельны, хотя интересны.
3 Comments | Post A Comment | Add to Memories | Tell a Friend | Link
Нашел очень интересный алгоритм, который можно использовать для распознавания людей и объектов с изображений. Идея в том, что по силуэту объекта строится полигон, для которого находится срединные оси, после чего оси сокращаются. В итоге по силуэту человека строится знаковый с детства человечек из палочек. Такими образами уже можно оперировать в программе. Алгоритм устойчив к шумам. 
- http://www.cis.temple.edu/~latecki/Papers/skeletonPAMI06.pdf - алгоритм и результаты его работы. Особено интересна 29 страница.
- http://www.cis.temple.edu/~latecki/Programs/skeletonPruning07.htm - реализация алгоритма, ссылки на исследование и сопроводительные материалы.
- http://knight.cis.temple.edu/~shape/partshape/overview/5.php - примеры результатов распознавания.
PS Срединные оси (они же скелет полигона) образуют диаграмму Вороного на многоугольнике. Что это такое лучше посмотреть на анимации.
Post A Comment | Add to Memories | Tell a Friend | Link
Буду использовать как 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
Все еще помнят уравнение прямой? 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
Я поражен какие, оказывается, бывают атмосферными универы.
Факультет философии:

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

8 Comments | Post A Comment | Add to Memories | Tell a Friend | Link
Вот чем хорош 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
http://en.wikipedia.org/wiki/IP_over_Avian_Carriers
IP через почтовых голубей =) В ЮАР на крупных пакетах данных работает быстрее чем крупнейший местный провайдер.
2 Comments | Post A Comment | Add to Memories | Tell a Friend | Link
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
Про проектирование систем в которых соблюдается 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
Про ?? оператор слышали? Ну, думаю, скорее всего да. А вот про такое:
/// <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
Да, забываю все выложить видео, ссылкой на которое поделился со мной matrosakabeeper. Завораживает эта нечеловеческая точность движений.
1 Comment | Post A Comment | Add to Memories | Tell a Friend | Link
Читаем книжки по паттернам, пытаемся применить, а система все равно распухает и становится неуправляемой. Что не так? Принципы чувствуется что верные, но что-то упускаем.
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
Открытия Теслы потихоньку переоткрываются: http://www.geeksaresexy.net/2009/08/27/wireless-electricity-demo/
В конце есть демка - телевизор, совмещенный с DVD плеером, работает без проводов. "Любая достаточно развитая технология неотличима от магии" (c) Артур Кларк
4 Comments | Post A Comment | Add to Memories | Tell a Friend | Link
|