Сегодня наводя порядок в своих архивах наткнулся на интересную находку — как то в 2008 разрабатывал АПК TrapMind и даже оформил на него авторское свидетельство.
Go Open-source!
Наконец-то дошли руки!
Уже давно хотелось поделиться своими экспериментами юности в области программирования.
В основном тогда мне было интересно писать на Pascal/Delphi + Assembler.
- DragRacing Timer — отсечка времени гонщиков с помощью самодельного железа
- ClockWork — таймер выключения оформленный в теме Fallout
- MP3 NaviGatoR — Продвинутый mp3 плеер для CJ
- DOS Disk Editor — низкоуровневый редактор/менеджер дисков для DOS
- AWARD BIOS Password Recovery — Восстановление (подбор) пароля, сохраненного как хэш в CMOS
Пользуйтесь на здоровье в образовательных целях! =)
Консольный прогресс-бар для длительных операций в Linux
Удобно смотреть статус длительных операций (к примеру разархивирование) с помощью консольной утилиты bar.
Используется так:
bar -n image.tar.gz | tar xzpf -
Получаем вот такой наглядный статус:
Под Mac OS устанавливает с помощью Homebrew:
brew install bar
Под Debian/Ubuntu:
sudo apt-get install bar
Исходник и мануал утилиты тут: Theiling Online — ASCII progress bar
Минимизация размера EXE файла Delphi
Приятно слышать что остались разработчики, которым не безразличен размер бинарника!
Был хороший проект для этих задач, заключался в замене системных RTL библиотек.
Называется этот проект KOL — Key Objects Library.
http://sourceforge.net/projects/keyobjectslibrary/files/Components/System-replacements/
http://kolmck.net/e_system.htm
FlightGear OpenSceneGraph QUAD BUFFER Stereo
Починка QUAD_BUFFER стерео:
— src/Main/WindowBuilder.cxx.orig 2010-02-17 17:11:56.000000000 +0100
+++ /src/Main/WindowBuilder.cxx 2010-11-26 01:47:38.260867435 +0100
@@ -95,6 +95,18 @@
#endif
traits->supportsResize = true;
}
+ osg::DisplaySettings* ds = osg::DisplaySettings::instance();
+ if (ds->getStereo())
+ {
+ switch(ds->getStereoMode())
+ {
+ case(osg::DisplaySettings::QUAD_BUFFER): traits->quadBufferStereo = true; break;
+ case(osg::DisplaySettings::VERTICAL_INTERLACE):
+ case(osg::DisplaySettings::CHECKERBOARD):
+ case(osg::DisplaySettings::HORIZONTAL_INTERLACE): traits->stencil = 8; break;
+ default: break;
+ }
+ }
return traits;
}
}[/c++]
Путь iTunes к бэкапам iPhone/iPad
Бэкапы на MAC OS лежат тут: ~/Library/Application Support/MobileSync/Backup/
MAC OS 10.8.4 крэшится при переходе в спящий режим
Проблемы начались после полного восстановления с TimeCapsule, восстанавливался с OS 10.9.
Вылечил удалением файла /Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist
.
UPDATE: Проблема не решилась так просто, как хотелось бы.
Видимо причина еще в запущенной виртуальной машине Parallels, поиски решения продолжаются…
О пользе рефакторинга
Вот простой пример (из моего реального проекта), как можно рефакторить код и сделать его короче и читаемым:
Сначала получилась как обычно ужасная куча нечитаемого кода:
NSString *name = [[filename pathComponents] lastObject]; NSString *ext = [name pathExtension]; NSString *iconImg = [NSString stringWithFormat:@"icon%@",[ext uppercaseString]]; if (!iconImg) iconImg = @"iconUnknown"; if (([ext caseInsensitiveCompare:@"html"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"htm"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"xml"] == NSOrderedSame)) iconImg = @"iconWeb"; else if (([ext caseInsensitiveCompare:@"mp3"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"m4a"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"wav"] == NSOrderedSame)) iconImg = @"iconAudio"; else if (([ext caseInsensitiveCompare:@"mp4"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"mpeg"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"qt"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"avi"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"m4v"] == NSOrderedSame)) iconImg = @"iconVideo"; else if (([ext caseInsensitiveCompare:@"mp3"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"m4a"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"wav"] == NSOrderedSame)) iconImg = @"iconAudio"; else if (([ext caseInsensitiveCompare:@"jpg"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"jpeg"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"gif"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"tiff"] == NSOrderedSame)||([ext caseInsensitiveCompare:@"tiff"] == NSOrderedSame)) iconImg = @"iconGraphic"; else if (([ext caseInsensitiveCompare:@"xlsx"] == NSOrderedSame)) iconImg = @"iconXLS"; else if (([ext caseInsensitiveCompare:@"docx"] == NSOrderedSame)) iconImg = @"iconDOC"; else if (([ext caseInsensitiveCompare:@"pptx"] == NSOrderedSame)) iconImg = @"iconPPT"; _icon = [UIImage imageNamed:iconImg];
Пришлось написать довесок к классу NSString:
@interface NSString (Adds) - (BOOL)caseInsensitiveExistsInArray:(NSArray *)a; @end @implementation NSString (Adds) - (BOOL)caseInsensitiveExistsInArray:(NSArray *)a { BOOL exist = NO; for (NSString *s in a) { if ([self caseInsensitiveCompare:s] == NSOrderedSame) { exist = YES; break; } } return exist; } @end
На выходе теперь стало вот так:
NSString *name = [[filename pathComponents] lastObject]; NSString *ext = [name pathExtension]; NSString *iconImg = [NSString stringWithFormat:@"icon%@",[ext uppercaseString]]; if (!iconImg) iconImg = @"iconUnknown"; if ([ext caseInsensitiveExistsInArray:@[@"html",@"htm",@"xml"]]) iconImg = @"iconWeb"; else if ([ext caseInsensitiveExistsInArray:@[@"mp3",@"m4a",@"wav"]]) iconImg = @"iconAudio"; else if ([ext caseInsensitiveExistsInArray:@[@"mp4",@"mpeg",@"mpg",@"qt"]]) iconImg = @"iconVideo"; else if ([ext caseInsensitiveExistsInArray:@[@"jpg",@"jpeg",@"gif",@"tiff"]]) iconImg = @"iconGraphic"; else if ([ext caseInsensitiveExistsInArray:@[@"xlsx"]]) iconImg = @"iconXLS"; else if ([ext caseInsensitiveExistsInArray:@[@"docx"]]) iconImg = @"iconDOC"; else if ([ext caseInsensitiveExistsInArray:@[@"pptx"]]) iconImg = @"iconPPT"; _icon = [UIImage imageNamed:iconImg];
По моему, результат на лицо — код стал намного понятнее и удобнее наращивать…
CGContext — инверсия цвета
UIGraphicsBeginImageContext(image.size); CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy); [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeDifference); CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(),[UIColor whiteColor].CGColor); CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width, image.size.height)); UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
iOS: Отключить автоматическую блокировку экрана/спящий режим
[UIApplication sharedApplication].idleTimerDisabled = !lockscreenEnabled;