Ощущение, что граждане решили убить свой, без дураков, мега продукт.
Поставил версию 11.51. То что SpeedDial стал выглядеть как кусок говна, это фиг с ним, может это типа такое дизайнерское решение, а я просто не понимаю. Не ну т.е. я как бы могу догадаться, что кому-то пришла в голову идея вместо миниатюры страницы, сделать супер интеллектуальный автомат, который бы от морды сайта отрезал тока самое-самое главное, причем если бы этого выдумщика усыпили ещё в детстве или хотя бы не пускали к компьютеру, всё могло бы сложиться иначе, но случилось то, что случилось, Speed Dial превратился в гавно. Потерпим и не это пережили.
Но то, что в адресной строке, выпадающий список заменили простым полем ввода, за такие решения надо расстреливать на месте. На хера? Вот простой и человечный вопрос НА ХЕРА? Ну вот есть у меня десяток сайтов, которые я читаю, и все они в этом комбике присутствуют, два раза ткнул мышкой и всё. Удобно мне блин тыкать мышью. Не вводить с клавиатуры, пусть и два символа после которых уже будет правильный адрес подсвечиваться автоматом, а ткнуть два раза мышью, ну под рукой вот она у меня.
Не, как бы я всё могу понять, но за каким надо уменьшать возможности пользователя, это от моего понимания ускользает. Я вот этим новым мега продвинутым гавноброузером от гугла не пользуюсь в том числе по причине отсутствия комбика в адресной панели. Теперь и в опере теже задвиги.
Была в этой программе одна мега находка, с которой меня перло и прет по сей день, это когда тыкаешь по левой стороне окна, а там панельки со всякой дополнительной ерундой выезжают, правда где-то на середине 10-й версии (кажется) они по умолчанию это дело стали отключать, но хоть хватило ума не убрать ее вовсе. Зато в 11.51 теперь кнопку создания нового таба нельзя сделать с левой стороны. Т.е. вот в 9-й версии она была слева, я как-то привык, и в 10-й когда они эту кнопку подвинули направо, первым делом после установки перемещал её на привычное место. А теперь вот не перемещается она.
В целом ощущение такое, что к версии 12, ребята окончательно приведут свой броузер в неприемлимое состояние. Самое обидное, что сам рендер html-к они постепенно улучшают, т.е. большинство сайтов, которые на 9-ке отображались не правильно в новой версии починились, но вот всё остальное становится только хуже. Причем работа идёт по принципу "горе от ума".
среда, 7 сентября 2011 г.
Про Opera
понедельник, 15 августа 2011 г.
Про Skype
Поскольку куча знакомых хороших людей, перешли на Skype, решил сегодня в третий раз попробовать его поставить. Закачал портабельную версию с известного сайта и установил.
Тут отвлекусь, чтобы два раза не вставать. Сайт portableapps.com раньше был прекрасен, прекрасен он был не только наличием портабельных версий некоторых очень хороших программ, но и дизайном сплешьшотов для этих программ, который радовал мой не шибко притязательный художественный вкус. В целом и сайт и наполнение и оформление были безусловно замечательны. Однако, в какой-то момент, пацанам в голову пришла отличная идея, разделить инсталляцию портабельных аппликух на две части, сначала качаем загрузчик (для Skype он, например, около 1 метра), запускаем его, и уже этот суперинтелектуальный модуль докачивает остатки. И таки эта идея была затолкнута в жизнь. Если я ничего не путаю, произошло это чудесное событие где-то с год назад. Наверное, в принципе, если очень сильно подумать, и даже местами помыслить, схема сия была бы востребована, ну лет пять назад например, когда каналы передачи данных в столицах наших Родин уже перешли рубеж одного мегабита для обычных граждан, а в провинциях, еще только к нему подбирались, и местами даже 128 килобит было очень-очень круто. Так вот в то чудесное время, конечно, крайне полезной могла оказаться возможность не выкачивать всю инсталляцию, а забрать токмо то, что надо конкретному пользователю (хотя как по мне и тогда сия функция меня бы не обрадовала). На хрена же вся эта пляска в данный исторический момент, я решительно отказываюсь понимать. Более того, мне допустим значительно удобнее сохранить в своем подвальчике полную инсталляцию, и не париться о том, не сдохнет ли мега сайт через год. И если не сдохнет, не разовьется ли то приложении что я использую, до таких высот, что лучше бы не надо.
В качестве примера, могу привести, например, нежно любимый мною MSOffice, его версия XP до сей поры вполне удовлетворяет меня во всех отношениях, и при всем моем глубоком уважение к Ribbon интерфейсу, переходить на последнюю версию и покупать для этого новый компьютер (ну или вместо редактирования играть в пошаговую стратегию) не испытываю не малейшего желания.
Так что сайт portableapps.com и сейчас очень хорошо, потому что таки портабельные версии программ там как бы есть и дизайн не ухудшился, но вот эта новая мегафича расстраивает меня до невозможности.
Да, возвращаясь к скайпу. Наверное, отличная вещь, я даже восстановил логин с паролем, которые удачно забыл. Но вот как-то оно опять не пошло. Т.е. как видеотелефон оно мне вроде как не надо, а как IM, программа с ходу заевшая 100 метров памяти, не отвечает моему пониманию чувства прекрасного.
среда, 4 мая 2011 г.
Про Обаму, подделки и новые технологии
Посмотрел тут на бурления интернет конспирологов про метрику главного борца за мир на планете, по версии нобелевского комитета. Понятно, что часть товарищей, не обделенных мозгом, набрасывает это исключительно веселья для. Но судя по всему есть довольно не маленький процент граждан, которые и правда уверены, что на сайте белого дома вывалили документ, который был не шибко умело отфотошоплен. Ну т.е. вот не хватило у пацанов денег на цветной принтер, чтобы распечатать нафотошопленное и еще раз отсканировать. Оно может и так, может и правда с принтерами у них там проблемы, я им свечку не держал. Однако выскажусь по поводу слоев в вываленном пдф-документе.
Итак. Как в принципе, кодируются цветные изображения полученные со сканера. Понятно, что самый простой способ вывалить этот самый скан в raw формате, весить оно будет вполне достойно, и в силу этого веса так никто не делает. Второй вариант ужать его, например, в jpeg или jp2k, при этом произойдет потеря качества, но размер документа ужмется на пару порядков. Здесь надо уточнится про потерю качества при сжатии в jpeg. Jpeg кодинг изначально разрабатывался для сжатия полноцветных изображений с потерей качества, но при этом, чтобы данная потеря не сильно воспринималась человеческим глазом. И со своей задачей данный вариант кодирования вполне справляется. Т.е. например, фотографии жмет вполне успешно, и не шибко их при этом портит, так же понятно, что при сжатии происходит балансировка между тем насколько дерьмовым будет результат и тем насколько мы хотим уменьшить размер получаемого файла. Однако, в случае если исходная картинка это скан какого-либо документа содержащего текст, то попытка сильно снизить качество приводит к существенной размытости текста вплоть до нечитаемости. Поэтому на некотором этапе развития технической мысли, был сделан следующий финт ушами. Исходное изображение (например, отсканированная страница книги) делится на два слоя: цветная подложка и черно-белый слой. Деление обычно делается относительно простым способом, а именно отсечением по порогу. Т.е. все пиксели которые "темнее" некоторого порога (т.е. достаточно близки к черному цвету) кладутся в черно-белый слой, а все остальное считается подложкой. Затем эти два слоя кодируются по отдельности, цветной при помощи jpeg, черно-белый либо CCIT либо JBIG2 в зависимости от дальнейших изысканий. Это позволяет достаточно хорошо уменьшить вес результирующего документа при этом не потеряв читабельность текстов. Часто также сканируют страницы с разрешением 600DPI, а потом у нижнего (цветного) слоя уменьшают разрешение в два-три раза, на глаз выглядеть будет замечательно.
Собственно весь формат DjVu это четкий пример такого способа хранения отсканированных документов. В пдф-формате также есть все средства для осуществления такого кодирования, а именно возможность отрисовать на странице несколько картинок одну над другой, при этом с поддержкой сolorkey (т.е. замены одного цвета прозрачностью) для верхних. Поэтому большинство приличных программ для создания пдф, осуществляют резку картинок на слои и их независимое кодирование.
Документ, который так взбудоражил общественность, сделан именно по такому принципу, цветная подложка, кодированная при помощи DCTDecode, и 8 черно белых картинок, закодированных FlateDecode.
Почему восемь черно-белых? Потому что черных кусков в выделенном черно-белом слое мало, т.е. большая часть слоя белая, кодировать весь слой целиком "дорого" (и не нужно) по вкладу в вес результата, поэтому его порезали и закодировали кусками.
По поводу того, что "вот тут надписи размыты, а тут четко черные пиксели", ну так вот это результат именно кодирования в два слоя, при том, поскольку черно-белый слой выделяется по некому пороговому значению, все те пикселы, что были "почти черные" при кодирования перешли в чисто черный цвет.
Как-то так.
А если без технических деталей, то учитывая последние событие в Африке и конкретно в Ливии, у меня наличие мамы и папы у некоторых американцев и европейцев вызывает очень большие сомнения, которые сканами бумажек разрешить не получается.
update: думал это очевидно, но похоже не для всех. Никто специально руками, чтобы получше сжать, документ на слои не разводит, это автоматическое действие, осуществляемое софтом, которому абсолютно похер чего ему подсовывают, сканированную метрику президента или скан статьи о разведении крупного рогатого скота в заполярье.
среда, 2 февраля 2011 г.
Про формат epub, русские народные сказки и прочее
Понадобилось мне тут поразбирать файлы в формате epub. Я в свое время на этот формат уже смотрел, и помнилось мне, что все там просто. Т.е. всего то запакованный в зип набор html-к, картинок и css-ок, плюс некая главная xml-ка в которой прописано, в каком порядке те html-ки собираются в книжку.
Начал смотреть. Собственно первая задача, это определить, который из файлов в зипе есть та самая главная xml-ка. Как бы сделал я будь я составителем стандарта? Я бы сделал просто. Сказал бы, вот вам граждане зип, кладите туда чего хотите, с какими хотите названиями и папками, но опосля всего этого безобразия будьте любезны положить туда же в корень архива файл main.opf, который бы описывал чего жеж с тем что вы в зип понапихали делать. Оно, конечно, может в тот момент я был бы не в духе и заставил бы бедных граждан называть тот файл general.opf, а то и TyrpYRMyrDYR.opf, всяко бывает. Но как-то вот так, да.
Как же оно реализовано мега гражданами составителями формата? Естественно, там не такие простаки, поэтому все существенно круче, а именно.
В зипе должна обязательно быть папка META-INF, в папке той должен быть обязательно файл container.xml, в том файле, который кстати "содержит XML которая использует "urn:oasis:names:tc:opendocument:xmlns:container" namespace для всех ее элементов и аттрибутов." Да так вот в этом container.xml должен содержаться элемент
Я когда все это прочитал, понял, что что-то это мне напоминает.
"Смерть Кащея на конце иглы, игла в яйце, яйцо в утке, утка в зайце, заяц ларце, ларец на дубе, дуб на острове, остров хер пойми где" а теперь Ваня шкандыбай в сторону того острова и отстреливай весь этот зоопарк.
Самое интересное во всем этом мегаконструкте, полнейшее отсутствие полезности. А местами даже вредность. На 10 epub файлов скаченных из разных мест и созданных явно разными программами, не нашлось ни одного, в котором бы файл container.xml содержал что-то кроме ссылки на файл. Кто-то называл тот главный файл main.opf, кто-то general.opf, кто-то запихнул его не в корень архива, а подпапку, но по сути весь этот восторг разнообразия, программистам писавшим редакторы или конвертеры в epub вряд ли нужен. Если бы в спецификации было четко написано, как назвать главный файл они бы его так и назвали и вряд ли сильно расстроились за такое тоталитарное измывательство над креативными людьми.
Самое грустное, что это вот странное желание не упростить сложное, а усложнить простое, оно последние время наблюдается практически везде в ПО. "Давайте мы сейчас зафигачим такой формат, такой общий, такой абстрактный, что только держись". И понеслось, навертели такое, что реализовывать поддержку того формата целиком не упиралось уже даже монстрам индустрии, после чего начинаются дальнейшие радостные крики, а вот профиль 0, это когда мы из нашего мега формата отрезали вот это, вот то и еще здесь оставили только параметры от 0 до 2, а не от 0 до 2 в 32-й как было изначально, а вот профиль 1, там мы тоже все обчекрыжали и файл должен быть тока в UTF-8. Абалдеть.
Собственно, если начать сравнивать форматы сделанные лет 10-15 назад и сейчас, отличие разительно и совершенно очевидно. Берем Word-овский doc, благо теперь его открыли - все просто понятно, все пляшет от практических нужд, видно что делалось оно людьми, которые пишут программы, причем не программы вообще, а вот один из лучших текстовых редакторов (как по мне так и лучший), а не пытаются поковырявши в носу или где то там еще выдумать "чего бы там могло бы быть если бы оно бы туда бы и чтобы всем бы круто, вот". Берем DjVu тоже все четко и понятно, PDF старенький - все отлично, потом пошли формы, 3Д, мультимедиа и прочее и прочее и прочее. Смотрим, например, спецификацию 1.7. на PDF: "Sound, Movies, 3D artwork"... граждане, башку то включите, хочется интерактивных документов со всеми этими вашими мультимедиа, дык кто же спорит - здорово, но при чем тут PDF, который разбит на страницы и вообще подготовлен к печати, это ж PostScript по факту то, чего из него HTML то делать, мало что-ли HTML?
Из относительно новых, только FB2 греет мне душу, простой понятный и главное ровно то что нужно, для задачи хранения книги в библиотеки и ее отображения на компьютере. Т.е. люди представляли для чего им нужен формат, а не пытались сделать нечто чем можно и гвозди забивать, и стихи писать.
Вообщем ситуация навевает грусть, ибо вместо того чтобы сделать простое просто, а сложное постараться упростить, имеется тенденция, усложнять простое, а сложное и вовсе не делать.
понедельник, 25 октября 2010 г.
Про iRU, NVIDIA ION и 1080p видео
В связи с переменнами в жизненной ситуации, возникла необходимость уменьшить пространство занимаемое компьютером. Под это дело ("по совету друзей"(с)) решил взять iRU, который исключительно мелок размерами.
Кроме использования под всякого рода программерские нужды, так же хотелось его же попользовать как медиа-плеер, ибо старая Rapsody мало, что не поддерживает HD видео, так еще и в какой-то момент полностью утратила USB порт, а каждый раз разбирать компьютер и перетыкать винчестер, чтобы переписать фильм и его посмотреть как-то уже не бодрит.
Как обычный офисный компьютер этот самый iRU (если не путаю 112ая модель, хотел брать 111-ую, но у ней и USB портов мало и видео-выход всего один причем DVI, который к моему телевизору не монтируется) показал себя отлично, т.е. Windows XP влезла на него без скрипа, драйвера все шли на DVD вместе с компом, все что надо запускается, любимая Visual Studio работает и все компилирует, хотя субъективно и несколько медленнее, чем на старом атлоне, но это во-первых, субъективно, во-вторых, плюс минус 5 секунд меня не шибко заботят, физические размеры на данном историческом этапе для меня важнее.
Решил проверить как оно поведет себя в качестве видеопроигрывателя. Запустил MKVшку с H264 видео размером 720p - проиграло, но видно, что процессор грузится довольно прилично, где-то процентов 70-80. Надо отметить, что с давних пор, пользуюсь я для проигрывания видео программой media player classic, который не имеет лишних дурных наворотов, позволяет убрать вообще весь GUI, оставив только видео, ну и в целом прекрасен, на мой вкус. А в качестве декодера использовался набор ffdshow.
Собственно проверка на 1080p видео привела меня в расстроенные чувства, ибо летать оно летало, но низенько-низенько и постоянно затыкаясь, а уж на динамичных сценах, проигрывание превращалось в слайдшоу, причем даже без звукового сопровождения.
Однако, поскольку, внутре железяки таилась NVIDIA ION у меня было смутное ощущение, что делаю я что-то явно не так, и надо бы задействовать декодирование непосредственно на видеокарточке. Ощущение это, как оказалось, было вполне справедливым. В заначке нашелся media player classic в реинкарнации homecinema, который сожрал тот 1080p не поперхнувшись, и проиграл без всяких дерганий при загрузке процессора всего на 10% (что собственно по фиг, пусть бы и 100 загрузил, абы тока играл хорошо).
Отсюда вывод. NVIDIA моя уважуха за мега платформу ION, гражданам из iRU так же респект за умело собранный на этой платформе девайс минимальных размеров и с не шибко убийственной ценой, ребятам написавшим mpchc опять же большое спасибо.
Ну и известно кому, посоветовавшему мне присмотрется к ION, мой очередной спасиб, таки да, вполне себе девайс для медиацентра.
пятница, 19 февраля 2010 г.
Про MFC и Visual С++ Features Pack (еще раз)
Уже писал про MFC и Visual С++ Features Pack. Идиотизм в том, что не надо было использовать это гавно, а я как обычно поступил неразумно.
Вот интересно кем надо быть, чтобы в комбобокс можно было только добавлять строчки (т.е. есть команда Add), но нельзя их вставлять (нет команды Insert). Так еще и строчки комбобокса хранят в связном списке.
Тупорылость просто поразительная.
суббота, 9 января 2010 г.
Про Windows 7
Поставил себе Windows 7. Честно говоря, все эти аеры и прочее меня вообще не тронули, ну т.е., наверное, классно, но через месяц приестся и перестанешь замечать, а меня лично раздражает, не люблю все эти разукраски.
Новый вариант проводника, который я так понимаю появился в Висте, не порадовал там, и не радует здесь, мне как-то старый привычнее. А отсутствие меню и панели инструментов, к которым я привык, так и просто раздражает. Ну вот такой я дебил, привык работать с буфером обмена через панель инструментов.
По сравнению с вистой, ИМХО стало хуже, в Висте я достаточно быстро обнаружил отключения UAC, отключил эту хрень и живу относительно спокойно (правда виста у меня на ноуте, а я пользуюсь им не часто). Здесь быстро найти нужный чекбокс не удалось, и то, что надо постоянно жмыхать правой кнопкой по ехе-шнику и говорить, что таки да я хочу запустить его от админа, притом что синим по белому написано, что я и так админ, несколько утомляет.
Честно сказать, в инсталляции системы не хватает одного простого вопроса. "Хотите, чтобы мы задрали Вам мозг своим предстовлением о безопасной работе, или Вам на безопасность положить?". Вот ка бы он был, и при выборе второго варианта, вся эта шняга с запуском из под админа, не запуском из под админа шла лесом, можно было бы подумать о переходе на новую ОС. А пока, как то не понятно на хрена бы мне весь этот гемморой.
вторник, 5 января 2010 г.
Про конвертацию ДВД
Нашел тут милейшую программу для конвертации двдшных дисков в ави файлы. Называется Free DVD Video Converter.
Собственно, если бы писал рипер для ДВД, сделал бы что-то весьма похожее.
Программа проста как грелка, выбрать диск (либо в приводе, либо папку на винте), дождаться пока прочитается, выбрать нужный Title (по умолчанию выбирается самый длинный, чего в 90% случаев достаточно, хотя если двд, например, с несколькими сериями одного фильма, тогда придется выбирать ручками), выбрать аудиопоток (вот здесь есть странность, с одной стороны выбираем чекбоксами, с другой сразу два потока выбрать не дает - и это не есть хорошо, ибо для буржуйских фильмов иногда, хочется иметь и перевод и исходную дорожку, согревая душу мечтами о том, что мол вот выучу язык и буду смотреть в оригинале). Задать путь куда покласть результат. Выбрать тип контейнера ави или мп4 (что квиктайм, насколько, я понимаю). Задать профиль видео-аудио кодирования (для ави - три штуки: высокое качество, среднее и низкое, для мп4 по типу устройства на которое кодируем). Нажать кнопку "конвертировать" и идти пить кофе.
Честно говоря давно не испытывал такого восторга от программы. Но, понятно, есть ряд замечаний.
1. Уже писал, хочется иметь возможность запихать несколько аудио дорожек.
2. Хотелось бы иметь профили с H264 кодеком для avi контейнера, для mp4 оно есть.
3. Хотелось бы иметь возможность чуть-чуть поднастроить параметры кодирования. Собственно мне интересен единственный момент, иногда надо сконвертить черно-белое кино, и желательно про это рассказать кодеку, тогда он разом уменьшит объем в полтора раза без потери качества.
С другой стороны, 2 и 3 усложнят интерфейс и программа потеряет свою основную фишку - простоту. А стоит ли оно того большой вопрос.
Вообщем расстроило только то, что надо ставить дотнет 3.5, этого счастья я долго умудрялся избегать.
среда, 9 декабря 2009 г.
Про Thunderbird версия 3.0
Поставил. Скопировал базу и настройки из предыдущей версии. Запустил.
Во-первых, структура моих папок слетела.
Во-вторых, какие-то табы, зачем, для чего, не понял.
Как поставил так и снес. Я вот сотовые телефоны то с фотоаппаратами не покупаю, на фига же мне на машине этот странный комбайн?
Честно говоря утомило уже, что простых программ под задачу не найдешь, одни комбайны три в одном, и стирает и кофе готовит и за пивом бегает.
Надо будет через полгодика еще раз посмотреть, может проникнусь.
понедельник, 16 ноября 2009 г.
Про Opera
Свершилось чудо! Opera таки поправила чегойто там у себя унутри, и теперь стало можно работать с этим блогом прямо таки из Oper-ы. Это просто чудо какое-то!
вторник, 16 июня 2009 г.
Про тонкости разработки ПО
Кое-что про геймдев и копирайт - вопросы про копирайт и прочее оно обсуждаемо. Хотя я тоже склонен считать, что текущая ситуация с авторскими правами местами доведена до абсурда и она в какой-то момент должна качественно измениться.
Но мне больше понравилось описание процесса разработки. К геймдеву я правда отношения не имел и не имею, но в конторе где я работаю, и которая занимается мультимедиа, многие процессы весьма похожи.
Последнее время удивляет не то, что всплывают баги, а то что оно у нас вообще хоть как-то работает и до сих пор не рухнуло под собственным весом, потому что напихивание новых фитч в старую архитектуру долго продолжаться не может и ее скоро точно разорвет в клочья. Наверное, кто-то удивится.
понедельник, 25 мая 2009 г.
Про XPS Viewer
С большим уважением отношусь к фирме микрософт и их разработкам. И формат XPS мне нравится на много больше, чем PDF. Правда спецификация мягко говоря сделана коряво в плане оформления, но это терпимо. Но объясните мне тупому, почему их XPS Viewer постоянно валится, причем не тогда когда с ним что-то делаешь, а просто открыл документ, сидишь другими вещами занимаешься, вдруг ОПА! оно уже свалилось.
Ну и прямо скажем XPS Viewer этот, явно специально сделан для меня и других кто пишет просмоторщики, потому что даже STDU Viewer на фоне микрософтовского выглядит как Windows XP на фоне Win 3.11.
P.S. В свой просмоторщик таки добавил формат XPS, так что тем кому нужен XPS Viewer - качайте.
воскресенье, 17 мая 2009 г.
Про iPod
Поскольку iTunes окончательно достало своей "нестандартностью" (читай идиотизмом), было принято волевое решение написать свою утилитку для закидывания аудиокнижек на iPod Shuffle. Единственная проблема, которая собственно несколько пугала, это отсутствие спецификации на файлы БД используемые в девайсе. Пришлось порытся в интернет и немного поковыряться HexView-ером. Как не странно все оказалось крайне просто. 5 часов работы, и я (надеюсь навсегда) рапрощался с творческим наследием олигофренов написавших iTunes.
Все копируется и играется нормально. Оно понятно, утилитка получилась исключительно для себя и пару моментов надо будет добавить. Но все же как приятно, вместо этого идиотского мега монстра иметь ехе-шник на 50 КБ, и вместо того, чтобы превращать каждое копирование аудио книги на девайс в пляски с бубном, делать тоже самое просто, быстро и без нервотрепки.
Одно удручает, сделать такую утилиту надо было год назад - сэкономил бы кучу нервов.
пятница, 27 марта 2009 г.
Про Google Adwords Editor
Играюсь тут с google adwords для своего проекта. Веб интерфейс вполне ничего, т.е. я как бы не спец по такого рода вещам, поэтому, что есть, то есть мне хватает и вполне устраивает. Полазил по справке выяснил, что есть десктопное приложение для управления всей этой ерундой, называется google Adwords Editor.
А я честно сказать, вот как-то десктопные приложения полюбляю сильно больше, чем все эти мега новшества типа редакторы документов прямо в броузере и прочую муть. Т.е. из плюсов броузерных вариантов для меня очевидно только то, что можно работать с любой тачки. Из остального одни минусы, ресурсов будет жрать больше при той же функциональности, функциональность зачастую хуже. Т.е. понятно, что надо втюхивать народу что-то новое, но, если рассуждать по крестьянски, то сложно понять, с чего вдруг писать кипятком от тех же гуглодокументов. Функциональности уровня WordPad десятилетней давности (который кстати вполне портейбл) с единственной дополнительной фичей сохранения документа на сервере в интернет. Учитывая, что приварить к тому же WordPad возможность сохранять файлы где-нибудь в паутине, задача для студента на месяц - полтора, восторг для меня не очевиден.
Но я отвлекся. Увидал я значит, этот самый Adwords Editor и натурально обрадовался. Скачал 17 метров, и заинсталлировал. И что же вы думаете? Эта мега программа написана на Java.
Вот еще один пример уродской моды, ага. Писать приложения на Java или с использованием какой-нибудь шняги типа Qt для интерфейсов. С пеной у рта доказывая, что поскольку теперь получившаяся параша будет запускаться на всех операционках, то пользователи просто передохнут от восторга. То что в результате приложение выглядит как будто его сделали выпускники школы для олигофренов, это понятно никого не пугает. Вот собственно Adwords Editor с которого все началось - ну то что выглядит все это страшнее ядерной войны бес бы с ним. Но когда сдвиг сплитера загружает процессор на 100%, это мягко говоря удручает.
А самое веселое во всем этом, что нормально написанная на С++ библиотека с функционалом, скомпиленная под нужные платформы, оборачивается в интерфейс (простой виндовый интерфейс на Net, Delphi, Builder-е или даже WTL или MFC) максимум за месяц, программистом не самой высокой квалификации. Потратьте, блин, месяц ну пусть это стоит 5000 долларов, пусть 10 000, для гугла я думаю это не сумма, и получите, нормальное виндовое приложение, а не то угребище, что получилось.
Блин, и это флагман индустрии практически. А ведь и у него все как обычно, есть центровые вещи и делаются они нормально, и есть всякое сопутствующее на которое всем откровенно по [cendored] и делается это через жопу, причем жопа начинается с выбора технологии реализации.
Дурдом.
воскресенье, 1 марта 2009 г.
Про ошибку в ATL (решилось)
Пропатчил ошибку из предыдущего поста.
В общем, берем ATL из VS2005 или лучше даже из VS2008 и сравниваем файл atlbase.h с тем, что в VS2003. Особенно пристально смотрим в сторону определения структуры _stdcallthunk.
К сожалению, только изменениями в atlbase.h обойтись не удалось, пришлось еще и lib компилить. На самом деле можно было бы и без нее, но тогда на каждое окошко пришлось бы выделять 4 КБ вместо 100 байт, так что оно того стоило.
суббота, 28 февраля 2009 г.
Про ошибку в ATL и нововведения вообще
Вот прекрасная порнография. Делаю визуальный контрол, компилирую его под VS2003, и использую в программе скомпиленной под VS2003 - все прекрасно и под WinXPSP2 и под WinVista - далее везде. А потом использую в программе скомпиленной под VS2008, и оно прекрасно работает под WinXPSP2 и так же прекрасно работает под WinVista установленной на VirtualPC под WinXPSP2. А потом валиться, когда запускаю туже программу под VistaHB на ноуте. И это круто, долбиться три часа пытаясь понять, от чего бы в CWindowImplBaseT< TBase, TWinTraits >::StartWindowProc вызов pProc() приводит к такому удивительному результату. И так и не понял почему. Поэтому полез в гугл и нашел вот такую интересную тему .
Отлично, а чего, забыли пометить выделенные данные как исполняемые. А вот интересно что программа скомпилированная под VS2003 нормально с этим же контролом работает. Самое смешное, что эти милые люди и правда поправили баг в VS2008, точно, я проверял. Правда длл-ка скомпиленная в VS2008 весит в два раза больше, чем та которая из под VS2003.
Честно сказать, последнее время микрософтовские нововведения скорее утомляют чем наоборот. Все эти манифесты, WinSxS и прочая муть, которая не понятно зачем придумана кроме как задрать мозги программистам.
воскресенье, 25 января 2009 г.
Про MFC и Visual С++ Features Pack
Последнее время складывается такое ощущение, что в Microsoft явно что-то не так, причем не так не на уровне идей, а на уровне реализации. Выпущенная Vista имела массу интересного в плане новых визуальных элементов, но при этом жрала ресурсы так, что только держись. Причем первые бетты Windows 7 показывают, что эта прожорливость, отнюдь не необходимое условие хорошей системы. Но пост не про это.
А про Feature Pack для MFC под MSVS 2008.
Как известно MSOffice 2007 вышел в совершенно новом стиле, избавился от меню и панелей управления и получил на замену так называемый Ribbon. Выглядит это прекрасно, с моей точки зрения такой интерфейс намного удобнее старого. И захотелось мне написать одно из давно планированных приожений с использованием этого нового стиля. Ну а элементы управления, для всего этого хозяйства реализованы именно в Feature Pack. Так что я его быстренько поставил, и решил насладится.
Надо отметить что сам по себе Ribbon реализован вполне не плохо. Правда архитектурное решение при котором я создаю нечто при помощи new, а удаляет его уже кто-то другой для меня выглядит несколько пугающе, но с другой стороны почему бы и нет.
В том же пакете шла пара контролов CMFCShellListCtrl и CMFCShellTreeCtrl, которые вполне подходили для моей задачи, и я по дурости своей решил ими воспользоваться. Идиот, что не говори, потому что если бы я написал всю эту ерунду с нуля (тем более, что ShellTree у меня уже был написан под WTL) я бы сэкономил и время и нервы.
Ну начнем с того, что эти сиамские близнецы не хотели разлучаться и работать по одиночке. Это уже насторожило, но с другой стороны мне они тоже были нужны в паре, так что чего бы и нет.
Правда мне надо было показывать в списке не все файлы, а только удовлетворяющие определенным параметрам, а никакой виртуальной функции типа CheckItem в CMFCShellListCtrl предусмотрено не было, и пришлось переопределять всю EnumObjects, что явно говорит о высокой степени проработки архитектуры при рзработке контрола. Причем переопределяя ее пришлось ее маленько раздробить, потому что свалить весь функционал в одну функцию это, конечно, круто, но вроде как не очень.
Дальше больше. Для списка файлов весьма важно вовремя реагировать на изменения этого списка, т.е. на удаление, переименование и т.п. операции с файлами в списке, когда эти операции выполняет некая внешняя программа. Думаете это функционал есть в CMFCShellListCtrl - нет, конечно. Ладно дописать это не сложно. Ну и так по мелочам, пришлось добавить функционала втрое больше того, что было, причем в конечном итоге стало понятно, что проще будет переписать все совсем, чем пользовать исходное гавно.
Идем дальше. CMFCListCtrl. Реализацию продумывали явно не головой, либо в голове того кто над этой реализацией думал, что-то отличное от мозгов. Ну ладно, вы ребята желаете дать возможность менять цвет текста для каждого элемента и даже сделали виртуальную функцию OnGetCellTextColor. Отлично. Но неужели так трудно было подумать, что если эта функция не реализована в наследниках, то все должно работать стандартным образом, т.е. так как работает ListView, например, в проводнике. Полдня разбирался, почему у меня при выставление стиля Tile, все строки в подписе к иконкам радикально черного цвета, хотя во всех других примерах, черный только цвет текста из Column = 0, а текст из остальных колонок серый. Пришлось идти по всем исходникам и разбирать чего там наворочено.
Ладно разобрался.
В том же ListView есть стандартное сообщение LVM_SETSELECTEDCOLUMN оно надо, чтобы фон колонки, например, по которой отсортирован список сделать отличным от остальных. Чудненько. В CMFCListCtrl есть метод EnableMarkSortedColumn, думаю ну отлично, не надо писать руками, пацаны все сделали. Ага, пацаны сделали. Правда руки у пацанов растут из жопы, и сделали они именно этими руками. Вместо того, чтобы кинуть сообщение LVM_SETSELECTEDCOLUMN, они решили красить колонку самостоятельно. Ну а чего, умища то через край, и жажда деятельности зашкаливает. Проблема правда в том, что красится она не целиком, как надо, а только в подложке тех итемов, которые есть в списке. Ну и если переключиться с просмотра LV_REPORT на любой другой, куски этой покраски проглядываются, но это жеж не страшно, главное наботали какой-то херни.
Подводя итог, поработав с одним только контролом, практически пришлось переписать его целиком. Классная библиотека, ничего не скажешь.
четверг, 11 декабря 2008 г.
Про оптимизацию подробно
Решил собрать в кучу всякие мысли про оптимизацию. И расписать все это более или менее подробно.
Чтобы разговаривать по возможности предметно в качестве модельной рассмотрим такую задачу.
Допустим, нам надо генерировать черно-белую картинку (более точно массив байт, где 0 - соответствует белому цвету, 255 - черному). Размеры картинки будем предполагать от 5000 до 10 000 пикселей по каждой из осей. Генерация будет заключаться в отрисовке заданного набора черных прямоугольников (от 500 до 1000 штук, с размерами от 100 до 200 пикселей по каждой из осей) на белом фоне. Так же ограничимся случаем, когда стороны прямоугольников параллельны осям.
Задачка достаточно простая, и имеет массу решений. Однако, нам интересно рассмотреть подход к выбору из этих решений оптимального.
В работе по оптимизации программы можно выделить три этапа или три класса оптимизации.
1. Архитектурная оптимизация
2. Алгоритмическая оптимизация
3. Оптимизация кода
На самом деле они, естественно, не независимы. Нельзя определиться с архитектурой, не учитывая алгоритмы и глупо выбирать алгоритмы, не задумываясь о том можно ли их реализовать оптимально в данных условиях.
Архитектурная оптимизация
Чаще всего дает максимальное увеличение скорости. Здесь оптимизация зачастую определяется не только конкретной задачей, но и контекстом, в котором эта задача решается (причем контекстом в первую очередь).
Обратимся к нашей модели. Нам надо понять: как будет использоваться сгенерированная картинка? Например, возможно картинка нужна нам для вывода на экран. Экраны размеров 5 000 на 5 000 маловероятны, и это позволяет нам при запросе создать только часть картинки. Даже, если по запросу вместо 25 000 000 = 5 000 * 5 000 пикселей, мы будем генерировать 1 920 * 1 080 = 2 073 600 пикселей (т.е. в 12 раз меньше), это даст существенный прирост в скорости генерации (надо понимать, что в зависимости от выбора алгоритма прирост может быть и не 12 кратный, а при особом упорстве можно добиться даже уменьшения скорости, нет вершин, которые бы не взял человеческий идиотизм).
Еще одну возможность, которую следует рассмотреть на данном этапе это использование для генерации картинки нескольких потоков. Особенно актуально это стало в последнее время с появлением все большего числа многоядерных процессоров. Решать этот вопрос надо в тесной связи с тем, какие алгоритмы мы будем использовать. Еще раз следует уточнить, что разные этапы оптимизации тесно взаимосвязаны.
Вопросов о том, как будет использоваться наше решение, можно задать очень много и чем больше мы зададим их на данном этапе, тем меньше вероятность, что нам в дальнейшем придется переделывать все с нуля.
Дабы не быть голословным рассмотрим еще несколько уточнений, которые могут существенно повлиять на выбор варианта решения.
Генерируется ли картинка разово (т.е. приняли набор прямоугольников, сгенерировали картинку, сбросили ее куда-нибудь на диск и забыли) или это итеративный процесс (запросили одно окно из картинки, потом слегка сдвинули окно - запросили, и т.д.). Если итеративный, могут ли данные меняться между запросами? Если данные могут меняться, то каким образом? Прямоугольники только добавляются или и удаляются тоже.
Ответы на эти вопросы позволяют понять, есть ли смыл кэшировать промежуточные результаты, в какой момент отрисовывать прямоугольник (при его добавлении или на этапе генерации картинки) и т.п.
Таким образом, архитектурная оптимизация - это самый первый и наиболее важный этап, и именно он определяет начальный уровень скорости, который мы сможем (или не сможем) увеличить в дальнейшем. Т.е. надо понимать, что, конечно, и хорошую архитектуру можно загнать плохими алгоритмами и не оптимальным кодом, но точкой отсчета для скорости всегда будет служить выбранное архитектурное решение.
Алгоритмическая оптимизация
Алгоритмическая оптимизация начинается тогда, когда с архитектурой мы уже определились, и очередь дошла до выбора алгоритмов. Если на предыдущем этапе, мы определяли, как решаемая нами задача вписывается в общую структуру программы, то теперь нам надо разобрать более тонкие моменты.
Вновь вернемся к примеру с закраской прямоугольников. Самый простой алгоритм, который можно предложить для ее решения такой: проходим по всем пикселям картинки, для каждого пикселя проверяем, лежит ли он внутри прямоугольника или нет, и соответственно выставляем в нужный байт 0xFF или 0x00. Алгоритм ужасен, поскольку в худшем случае (например, когда все прямоугольники совпадают и вырождены в точку), необходимо будет для каждого пикселя проверить все прямоугольники и не найти пересечения. Второй вариант, заполнить сначала нулями весь выделенный под изображение массив, а затем, перебирая прямоугольники, закрашивать покрываемые ими пиксели. На самом деле тоже не слишком хороший вариант, например, когда прямоугольников много и они равномерно покрывают изображения, начальное обнуление массива становится длительной и лишней операцией.
И в первом и во втором алгоритме легко разбить работу на несколько потоков. В первом случае, просто разделив картинку на куски, и обрабатывая каждую часть в отдельном потоке. Во втором, первоначальное заполнение массива нулями разбивать будет, вряд ли целесообразно, а вот массив прямоугольников вполне возможно обрабатывать в разных потоках. И здесь, вполне вероятно, что первый алгоритм, сможет оказаться быстрее второго, просто за счет того, что исходное зануление массива будет общей частью для всех потоков.
Можно сделать вывод, что на данном этапе оптимизации важно определить, нет ли каких-либо особенностей у исходных данных задачи и, если таковые будут обнаружены, соответствующим образом настроить алгоритмы.
Оптимизация кода
Практически к этому этапу решение задачи уже в некотором виде реализовано, а желательно еще и отлажено. На самом деле, прежде чем браться за оптимизацию кода, совсем не плохо иметь модельный вариант реализации, с которым в дальнейшем можно будет сравнивать результаты на разных входных данные. Дело в том, что если до этого момента вполне реально делать все «красиво», т.е. иметь стройный код и хорошую структуру, то оптимизация кода обычно приводит к ухудшению его читабельности и понимаемости. Поэтому наличие рабочей (пусть и медленной версии) сильно облегчает жизнь.
На этом этапе кроме головы и компилятора, понадобятся еще и специфические инструменты - так называемые «профилировщики». Программ таких не сказать, что много, но их есть. Я пользуюсь CodeAnalyst-ом от AMD, он достаточно простой в работе, вполне устраивает меня по функциональности (хотя и имеет корявый интерфейс), а самое главное бесплатен, в отличие от схожей утилиты от Intel, стоящей что-то около 600 долларов (честно говоря, с Intel-овской утилитой не разбирался вполне допускаю, что там и возможностей побогаче и интерфейс поудобнее).
Можно, конечно, делать все на глазок, но это не оптимально. Профилировщик позволяет быстро выделить куски, с максимальным вкладом в время работы программы, и начинать оптимизацию с них.
Именно на данном этапе некоторые из частей кода, возможно, необходимо будет переписать на ассемблере, а некоторые и оптимизировать, используя SIMD инструкции. Однако, здесь важно не переусердствовать, ибо современные компиляторы с оптимизацией кода справляются вполне успешно, и стоит соблюдать баланс между «читабельностью» (которой код на ассемблере обладает в минимальной степени) и скоростью работы.
На этом пока все. В данном случае отзывы и замечания по статье приветствуются.
четверг, 4 декабря 2008 г.
Про Opera 10.0 Alpha
Не впечатлила. blogger.com как обычно, т.е. совсем не так как надо. Разве что теперь по Ctrl+Shift не открывается предварительный просмотр (что в 9.6 просто конкретно задалбливало).
Speed dial - долго думал, но сайты так и не подгрузил - что из рук вон.
Смена скина на старый, конечно, сработала, но как-то не совсем, т.е. такое ощущение, что высота закладок стала больше.
Да и в принципе, меня как-то бета-тестинг не возбуждает. Через это снес эту альфу, буду пытаться привыкать к ИЕ7.
Про совпадения
Бывают в жизни совпадения.
Решил попрощаться с Oper-ой. Собственно к ней есть несколько претензий.
1. Далеко не все сайты отображаются нормально. Например, писать в этот блог практически не возможно.
2. Очень долго выгружается. Понятно почему - кешь здоровый и явно организован через известное место.
3. Жрет ресурсы. Когда начал заниматься оптимизацией и измерять время выполнения функций, стало заметно, что от того запущена или нет Opera время зависит весьма существенно.
4. Очень жрет ресурсы, т.е. открыв страницу может подвиснуть на 1-2 секнуды для рендеринга (как я думаю, может и еще для чего)
В остальном очень хорошая, плюс кеширует все подряд, а трафик пока хоть и безлимитный, но не то чтобы совсем халявный.
Вообщем решил вчера вечером, вчера же попробовал Firefox. В принципе, нареканий особых нет, по пп. 1, 2, 4 все вроде в порядке. И даже выглядит не сказать что ужасно. Конечно, не кеширует, но это не приоритетно. Но дернул же меня черт. Очень мне у Opera нравилась "Speed dial" страничка. Решил что надо бы такую заиметь и на Firefox. Нашел какой-то add-on, скачал. Мать моя родная - страничка у них получалась, страшнее чем моя жизнь. Т.е. отрендерить для эскиза страничку в большой размер, а потом замасштабировать идея в целом хорошая, но люди добрые, соотношение сторон то надо сохранить! Т.е. надо хотя бы в целом взглянуть на результат и как-то что-то докрутить. Ну ужас же смертный.
Пытался так же перед сном поставить Chrome. Скачал файлик на полметра, который как я понял после запуска решил докачать что-то крайне необходимое из интернета. Извините, но ну его на фиг. Чай не в америках живем, чтобы с каждой машины инсталляцию заново скачивать. Т.е. может оно можно и как-то найти так что сразу одним файлом скачал и поставил, но искать меня как-то в три часа ночи уже заломало.
Сегодня на работе попробовал пользоваться IE7 - опять же по всем пунктам кроме 3 подходит (третий просто не проверял). Скачал и навесил на него какой-то мега изменятель, который дал возможность выкинуть комбик поиска (ибо если можно искать в адресной строке, то на фига бы он сдалось) и поставить главное меню на его привычное место (почему в IE7 эти опции не вынесены в настройки самой MS понять отказываюсь, честно говоря это похоже на вредительство, ну или на идиотизм, что встречается существенно более часто). Заметил кстати, что порботав с Oper-ой, отучился закрывать броузер, и чуствую себя не уютно, если он не весит в панеле задач.
Но собственно про совпадения.
Вечером зашел на softpedia (единственный кстати более менее приличный сайт из софтархивов, остальные из видинных, либо новодельная помойка в которой за adsense программу уже не разглядеть, либо как доунлоадс.ком - хер чего найдешь и ели ворочается) и чтобы вы думали - Opera 10.0 альфа. Вот скачал - буду поглядеть.