Блог «Цезарионии»

Ярлык с относительным путём в Windows 7

Идея в том, что можно сделать ярлык с вызовом командной строки из папки ярлыка. А уже из неё запустить приложение по относительному пути.

Для начала хотим создадать ярлык для запуска файла text.txt из текущей папки. Для отладки запускаем в ней командную строку.
cmd /c text.txt — то, что надо (/c — исполнить команду и выйти).
Создаём ярлык:
Target=%windir%\system32\cmd.exe /c text.txt
Start in=(пусто)

14 июля  

Непредсказуемое поведение в многозадачных операционных системах

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

И вот даже в этой простейшей последовательности может произойти сбой, если операционная система что-то сделает между этими событиями.

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

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

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

А вот операционная система — казалось бы, программная основа, «скелет» компьютера; то, что должно быть образцом качества для других программ — вот именно это прежде всего и вносит непредсказуемость.

Типичная ситуация: я делаю что-то, и программа задумывается на некоторое время. Большее, чем я готов ждать. Это может быть загрузка «тяжёлой» веб-страницы; установка программы; открытие файла незапущенной «тяжёлой» программой («Офис», «Фотошоп», «Вижуал студия»); копирование — что угодно. Важно, что я не хочу ждать, и переключаюсь на другую программу. Делаю что-то в ней... А потом первая программа захватывает фокус! Да даже если я это вовремя заметил, то какое она имела право отвлекать меня? Ей что, мало мигания в панели задач? А если я не заметил вовремя, и, например, нажал «Enter», не успев прочитать, то я даже не знаю, к каким действиям это может привести. Хорошо, если просто закрытие сообщения об окончании установки. Или если можно нажать Ctrl+z. А если я согласился с перезагрузкой?

И, главное, непонятно, как с этим жить. Внимательно изучать экран перед каждым нажатием каждой клавиши? Скорость работы упадёт. Использовать компьютер в «однозадачном» режиме? Так его для этого ещё настроить надо! Ведь помимо явно запущенных программ есть ещё куча всякого в автозагрузке, что может проявить себя лишь когда найдёт обновления.

Но есть во всём этом хотя бы одна вещь, на которую я могу повлиять: не использовать многодокументные программы, которые закрываются с закрытием последнего документа. Например, веб-браузер «Гугл хром».

Дело вот в чём: открыто у меня куча документов. Они мне больше не нужны. Можно закрыть окно целиком. И в следующий раз они откроются снова (на самом деле нет: как раз «Хром» откроет пустую вкладку; но, если мне надо вернуться, достаточно нажать Ctrl+Shift+T). Чтобы такого не было, я закрываю документы по одному. Естественно, клавиатурой: мышка для ламеров. Естественно, не много раз нажимая Ctrl+W или Ctrl+F4, а зажав один раз, пока всё не закроется.

И тут 2 варианта: хорошие приложения закроют все вкладки, но не закроются сами. А плохие закроются. Фокус перейдёт на другую программу. И команды закрытия будут передаваться ей! Непредсказуемое поведение! В данном случае непредсказуемость состоит в том, что я не знаю, сколько именно времени надо первой программе, чтобы закрыться. Если бы знал, можно было бы именно в этот момент попытаться отпустить клавиатуру.

7 июля  

Спам «Кукурузы»

Банковская карта «Кукуруза» постоянно шлёт спам. Ссылка «отписаться» не работает, жал уже раз 10. Папка «спам» в почте — не выход: не люблю, когда там есть непрочитанные сообщения.

В самом письме помимо «отписаться» предлагают написать в техподдержку. Жму ссылку и попадаю на сайт «Евросети»! Почему письмо «Кукурузы» приводит в «Евросеть»? Ну да, они родственники, но ведь у каждого свой сайт. И что, мне писать в техподдержку «Евросети», чтобы они отписали меня от спама «Кукурузы»? Написать всегда успею, а пока поразбираюсь ещё.

Какой у меня пароль от «Евросети»? Никакого, я там не зарегистрирован! «Восстановить пароль» по этой же причине не работает (и даже не сообщает, что я не зарегистрирован).

