Страницы

Неправильные «правильные» ответы. Земля против Солнца.

Первая часть — Пух против железа  

    Что вокруг чего вращается: Солнце вокруг Земли или Земля вокруг Солнца? В наш просвещенный век этот вопрос может показаться глупым. Ведь отвечать на него первым способом было принято лишь в славные времена инквизиции, и с тех пор как вероятность угодить за второй ответ в лапы средневекового министерства любви сошла на нет, научная мысль восторжествовала раз и навсегда, ведь так?

Урок истории о Моцарте и Сальери

    Большинство до сих пор полагает, что гениального композитора Вольфганга Амадея Моцарта отравил завистливый ремесленник Антонио Сальери.

    А ведь Сальери - это великий музыкант, один из равных в ряду композиторов того времени, произведения которого ставят и до сих пор. В свое время он даже помог Моцарту, когда в 1789 году возобновил постановку "Свадьбы Фигаро", которую не ставили после первых 3-х выступлений с 1786.

    Интересно, что на родине итальянского музыканта узнали «страшную правду» только в конце двадцатого века. В результате возмущения, вызванного слухами о событиях двухвековой давности, в 1997 на самом высоком уровне состоялся суд над Сальери по делу об убийстве Моцарта, который окончился оправданием обвиняемого.

   Так почему же сейчас, в век доступной информации большинство считает, будто Антонио Сальери — завистливый убийца?

Нерабочий int system(const char *command) в Windows

Windows не перестает неприятно удивлять в неожиданных местах. У разработчицы нашей двухплатформенной библиотеки без видимых причин перестала работать функция system(), являющейся частью стандарта ANSI C и занимающейся запуском внешних программ. Функция одинаково хорошо не работала что после сборки с помощью mingw gcc, что после сборки в Visual Studio.

Неправильные «правильные» ответы. Пух против железа.

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

Например, что весит больше — килограмм пуха или железа?

Производительность ассоциативных массивов на Си и С++

   Я уже сравнивал производительность самодельного ООП на Си со встроенными в язык реализациями на C++  и Objective-C для одного конкретного случая. Настало время для сравнения рукописного ассоциативного массива на основе расстановочной(хэш) таблицы и реализации с помощью стандартной библиотеки шаблонов C++.

Бесплатный компьютерный класс с GNU/Linux

Наткнулся на статью об учителе - энтузиасте.
В 2007 году в школе, в которой он работал, не было компьютерного класса, и денег на его создание никто выделять не собирался. Но благодаря своим усилиям учитель добыл 18 старых компьютеров. Выяснилось, что работать на них сложно, потому что операционная система тормозила и на многих водились зловреды. Тогда при помощи интернет-сообщества, он установил на компьютеры GNU/Linux, что позволило ему успешно использовать компьютеры для обучения. Учитель продолжил собирать старые компьютеры и в 2012 году у него уже была лаборатория на 70 машин.
Новость в какой-то степени банальная, у кого-то были проблемы с программным обеспечением, он установил свободную операционную систему - проблемы исчезли. Но примечательно то, в какой стране находится та школа, в которой на 2007 год не было компьютерного класса. В Украине, России? Может в одной из африканских стран, в которой нет нефти?
На самом деле...

Казус экономической терминологии — фляция

Предположим, создаете вы некую экономическую формулу, в которую входит изменение цен на товары и услуги, а подходящего термина для этого явления подобрать не можете. Есть «инфляция» — увеличение цен, есть «дефляция» — уменьшение цен, а некой фляции — термина для изменения цен без указания знака — нет. Неужто никому не нужен? Немного напрягает использовать определения в духе «отрицательного роста».


Обновление 14.07.2024:

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

Всем ¤.

Рекомендации по написанию кода на Си

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

Не работает Adobe Flash в Ubuntu Linux 12.04

На некоторых компьютерах с Ubuntu 12.04 Adobe flash plugin 11.2 падает. Судя по всему, проявляется это не у многих, но мне как раз свезло. Adobe заявило, что версия 11.2 будет последней для GNU/Linux, так что надежды на исправление ситуации после очередного обновления особо нет. Надежды на Google, которая встраивает в пакет со своим браузером Chrome обновленный flash, тоже не оправдались. Я попытал счастья с Windows-версиями браузера и plugin`а сначала непосредственно в WINE, затем через PlayOnLinux, но и так не заработало. Я даже пробовал поменять видео-драйвер, и устанавливал свободные версии flash plugin`ов - Gnash и Lighspark, но увы, этим программам далеко до полной реализации.

Роль рідної мови при навчанні програмуванню


Важко знайти людину, яка б стала заперечувати користь використання рідної мови під час навчання. Але якщо взяти таку область як інформатика, й поширити вплив мови рідної на мову програмування на рівні ключових слів та імен, то ви можете знайти багато незгодних. Вам можуть вказати й на те, що програміст повинен знати англійську, яка безроздільно панує в цій сфері, й на те, що англомовні ключові слова та ідентифікатори — це насправді не англійська, а спеціальна символіка, й можливо ще багато чого, що тим не менш не має відношення до цілей навчання. А головна ціль навчання, як я її бачу, проста — донесення найбільшої користі учню при найменших зусилях вчителя. Під таким кутом зору імена й ключові слова рідною мовою можуть стати в нагоді, бо дозволяють розділити складність розуміння іноземної мови та складність розуміння алгоритміки. 

