• ↓
  • ↑
  • ⇑
 
Записи с темой: очевидное-невероятное (список заголовков)
23:59 

Крыса серая, сорок копеек

Последние 20 лет жизни мой дедушка был слепым.

Но научился данному трюку я не от него.

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

Боковым зрением-то видно, что лестница начинается, но вот когда и куда надо двигать ногу?

При под'ёме наверх проблем, как правило, не возникает. Можно осторожно вынести перед собой ногу, пока она не упрётся в ступеньку. Потом поднять её на некую высоту, довольно большую, заведомо выше ступеньки. Медленно опуская, определить, какова её высота. Остальные ступеньки, как правило, такие же.

Но что делать при спуске вниз? Шаркнуть ногой. Сразу почувствуется пустота начала спуска.

@темы: Лайфхак, Очевидное-невероятное

22:28 

Почему краткость сестра таланта?

На самом деле, я хотел коротко написать лишь о том, почему писать коротко -- это хорошо.
1. Чем короче текст, тем легче его осилить. И тупым, и умным. Короткие фразы тоже легче воспринимать, чем длинные.
2. Чем длиннее текст, тем больше в нём будет воды. Вода бывает двух видов -- а) полный, как бы, типа, мусор; б) информация полезная, но не по той теме.
3. Чтобы сформулировать мысль понятно, но кратко, нужно как следует подумать. Это развитие речи. И не то, что было в шестом классе. Интеллект тоже развивается. Я надеюсь.

Это, однако, не означает, что любой короткий текст хорош.

@темы: Мысли, Очевидное-невероятное

23:59 

Богатым будет

Поставил на ведроид программу DaffMoon, чтобы следить за фазами Луны по своим эзотерическим делам.

А она ещё показывает планеты с расположением на небе.

Таким образом я узнал, что та яркая звезда, которую я постоянно вижу на небе, это не звезда, а Юпитер!

@темы: Наблюдения, Очевидное-невероятное

23:59 

Лондонский мост упал

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

Но я не понимал, зачем же это на самом деле нужно. Ну да, перерезал -- стало на одну связь меньше, а дальше-то что?

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

@темы: Электроника, Очевидное-невероятное

23:58 

Что посеешь, то и пожмёшь

Одним проектом я не занимался год. Потом открыл. Ох, как всё запущенно.

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

1. У переменных должны быть понятные имена. Это касается не только переменных типа _, asdbsd и Burrrrp (хотя игроку в НетХак последняя будет весьма понятна) -- тут всё ясно. Название может иметь отношение к реальной ситуации, но имеет шанс быть воспринятым неправильно. Так, у меня в программе была переменная по имени need_count. Я долго думал, что это число раз, которые надо (need) посчитать (count) что-то. Однако на самом деле эта переменна обозначало то, НАДО считать (1) или НЕ НАДО (0).

2. Отсюда вытекает второе правило -- тип переменной должен соответствовать её назначению. Переменная из п.1 имела тип int. Хотя гораздо понятнее всё было бы, если бы я сделал её типа _Bool (это было в той части проекта, которая работала на микроконтроллере, а она написана на голом Си-99, поэтому именно _Bool, а не bool). Для МК, это, правда, простительно, т.к. int будет быстрее обрабатываться в ряде случаев.
Примечание. Беззнаковые типы при совместном использовании со знаковыми таят в себе гремучую бомбу: zhz00.diary.ru/p211118163.htm

3. А третье правило -- не следует повторно использовать ту же переменную для других целей. Хотя для переменных типа x, y, i особой разницы нету, сколько раз их использовать. Но повторное использование более специальных переменных часто ведёт к нарушению п.1. То, на чём конкретно напоролся я -- WriteFile возвращает через указатель число записанных байтов. Для этого я использовал переменную с подходящим именем written. Но потом мне надо было читать данные при помощи ReadFile. Как не трудно догадаться, он тоже через указатель возвращает число байтов, но уже прочтённых. Видимо тогда я решил сэкономить четыре байта. Ну вот нафига? Да-да, именно так. Я написал --

ReadFile(hFile,size,&written,NULL);

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

Это я тогда был не в своём уме или так вырос за год, что считаю дикостью то, что сделал своими же руками?

Но кое-от-чего чего я пока избавиться не смог -- так это от применения операции ?: . Очень её люблю, хотя она сильно усложняет чтение текста.

@темы: Программирование, Очевидное-невероятное, Говнокод

23:56 

Untitled [467]

Наконец нашёл применение для зубочистки в Victorinox. Ей можно нажимать на ресет в разных электронных устройствах.

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

@темы: Лайфхак, Очевидное-невероятное

23:59 

О берушах

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

