юзерпик1

будущее уже рядом

Размышлял тут намедни о будущем. Вроде уже 2011 год к концу подходит, цифра вроде бы привычная, но какой-то частью мозга отказываешься понимать, что уже второй десяток лет живешь в 21 веке. Да что там говорить- в третьем тысячелетии! На ум приходят потоки бурной фантазии фантастов-писателей-сценаристов-продюсеров и прочих творителей.
Помнится, в бытность мою школотой школьником, учительница рисования дала нам задание нарисовать 2000год (на дворе был год этак 1995-1996). Все (и я в том числе) кинулись рисовать всякий футуризм в виде монорельсовых дорог и небоскребов (фигли там, все одни и те же фильмы смотрели). Все, кроме одного человека. Серега сидел сзади (или спереди- уже не важно). Он достал карандаш, чистый альбомный лист и начал творить. Кое-как завершив свои "малювания" мы с хихиканием и смешками стали следить за появлением, не побоюсь этого слова, шедевра изобразительного искусства. В финальном виде работа изображала здоровую гору мусора (дверь от авто, шины, чайники, прочий хлам), на которую поднимался бомжеватого вида субъект с авоськой, из которой торчали бутылки. Кепка и дымящая папироска дополняли картину. На заднем плане дымилась труба какой-то котельной (а может и крематория, кто его знает), возле этой котельной стоял наклоненный мусорный контейнер, из которого торчали ноги искателя хабара, едва в этот контейнер не нырнувшего. Там были еще какие-то детали, но я уже не помню. У всех в голове крутился один вопрос- какова будет оценка за этот "шедевр". Надо отдать должное учительнице- обладая хорошим чувством юмора, она сначала от души посмеялась, разглядывая этот комикс, а потом поставила автору заслуженную пятерку.

Так вот. Вспоминается два типичных сценария будущего у творителей той эпохи. Первый- все зашибись (вокруг летают машины, прочие технологические ничтяки). Второй- все хреново (роботы восстают, людей убивают не за хрен собачий). На мой взгляд, реальность пошла ровно посередине. Да, мы не летаем на машинах и не видим трехмерных рекламных голограмм на улице (только их не хватало). Но оглянитесь- чудеса техники потихоньку проникают даже в самые далекие уголки мира. Стоит просто посмотреть на настоящее глазами себя прошлого и сразу будешь видеть разницу. Настольный компьютер, мощности которого соизмеримы с промышленными образцами того времени. Сотовый телефон, позволяющий общаться откуда угодно (даже из тайги, там тоже вышки бывают). Интернет- информационная помойка и источник знаний. А с другой стороны- за скачивание музыки могут дать столько же, сколько за убийство. Металлоискатели везде, а в аэропортах так вообще разуваться надо и придерживать спадающие без ремня штаны. (По поводу взаимоотношений народа и власти не говорю- в нашей стране это вне времени). Надоевшая всем до зубовного скрежета реклама на деле является питательным элементом того же интернета и памятником изобразительных технических средств.
Да, техника развивается быстро. А люди- нет.
юзерпик1

ненависти псто

Ненавижу мудаков. Они пишут всякую херню в лифтах. Они курят в тамбурах электричек и накуриваются перед разговором с тобой. Они заставляют всю ночь слушать сигнализацию их пепелаца, об который решил потереться местный барбос. Они загораживают эскалатор поперек. Они останавливаются на пешеходном переходе, загораживая половину. Они многократно посылают человека по инстанциям, вместо того чтобы один раз сделать свою работу. У них синдром вахтера.

Уфф... Выдох:)

ЗЫ. Когда я поступаю как мудак (как следствие, таковым и являясь в этот момент) я себя тоже ненавижу.
юзерпик1

татуйота

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

псевдофренды

Напишешь так какую-нибудь фигню интересный пост в ЖЖ, тут же во френды набигают несколько человек. Я довольно придирчиво отношусь к этому вопросу и добавляю только тех, кто мне интересен (если есть личное знакомство, то фактор интересности можно перенести на человека, а не на его жж).
Через какое-то время начинается отток таких вот псевдофрендов (ога, взаимно не зафрендил, писькомерку рейтинг не поднял, скотина). А еще через какое-то время (см.начало) все по новой.
Круговорот, блин:)
юзерпик1

PR for software

Ох, нелегкая это работа продвигать свой софт в массы. Даже если этот софт бесплатный и единственное, что требуется от пользователя- сообщать о багах и высказывать пожелания по улучшению.

Collapse )
юзерпик1

ненависти к банкам псто

Все больше убеждаюсь, что даже в такой серьезной сфере, как банки, встречаются целые стада дебилов.
Два раза мне уже неправильно записывали адрес мыла- букву 'G', в строчном виде пишущуюся как 'g', оформили как 'd'. Трендец. Конечно, понятно откуда такая ошибка происходит, но в школе не учили как латинские буквы пишутся что ли?! Хорошо хоть успевал регистрировать адрес на себя.
Банкомат для выдачи наличных. "Введите сумму, кратную 100р". И надо вводить сумму с точностью до копейки. НАХРЕНА???? Я понимаю, что с точностью до рубля- это логично и правильно, но копейки... Это означает всего лишь, что быдлокодеры, писавшие ПО тупо зашарили код ввода суммы при безналичном расчете, где копейки вполне допустимы.
юзерпик1