Взаимовыручка при решении жилищного вопроса

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

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

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

О бесполезности борьбы

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

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

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

Наша природа требует от нас экономии энергии, в том числе и на мозговой деятельности, подталкивая к узкому взору и пережеванным, упрощенным выводам. С этим можно бороться, и эта борьба не бесполезна!

Недостаток технического ограничения работы за компьютером

Недавно я создал простую программу для ограничения времени работы пользователя в GNU/Linux для упрощения контроля ребенка и написал об этом. А теперь настало время для того, чтобы поговорить о недостатках такого подхода.

Ограничение времени работы пользователя в GNU/Linux

У меня появилась необходимость ограничить техническим средствами время "работу" семилетнего чада за компьютером с GNU / Linux.

Проблему с великим и ужасным интернетом я легко решил с помощью детского браузера "Гогуль". А вот с ограничением времени работы пользователя возникли трудности. Начал поиск имеющихся программ для Ubuntu 12.04 и обнаружил, что с этим дела обстоят не лучшим образом.

Что-то у меня не работает, как Gnome nanny (у некоторых, судя по отзывам, она еще и портит систему), для чего-то даже нет готовых пакетов для установленной версии Ubuntu, в том числе и в сторонних хранилищах.

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

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

Рассогласованность runtime`ов библиотеки и программы

Давеча столкнулся с неприятной особенностью при разработке библиотеки на языке Си.
Есть в ней функции, возвращающие указатели на динамически выделенные массивы стандартного типа с помощью malloc(), по большей части это обычные Си-строки. Я рассчитывал, что освобождать эти данные из кода основной программы нужно стандартной функцией free(). Это разумно для компонентной системы, библиотека и программа, ее использующая, динамически подключаются к одной и той же стандартной библиотеке, в результате чего используют согласованные средства для выделения и освобождения памяти.

Основная разработка ведется в Linux, и в ней нарушения этого принципа не наблюдалось. Для любых доступных комбинаций компиляторов (gcc, clang, tcc, tendracc) для библиотеки и приложения никаких накладок не было замечено. Собранная библиотека оказалась переносима между разными версиями дистрибутива.

А вот в Windows меня ждало небольшое разочарование. Библиотеку для нее собирали средствами mingw, а приложение - с помощью Visual Studio. Несмотря на заверения о том, что mingw использует родной для Windows c-runtime,  какую-то несовместимость он вносит. При попытке средствами программы освободить память, выделенную в библиотеке, происходит крах.

Есть категоричное мнение, что при правильной архитектуре освобождать нужно теми же средствами, что использовались для выделения. То есть в пару к функции, возвращающей указатель на динамически созданный объект, должна быть создана функция его освобождения.  Тогда проблемы рассогласованности не возникнет.

Разумно, тем не менее, я считаю такой подход не всегда адекватным.

Производительность ООП в C, Objective-C, C++

При создании программ на С в редких случаях, когда мне это нужно, я использую ООП, несмотря на нетипичность этого подхода для C.

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

Правозащитник

Максим Коровин нажал на кнопку "14". Двери закрылись, и лифт, по троллейбусному загудев, начал подъём.

У Максима было хорошее настроение, его взгляд был полон гордости и энтузиазма. Прошло только пол рабочего дня, а он уже помог пяти людям. Занимался Коровин очень важным делом - добивался соблюдения прав человека, точнее только одного права, но, по мнению Максима, одного из самых важных.

Макулатура

Підіймай побутову культуру -
Здавай макулатуру.
Було - "Війна і мир",
Тепер - туалетний папір.
Хрусткий і на дотик приємний
Туалетний папір.

Любовь - чувство не земное

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

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

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

Не пью

Я не пью - бросил в тринадцать лет.
Как-то проснулся в очередной раз в детском вытрезвителе - голова болела, тело ломало, во рту - блевотный привкус. Оглянулся - вокруг такие же пьяные тельца на зассаных койках. Так меня в тот раз всё это проняло, что тут же решил - всё, хватит. И как решил, так после этого ещё пять лет бухал да буянил. Ну а в 13 лет всё-таки бросил. Принесли мне икону какой-то богоматери, кровоточащую миром, помолились, и - как рукой сняло. Мне и без алкоголя стало хорошо.
Я перешёл на новый уровень развития личности - наркотики. Сперва курил травку. В конце-концов этого показалось мало, всё-таки время шло, а развития не было, и я решил разнообразить потребление. Надо сказать, хорошо пошло - уровень следовал за уровнем.
Снова начал задумываться о бренности бытия с тех пор, как ко мне стала наведываться чёрная тварь. Бывало, придёт эта рогатая мразь с болтающимся неприкрытым срамом, улыбнётся тебе пакостно, сверкая красными глазёнками, присядет посреди комнаты и, мерзко хихикая, наваляет кучку-другую. Весь дом сволочь изгадила. А самое неприятное - это её манера время от времени появляться вместо отражения в зеркале. Что за грязные намёки?
Ничего, я уже приобрёл лекарство. Говорят, помогает от всего: от болезней и жизненных неудач, от больной головы и плохого настроения, лучшее средство от старческого маразма. Сегодня обязательно попробую. Ведь жизнь коротка и в ней надо всё успеть попробовать. Да?