Значит, будет слышно:
1. Если вибрирует телефон, даже если он лежит на столе, а вы -- на диване (стол -- ножка стола -- пол -- диван).
2. Если этажом выше человек с размаху шлёпнулся с дивана на пол.

@темы: Очевидное-невероятное, Наблюдения, Восприятие

23:43 

Фейл-моногатари [06]

Решил надеть новую рубашку. Красную. Распаковал. Надеваю и понимаю, что что-то не то.

На манжетах с обоих сторон дырки, а пуговиц нету! Я подумал, уж не сплю ли я? Сделал проверку реальности. Не сплю. Что же за наркомания такая-то?

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

@темы: Случай из жизни, Очевидное-невероятное, Фейлы

23:59 

Untitled [462]

Никогда не замечал, а тут вдруг обнаружил: можно одновременно пить и дышать.

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

@темы: Наблюдения, Очевидное-невероятное

23:56 

Untitled [440]

По улице ведут собаку. Я на неё смотрю и понимаю, что с ней что-то не так. Она идёт как бы... боком, что ли?

Продолжаю следить и тут понимаю, что собака-то идёт иноходью. Никогда такого вживую не видел.

@темы: Наблюдения, Очевидное-невероятное

23:59 

О тревожности

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

Тут мне рассказали пару историй, я сравнил со своими измерениями и пришёл к простому, но интересному выводу.

ТРЕВОЖНОСТЬ == НЕОПРЕДЕЛЁННОСТЬ (ситуации)

То есть, человек тревожится, когда не знает, что будет, или что есть сейчас. А когда знает -- тревожиться перестаёт.

Окей, не равна, а вызвана. И не во всех случаях.

@темы: Наблюдения, Мысли, Очевидное-невероятное

23:59 

О ребрендинге

Вот тут сникерс празднует 25 лет -- и они сделали специальные обёртки. Вместо "сникерс" на них написано тем же шрифтом "не тормозит", "удивляет" и т.п. И половина упаковки покрашена жёлтым. Может, это только моя заморочка, но теперь я сникерсы... не вижу. Если мне надо их найти, мне приходится сильно напрягаться. Не срабатывает триггер.

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

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

Вспомним ребрендинг BASF. Точнее, смену названия. Они 2 или 3 года публиковали одновременно BASF и EMTEC. Вот при таком подходе ресурс можно не потерять -- или не сильно потерять.

Т.е. ребрендинг:
1. Допустим, если есть переходный период.
2. Следует применять только в самых крайних случаях.
3. Желательно, чтобы в результате логотип и надпись оставались похожими.

В каких случаях ребрендинг является необходимым (кроме смены названия фирмы)?

@темы: Мысли, Очевидное-невероятное

23:59 

Прокси

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

@темы: Лайфхак, Очевидное-невероятное

23:24 

Untitled [372]

Никогда не летал на самолётах, но режим "В самолёте" у телефонов использовал неоднократно. Сейчас он есть, полагаю, у 100% выпускаемых моделей.

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

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

@темы: Лайфхак, Очевидное-невероятное

23:54 

Untitled [370]

Из серии внезапных маленьких открытий.

Уж не являются ли однокоренными глаголы найти (отыскать) и идти (итти, ийти)?

Смотрите:

Нашла коса на камень.
Учёные нашли челябинский метеорит.

@темы: Наблюдения, Очевидное-невероятное

23:53 

Свиноматка

Хуже всего, если баг в программе то проявляется, то нет, по непонятному расписанию.

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

Если вы обнаружили подобный баг, то следует проверить следующее:
1) Что доступ к внешним устройствам есть только у одного потока. Если есть сомнения, следует сделать специальную функцию доступа к нему, которая будет работать через взаимоисключение (т.е. мьютекс, критическая секция и пр.). Весь доступ к устройству должен осуществляться через неё.
2) Что доступ к внутренним ресурсам (особенно, к памяти) размером больше ширины шины данных тоже сделан через взаимоисключения (см. примечание ниже).
3) И, наконец, что вы не применяете многопоточно библиотеки, которые для этого не предназначены. Если предназначены, обычно стоит пометка в документации -- thread-safe. Одна из таких библиотек, которая не предназначена -- VCL (C++ Builder, Delphi). Когда-то я не знал, что она не поддерживает многопоточность и менял, к примеру, надписи на кнопках из разных потоков. Это приводило к совершенно невообразимым глюкам.

