вторник, 26 июня 2012 г.

О страшном и ужасном

Хотел было назвать пост "О великом и могучем", но не решился.

Моя речь пойдет о формальном С++, плоском С, и еще кое о чем.

Знакомство ограничивалось спортивными задачами (размерами в несколько Кб), и двумя-тремя проектами в несколько десятков Кб (сущностей по 50). Решил улучшить качество этих проектов, чуть выше коленки.

В свои спортивные годы мы писали скорее на чистом С, без использования stl (максимум использовали bitset). Хеши писали вручную в 3 минуты, qsort тоже самопальный. Может конечно и глупо, но хватало. Времена такие были.

Коротко, что я узнал за последние недели.
- ссылки. Это показывает мой нулевой уровень. Ссылки - это те же самые указатели, только с сахаром и не пустые.

- раздельная компиляция, makefile. Все равно это медленно работает. Как сказал Андрей Б. из JB: "есть куча медленно компилируемых языков. Например, есть язык, название которого начинается на "С" а заканчивается на "плюс плюс".

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

- куча мелких фишек. Есть даже фишки, которые работают, только если в классе есть виртуальные функции. В этом случае компилятор что-то дописывает (в ином случае так все компилируется, что вы никогда не узнаете, что у вас были объекты). В последний стандарт так и не вошли штуки из boost.reflection, подозреваю, что там куча макросов которые пародируют рефлексию.

- перегрузка операторов. Оказывается, (->) и (*) тоже можно перегрузить. Так они сделали "умные указатели". Внезапно. [] тоже переопределяется, но это не get/set как в C#; тут в одну сторону, обычно возвращается ссылка. Обновить всю структуру может быть затруднительно. Создавать свои операторы язык как-то не позволяет, это вам, блин, не Haskell.

Оказывается в плоском С можно почти моделировать исключения. Есть низкоуровневая функция, которая запоминает положение текущей команды/инструкции. Затем мы вызываем функцию, еще функцию, а затем можем продолжить с того запомненного места. Низкоуровнево тупо пишем в ip. Если бы я был царицею морскою писал компилятор чего-нибудь с исключениями, то тут можно голову поломать "как быть с типизацией", кидать нужно на один уровень и там как-то обрабатывать. Нетривиальная штука.

Религиозные споры на счет того, надо ++i или же i++. Вот для итераторов желателен прединкремент, подумайте 30 сек зачем. Для простых типов (int) на некоторых(!) архитектурах говорят, что прединкремент на одну/две инструкции быстрее. Я таки считаю, что это пусть компилятор решает, это его задача и в этой области он (компилятор) должен быть умнее программиста. Ставить или нет inline человеку тоже бессмысленно, нормальный компилятор умнее и все сделает за вас.

Темплейты... Далеко не дженерики в современных. Нужны исходники, иначе инстанцировать темплейт не получится, эта штука не компилируется в объектный код. То есть чуть выше #define, да и с их помощи можно много чего натемплейтить. Зато можно копаться в исходниках stl или boost. Ибо, как уже отмечалось, компилируется это медленно.

Указатели на функции были давно. Новые \lambda-функции синтаксически так же уродски, как и все остальное. Но довольно сильные, там еще прикольный механизм связывания переменных.

Вообще, стандарт языка содержит список каких-то библиотек. Что очень странно. Стандарт большой - ему видней.

Говорят, что какой-то магией даже call stack организовывать. Но раз это магия, то такты считать уже будет  не принято.

Плоский С принято хвалить за то, что как написано, так и откомпилируется (плюс-минус пара оптиимизаций). В современных плюсах та же lambda будет компилироваться не_понятно_во_что. Во всяких C# тот же yield/linq и прочие функциональные штучки компилируются нетривиальным образом. Потом дебагерром это даже нормально не отладишь.

auto для плюсов - это просто прорыв. Они до сих пор называют это выводом типа, я все равно плююсь. Но для плюсов это реально прорыв.

valgrind - крутая штука для поиска memory leak, можно как и профайлер. Рекомендую. Очень рекомендую. Очень, очень. (Замыкание по Клини*).

Общее впечатление у меня пока только формируется и сильно undefined behaviour. Если очень нужна скорость (выполнения), то даже использование stl как-то выглядит для меня несколько глупым (про какой-нибудь boost промолчу). Если уже нужно понятие надежности, то явно находимся не в той области. Какая-то грань между скоростью и надежностью... зыбкая... больше к скорости. Видимо, что-то очень большое и больше скорость. Хотя терпимо, втянуться можно.

вторник, 19 июня 2012 г.

Закон Гука на людях

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

