Вот это в натуре крутая штука: αcτµαlly pδrταblε εxεcµταblε (APE). Чувишка написала либу для C, с помощью которой можно сделать кроссплатформенный бинарь. Ну то есть в натуре кроссплатформенный: ничего не надо перекомпилировать, никакой виртуальной машины в нём нет. Просто берёшь и запускаешь, и оно работает и в линуксе, и в винде, и в макоси. Хеллоу ворлд весит 16 КБ.
А ещё этот бинарь по совместительству может быть zip-архивом, в который можно заэмбеддить сорцы бинаря, например 🤯 How cool is that‽ ) С таким раскладом хеллоу ворлд становится 256 КБ, но это всё равно очень мало по современным меркам.
Короче, впечатляюще весьма. Почитайте.
А ещё этот бинарь по совместительству может быть zip-архивом, в который можно заэмбеддить сорцы бинаря, например 🤯 How cool is that‽ ) С таким раскладом хеллоу ворлд становится 256 КБ, но это всё равно очень мало по современным меркам.
Короче, впечатляюще весьма. Почитайте.
GitHub
GitHub - jart/cosmopolitan: build-once run-anywhere c library
build-once run-anywhere c library. Contribute to jart/cosmopolitan development by creating an account on GitHub.
👍1
SOL Talks
После выходных в самый раз написать про отдых. В Германии есть такая тема: в воскресенье нихрена не работает. Ну, кроме музеев разве что. Магазины закрыты все, дела не порешать и т.д. Сначала это сильно бесит, особенно после Украины, где можно и в три часа…
Раз уж сегодня в Германии выходной, а вчера я вообще впервые проскипал что-то написать, то сегодня кратко напишу (снова) про отдых: традиционно для себя — с точки зрения программиста и менеджера. Подписчиков у меня мало, но вдруг хоть кому-то будет полезным.
С программированием и отдыхом в общем-то всё просто в теории, но это сложно принять и начать использовать. Сколько раз я ловил себя на мысли «ну сча точно уже скомпилится, и хватит на сегодня» часа в три ночи — не сосчитать. И сидел до рассвета по итогу. Основная причина тут контекст, конечно, точнее боязнь его на следующий день потерять, а с ним и т.н. «состояние потока», дай бог Чиксентмихайи здоровьечка.
Ответственно заявляю, что это всё херня. Мозг устаёт достаточно быстро, но незаметно. Опыт показал, что программировать 2–3–4 часа в день, а потом просто забивать и заниматься своими делами или не заниматься ничем, гораздо продуктивнее, чем, тупя в экран, пытаться родить следующую строку кода после десятичасового «марафона». Меня последнее неизменно приводит к микровыгоранию, когда после работы в таком режиме в течение двух — трёх недель долгое время не хочется открывать редактор вообще, а то и комп включать.
Короче, лучше мало, но регулярно.
С программированием и отдыхом в общем-то всё просто в теории, но это сложно принять и начать использовать. Сколько раз я ловил себя на мысли «ну сча точно уже скомпилится, и хватит на сегодня» часа в три ночи — не сосчитать. И сидел до рассвета по итогу. Основная причина тут контекст, конечно, точнее боязнь его на следующий день потерять, а с ним и т.н. «состояние потока», дай бог Чиксентмихайи здоровьечка.
Ответственно заявляю, что это всё херня. Мозг устаёт достаточно быстро, но незаметно. Опыт показал, что программировать 2–3–4 часа в день, а потом просто забивать и заниматься своими делами или не заниматься ничем, гораздо продуктивнее, чем, тупя в экран, пытаться родить следующую строку кода после десятичасового «марафона». Меня последнее неизменно приводит к микровыгоранию, когда после работы в таком режиме в течение двух — трёх недель долгое время не хочется открывать редактор вообще, а то и комп включать.
Короче, лучше мало, но регулярно.
❤1
SOL Talks
Раз уж сегодня в Германии выходной, а вчера я вообще впервые проскипал что-то написать, то сегодня кратко напишу (снова) про отдых: традиционно для себя — с точки зрения программиста и менеджера. Подписчиков у меня мало, но вдруг хоть кому-то будет полезным.…
С менеджментом всё гораздо сложнее, особенно в самом начале при переходе от чисто инженерной должности в даже частично управленческую. Всё дело в том, что руководители, которые вас промоутят, часто забывают упомянуть, что задач теперь будет на порядок больше, чем физически можно успеть.
Вчера вы были программистом с понятным скоупом, и вы знали, что если его сделать, то это хорошо, а если не сделать, то плохо. Теперь вы стали менеджером, задач стало больше, и вы всё так же думаете, что если вы не сделаете их все, то работу свою вы «не тянете». Это несомненно заблуждение! Но пока вы будете идти сначала к осознанию этого, а потом к поиску и оттачиванию скиллов для решения типа приоретизации, тайм-менеджмента, делегирования и т.д., есть огромный шанс, что из-за накопленного стресса вы просто решите, что менеджмент — это не для вас.
Подробнее о причинах и средствах решения я черкану в следующий раз, а сейчас у меня один простой, но важный совет: закончили рабочий день — не думайте о работе. Обучение этому незаменимосу навыку занимает некоторое время, но вместе с очевидным рабочим днём в рамках 8 часов максимум это даёт поразительный результат.
Для справки: возможно, вам знакомо состояние, когда вы сильно воодушевлены своими задачами, постоянно думаете о работе, делаете всё с бо́льшим энтузиазмом, нежели обычно, забили на ранее привычные активности (хобби, игры, спорт, прогулки) в пользу работы и т.д. Да-да, это приносит удовольствие и тешит мыслями «наконец-то я нашёл работу по душе!». Так вот, поздравляю, это первая стадия эмоционального выгорания. Первый звоночек 🛎️, так сказать.
Вчера вы были программистом с понятным скоупом, и вы знали, что если его сделать, то это хорошо, а если не сделать, то плохо. Теперь вы стали менеджером, задач стало больше, и вы всё так же думаете, что если вы не сделаете их все, то работу свою вы «не тянете». Это несомненно заблуждение! Но пока вы будете идти сначала к осознанию этого, а потом к поиску и оттачиванию скиллов для решения типа приоретизации, тайм-менеджмента, делегирования и т.д., есть огромный шанс, что из-за накопленного стресса вы просто решите, что менеджмент — это не для вас.
Подробнее о причинах и средствах решения я черкану в следующий раз, а сейчас у меня один простой, но важный совет: закончили рабочий день — не думайте о работе. Обучение этому незаменимосу навыку занимает некоторое время, но вместе с очевидным рабочим днём в рамках 8 часов максимум это даёт поразительный результат.
Для справки: возможно, вам знакомо состояние, когда вы сильно воодушевлены своими задачами, постоянно думаете о работе, делаете всё с бо́льшим энтузиазмом, нежели обычно, забили на ранее привычные активности (хобби, игры, спорт, прогулки) в пользу работы и т.д. Да-да, это приносит удовольствие и тешит мыслями «наконец-то я нашёл работу по душе!». Так вот, поздравляю, это первая стадия эмоционального выгорания. Первый звоночек 🛎️, так сказать.
Я большой поклонник устройств с экранами на электронных чернилах. У меня даже есть три читалки от PocketBook. Да-да, многие говорят, мол, нах надо, если есть лопатофон/айпад, но я не понимаю, как можно всерьёз сравнивать экран, выедающий глаза, с экраном, который выглядит практически как бумага.
Большой проблемой технологии долгое время оставался refresh rate — очень уж медленно картинка обновлялась. И не то чтобы это невозможно было решить. Просто компания E-ink занимала монопольное положение на рынке благодаря патентам, поэтому в отсутствие конкуренции прогресс стоял на месте.
Изредка, впрочем, появлялись технологии типа IMOD-экранов Mirasol с нормальным рефреш-рейтом и даже какими-то цветами благодаря использованию подхода, похожего на структуру крыла бабочки, некоторые из которых, как известно, не имеют пигмента, а выглядят цветными чисто благодаря преломлению света в чешуйках. Mirasol, правда, был куплен Qualcomm, и последний их ныне, кажется, похоронил. По крайней мере в консьюмерских девайсах я их не вижу.
Но и сроки патентов E-ink, судя по всему, подошли к концу, потому что то и дело появляются новые компании, желающие оторвать кусок залежавшегося пирога.
Например, китайская компания Dasung долго тизерила монитор на основе электронных чернил и наконец вышла на Indiegogo. Это просто пушка, я считаю! Код на таком писать наверное збс. И рефреш-рейт приемлемый.
Да, 2k денег за 25''-монитор — как-то дохуевато, канеш. Нопридётся брать™ может в будущем появятся более доступные варианты.
Большой проблемой технологии долгое время оставался refresh rate — очень уж медленно картинка обновлялась. И не то чтобы это невозможно было решить. Просто компания E-ink занимала монопольное положение на рынке благодаря патентам, поэтому в отсутствие конкуренции прогресс стоял на месте.
Изредка, впрочем, появлялись технологии типа IMOD-экранов Mirasol с нормальным рефреш-рейтом и даже какими-то цветами благодаря использованию подхода, похожего на структуру крыла бабочки, некоторые из которых, как известно, не имеют пигмента, а выглядят цветными чисто благодаря преломлению света в чешуйках. Mirasol, правда, был куплен Qualcomm, и последний их ныне, кажется, похоронил. По крайней мере в консьюмерских девайсах я их не вижу.
Но и сроки патентов E-ink, судя по всему, подошли к концу, потому что то и дело появляются новые компании, желающие оторвать кусок залежавшегося пирога.
Например, китайская компания Dasung долго тизерила монитор на основе электронных чернил и наконец вышла на Indiegogo. Это просто пушка, я считаю! Код на таком писать наверное збс. И рефреш-рейт приемлемый.
Да, 2k денег за 25''-монитор — как-то дохуевато, канеш. Но
Indiegogo
Paperlike 253: The First 25.3 inch E-ink Monitor
The World Largest E-ink Monitor. 3K HD. Display Like Real Paper. Protect Your Eyes. Unprecedented!
Пока все пишут в основном про электромобили, меня больше интересуют электромотоциклы (или электроциклы?). Ну, просто потому что мотоцикл — это вообще прикольно. Но с электро, конечно, пока что не очень зашло у индустрии.
Во-первых, есть LiveWire от Harley-Davidson. У этой конторы и так дела не оч в последнее время, а покупать сомнительной эстетики мот за 30к — тем более выбор энтузиастов. Это, судя по всему, не последняя модель, потому что недавно они анонсировали создание одноименного суббренда.
Во-вторых, есть Zero Motorcycles. У них ассортимент побольше, вид более привычный, цена доступнее и характеристики норм. Но как-то уныленько всё равно.
Есть ещё какие-то китайские нонеймы. Есть скутеры и прочие SuperSoco, но их в расчёт не берём — они маленькие и скучные.
Основной проблемой, само собой, является батарея. Yamaha, Honda, Piaggio и KTM даже в консорциум объединились, чтобы создать единый стандарт сменных батарей для мотоциклов. Это позволит не сёрбать три часа кофеёк на станции зарядки, а просто сменить аккум и поехать дальше.
И недавно Husqvarna, которая ныне принадлежит тому же KTM, к этому консорциуму присоединилась, а заодно и представила концепт электробайка E-Pilen! Чем мне нравится Husqvarna, так это дизайном. У конторы очень длинная история в мотоциклостроении, а последние их модели выглядят как офигительная комбинация классических форм в футуристичном стиле. Я даже в натуре рассматривал Vitpilen 701 для покупки, но дашборд там ублюдочный, портит весь вид.
Посмотрим, конечно, что из всего этого получится. Я бы не прочь пересесть на электро, но пока что и с ДВС норм 😅
Во-первых, есть LiveWire от Harley-Davidson. У этой конторы и так дела не оч в последнее время, а покупать сомнительной эстетики мот за 30к — тем более выбор энтузиастов. Это, судя по всему, не последняя модель, потому что недавно они анонсировали создание одноименного суббренда.
Во-вторых, есть Zero Motorcycles. У них ассортимент побольше, вид более привычный, цена доступнее и характеристики норм. Но как-то уныленько всё равно.
Есть ещё какие-то китайские нонеймы. Есть скутеры и прочие SuperSoco, но их в расчёт не берём — они маленькие и скучные.
Основной проблемой, само собой, является батарея. Yamaha, Honda, Piaggio и KTM даже в консорциум объединились, чтобы создать единый стандарт сменных батарей для мотоциклов. Это позволит не сёрбать три часа кофеёк на станции зарядки, а просто сменить аккум и поехать дальше.
И недавно Husqvarna, которая ныне принадлежит тому же KTM, к этому консорциуму присоединилась, а заодно и представила концепт электробайка E-Pilen! Чем мне нравится Husqvarna, так это дизайном. У конторы очень длинная история в мотоциклостроении, а последние их модели выглядят как офигительная комбинация классических форм в футуристичном стиле. Я даже в натуре рассматривал Vitpilen 701 для покупки, но дашборд там ублюдочный, портит весь вид.
Посмотрим, конечно, что из всего этого получится. Я бы не прочь пересесть на электро, но пока что и с ДВС норм 😅
И собсно концепт электрического E-Pilen. Очень похож на ДВС-собрата. Офигенский дизайн, я считаю!
А, да, проблемка только в том, что в нём 10 л.с. и 100 км рейндж 😂😂😂 Вообще не серьёзно.
С другой стороны, Хонда тоже с маленьких и слабых мотоциклов начинала больше чем полвека назад, и посмотрите, где она сейчас. Я думаю, это достаточно правильный и менее рискованный подход для завоевания рынка.
А, да, проблемка только в том, что в нём 10 л.с. и 100 км рейндж 😂😂😂 Вообще не серьёзно.
С другой стороны, Хонда тоже с маленьких и слабых мотоциклов начинала больше чем полвека назад, и посмотрите, где она сейчас. Я думаю, это достаточно правильный и менее рискованный подход для завоевания рынка.
MSVC теперь фичер-комплит в плане поддержки C++20. Надо поиграться с модулями что ли.
Microsoft News
Visual Studio 2019 v16.10 and v16.11 Preview 1 are Available Today!
We are excited to announce the release of Visual Studio 2019 v16.10 GA and v16.11 preview 1. This release makes our theme of developer productivity and convenience Generally Available to Visual Studio users! We’ve added C++20 features, improved Git integration…
Forwarded from VW Tooltips & works
https://www.nextptr.com/
Классный блог по С++, много современных штук обозревает
Классный блог по С++, много современных штук обозревает
Все современные [десктопные] операционки базируются на вещах, придуманных более чем полвека назад. И в основном это, конечно, хороший фундамент — умели тогда люди подумать наперёд. Но как же бесит тема с переменными окружения — терпеть их не могу!
Чаще всего приходится сталкиваться с ними при настройке среды разработки (не обязательно IDE: даже если у вас пакован мутных скриптов и утилит — это всё ещё среда разработки, пусть и не «интегрированная»). Но бывают кейсы и в прикладном использовании.
Во-первых, эти переменные глобальные. Это как хорошо, так и плохо, но чаще последнее. Всё дело в том, что переменные окружения могут клэшиться: для одной проги вам переменную нужно выставить в какое-то значение, а для другой наоборот снять. Это, конечно, решается разными сессиями, но сильно ухудшает UX: теперь нужно помнить, что какая утилита ожидает, и работать в «правильном» энвайрменте. И если для консольного барахла терпимо ещё хоть как-то — всё равно терминал запускать — то для UI-ного говно полное. Чтобы мне запустить прогу православным дабл-кликом с выставленной в определённое значение переменной окружения, нужно городить какой-то колхоз с ярлыком на скрипт, ставить ему симпатичную иконку и т.д. Или есть способ проще?
Во-вторых, что собсно есть «правильное» окружение? Узнать это не представляется возможности ровно никак, кроме чтения документации к проге. Причём документация может быть устаревшая.
В-третьих, все переменные окружения хранят по сути только текст, поэтому если вам нужно впихнуть туда какие-то более структурированные данные, то начинается изобретение формата, где каждый думает, что его формат пижже.
Вместо всего этого можно было бы просто сделать нормальные конфиг-файлы. Да хоть тот же JSON. Это решает третью проблему с ходу. Как решить вторую? Ну, при дистрибуции программ, полагающихся на конфиг, есть два подхода: давать пустой конфиг и описывать возможные флаги в доках, что полный ебланизм, конечно, либо давать максимально полный конфиг, который содержит в себе всё, что можно менять, с установленными дефолтами. Во втором случае уже не выйдет просто забыть его проапдейтить, как документацию, потому что работать-то не будет.
Как решить конфигами первую проблему? Всё-таки, если у меня 100 прог, и каждой нужно прописать одну и ту же переменную окружения, я сейчас это делаю один раз. Хотелось бы эту фичу сохранить. Ну, можно решить это скоупами, как некоторые уже делают. Их должно быть как минимум три: системный (вероятно, рид-онли), юзерский, где можно что-то заоверрайдить, и «локальный», который можно положить в любую папку и поменять для всего, что вы запускаете из неё.
Тут важный момент: часто делают так, что глобальный конфиг максимально полный, а юзерский/локальный, где вы собсно что-то переопределяете, пустой. Это супернеудобно. Я бы юзерский/локальный делал полной копией глобального, чтоб было видно, что вообще можно менять, но для тех переменных, которые не хочется оверрайдить, ставил бы какой-то
Прежде чем вы мне начнёте рассказывать, что это всё можно делать и сейчас, я подчеркну, что хотел бы именно системную поддержку этого добра: с консольным, графическим и программным интерфейсами.
Теперь пара примеров моего использования переменных окружения:
Я задеплоил телеграм-бота на Heroku. Естественно, я не могу в конфиге, который туда положил, указать некоторые вещи по типу всяких токенов и credentials. Но можно в админке хероку это передавать через криптованные переменные окружения. Могла ли бы хероку делать то же с конфиг-файлами? Вообще изи: просто генерить для моего контейнера глобальный конфиг точно так же, и вуаля.
Второй пример: есть у меня две проги для редактирования видео от разных производителей. И обе на Qt, судя по dll-кам. В винде у меня стоит 125% масштаб, потому что экран небольшой, но резолюшн высокий. Так вот одна прога рисует UI в 100%-масштабе, а вторая в 200%-масштабе. Это потому что с HiDPI в Qt-приложениях никто (кроме меня 😎) нормально работать не научился, даже сами кьютишники. Ну хоть переменными окружения можно зарешать.
Такое кароч.
Чаще всего приходится сталкиваться с ними при настройке среды разработки (не обязательно IDE: даже если у вас пакован мутных скриптов и утилит — это всё ещё среда разработки, пусть и не «интегрированная»). Но бывают кейсы и в прикладном использовании.
Во-первых, эти переменные глобальные. Это как хорошо, так и плохо, но чаще последнее. Всё дело в том, что переменные окружения могут клэшиться: для одной проги вам переменную нужно выставить в какое-то значение, а для другой наоборот снять. Это, конечно, решается разными сессиями, но сильно ухудшает UX: теперь нужно помнить, что какая утилита ожидает, и работать в «правильном» энвайрменте. И если для консольного барахла терпимо ещё хоть как-то — всё равно терминал запускать — то для UI-ного говно полное. Чтобы мне запустить прогу православным дабл-кликом с выставленной в определённое значение переменной окружения, нужно городить какой-то колхоз с ярлыком на скрипт, ставить ему симпатичную иконку и т.д. Или есть способ проще?
Во-вторых, что собсно есть «правильное» окружение? Узнать это не представляется возможности ровно никак, кроме чтения документации к проге. Причём документация может быть устаревшая.
В-третьих, все переменные окружения хранят по сути только текст, поэтому если вам нужно впихнуть туда какие-то более структурированные данные, то начинается изобретение формата, где каждый думает, что его формат пижже.
Вместо всего этого можно было бы просто сделать нормальные конфиг-файлы. Да хоть тот же JSON. Это решает третью проблему с ходу. Как решить вторую? Ну, при дистрибуции программ, полагающихся на конфиг, есть два подхода: давать пустой конфиг и описывать возможные флаги в доках, что полный ебланизм, конечно, либо давать максимально полный конфиг, который содержит в себе всё, что можно менять, с установленными дефолтами. Во втором случае уже не выйдет просто забыть его проапдейтить, как документацию, потому что работать-то не будет.
Как решить конфигами первую проблему? Всё-таки, если у меня 100 прог, и каждой нужно прописать одну и ту же переменную окружения, я сейчас это делаю один раз. Хотелось бы эту фичу сохранить. Ну, можно решить это скоупами, как некоторые уже делают. Их должно быть как минимум три: системный (вероятно, рид-онли), юзерский, где можно что-то заоверрайдить, и «локальный», который можно положить в любую папку и поменять для всего, что вы запускаете из неё.
Тут важный момент: часто делают так, что глобальный конфиг максимально полный, а юзерский/локальный, где вы собсно что-то переопределяете, пустой. Это супернеудобно. Я бы юзерский/локальный делал полной копией глобального, чтоб было видно, что вообще можно менять, но для тех переменных, которые не хочется оверрайдить, ставил бы какой-то
inherit или типа того.Прежде чем вы мне начнёте рассказывать, что это всё можно делать и сейчас, я подчеркну, что хотел бы именно системную поддержку этого добра: с консольным, графическим и программным интерфейсами.
Теперь пара примеров моего использования переменных окружения:
Я задеплоил телеграм-бота на Heroku. Естественно, я не могу в конфиге, который туда положил, указать некоторые вещи по типу всяких токенов и credentials. Но можно в админке хероку это передавать через криптованные переменные окружения. Могла ли бы хероку делать то же с конфиг-файлами? Вообще изи: просто генерить для моего контейнера глобальный конфиг точно так же, и вуаля.
Второй пример: есть у меня две проги для редактирования видео от разных производителей. И обе на Qt, судя по dll-кам. В винде у меня стоит 125% масштаб, потому что экран небольшой, но резолюшн высокий. Так вот одна прога рисует UI в 100%-масштабе, а вторая в 200%-масштабе. Это потому что с HiDPI в Qt-приложениях никто (кроме меня 😎) нормально работать не научился, даже сами кьютишники. Ну хоть переменными окружения можно зарешать.
Такое кароч.