morthan2006: (Default)
 Я всегда придерживался мнения, что комментарии в программе важны и их должно быть побольше, потому как кашу маслом не испортишь. И ещё комментарии желательно писать на русском, поскольку их читать проще. А требование писать по-английски есть излишество и эстетство: ну кому за пределами СССР может потребоваться читать мой код?

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

Сейчас я смотрю на модуль, откомментированный китайскими разработчиками на китайском (благо, современные Delphi умеют в юникод) и с тоской вспоминаю такие милые и понятные венгерские комментарии.

Глобализация, понимаешь...
Mood:: пессимистическое
Music:: Royal Hunt - Clown In The Mirror
morthan2006: (Default)

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

Итак, есть у нас код на Delphi, который вызывает код на .NET. Чтобы этот вызов стал возможен, из .NET наружу торчит общедоступный интерфейс IDotNetWorker (на самом деле он называется по-другому, но для примера пусть будет так). В интерфейсе есть функция примерно такого плана:

  public int CoolFunction(string arg)
  {
    if (arg == "")
    {
      return 1;
    }

    return 0;
  }

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

Разгадка проста. Пустая строчка по какой-то неясной мне причине автоматически преобразуется в null. При попытке сравнить его с пустой строкой вылетает исключение.

Судя по всему, это не новость для тех, кто пишет на .NET. В C# имеется несколько вещей, потенциально пригодных для этого. Например, можно проверить, не является ли строчка пустой, либо null.

  if (string.IsNullOrEmpty(arg))
  {
    return 1;
  }

Или проверить, не является ли строчка null и, если является, задать ей значение по умолчанию.

  string myString = arg ?? "Значение по умолчанию";

Эта конструкция представляет собой аналог тернарного оператора, специально заточенный под проверку на null:

  string myString = (arg != null) ? arg : "Значение по умолчанию";

Вот такая интересная штука.

Music:: Royal Hunt - Stranded
Mood:: подозрительное
morthan2006: (Default)

Давеча спрашивает у меня наш тимлид, как называется такая штука, когда натыкаешься на что-нибудь, чего раньше не знал, и тут оно внезапно активизируется и начинает само везде появляться?

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

Читать далее )
Music:: Канцлер Ги - Da Kapa Preta
Mood:: собранное
morthan2006: (Default)

xxx Еманарот, что за день! короче, срочно смени мне пароль, вот предыдущий...
xxx бля, даже не знаю, как написать...
xxx "пап@#деладошкой"
xxx потом объясню

http://antibash.org.ua/3572#idquote2816121
Я прям сейчас объясню! Потому что у меня был совершенно аналогичный случай.

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

И вот однажды генератор волею случая выдал мне совершенно нецензурно звучащий пароль. Я сначала посмеялся, а потом понял – это как раз то, что надо!

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

Если же позволить пользователю выбирать пароль самому, то он выберет что-то легко запоминающееся. Настолько легко, что дальше некуда. Как-то, когда я работал на «Прогрессе», там вирус на сервере нашли. Начали разбираться, как он туда попал. Я со своей стороны провёл лёгкий аудит безопасности – попробовал подобрать пароли по типовому словарю. И что же? На сервере восемнадцать пользователей, чей пароль состоит только из цифр и, соответственно, подбирается меньше, чем за минуту. Причём один из них с правами администратора. Хотел я ему сказать пару ласковых слов, но выяснилось, что он уже год как уволился. А пользователь остался, и никто его не отследил, не удалил и даже не заблокировал.

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

Во-вторых, если злоумышленник позвонит пользователю по телефону и спросит у него пароль, то пользователь не будет оглашать этот пароль на всю комнату, как это обычно делается. Он даже, скорее всего, не будет говорить его шёпотом. Он скажет: «А давайте я к вам подойду и сам его наберу.»
Music:: Die drei Friseure - Parikmaher
Mood:: ядовитое
morthan2006: (Default)