Однажды в поезде я ехал с женщиной-воспитателем из детского сада. Любую фразу она повторяла как минимум 6 раз. Вы даже не представляете. Немного переставляя слова, она повторяла любую фразу раз 6. Когда я что-то слышу от собеседника во второй раз в течение минуты, мне уже хочется плюнуть в лицо/хуком слева сделать непоправимое. А тут она все по 6 раз. Как она провела день на вокзале и никуда не могла отойти. Я даже не знаю, как она повторяет фразы из 2-х слов, из 3 как раз уникальные комбинации получаются (3! = 6). В общем, так я узнал УК РФ 105, 110 (как в активном, так и в пассивном залоге) и часть пунктов совершенных в состоянии аффекта. Причем она еще принадлежит такому классу людей, которые общаются сами с собой: сядет и говорит в пустоту, ей никто не отвечает, ну а она все равно по 6 раз. Это не профессиональная деформация, это превышение предела прочности.

Люди, у которых есть маленькие дети, тоже по этому признаку отличаются от мат. ожидания. Повторяют они раза по 2-3, при этом все время, причем часто смотрят в глаза и спрашивают "ты меня слушаешь?".

Есть люди, вступившие в ипотеку. Они редко смеются, мало едят, думают о своем (своей ипотеке). Английское слово mortgage (ипотека) пришло с итальянского/испанского и созвучно переводится как что-то связанное с "посмертный" (mort, momento mori). Российские реалии недалеки. Сильно меняет людей.

Если о личном, то я люблю тишину и спокойствие. Точнее громкие звуки и нервные ситуации меня просто бесят. Поэтому у меня нет (и не будет) телевизора, радио и стационарного телефона, даже часы на стене у меня электронные, звук перебежек электронов не доступен моему слуху.

Еще мне нравится прохлада, другие называют это "тебе не холодно?". Пяток лишних килограммов, средняя ходьба по улице со скоростью 6.61 км/ч, преобразует любую погоду из >15C в жаркую. Улица - это не только расстояние от рабочего компьютера до домашнего, но применимо и к кондиционеру.

Адски ненавижу очереди. У меня есть черный список магазинов, где можно простоять в очереди. Белого и серого списков нет в природе, есть просто черный, абсолютно черный. Так же такая же ненависть к стоящим (мешающим проходу слева) людям на эскалаторе. Даже в московском метро я ходом успеваю сделать по 100 шагов, и это выигрыш в полторы-две минуты. И это только вверх, вниз я не считаю.

Иногда слышу фразы уровня "ничего, привыкнешь". Причем в тех ситуациях, когда мир и окружающую среду можно немного подвинуть и не надо ни к чему привыкать. Это животные привыкли, у верблюда вырос горб на спине, у жирафа получилась длинная шея. Человек тем и отличается, что способен изменять, а не приспосабливаться. Люди, говорящие фразу "привыкнешь" просто привыкли ее говорить.

Свои отклонения он норм поведения считаю профессиональными. Не могу оценить, перешел ли я где предел прочности, или если снять нагрузку, то меня "выправит"? Жирафу видней, он - большой.

воскресенье, 17 июня 2012 г.

Сезонная раздача

Есть подарить:
  • КПК HP(какие четыре цифры). Разрешение 320х240, внешняя карта на 4Гб, winmobile. Если у вас нет на телефоне навигации, то Navitel может оказаться очень полезным. Скайп, календарик, записная и прочее не нужные вещи. Wifi, никаких других мобильных вещей там нет. Кофе не варит. Четыре года назад он был современен, сейчас уже года два лежит на полке. 
  • Wifi Dlink6xx роутер, на числе торрентов больше 20 начинает зависать. Других недостатков не успел заметить. 
  • Мой первый персональный компьютер, PentiumIII-500. 320 Mb оперативы, 80Gb винт, стоит Debian. Главная фишка этой машины в handMade термодатчике(срабатывает при превышении порога), в ненагруженном состоянии машина бесшумна. Сам два проводочка паял :) . Под сетевую маршрутизацию, или под всякие git/hg по смыслу должен подходить идеально. Лет 7 стоял у меня в комнате при 100% uptime, раз в три месяца перегружался, из-за некотонтролируемых выключений электричества.
  • Тупой свич на 8 портов. 
  • Другой незначительный хлам.
Самовывоз. В подарок.

Менее года назад отдал планку 2Гб Паше для стационарного. В тот же день он звонит мне и спрашивает диск с ОС. В итоге оказалось, что при установке кулер на проце выдернулся, при включении минуты через 2 по температуре вырубался. Всего лишь.

Планшет, которому меньше года, думаю, нашел более активное применение. 

суббота, 16 июня 2012 г.

Нечто сферическое

Как бы о политике, но слабо относящееся к реальности... и российской и мировой. Из серии "Если б я был утопистом".