Внимание. Примечание к п.2. На некоторых процессорах доступ к невыровненным данным выполняется в несколько тактов. Выровненными считаются данные, расположенные по адресам, равным n*ширина шины данных, где n -- целое неотрицательное число. Т.е. если ваша переменная размером 4 байта расположена по адресу 13, то её считывание на 32-битном процессоре может происходит следующим образом: процессор считывает байты 12-15, сохраняет во временный регистр, потом 16-19, сохраняет в другой регистр, сдвигает 12-15 влево на 8 бит, записывает старшие 24 бита в старшие 24 бита целевого регистра, потом сдгвигает 16-19 вправо на 24 бита, записывает младшие 8 бит в младшие 8 бит целевого регистра. Данный алгоритм является примером, фактическая реализация может быть иной. За это время потоки могли переключиться уже несколько раз. Будьте осторожны. Если же адрес переменной изначально был 12, то всё проходит в 1 такт.

@темы: Очевидное-невероятное, Программирование

23:50 

О сколько же открытий чудных

В связи с историей про трубу, стал читать Википедию про разные виды резьб. Ну, резьба M -- это всем известно, метрическая. В детстве у меня был металлический конструктор, поэтому я с 6 лет знаю, что такое M3 и M4.

Резьба G -- трубная, дюймовая. Поскольку мы собирали водопровод, про неё я тоже знаю. Трубы у нас с резьбой G 1/2 (внутренний диаметр трубы -- пол-дюйма).

Так, постойте-постойте. А это что такое? Резьба E? Эдисона круглая?.. Применяется в электропатронах... Что-то знакомое. E27.

Да. Именно. Я давно знал, что стандартные лампочки называются E27. И ещё есть E14. Самые распространённые. Но я думал, что это просто обозначение названия цоколя. А это -- название ЕГО РЕЗЬБЫ. Резьба на лампочке E27 -- это E27.

@темы: Очевидное-невероятное

23:52 

Бегут неуклюжи

Многолетний опыт показывает: если на земле (на полу) есть лужа -- или даже небольшие подтёки -- и вы заведомо не знаете, что она является результатом дождя, либо уже законченной деятельности живых существ, то эту лужу надо обойти. Хотя соблазн по ней прошлёпать (особенно в мощных ботинках) велик (да, обычно так маленькие дети делают... но кто я, по вашему?).

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

Особенно вероятно такое в случае луж в помещениях и рядом со стенами домов.

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

@темы: Очевидное-невероятное, Лайфхак

23:36 

Untitled [360]

О том, почему плохо применять одну и ту же переменную для двух разных задач.

Была одна процедура (процедура в смысле "логическое действие, которое должна выполнять программа", а не в смысле "функция в терминах языка программирования, которая не возвращает значения") и она имела, допустим, три режима:

#define MODE1 1
#define MODE2 2
#define MODE3 3

А у каждого из режимов было два подрежима:

#define MODE1A 1
#define MODE2A 2
#define MODE3A 3
#define MODE1B 4
#define MODE2B 5
#define MODE3B 6

И была переменная, которая хранила ОБА этих режима.

int nMode;

СНАЧАЛА там хранился общий режим и процедура работала с его использованием. Но, на определённом этапе (которой пришлось долго вычислять, т.к. процедура длинная) та же переменная начинала хранить уже ПОДРЕЖИМ. При этом диагностику затрудняло то, что числовые значения констант частично совпадали.

Не надо так.

P.S. Предвижу вопрос "Почему не сделали сразу просто хранение подрежимов, а на режимы бы просто не забили?". На самом деле режимов не три, а больше. А число подрежимов у каждого режима -- своё. На определённом этапе ветвление осуществляется по коду режима, а по коду подрежима -- потом. Поэтому разделение на "режим" и "подрежим" логично. Что нелогично -- так это одна переменная и под то и под другое. И что очень плохо -- что замена режима на подрежим происходила при вызове определённой функции ВНУТРИ неё, при этом замена производилась по ссылке:

void non_suspicious_name(int a, int b, int &mode)
{
mode=0;//...или что-нибудь ещё
}
//в другой функции
non_suspicious_name(val1,val2,nMode);
// теперь тут уже не режим, а подрежим

Это аргумент в пользу того, чтобы не использовать ссылки, а только указатели.

@темы: Говнокод, Очевидное-невероятное, Программирование

23:56 

Алкоголь в крови

Иду по улице -- вижу люди из ТЦ выходят с тележками полными бутылок. Реально тележки до краёв забиты. У кого не тележки -- несут авоськи с бутылками. Бутылки торчат из карманов. Всё алкоголь. Думаю -- что такое?

А в этом ТЦ, оказывается, супермаркет закрывался на ремонт и об'явил распродажу алкоголя со скидкой (около 50%). И люди стали покупать алкоголь в нереально больших количествах (что любопытно само по себе).

А за день до этого была распродажа всего остального.

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

@темы: Наблюдения, Мысли, Очевидное-невероятное

Untitled

главная