Блоги smile)
Кто без настроения?
Я сейчас тогда начну
Супер-выступление!
Я хочу, чтоб ты быстрей
Просто улыбнулся,
Чтобы к жизни, наконец
Радостной вернулся!
******
Ночь. Улица. Фонарь под глазом
Неясный излучает свет.
А дома ждут – жена-зараза
И.. мать ее!.. исхода нет.
Придешь – начнут опять сначала,
И повторится все, как встарь:
Вновь черпаком куда попало,
Аптечка, йод, второй фонарь
***
О, директор, ты могуч,
Ты гоняешь стаи туч
Заставляешь и в субботу
Выходить нас на работу.
Аль откажешь мне в ответе?
Не видал ли где на свете
Ты зарплаты годовой?
Я ищу ее …
- Постой, есть на севере гора,
В ней глубокая нора,
В той норе на трех канатах
Гроб качается из злата.
В том гробу твоя ЗАРПЛАТА
***
В песочнице дети друг с другом делились,
Кто как и откуда на свет появились.
Виталик со Славиком мямлили грустно,
Что их отыскали на грядке с капустой.
Наташка (откуда взялась?) на вопрос,
Похвасталась важно,что аист принёс.
Но самой крутой стала девочка Света,
Которую папа скачал с интернета
smile)
Это кто повесил нос?Кто без настроения?Я сейчас тогда начнуСупер-выступление!Я хочу, чтоб ты быстрейПросто улыбнулся,Чтобы к жизни, наконецРадостной [...] читать описание
2304
Блоги smile)
Ты мне уже постылым стал!
Как можно столько раз на дню
Лезть в душу белую мою!
Меня уж от тебя тошнит...
Обжора, гад и троглодит!
Обвешай зеркалом меня,
Почаще видеть чтоб себя:
Как отвисает целлюлит,
Как брюхо у тебя торчит,
Щеками уши заслонились,
И зубы от еды сточились,
И вены от натуги вспухли...
Валика, ты, дружок из кухни!
Хоть на денёк меня забудь
Возьми велосипед - и в путь!!
*****
О диете
Перешла сегодня Света
На французскую диету:
Раз в день кекс, и пять раз - секс.
Вот такой деликатес.
Быстро к делу приступила:
Новое белье купила,
Кексик съела, и в кровать –
«Милый, надо жир сгонять!»
Я сгонял, признаюсь честно,
Хоть мне не досталось кекса:
Но за совесть, не за страх
Целый день трудился, ах.
Раз, и два, ещё, и снова…
Мне бы мяса, право слово…
А она пихает в бок:
«Ну, ещё один разок!»
Я бы рад, да силы нету.
Вот бы с хлебушком котлету,
Рюмку красного вина
Осушить сейчас до дна.
Говорю: «Французы, Света,
Перед тем, как делать «это»,
Лишних слов не говоря,
Устриц лупят почём зря.»
А она: «Так ты ж, поганец,
Не француз, не иностранец!
Гречку жрёшь невпроворот.
Ну, давай ещё заход!»
Помогите, ради Бога,
Я едва таскаю ноги:
От диеты от такой
Чуть дышу, едва живой.
Сладко с Зиной было летом.
На фиг я приехал к Свете?
Мучает меня мигрень.
Вот те, чёртик, Юрьев день
smile)
Хозяин, ты меня достал!Ты мне уже постылым стал!Как можно столько раз на днюЛезть в душу белую мою!Меня уж от тебя тошнит...Обжора, гад и троглодит!Обвешай [...] читать описание
1761
Блоги Virtuos86
Посему я принял нелегкое решение продолжать откапывать стюардессу (вы же знаете этот анекдот?) и писать в свой тутошный бложик. Время творить историю.
P.S. Здешние блоги тоже так себе, и весьма, но что поделать.
Virtuos86
Я с недавних пор начал изучать язык программирования Rust. Хотелось завести отдельный блог для того, чтобы описывать свои злоключения (а их [...] читать описание
2229
Блоги Virtuos86
Юмор в том, что \"i32\" это знаковый тип с диапазоном значений от -128 до 127, а индексы в Rust должны быть исключительно положительными. Когда я осознал эту нелепость, я сначала перевел переменные-индексы на использование типа \"u32\", беззнаковых 32-х битных целых. Но здесь вступает другой нюанс. Rust для операции индексации использует значения типа \"usize\". Этот тип платформозависим: на 32-х битных ОС он является аналогом типа \"u32\", на 64-х битных — аналогом типа \"u64\". Это логично, давать возможность использовать максимально большое число для индексации. Rust в операции индексации не приводит автоматически индексы к типу \"usize\", поэтому нужно это делать вручную, что выглядит как:
let v = vec!;
println!(\"{}\", v);
Примечание: если в качестве индекса используется числовой литерал без указания типа, то Rust скомпилирует код, но для его корректности тип литерала выведется как \"usize\", хотя, как я уже отметил выше, по дефолту числовые литералы без указания типа относятся к типу \"i32\":
fn main() {
let index = 1; // при компиляции эта строка будет, условно говоря заменена на \"let index: usize = 1\" или \"let index = 1usize\"
let item = vec!;
println!(\"{:?}\", item);
}
В результате мой код пестрел \"as usize\"-ами. Заменил \"u32\" на \"usize\", стало хорошо. Ну и да, подозреваю, что используй я \"Clippy\", инструмент проверяющий Rust код на наличие \"вредных привычек\" и глупостей, он вероятно обратил бы мое внимание на этот факт.
Virtuos86
Как для скриптокодера для меня многое в диковинку в практике программирования на ЯП со статической типизацией. Так меня осенило как-то, что [...] читать описание
2506
Блоги Virtuos86
Я на время оставил Rust и погрузился в таинство создания Web Extensions под новые версии Firefox. Как известно (мне), Mozilla собралась закопать XUL и старого Файерфокса скоро не станет. Вместе с этим перестанут работать тонны аддонов, которыми, собственно, и был славен этот браузер. Кто-то уже приготовился закапывать "лису", прогнозируя потерю пользовательской базы, но проблема в том, что адекватной замены старым возможностям кастомизируемости среди других популярных браузеров нет, поэтому и бежать особо некуда. Я же бегать не люблю и уже имею в своем активе 2 простеньких (по возможностям, а не по усилиям затраченным на их написание и особенно отладку) дополнения, и одно портированное с Chrome дополнение, которое добавляет определенные приятности в UX. Все эти дополнения предназначены для работы на сайте linux.org.ru, LOR, "информационного ресурса об операционной системе Linux в России".
Что я могу сказать о своих впечатлениях?
Во-первых, оказалось, что когда всю жизнь пишешь синхронный последовательный код, отслеживать и представлять мысленно логику потока исполнения программы, сталкиваясь с асинхронным кодом, не то, чтобы трудно, но приходится ломать шаблоны алгоритмического мышления. Я лично наломал столько шаблонов, что ого-го! Го.
Во-вторых, документация на https://developer.mozilla.org/en-US/Add-ons/WebExtensions достаточно хороша, но некоторые нюансы приходится постигать пошастав по коллекции готовых дополнений, https://github.com/mdn/webextensions-examples (вот она действительно хороша), а некоторые и вовсе после несколькичасового б(з)дения над вроде как рабочим кодом (ну вот, всё по документации делаю, даже код только скопировал и чуть-чуть изменил, что надо-то, а?!). Тем не менее, что хотел, то сделал, а значит я молодец делать дела с Web Extension API можно. Кстати, благодаря тому, что Chrome также поддерживает Web Extension API, как и Opera (строго говоря, в документации для многого прямо указано, что это скопировано с Chrome API), если у вас есть на примете дополнения с Хрома, которые вы бы хотели перетащить в Огнелис, то вероятно это вполне осуществимая затея.
Virtuos86
Я на время оставил Rust и погрузился в таинство создания Web Extensions под новые версии Firefox. Как известно (мне), Mozilla собралась закопать XUL и старого [...] читать описание
2477
Блоги Virtuos86
Вторым же и куда более неприятным затруднением явилась регрессия, наметившаяся в кодовой базе. А если просто, по пацаночке, то игра стала падать при определенных действиях. А значит, надо дебажить.
В общем, долго ли, коротко, а несколько дней назад я открыл проект, окинул горделивым взором килобайты вершины погромистской деятельности своей, потом переключился в "полуночный командир", которым я по недоразумению пользуюсь как файловым менеджером на линуксе, запустил свою игрулю и убедился, что она падает столь же исправно.
Погрустив с минутку, я было ринулся расставлять println'ы aka отладочную печать, а потом подумал, что было бы неплохо использовать такую штуку из Python мира, как декораторы, для облегчения своей доли. То бишь повесил на нужную функцию декоратор, реализующий отладочную печать, скажем, при установленном флаге "DEBUG = true;" при вызове обернутой им функции, и всё, не надо добавлять строчки с принтами, а потом их удалять, когда будут не нужны. К тому же Rust это язык со статической типизацией, а значит, можно сделать так, чтобы декораторы навешивались при включенном флаге отладки во время компилирования, то есть с минимальным оверхедом.
Ребят, если бы я знал, в какую жопу лезу, я бы передумал. Вот я отвечаю.
Но, но, но. Я всё-таки это сделал и сделал, надеюсь хорошо. Поэтому горд неимоверно. И ничего страшного, что на Python декораторы реализуются за 5 минут, просто потому что они уже фактически доступны искаропки, благодаря возможностям языка, а я потратил 5 дней, сражаясь аки лев с конпелятором Rust, и исписав двести строк программного кода (в основном там разбор AST определения функции).
Конечно, пока реализованы не все возможности питоньих декораторов, например, декораторы с добавочными аргументами или декораторы структур и типажей (хотя тут подозреваю, я надорвусь, если возьмусь делать). Но основа: взять функцию и подменить ее обёрткой, — сделана, и этим можно пользоваться. А вот и ссылка на репозиторий: https://github.com/Virtuos86/rust-decorators
А теперь можно и приступить к отладке "рогалика". О боже, дай мне сил…
Virtuos86
У меня наметилась лишняя неделя безработицы недавно, поэтому устав пялиться в Веб 2.0, я внезапно вспомнил, что программист. Открыл проект [...] читать описание
2895
Блоги Virtuos86
Я пишу код на Rust, используя некогда хипстерский редактор Sublime Text, в данный момент плавно переполз на 3-ю версию со 2-ой. Теперь на звание хипстерских поделок претендуют поделки на базе Electron типа VSCode и Atom, а юзеры "саблайма" благополучно перешли в разряд степенных, не бегущих за меняющейся модой серьезных людей .
Работать с Rust кодом помогает плагин `Rust Enhanced`. Помимо надоедливой проверки корректности кода, которая поглощает мои нервные клетки с аппетитом голодной гиены — потому что я обычный быдлокодер, а Rust — очень сложный для нашей братии, — так вот, помимо этого плагин предоставляет несколько режимов для сборки готового кода, от обычной компиляции до запуска тестов/бенчмарков/сборки документации/приготовления кофе/и чего-то ещё.
Но! Но я столкнулся с тем, что при неудачной сборке получаю слишком мало деталей и подробностей. По счастью, `rustc` очень дружелюбный и посоветовал мне использовать ключ `--verbose` для сборки.
Вывод ясен — нужен свой сборочный сценарий. Сказано — сделано.
Выбираем в панели меню пункт `Tools`. Далее `Build System` -> `New Build System...`
Открывается новая вкладка редактора с заготовкой:
{
"shell_cmd": "make"
}
Изменяем на:
{
"shell_cmd": "RUST_BACKTRACE=1 cargo run --verbose"
}
Дальше сохраняем:
Теперь идем по знакомому пути `Tools` -> `Build System` и выбираем свою систему сборки вместо `RustEnhanced`. Теперь в случае проблемной компиляции можно будет увидеть необходимые подробности.
Спасибо за внимание.
Virtuos86
Здравствуйте. Я пишу код на Rust, используя некогда хипстерский редактор Sublime Text, в данный момент плавно переполз на 3-ю версию со 2-ой. Теперь [...] читать описание
3266
Вот. Одна беда — мне надо для ST3, а для него темы это целые пакеты с ресурсами, а здесь можно скачать только голый XML-документ. Зато реально [...] читать описание
2643