Лозунг "за честные выборы" ущерблен в принципе, на уровне "голосуй сердцем". Проблема, как мне видится, совершенно в другом. Отсутствует обратная связь, понятия управления вообще нет. Поясняю. Вот вы едете на машине за рулем. Каждые одну-две секунды поправляете руль, чуть повернули налево - машина берет чуть левее. Вы управляете.

А теперь вам дали выстрелить из лука по мишени за 50 шагов. Как стрелять из лука все видели в книжках/фильмах. Все просто - натянул, отпустил. Только делаем мы это раз в 5-6 лет. Управления отсутствует. Летит. Ctrl-Z не нажать, поправить нельзя - не автомобиль. Даже не долетит. Это не "власть народа", это называется "демократия".

Есть профессиональные спортсмены-лучники, и даже бильярдисты (там тоже все решается в моммент выстрела). Но на то они и профессионалы, каждый день по несколько сотен выстрелов. Они то все контролируют.

Далее про ограничения по возрасту. Если вам нет 18(16?) лет, то голосовать вы не имеете права, так же как будучи заключенным. Но почему-то обитателям "желтых домов" никаких ограничений нет.

Чтобы окончить школу (право на возможность поступление в вуз), надо сдать экзамены. Чтобы получить водительское удостоверение (право на возможность управления машиной), надо сдать экзамен. Чтобы получить избирательное право надо всего лишь дожить до определенного возраста. Что-то мне кажется (и должно казаться), что избирательное право должно влиять на судьбу человека больше, чем окончание школы. Достается же это право "бесплатно".

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

Таки все равно должен быть один (или очень малое число) человек, принимающий критические решения. Когда была войнушка с Грузией в 2008, решение было принято быстро одним человеком. Даже собрать/обзвонить ночью 3..5 человек это нетривиально.

БольшАя часть вопрос так же не может быть отдана на волю народа. Попробуйте изменить пенсионный возраст, если половина "голосующих" пенсионеры... Если находится внутри системы, то ее (систему) не видно. Желательно быть "вне" или "над", шире видишь когда не винтик.

Взгляды мои больше относятся к либерально-аристократическим. Аристократия модифицированная, не по признаку наличия денег или родителей, а наличие компетенции и ответственности. Как доказывать адекватность? Я не знаю, тут я не адекватен. Это точно не надо сравнивать со сдачей ЕГЭ по русскому языку.

Заметьте, кстати, что как две недели назад у нас в стране вернули выборы губернаторов. Тихо, многие и не заметили. Шаг с моей стороны достойный, но до моего идела еще управления и контроля далеко. Хотя бы потому, что я сам плохо вижу этот самый идеал.

вторник, 12 июня 2012 г.

Парам-парам-пам

Мальчишки и девчонки,
А так же их родители.
Увидеть не хотите ли?

Так как я переехал (почти весь), то меня можно тупо навестить. Готовить я все равно не умею, так что смогу предложить чай. Тот который в пакетиках - его практически невозможно испортить. Их там штук двадцать осталось, предложение ограничено (чаем).

Географически - город тот же, чуть на север от магазина Океан.

Называется, пустить козла в огород родителей делать ремонт. Конечно, им Большое спасибо. Несколько слов о них. Психиатры поставят диагноз уже после посещения огорода. Так как вы не были у нас на огороде, то тоже несколько слов.

Однажды меня посчитали за олигарха. Была осень, я что-то перекапывал и был одет по холодной погоде. Проходившая мимо старушка, посмотрев на меня (видимо я еще был не брит и выглядил утомленным) риторически спросила: "Что, хозяева совсем не кормят?" Я не понял ситуацию и честно ответил "Не понял..." Она или не расслышала мой ответ, или не так проинтепретировала: "Что и по-русски не говоришь?" Теперь я осознал ситуацию и четко ответил: "Я и есть хозяин". Вот тут ее надо было фоткать. Такие эмоции на лице я ни до, ни после, не видел.

Еще года 3 назад у нас на с/о массиве был сабантуй на тему юбилея с/о массива. И почти неожиданно нам вручили приз за лучший участок. Если в течение 15-20 лет что-то делать, то это обычно начинает получаться. Хотя на нашей улице тоже появилось кучка прокаченных домиков, но там сразу видно что люди с финансами, буквально за год/два сделано. У нас же все хэнд-мэйд.

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

В квартире трезвые строители поставили стену с уклоном в 10см. В общем - не поверите. В битве "папа vs стена" проигравший сейчас находится в абсолютно вертикальном состоянии. Я ж говорил, что не поверите. Нормальному человеку в голову не придет двигать стену(!) в доме, мне бы не пришло. Все бы сказали "блин, трезвые строители". Не на того нарвались.

Ладно, в общем, пишите/звоните/связывайтесь.