Q: Is SQLite threadsafe?

A: Threads are evil. Avoid them.

SQLite is threadsafe. We make this concession since many users choose to ignore the advice given in the previous paragraph.

«Часто задаваемые вопросы по SQLite»

Жутко не люблю многопоточность. И полностью согласен с автором SQLite, чьё мнение по этому поводу приведено в эпиграфе. Потоки — зло.

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

Повторюсь, потоки — зло. Но иногда — зло необходимое.

Читать далее )
Mood:: напряжённое
Music:: Кирилл Комаров - Крутотут
morthan2006: (Default)
posted by [personal profile] morthan2006 at 11:03am on 16/05/2014 under ,
Очень сильно ломит кости:
Явно дождь спешит к нам в гости.
Лишь бы только до пяти,
Чтоб домой успеть дойти.
Mood:: мрачное
morthan2006: (Default)
У человека проблема. Ему надо программно выбрать из combobox-а тип изделия. Ну, там, стандартное, деталь, сборочная единица... А оно не выбирается.

Заглядываю в код, и кое-что сразу бросается в глаза: надпись «Сборочная еденица».

У тебя, говорю, сборочная единица написана неправильно.

В смысле?

«Единица» пишется через «и»!

Тут как раз чайник закипел. Иду к чайнику, наливаю кипяток в чашку с заваркой. Возвращаюсь, смотрю в код: исправил или нет?

Исправил. Теперь там написано «Сборочная иденица». Через «и».

Конечно, ошибка оказалась совсем не в орфографии. Но!

Люди! Да что ж вы, сволочи, с собой делаете, а?! Как так вообще можно?
 
Mood:: специфическое
Music:: Тимур Шаов - Шао-дэ-дзин
morthan2006: (Default)
Сейчас конец 2012-го года. Всё просвещённое человечество ожидает конца света, предсказанного календарём майя, а мы вместо этого пишем годовой отчёт. За 2011-й год. По идее, сдать его нужно было ещё летом. Но, как всегда, находились более важные дела.

И вот время настало. Откладывать дальше нет никакой возможности: жребий брошен, Рубикон остался позади, все бросили работу над текущими проектами и занесли пальцы над клавишами. Ведь если отчёт так и не будет написан, то...

А действительно: что случится, если отчёт так и не будет написан? Зачем его пишут, кому он нужен и на что влияет?
Читать далее )
Music:: Onmyouza - Kompeki No Sozin
Mood:: задумчивое
morthan2006: (Default)
Ковыряюсь в OpenSSL и никак не могу понять: в чём же преимущество сертификатов и почему не использовать открытый/закрытый ключ? Или сертификаты нужны только для HTTPS?

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

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

В общем, непонятно, в чём же преимущество сертификатов? Только в возможности выстроить иерархию доверия?
Music:: Adam Skorupa - The Lesser Of Two Evils
Mood:: задумчивое
morthan2006: (Default)
Прихожу на работу и с самого утра обнаруживаю невозможную вещь. Сидит начальник, как всегда со включенными колонками, и увлечённо ковыряется в нашей вики. В принципе я когда-то ему показывал главную страницу и говорил, что он там должен написать вступление, да. Но было это полгода назад, а чего ж его только сегодня пробило на литературную работу?

Впрочем, музыка многое объяснила. Из колонок доносится гениальный репертуар заводского радио. Женский голос неразборчиво, с иностранным акцентом, но воодушевлённо излагает следующее:

...Чамачеччая весна пришла
И крышу нам с тобой снесла
Чумачеччая весна...

Для сбережения мозга сажусь за комп и затыкаю уши своими собственными наушниками. Там привет из молодости, группа «Gain». :-)
Mood:: обалдеть!
Music:: Валерий Гаина - Illusions Never Last

September

SunMonTueWedThuFriSat
          1
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 
9
 
10
 
11
 
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21 22
 
23
 
24
 
25
 
26
 
27
 
28
 
29
 
30