А какая у меня почта в «Кукурузе»? Другая, не та, на которую идёт спам! Вообще, почты как таковой в «Кукурузе» нет. Логин — штрих-код карты. Есть почта, на которую присылать ответ техподдержки, но её можно менять. И, раз она не совпадаёт, изучаем интерфейс дальше... «Меню»→«Подать заявление»: «Необходимо перейти в старый кабинет».

Сколько лет назад они переписали личный кабинет? Год? Два? Я уже забыл, что старый вообще существовал, а они до сих пор не доделали новый! Переходим.

Красота-то какая! И ведь всё равно веб-два-нольненько, но гораздо приятнее нового. Надо бы осмотреться... «Ещё»→«Уведомления». Вот оно! Та самая почта, на которую приходит спам! И поставлен флажок! И его можно снять! Только сначала эту почту надо активировать.

Активировал. Снял. Если через месяц эта запись не будет обновлена, значит, я о ней забыл, потому что спам приходить перестал.

Обновление 07.07.2017: нет, не перестал. Зато предложили сменить пароль. Так что теперь я зарегистрирован в «Евросети» (при этом она знала полностью ФИО и номер карты, но не номер телефона и дату рождения, и эти данные я так и не ввёл). Так что ещё раз пробую отписаться.

Обновление 13.07.2017: и снова не перестал. А что, если сначала подписаться? И указать в личном кабинете телефон, а то он красным светится? А после этого отписаться?

