Imperial Orchestra — большой симфонический оркестр, организатор шоу саундтреков: Cinema Medley, Hans Zimmer’s Universe и др.
Афиша и билеты на сайтах: cinemamedley.ru www.hanszimmer.ru imperialhall.spb.ru
Last updated 1 day, 13 hours ago
Send your beautiful menfess about the beauty world right here, Beauties! <3
On Duty: Close.
KRITIK & SARAN: @.Ghiaabot (BUKAN BOT SEND PERTANYAAN!)
Partnership: @.TheBeautyBaseBot @TBBPS
Banned: @BannedTBB
Rants: @BeautyRants
Sub—Unit: @Kitchenfess
Last updated 3 days, 15 hours ago
Самый большой SALE года. Последний месяц скидок.
Интернет-магазин: only-me.ru
Чат для заказа: @onlymeconsultant
ВКонтакте: vk.com/wearonlyme
Last updated 2 months, 3 weeks ago
Пересидели React; надо найти еще немного сил пересидеть горячку с Go
В какой-то момент, примерно с Windows 98 или ME, MS забросила приложение, вместо него предложив MS Schedule+, который шел в пакете с MS Office и даже мог импортировать старые карточки, правда, из-за измененного формата Unicode делал это неправильно. Правда, это приложение страдало от проблемы 2000 (на самом деле), и MS, зная о проблеме, не стали его переделывать, а забросили, в качестве альтернативы с 97 года продвигая использование контактной книги из MS Mail и Outlook (Express) с новыми крутыми вещами, типа поддержки лунных календарей и настройки автоматического уничтожения старых записей (YOUTHINKIMFUCKINGWITHYOU? IMNOTFUCKINGWITHYOU! https://microsoft.fandom.com/wiki/Microsoft_Outlook#Outlook_2002). Стоит ли уточнять, что альтернативой это можно назвать с огромной натяжкой? Так, мы лишились одной из программ, помогающей наладить и систематизировать нетворкинг, вместо него получив невротическую "контактную книгу". Кто в здравом уме и по своей воле заглядывает в контактную книгу Outlook?
Ладно, MS есть MS, от него ничего хорошего не жди. А что у Apple?
У Apple история еще интереснее. Понимая важность инструмента, Apple выпустили свой вариант под названием HyperCard, также бесплатно встраивая его в саму ОС. Однако, Apple шагнули еще дальше, и добавили к карточкам возможность привязать скрипты, элементы ввода кнопки, так что прямо в картотеке можно было организовать разнообразный мультимедиа-калейдоскоп. Кроме того, специальные карточки с преднаписанными скриптами, который могли быть добавлены в "ежедневник", оборудовали картотеку возможностью запрашивать данные из БД, читать устройства, расставлять сеть гиперссылок в карточках - этакое программирование без программирования. У "настоящих программистов" из Oracle настолько бомбануло, что они резко выпустили свой бесславный мультимедиа-аналог - Oracle Card - который спустя непродолжительное время был так же резко заброшен (https://en.wikipedia.org/wiki/Oracle_Media_Objects).
В общем, с одной стороны, Apple сделали всё, чтобы покрыть запросы максимально широкие, а с другой - превратить картотеку в инструмент программиста, этакий Powerpoint, который, как известно, рак любого серьезного дела. Ну а далее всё пошло по накатанной: в Mac OS X эту программу не пустили, так что многие современные пользователи и не знают, что она была.
Одни последовательно выбивали ноги из-под табурета вашего личного нетворкинга, другие сделали всё, чтобы вы делали "креатив & программирование", а не выстраивали отношения.
А вы ведете Ролодекс? Или для вас нетворкинг это синоним "заёбывать малознакомых людей приглашением на чашку кофе?"
Telegraph
Об Ролодекс
Что вы знаете про Ролодекс? Кто-то из читателей услышит это слово в первый раз, кто-то встречался ранее. Ролодекс это название определенной вещи, ставшее потом нарицательным. Вещь эта - персональный менеджер информации, PIM или CRM, и в до-компьютерную эру…
Об искусственный интеллект
Понадобилось давеча мигрировать со старого телефона на новый. Для этого надо было в т.ч. перенести eSIM. Для этого я открыл чат поддержки в приложении сотового оператора, задал туда вопрос "как перенести eSIM", получил инструкцию и начал выполнять по шагам.
По шагам я сначала удалил с телефона старую eSIM, а потом запросил ссылку на активацию новой, и её - тадам - оператор послал на номер этой eSIM, о чём мне и написал.
После недолгого выяснения оказалось, что инструкцию мне нагаллюцинировал и прислал ИИ чат-бот. Работает ли она? Ха-ха, конечно же нет
Спустя два дня переговоров с оператором и такой-то матери ссылку удалось исправить и переотправить.
Будующее такое яркое..
Об эти выходные
Говорят, что верблюд это скаковая лошадь, которую дизайнил комитет.
В языке Ада, точнее, в стандартной библиотеке, существует важная часть, которую дизайнят вот совсем комитетом - это embedded для bare bone boards. Ограниченные ресурсы разных платформ каждая по-своему отсекает те или иные воможности языка, где-то и строки в heap это перебор, а где-то -- исключения. Поэтому тот самый комитет для embedded постарался собрать общий знаменатель, который бы одинаково хорошо подходил под усредненные задачи. Этот знаменатель называется "профили", и он описывает, что можно, а что нельзя из языка использовать на данной платформе.
Раньше эти профили назывались креативно, например, zero-footprint, Ravenscar, Jorvik, с недавнего времени чуть более скучно: embedded, light, light-tasking, но всё равно комитет не может угадать с запросами для всех - одним нужно что-то типа turbopascal на микроконтроллере, другому -- полновесный рантайм с задачами (потоками). Собственно, потоки и коммуникация между ними это одна самых сложных задач в смысле жырности потребного рантайма.
Ну а там, где подходящего профиля нет, а реализовывать весь профиль неохота, приходится закатить рукава и писать с нуля каждый раз. Один из таких повторно пригодных легковесных рантаймов, но с поддержкой задач/потоков и целиком на Ada, начал писать Вадим https://github.com/godunko, а я взялся портировать её на доску STM32F4 DISCO, которая была под рукой, потому как она достаточно популярная.
Это был мой первый опыт работы с crates в Alire в таком объеме, поэтому времени потрачено было больше, чем нужно, однако всё завелось, светодиод (из примеров) замигал успешно. В целом могу сказать, что ARM Cortex-M и Ада прямо-таки созданы друг для друга. Минимальный рантайм, который инициализирует ядро и периферию + код с планировщиком, где одна задача зажигает диод, а вторая его гасит, занял в прошивке около 2кб.
В итоге я отправил пулл-реквесты, а Вадим их принял, так что в коллекцию добавилась поддержка DISCO. Код можно увидеть тут (это планировщик и те самые примеры) и тут (это рантайм + инициализации). Отдельно в Alire довелось отправить issue по обнаруженному расхождению в поведениях для удаленных и локальных репозиториев.
У самого Вадима основная плата это Cortex-M3, на ней он строит шестинога, подкрепляя обратную кинематику расчетами в Octave.
GitHub
GitHub - godunko/a0b-tasking: A0B Tasking on ARMv7-M
A0B Tasking on ARMv7-M. Contribute to godunko/a0b-tasking development by creating an account on GitHub.
Об подсветку кода
Лично я использую монохромную подсветку кода (чёрное — тёмно-серое — серое на белом), но не в этом суть, а вот в чём — я нахожу даже самую тупую и простую подсветку полезной. Но не в том смысле, в котором вы подумали, а в обратном, вот в каком.
Сейчас будет заход издалека.
Мое мнение, что сложную прикладную задачу надо решать через построение базиса/API, при помощи которого в дальнейшем и выражается вся тело программы. Обычно этот базис называют “ядром” или “моделью предметной области/прикладной моделью”
В большинстве языков такой базис реализуют на основе функций/методов, а вовсе не операторов языка.
А в самых простых “расцвечивателях” используется именно раскраска ключевых слов. И в этом весь трюк.
Если такую подсветку конструкций языка сделать ярко выделяющейся в тексте, то градация яркости кода очень хорошо показывает, где именно разработчик не в том месте решил “срезать угол” и использовал слишком низкоуровневый код в виде ключевых слов языка, а не прикладную модель. В это месте код будет насыщен ключевыми словами, а цвет его будет "ярким"
И чем сильнее и ярче раскрашен код, тем более пристального внимания требует, потому что подозревается в недостаточном уровне абстракции, что впоследствии с большой вероятностью потребует дорогостоящего исправления или переписывания.
А больше я подсветку ни для чего и не использую.
Об Аду на контроллере и загрузку в память
Кто-то, проделав упражнения из предыдущего поста, мог втянуться в разработку и отладку. И первое, с чем вы столкнетесь при отладке - с тем, что после пересборки прошивки необходимо еще записать её на flash. Но, во-первых, с ростом размера прошивки это замедляется, во-вторых, flash изнашивается. На помощь приходит возможность ядра Cortex M4 исполнять код прямо из встроенной в чип static RAM (1). Особенность данного ядра в том, что адресное пространство SRAM находится не там же, где ROM, поэтому линковать программу надо по другому адресу.
Правда, при выключении платы программа пропадет, но во время отладки нас такое устраивает, главное, не сбрасывать питание. Кроме этого, процессор сам не сможет загрузиться, поэтому после пуска надо будет его тормозить, и загружать отладчиком в него программу.
ПРИЕМЛЕМО.
1. Итак, первое, что надо сделать, это собрать программу с поддержкой запуска из SRAM. Для этого достаточно передать ключ вот так:
alr build -XLOADER=RAM
Линкер выдаст предупреждение, что обнаружил секцию данных, которая содержит исполнимый код; игнорируем. А вот bin мы готовить не будем, грузить будем прямо из elf-файла, он уже содержит всю информацию о правильных адресах.
2. На борту у stm32-discovery 1Мб Flash и всего 192кб SRAM, из неё часть придется потратить под программу, поэтому нужно ещё и следить за оптимизацией кода, и за тем, чтобы не случилось переполнения памяти. Мы собираемся оптимизировать код, а также посмотреть, что там с запасом по памяти. Для этого надо немного доработать файл disco1.gpr следующим образом:
package Linker is
for Default_Switches ("Ada") use (
"-Wl,--gc-sections",
"-Wl,--print-memory-usage");
end Linker;
Теперь, если собрать приложение командой выше, мы увидим следующий текст:
Memory region Used Size Region Size %age Used
flash: 0 GB 1 MB 0.00%
sram12: 25272 B 128 KB 19.28%
ccm: 0 GB 64 KB 0.00%
Обратите внимание, теперь мы не будем перетирать флэш каждый раз (flash used = 0)
3. Теперь запустим наш OpenOCD так же, как мы делали раньше, но сбросим и остановим процессор:
openocd -f board/stm32f4discovery.cfg -c "init; reset halt; arm semihosting enable;"
4. Как я и говорил, грузить будем дебаггером. Для этого в соседней консоли запустим вот какую команду.
alr exec -- arm-eabi-gdb bin/disco1 -ex 'target extended-remote localhost:3333' -ex 'load'
Отладчик загрузит прошивку, остановится на первой команде. В этой консоли надо набрать команду "cont", и переключиться на консоль OpenOCD. Если всё сделано верно, можно увидеть сообщения от исполняющейся программы, как и в предыдущей серии.
--
Итого, теперь при перекомпиляции и заливке flash-память мы не будем трогать, код будет работать из встроенной RAM кристалла. А когда понадобится опять подготовить прошивку для flash, нужно будет указать ключ -XLOADER=ROM или удалить его вовсе из строки.
(1) То, что исполнение из SRAM может быть медленнее, чем из Flash, удивительно для десктопа, но вполне нормально для некоторых чипов с эффективной подкачкой кода.
Извращенцы могут подсоединиться gdb на порт 3333 для удаленной отладки, а мы не будем, а просто понаблюдаем окно. Если всё сделано правильно, то лампочки замигают, а мы увидим, что каждую секунду туда валится текст Hello:
Info : Listening on port 3333 for gdb connections
semihosting is enabled
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : device id = 0x100f6413
Info : flash size = 1024 kbytes
Info : flash size = 512 bytes
Hello
Hello
Hello
Hello
Hello
Hello
Hello
..
Поздравляю, у вас всё получилось. Если нет, пишите в комментарии, будем разбираться.
Ниже я положу архив с более продвинутой программой, в ней будет 2 параллельно работающих задачи, одна будет просыпаться и выводить текст, а вторая - модифицировать данные для этого текста. Обратите внимание, как просто написать на Аде многопоточную программу с честным планировщиком задач для голого микроконтроллера, не задумываясь о RTOS и прочих таких вещах.
Об Аду снова
Продолжим серию? В прошлый раз мы с вами освоили азы, как настроить инструменты и скомпилировать простейший "хелловорлд". На компьютере должны были появиться Alire c нативным тулкитом и VS Code с настроенными для Ады плагинами. Всё это нам понадобится.
Сегодня мы пойдем в embedded и попробуем скомпилировать Аду для baremetal платы на базе STM32, на мой взгляд, именно тут Ада сильна.
Что нам для этого нам понадобится, я напишу ниже.
Нужно раздобыть плату STM32. Я буду работать с STM32 DISCOVERY на базе камня F407 с частотой 168MHz, чего и вам рекомендую, хотя и не заставляю. На плате распаяно много чего, но нам интересно, что на ней на самом деле стоит 2 чипа STM32, второй при этом прикидывается программатором ST-LINK, flash-диском, а также USB-2-Serial конвертором и еще много чем. Это СИЛЬНО упрощает знакомство с темой, усложнить всегда успеется.
Провод x-2-minuUSB (!) - это тот конец, который соединяется с программатором.
Нужно внимательно почитать т.н. GNAT Supplement for Cross platform крайней версии, раздел Bareboards: https://docs.adacore.com/live/wave/gnat_ugx/pdf/gnat_ugx/gnat_ugx.pdf
Нужно установить софт-отладчик OpenOCD, это замена проприетарных тулов для работы с ST-LINK. Я ставил через brew, у меня всё получилось. Вот вроде бы и всё, можно работать.
Пусть наш новый проект называется "disco1".
1. Итак, первым шагом надо научить GNAT компилировать под ARM. Для этого надо запустить alr вот таким образом: alr toolchain --select, и в списке выбрать что-то типа "6. gnat_arm_elf=12.2.1". GPRBuild оставляем самым свежим.
2. Далее нужно выполнить alr init --bin disco1, после чего перейти в свежую папку disco1. Alire сгенерировал нам новый проект, спасибо ему. Но он пока не знает, что мы хотим компилировать под ARM на голом железе, надо его научить. Нужно открыть файл disco1.gpr и добавить туда такие строки (про целевую архитектуру и рантайм):
for Target use "arm-eabi";
for Runtime ("Ada") use "light-tasking-stm32f4";
3. Alire сгенерировал нам пустой проект. Откроем основной файл disco1.adb и заменим текст на такой вот незамысловатый привет:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;
procedure Disco1 is
begin
loop
Put_Line ("Hello");
delay until Clock + Milliseconds (1000);
end loop;
end Disco1;
Закроем файл и запустим alr build. Немного пошуршав, он оставит нам в папке bin elf-файлик. Теперь нам нужно получить из него прошивку.
4. Воспользуемся инструментами, которые принес нам Alire, и дадим такую команду:
alr -v exec -- arm-eabi-objcopy -O binary --strip-all bin/disco1 bin/firmware
В папке bin появится файл firmware, который хоть сейчас шей! Было бы куда..
5. Достаем плату и подключаем её к USB, компьютер должен её опознать. Как именно это делать, посмотрите в вашей ОС, что-то типа lsusb или IOReg, факт в том, что нужно увидеть что-то похожее на STMicroelectronics, подключенное к компьютеру -- это победа
6. Если всё сделано правильно, у вас в системе появится флеш-диск с названием ST_F407 или что-то похожее. Там не должно быть файлов с именем Fail. Если всё ок, то нужно просто скопировать на этот "диск" файл прошивки firmware, полученный на 4-м шаге. Программатор увидит это, прошьет его в процессор, и перезапустит, флеш-диск перемонтируется и прошивка с него пропадет. Рекомендую переткнуть провод USB на этом моменте.
7. Теперь подключимся к программе. Надо выполнить: openocd -f board/stm32f4discovery.cfg -c "init; arm semihosting enable"
Тут обратите внимание на 2 важные вещи:
• OpenOCD знает про плату DISCOVERY, что упрощает жизнь еще немного
• После инициализации надо выполнить команду запуска semihosting; это хитрые регистры процессора STM32, которые позволяют обмениваться с программой данными без того, чтобы настраивать UART или другую периферию. В чем плюс? Наш рантайм Ады заворачивает стандартный ввод-вывод на эти регистры, а OpenOCD умеет их читать.
Imperial Orchestra — большой симфонический оркестр, организатор шоу саундтреков: Cinema Medley, Hans Zimmer’s Universe и др.
Афиша и билеты на сайтах: cinemamedley.ru www.hanszimmer.ru imperialhall.spb.ru
Last updated 1 day, 13 hours ago
Send your beautiful menfess about the beauty world right here, Beauties! <3
On Duty: Close.
KRITIK & SARAN: @.Ghiaabot (BUKAN BOT SEND PERTANYAAN!)
Partnership: @.TheBeautyBaseBot @TBBPS
Banned: @BannedTBB
Rants: @BeautyRants
Sub—Unit: @Kitchenfess
Last updated 3 days, 15 hours ago
Самый большой SALE года. Последний месяц скидок.
Интернет-магазин: only-me.ru
Чат для заказа: @onlymeconsultant
ВКонтакте: vk.com/wearonlyme
Last updated 2 months, 3 weeks ago