немного о кроссплатформенности и библиотеках

Решил вот поделиться своим мнением насчет известных библиотек для кроссплатформенной разработки на С++.

boost. Всем известный набор велосипедов. Без кавычек, потому что в хорошем смысле- позволяет заюзать готовые решения и не писать свои. С какими частями пришлось столкнуться:
- boost.thread. Многопоточность как она есть. Создание потоков, причем без приплясывания со статической функцией и передачей this через void*. Плюс всякие там условные переменные, мьютексы (разных видов, половину не разобрал), барьеры.
- boost.smart_ptr. Расширенная реализация "умных" указателей. Мега-вещь. При правильном подходе позволяет не заботиться об управлении памятью. Также не нужно забывать про boost::make_shared.
- boost.bind/boost.function/boost.member_function/boost.ref/boost.type_traits. Продвинутое расширение стандартных инструментов для мета- и функционального программирования. Требует ответственности, ибо неоправданно использование загромождает и усложняет код.
- boost.array. Простой враппер для массивов константного размера. Позволяет удалить это знание о константности из обрабатывающего кода. Полезна вещь.
- boost.crc. Подсчет разного рода контрольных сумм. Тут и сказать нечего.
- boost.format. Выход для тех, кто выяснил наконец-таки, что printf - это ужасно, плохо и опасно, а std::ostream- правильно, но неудобно.
- boost.optional. Когда нужно не просто хранить переменную, но и сам факт ее наличия/инициализирования.
- boost.program_options. Реализация велосипеда, который, хоть раз, но писали все: парсинг параметров командной строки. С лету разобраться проблематично, но с помощью примеров вполне можно. Не работает с широкими символами, иногда глючит на высоких режимах оптимизации компилятора (из-за хаков внутри), но использовать можно и нужно.
- boost.string_algo. Реализация алгоритмов работы со строками, являющихся классическим источником велосипедизма.
- boost.tuple. Для тех, кто любит использовать std::pair, но сожалеет о ее нерасширяемости.
- boost.variant. Исключающее хранение нескольких типов в одной переменной. В некоторых ситуациях может быть полезно.
- boost.static_assert. Проверки утверждений на этапе компиляции. Наравне с классическими утверждениями (assertions), можно использовать для фиксации предположений и прочего. Чтоб при изменениях не торчать в отладчике.
Сталкивался, но не использовал в продуктах:
- boost.regex. Регулярные выражения. Вспоминается шутка: "если у вас есть проблема и вы собираетесь решить ее с помощью регулярных выражений, у вас есть две проблемы".
- boost.xpressive. Те же регулярки, но в синтаксисе языка и задаваемые статически на этапе компиляции. К сожалению, не все компиляторы могут пережевать более-менее сложное выражение на нем (MSVS7.1 падает с переполнением мангленного имени переменной).
- boost.call_traits. Тоже часть из метапрограммирования. Автоматически детектит наилучший способ передачи параметра в функцию (по значению/по ссылке). Загромождение прототипов- плата за использование. Для библиотек- очень полезно, ценность в продуктовом коде- крайне ограниченная (как и метапрограммирования вообще)


QT. Монстр. Тоже в хорошем смысле. Можно писать приложения любой ориентированности (даже без пользовательского интерфейса, как это ни странно).
Плюсы для меня:
+ превосходная документированность. Справочник как в онлайне, так и в оффлайне. Хотя примеры некоторых аспектов не блещут широтой, достаточны для разбирательства.
+ оно действительно работает на разных платформах:) Конечно, это не даром, в код страшно глянуть- сплошь сборище говнокода, костылей и подпорок. Но меня, как пользователя, это не волнует.
+ оно даже работает на встроенных системах (например, dingux). Разумеется, своя специфика, но перестраивать сознание не надо.
Минусы:
- нетривиальный процесс строительства кода. Поскольку я не использую qmake, все приседания с вызовом метакомпилятора, компилятора ресурсов и пользовательского интерфейса надо реализовывать самостоятельно.
- сигнал-слот система перекладывает ответственность за правильность связывания с compile-time на run-time. Что чревато проблемами в непокрытых запуском участках кода.
- собственная система управления памятью. Эдакий недо-GC. Не всегда очевидно кто и когда должен удалять объекты, что чревато утечками памяти.
- в дополнение к предыдущему пункту- собственные утечки памяти, с которыми ничего не поделаешь.
- ужасный стиль примеров в документации и учебниках (положа руку на сердце- этим страдает 99% книг про С++). Йоу! Чуваки! 2010 год на дворе уже заканчивается. Уже давно пора делить интерфейс и реализацию. Нахера клиенту класса знать о кишках (пусть даже и в приватной части) и тянуть за собой многокилометровое говно в виде огромного списка инклюдов для всех этих кишков?

Если у кого какие вопросы- с радостью отвечу:)