Обновление 20.07.2017: и снова не перестал. Написал через форму обратной связи, ссылка на которую содержится в каждом письме (http://euroset.ru/novosibirsk/feedback/).

6 июля  

= и ==

В «Паскале» «=» — это сравнение, а присваивание — это «:=». «Паскаль» я изучал в школе и первом семестре университета. Во втором «Паскаль» сменился на «Си». В «Си» «=» — это присваивание, а сравнение — это «==».

Сначала я часто ошибался: писал if (a = 5) вместо if (a == 5).

Потом мне посоветовали, и я стал писать if (5 == a): если по ошибке поставить присваивание, получим ошибку времени компиляции.

Прошло десять лет. Я иногда программирую, но в целом не работаю программистом. Месяцами не смотрю на код ни на каком языке. И теперь конструкция if (5 == a) кажется мне безумно некрасивой; теперь я всегда пишу if (a == 5) и, что самое интересное, никогда не ошибаюсь.

А студентам теперь уже я советую if (5 == a).

Не помню, как я отношусь к «ПХП» с его «===» (сравнение с учётом типа). Давно не писал на нём.

6 июля  

Русские не читают инструкций

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

Всегда считал это глупостью (в лучшем случае — несмешной шуткой). И лишь сейчас, в 29 лет, я осознал рациональную сторону такого поведения.

Инструкция на водонагреватель «Polaris» «Aqua»: «просверлите отверстия под анкерные болты диаметром 12 мм и глубиной 80 мм ... При установке анкерных болтов должны быть задействованы все точки крепления, предусмотренные конструкцией водонагревателя. Не допускается подвеска прибора на два анкерных болта, если конструкцией предусмотрены четыре точки крепления». Конструкцией предусмотрены 4 точки крепления. В комплекте 2 анкера. Диаметром 16 мм.

«Введите сумму, кратную 500 рублям. Максимум 300 рублей за операцию». Ввожу 10 000. Получаю 10 тысячных банкнот.

30 июня  

«Эгея»

Версия 3118

Запись можно вернуть в черновики (жать на «корзину»), а потом восстановить, включая комментарии. Но время публикации будет новое, как будто раньше ничего не было.

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

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

Посмотрим, осталась ли проблема с РСС (многократный приход одного и того же).

Версия 2858

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

Есть сохранение по Ctrl+S, хорошо.

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

Идентефикатором для РСС является адрес заметки. Поэтому при изменении содержания или времени РСС не перезагрузит заметку. А при редактировании адреса продублирует и не поймёт, что она уже была. Все старые адреса движок запоминает, делает перенаправление на последний. При попытке использовать занятый адрес (в том числе при создании новой записи) сам редактирует. Неплохо.

23 июня   блог   эгея

Список записей в блоге

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

23 июня  

Подключение мобильного кондиционера

Правило 1: если есть хоть малейшая возможность — откажитесь от мобильного кондиционера! Лучше всего система кондиционирования, объединённая с системой вентиляции; неплохой вариант — сплит-система (формально в Новосибирске нужно разрешение, чтобы повесить внешний блок на фасад; фактически по состоянию на 2017 год мне известны многократные случаи самовольной установки и неизвестно о последствиях). Мобильный кондиционер — это шумно, очень шумно по сравнению даже с сильным вентилятором. А мобильность вступает в противоречие с эффективностью: чтобы добиться паспортного охлаждения, придётся так хорошо уплотнить все места соединений и теплоизолировать трубу, что прибор станет стационарным. Конечно, на зиму можно всё разобрать. Но вот «включили в розетку, кинули трубу в форточку или щель балконной двери» — это неправда. Если охлаждать вообще и будет, то весьма неэффективно.

Итак, есть Electrolux EACM-15 CL/N3 Loft, диаметр воздуховода 125 мм. Есть подоконник. Есть отверстие в окне. Прошлым летом на этом же месте стоял другой мобильный кондиционер. Что может быть проще?

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

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

Заменил пластиковую трубу на гибкую алюминиевую, чтобы развязать кондиционер от окна. Обмотал скотчем с армирующей сеткой. Красота! Не дует, не дребезжит. Красота продолжалась менее суток. Температура воздуха — более 60 °Ц. Клей расплавился.

Дал скотчу второй шанс, только другому — алюминиевому. Он, вроде, как раз для герметизации вентиляции используется. Результат прежний.

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

Результат: шуба — хорошо, скотч — плохо. И тут я вспомнил о том, что полиэтилен не только теплоизолирует, но и гасит вибрацию! Значит, можно придвинуть кондиционер вплотную к окну, чтобы уголок был зажат. Работает, вроде.

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

22 июня  

Назад в «Оперу»

Много лет моим веб-браузером была «Опера». После прекращения разработки 12-й версии перешёл на «Хром». Недавно прочитал, что новая «Опера», наконец, стала более-менее. Просто ради интереса пытаюсь перейти на неё.

+

Работает выделение текста внутри ссылки. Правда, в целом выделение работает не так хорошо, как в старой «Опере». Но по сравнению с «Хромом» это очень хорошо.
Работают кое-какие хромовские расширения.
Все закладки, куки, пароли можно импортировать из «Хрома». Из других браузеров не тестировал.
Окно не закрывается при закрытии всех вкладок.
Можно выбрать порядок смены вкладок как в старой «Опере». А можно как в «Хроме». Но хотелось бы переключаться побыстрее.
Назад по Ctrl+←, как в старой «Опере».
Некоторые сайты корректнее сохраняются в PDF из диалога печати.
Встроенная РСС-читалка. Как в старой «Опере»: добавить поток можно через знчок в адресной строке (парсится тег link rel=«alternate» type=«application/rss+xml»). Есть оповещение о новых сообщениях. При этом список подписок синхронизируется (в старой «Опере» читалка была локальная).

Тормозит и ест память, как «Хром».
Эта ваша хвалёная турба что-то не особо работает. Вот «Фригейт» не подводит.
Расширения сами не устанавливаются, надо на каждой копии браузера вручную.
Встроенная РСС-читалка абсолютно бесполезна: сообщения не делятся на прочитанные/непрочитанные, длинные показываются не полностью, не поддерживается никакое форматирование текста. Я уж молчу о более тонких настройках, таких как интервал проверки. Нельзя даже скопировать адрес потока, хотя он отображается по ховеру, то есть даже в качестве списка подписок читалка бесполезна. Ну, если всё, что вам нужно от читалки — видеть все обновления подряд, чтобы перейти по каждому, не читая в самой читалке, то вас она устроит.

Мои настройки (версия 46)

+ Синхронизация. Выбрать всё.
− Все закладки с экспресс-панели (Ctrl+Shift+B, Speed Dial, Ctrl+A, Delete).
Настройки (Alt+P): ЛНУ: показывать дополнительные/Show advanced settings.
Основные/Basic:
Блокировка рекламы: включить все списки (из языковых достаточно для русского языка), обновить.
Папка загрузки.
− Фоновые рисунки.
Управление боковой панелью: включить всё (если позволяет высота экрана). Войти.
Браузер:
Поиск — «Яндекс»
В первый раз можно импортировать закладки-настройки (из «Хрома» импортируются даже пароли!).
Язык интерфейса — английский UK.
− показывать предпросмотр вкладок.
− жесты мышью.
+ Показывать доступные источники новостей в адресной строке (это они так РСС обозвали).
Возможно, отключить переключение вкладок в порядке просмотра.
Сайты — хорошо.
Приватность и безопасность — хорошо.

Расширения

Расширения «Хрома».
Расширения «Оперы».
Многие расширения нужно включить через (Ctrl+Shift+E).
Download Chrome Extension — это нужно, чтобы устанавливать из магазина «Хрома».
«Где посылка?». Уведомления отключить на сайте.
«Почта» из «Элементов „Яндекса“». Настройки: убрать оповещения о новых (но не убирать количество новых в самом значке).
InoReader Companion.
«Google Hangouts». Но оно умеет только показывать входящие сообщения в виде всплывающих окон и число новых сообщений в своём значке, причём для этого браузер должен быть запущен. Оперное расширение «Messenger for Google™ Hangouts» ставить не надо, так как его функционал сводится к открытию сайта https://hangouts.google.com/. Итак, чтобы полноценно пользоваться «Хэнгаутсом»: 1) держим браузер открытым; 2) создаём закладку на сайт; 3) ставим официальное приложение, чтобы сразу видеть новые сообщения. Если вам не нужны новые сообщения, достаточно только закладки.

16 июня  

Atmel AVR 8-bit: пишем бутлоадер

Это пока ещё черновик, но всё равно уже публикую, вдруг кому-то пригодится.

Эта запись — конспект того, как делал я.

Задача: написать бутлоадер для ATmega16, занимающий 512 слов. Микроконтроллер соединяется с компьютером через USART, есть возможность выполнить сброс, сигнал break при нормальной работе не используется, миллисекундная задержка при включении неважна.

Решение: при включении питания управление передаётся на бутлоадер (BOOTRST = 0). После выполнения всяких инициализаций (портов) он читает ножку Rx. Если там отсутствует break более определённого времени, управление передаётся основной программе (jmp 0). Если присутствует, ждём снятия и переходим к циклу общения с компьютером по USART...

Соответственно, извне это выглядит следующим образом: если хотим шить, нужно подать на USART break и перезагрузить прибор (включить питание или замкнуть ножку /RESET на землю). Если же break не подавать, то всё влияние бутлоадера проявляется лишь в том, что после сброса требуется дополнительное время (для человека пренебрежимо малое) на запуск устройства. И, ясное дело, в том, что основная прошивка должна быть короче, чем вся флешка.

Реализованы следующие команды:

  • Пинг
  • Запись страницы из адресного пространства основной программы (сам бутлоадер перезаписать нельзя — защита от дурака)
  • Чтение любой страницы
  • Сброс (передача управления основной программе — jmp 0)

Кроме того, по выделенному адресу расположена 64-байтная строка — версия бутлоадера. Компьютер может достать её с помощью команды чтения страницы.

Настройки Atmel Studio 7.0:
Проект C exe.
Toolchain
Optimization = None
Memory settings (в словах):
.text=начало секции бутлоадера (в соответствии с фьюз-битами)
.version=в конце секции бутлоадера, чтобы вместилась соответствующая строка
Device ...

Для ATmega32(A):
.text=0x3e00
.version=0x3fe0

Для ATmega16(A):
.text=0x1e00
.version=0x1fe0

В обоих случаях весь бутлоадер занимает 512 слов, а версия — 64 байта.

В целом проект написан на Си, но именно функции, связанные с чтением/записью страниц, — на ассемблере.

Для компьютера было написано 2 разных прошивальщика: на Java 6 (консольная программа) и на LabWindows/CVI 2013 (GUI).

На этом пока всё...

7 июня  
Ctrl + ↓ Ранее