• person rss_feed

    nerdfella’s feed

    Blog

    • chevron_right

      Рыгата имени Сухаили

      nerdfella · Sunday, 30 April, 2023 - 06:51

    Тут на днях выявилась победительница одной известной регаты. Мои поздравления Кирстен Нойшафер. Но поговорить я хочу не о Кирстен, а о её судне, точнее о тех судах, которые в гонке участия не приняли. И даже шире: о еврошовинизме, который не позволил допустить до соревнований суда других конструкций. Traditional hawaiian double canoe Итак, первое правило еврошовиниста: не признавать наличие еврошовинизма, не признавать себя еврошовинистом. Европа -- главная часть мира, европейская история -- главная история, европейские традиции -- главные традиции, традиции европейского судостроения самые лучшие. Ну ведь правда, это же европейцы колонизировали остальной мир, это же европейскую историю мы проходим в школе. Мы, европейцы, у себя дома в школе проходим европейскую историю, вот неожиданность. Это ведь европейские мореплаватели открыли острова Тихого океана, да? Открыли-то открыли, но острова-то к тому времени были обитаемы, там уже жили местные аборигены. И попали они туда вовсе не на европейских барках и каравеллах. Задолго до европейцев, за много сотен лет, не имея компаса, качественной древесины, месторождений железа, льна и хлопка, на долблёнках из пальмы с лиановыми верёвками, с парусами из тростниковой циновки полинезийцы, меланезийцы и прочие плавали по всему Тихому и Индийскому океану, торговали, воевали. Так при чём же здесь судно Нойшафер? Дело в том, что гонка в которой она победила называется Golden Globe Race -- так же как и знаменитая регата 1968-1969 годов. Вот только под знакомым названием скрывается совершенно другое соревнование. Оригинальная гонка не была еврошонистической, в ней могли принять участи любые парусные суда, вообще любые. Нынешнюю гонку справедливо было бы назвать Suhaili Race, даже в правилах там указано, что это мероприятие дань памяти той лодке, которая победила когда-то в 1969 году, и поэтому к участию допускают только лишь лодки аналогичной конструкции. В оригинальной GGR было два тримарана, оба быстрые, но оба потерпели крушение. Один был построен в спешке и не до конца, другой пал жертвой интриги и фальсификации данных (об этой удивительной истории есть псто на моём канале). Какой вывод из этого сделает еврошовинист? Правильно: европейские лодки -- лучшие. Только европейские лодки подходят для кругосветных путешествий, они самые мореходные и самые безопасные. И уж конечно еврошонист упустит из виду, что финиша в гонке не достигли 6 балластных монохулов из 7 стартовавших, что победа балластного монохула это разовая удача. Но еврошовинист не упустит возможности закрепить ошибку выжившего, если она подкрепляет его еврошовинистическую картину мира. Итог: под именем знаменитой регаты проводится соревнование, в котором участие лодок отличных от традиционных для Европы просто запрещено. Нам с вами не дозволено наблюдать за соренованиями, где на равных соревнуются балластные монохулы и суда с другими способами стабилизации, или более конкретно -- катамараны и поплавковые монохулы (или как их обычно называют "тримараны"). А знаете почему? Всякому парусисту известно, что близкие по характеристикам поплавковые монохулы быстрее на десятки процентов, при этом не уступают балластным монохулам по мореходности и безопасности. Из-за этого, если уж проводятся соревнования с участием тех и других, они непременно идут в разных классах. В едином классе у балластных монохулов не может быть никаких шансов на победу.

    • chevron_right

      Emacs это не круто

      nerdfella · Saturday, 29 August, 2020 - 07:21

    Хотел я тут, давеча, одному знакомому показать как выглядит крутая работа в Emacs'е. Показать, конечно, не на своём примере, я довольно слаб, но найти какой-нибудь подходящий видос на ютубчике. Emacs Бегло просмотрев несколько видосов я понял, что не смогу найти нужный, чтобы прямо вау, чтобы удивляло и шокировало, чтобы с первого взгляда было понятно, что происходит что-то крутое. И дело тут не в том, что Emacs этого не может, дело в том, что это не нужно. Подобно тому как представление о работе хэккера сформировано у многих голивудскими боевиками, так и представление о крутой среде разработки у нас сформировано теми же боевиками, ну и может ещё рекламой какой-нибудь. Хочется чтобы на экране что-то летало, вспыхивало, переливалось разными цветами. В действительности из этого наблюдается обычно только мельтешение текстовых буферов. Штука в том, что крутая и продуктивная работа в Emacs'е заключается в двух вещах: всё в мышечной памяти и всё под рукой, как, собственно, и в любой другой продуктивной среде. Да, Emacs не лучше любой другой популярной среды разработки. Везде пользователь видит прямоугольник с текстом, а по нажатию горячих клавиш на экране появляются другие прямоугольники с текстом, будь то код, список классов, методов или история изменений. Подобную тягу к красивостям мы видели то ли в прошлом, то ли в позапрошлом десятилетии, когда было модно на экранах использовать всякие эффекты, когда окна дрожали как простыни, желе или водная гладь. Выглядело это всё очень красиво, но через 5 минут надоедало и отключалось.

    Но всё же я использую Emacs, и буду продолжать использовать Emacs. Почему же? Дело в том, что всякие саблаймы, идеи, студии, всё меняется, а Emacs остаётся. Не важно какой язык или технологию я буду использовать, Emacs точно будет с ней работать. Я использовал Emacs для Python'а, Ruby, C, Jav'ы, Rust'а, разные системы контроля версий, разные отладчики и бог знает чего ещё, и никогда Emacs меня не подводил. Этот же Emacs я могу использовать для почты, PDF'ов и много чего ещё. Подобно тому как замызганный перфоратор в руках строителя не выглядит так же круто как картинка в рекламе, где у перфоратора есть супер-ручка, супер-фонарик, супер-вибратор и супер-антивибратор. Так и Emacs не выглядит круто, но дело своё делает и делает хорошо.

    • wifi_tethering open_in_new

      This post is public

      nl.movim.eu

    • Pictures 1 image

    • visibility
    • chevron_right

      Emacs поневоле

      nerdfella · Sunday, 9 August, 2020 - 15:40 edit

    Если ты это читаешь, то скорее всего не от хорошей жизни, а от того, что уже обнаружил, что в vim'е есть только 2 режима: в одном он пищит (если включить звук), а в другом всё портит. К счастью есть альтернатива — замечательный редактор Emacs. Добрыми друзьями вы с ними скорее всего не станете, как не становятся друзьями когда в поезде пересаживаютя в соседнее купе от соседа алкаша, но поверь мне, это действительно классный редактор, а за одно могучий комбайн для работы с любым текстом: исходники программ, почта, чятики, работа с файлами, с git'ом, с отладчиками любых языков, календарь и планировщик, художественная и научная литература, в Emacs'е есть даже психотерапевт и TETЯIS.

    Не буду долго грузить, вот так Emacs может выглядеть после минимальной настройки. Emacs Мягкие цвета, от которых не вытекают глаза. Приятный шрифт, в котором невозможно спутать букву "О" и цифру "0". Специальными знаками показаны пробелы, табуляции и переносы строк. Скобки раскрашены разными цветами в зависимости от уровня вложенности. Ну а ещё я забыл файл переименовать, но ты ведь меня простишь?

    Для того чтобы добиться такой картинки тебе первым делом нужен Emacs. Скачай его вот с этой страницы:

    https://emacsformacosx.com/

    Установить его в ОС не даст ограничение прав, но, к счастью, этого и не требуется. Если кликнуть по DMG'шному контейнеру, то откроется окно, на котором можно не перетаскивая значок Emacs'а в папку Applications дважды по нему щёлкнуть и собственно запустить Emacs. Пока что закрой его, сначала немного пошаманим.

    Ещё давай поставим хороший шрифт Hack. Этот шрифт создан специально для программистов. У него есть несколько приятных особенностей, но грузить тебя я не буду, просто поверь мне, это очень хороший шрифт. Качай его отсюда:

    https://sourcefoundry.org/hack/#download

    Надо распаковать ZIP, внутри 4 варианта шрифта: обычный, полужирный, курсив и полужирный курсив. Если щёлкнуть по любому, то откроется FontBook, туда надо в Users перетащить всех четверых. Рекомендую, кстати, уставить этот же шрифт в iTerm'е, и размер поставь хотя бы 20. Поначалу будет казаться большим, но потом поймёшь, что это средний размер, а то что стоит по умолчанию просто издевательство.

    Emacs есть, шрифт есть. Теперь возьми мой минимальный конфиг по ссылке и положи в ~/.emacs.d под названием init.el, должен получиться файл ~/.emacs.d/init.el

    Там всё довольно подробно откомментировано, прочти, а потом возвращайся сюда, я постараюсь максимально сжато рассказать как работать в Emacs'е. И да, в настройках клавиатуры поставь переключение раскладок CapsLock'ом, иначе MacOS будет терзать тебя своими сочетаниями вместо Emacs'овских.

    Итак, в Emacs'е нет режимов. Точнее они есть, но это совсем не те режимы, что в vim'е. Не нужно скакать туда-сюда из редактирования в навигацию и обратно. В Emacs'е режимы это "режим для C", "режим для Jav'ы" или "режим для почты", например. Ты можешь сразу приступать к редактированию нажимая буквы на клавиатуре и передвигаясь стрелочками.

    Второе, Emacs первоначально был написан вот на такой клавиатуре. Symbolics keyboard На ней, как видишь, помимо Ctrl есть ещё клавиша Meta, ныне почившая в бозе. Вместо неё используется Alt, ну или что там на Mac'ах вокруг пробела? Все сочетания клавиш используемые для управления редактором начинаются либо с Ctrl'а, либо с Met'ы, поэтому их обозначают просто "С" и "M". Например "открыть файл" делается командой "C-x C-f" — надо нажать Ctrl, не отпуская нажать "x", отпустить "x", всё ещё не отпуская Ctrl (если отпустили Ctrl, то нажмите снова) нажать "f", отпустить "f", теперь нужно отпустить Ctrl и ввести название файла, например ~/.emac.d/init.el

    Вот несколько полезных команд:

    C-x C-f — Открыть файл
    C-x C-s — Сохранить файл
    C-x C-c — закрыть Emacs
    C-g — отменить исполняемую или набираемую команду. Если Emacs делает что-то странное, то первым делом нажми C-g
    C-q — поставить знак, который идёт после этого сочетания. Например C-q TAB поставит табуляцию. Обычно нажатие клавиши Tab в Emacs'е только устанавливает правильный уровень отступа текста. Это пригодится для соблюдения безумных правил выравнивания.
    C-s — искать по файлу вперёд. Нажми C-s, набери несколько букв, Emacs уже ищет. Ещё раз нажмёшь C-s — будет искать следующее вхождение искомой строки. Каждый раз нажимать Ctrl не обязательно, можно просто не отпуская Ctrl нажимать "s", каждый раз Emacs будет переходить к следующему найденному. Когда надоест — C-f.
    C-r — искать по файлу назад. Правила те же. Кстати, от поиска вперёд можно быстро переходить к поиску назад. Просто при уже введённом слове жми C-s и будешь искать вперёд, C-r — снова назад. Можно скакать по местам использования какой-нибудь переменной или перескакивать на объявление функции.
    C-SPC — (это Ctrl-пробел) поставить метку. Весь текст от метки до курсора [выделенный] регион. Если ещё раз нажать C-SPC, то метка переставится в новое положение. Если поставить метку туда где она уже стоит, и курсор тоже там стоит, то метка отключается. Другими словами, если вы передумали что-то делать с регионом, то нажмите C-SPC 2 раза.
    C-k — "убить" регион. Это аналог привычного "вырезать", чуть позже покажу различия.
    M-w — добавить в kill ring (об этом ниже) без kill'а. Ну или по-русски говоря "скопировать".
    C-y — yank region, аналог "вставить". Кстати, вставка из MacOS'ного буфера обмена работает.
    C-x b — переключится в другой ранее открытый файл.
    C-x C-b — вывести список открытых файлов. На самом деле список "буферов", это немного другое, но помимо нескольких служебных буферов там будут твои открытые файлы.
    C-x o — переключится в другой буфер в окне (сейчас поймёшь).
    C-x 1 — оставить только 1 буфер в окне.
    C-x 2 — разделить окно на 2 буфера горизонтальной линией.
    C-x 3 — разделить окно на 2 буфера вертикальной линией.
    C-_ — undo. Да, это Ctrl и подчёркивание.
    C-M-\ — сделать правильные отступы в выделенном регионе.

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

    yank'нуть можно несколько раз, но главное, всё kill'нутое попадает не просто в "буфер обмена", а в "kill ring". Если после yank'а нажать M-y (Meta, которая Alt или Command и "y", ты ведь помнишь), то вставленный фрагмент заменится на предпоследний kill'нутый, потом на ещё более ранний, и так далее.

    Теперь давай поставим приятную тему и разноцветные скобочки. Запусти M-x package-list-packages (целиком набирать не надо, где-то на середине можно нажать Tab, и Emacs сам дополнит команду до конца, если только нет команд с похожими названиями). Запустится Melpa — управлятор всякими дополнениями для Emacs'а. Подожди минутку, пусть Melpa достучится до всех трёх источников, которы мы указали в конфигурационном файле. Ты поймёшь что это так, когда в списке будут мелькать пакеты из всех трёх источников, Melpa, Marmelade и GNU. Найди в списке "material-theme". Ты ведь уже умеешь пользоваться C-s ? Поставь курсор на строчку с material-theme и нажми "i", слева появится "I", значит пакет помечен для установки. Теперь найди rainbow-delimiters и сделай с ними то же самое, поставь курсор, нажми "i". Теперь нажми "x" — это значит "execute" — исполнить. Melpa установит пакеты помеченные для установки. Потарахтит несколько секунд и напишет что ты молодец, а пакеты установлены. Теперь открой (напоминаю C-x C-f) ~/.emacs.d/init.el , сотри ";" перед опциями включающими material-theme и rainbow-delimiters. Закрой Emacs (C-x C-c), открой его снова (можно, конечно, без этого, но я стараюсь не грузить тебя информацией). Теперь открой какой-нибудь C'шный исходник. Voila, у тебя приятный шрифт, мягкие цвета, ты отлично видишь служебные символы, уровень вложенности скобок и отступы.

    Когда будет свободная минутка рекомендую нажать C-h t — запустится интерактивный учебник по Emacs'у, из которого ты узнаешь ещё множество замечательных команд и полезных терминов, которые позволят грамотно задавать вопросы об Emacs'е и быстро находить ответы на Emacs Wiki, Stackoverflow и в других местах.

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

    • chevron_right

      Придержите своё геройство

      nerdfella · Tuesday, 7 July, 2020 - 12:23 edit

    Недавно прошло несколько несвязанных событий, но моё шизоидное мышление, конечно же, легко объединило их в одну группу, и сейчас я вам об этом расскажу, а ещё расскажу, почему геройство это плохо. Ding Liren connection lost Событие номер раз: Магнус отдал ферзя. Магнус Карлсен, многократный чемпион мира по классическим шахматам, рапиду и блицу играл в интернетном турнире с китайским гроссмейстером Динем Лиженем. Внезапно, в ничейной позиции Динь отключился, ему засчитали техническое поражение. В следующей партии Карлсен отдал на третьем ходу ферзя и сдался, счёт в матче снова стал равным. И все комментаторы сразу хором запели "какой благородный поступок", "какой у нас честный чемпион", "какой молодец". А чего молодец-то? Победа была честная. Это онлайновые шахматы, случается всякое. В обычных шахматах есть правила "тронул -- ходи", "хочешь поправить фигуру -- сначала скажи "поправляю", "проводишь пешку в ферзи -- сначала ставь ферзя, потом снимай пешку", "рокировка -- ход короля, сначала передвигай его". В онлайновых шахматах тоже есть правила: "начал играть -- доигрывай", "отключился -- получи техническое поражение", "сбойнула техника -- не жалуйся и подумай о более надёжной технике". Нет ничего фантастического для крупного шахматиста в том чтобы иметь отдельный ноутбук (на самом деле достаточно отдельной ОС на отдельном разделе) только для онлайновых турниров, иметь резервный канал связи (мобильного интернета достаточно), иметь запасную мышь, и не с алика за 30 центов, а нормальную за 30 баксов, быть готовым резко переключиться на мобилу, если ноут внезапно загорелся. Ведь нет ничего необычного в том, что лыжники, хоккеисты, теннисты, все приезжают на матчи с запасными лыжами, ракетками и подобным. Но проблема не только в том, что Лижень проиграл. Проблема в том Магнус создал прецедент и возможно заложил традицию уважения к игрокам, а не игре. Не бывало такого, чтобы гонку Формулы-1 останавливали и стартовали заново от того, что Ральф Шумахер заглох, или в хоккее шайбу не засчитывали от того, что кто-то за 2 секунды до этого сломал клюшку. Теперь всякий, кто не станет совершать ответную жертву после технического поражения соперника рискует нарваться на критику "ты не такой благородный как Магнус Карлсен". Магнус, придержите свой геройство. Ballot Событие номер два: массовая публикация фотографий бюллетеней с отметкой в поле "нет". Это очень хорошо, что люди публично заявляют о своей позиции. Но давайте подумаем как они это делают, чем при этом жертвуют. А жертвуют они ни много ни мало добровольным отказом от тайны голосования. И опять же, они таким образом устанавливают такое поведение в качестве общественной нормы. Если вы в инстаграме публикуете свой бюллетень, то не удивляйтесь потом, что в новостях промелькнёт что-то типа такого: начальник цеха МетроПромЗаготовки собрал всех рабочих и сказал проголосовать за Пупкину-Залупкину и опубликовать фотографию в инстаграме, кто не опубликует -- останется без квартальной премии. "Ко-ко-ко, нарушение тайны голосования" потом будут орать московские хипсторы, а мордатые дикторы из быдлоящика с довольными рожами будут им бубнить: "Это всё было добровольно, это порыв патриотизма и поддержки." Повторюсь, публично обозначать свою политическую позицию это хорошо, но предлагать ради этого отказываться от тайны голосования -- плохо. Активисты и просто неравнодушные граждане, придержите своё геройство.

    Событие три: матч Ростов-Сочи. Даже картинку вешать не буду. Вы скорее всего и без меня знаете что там произошло, но если вы читаете эту заметку из будущего, то я напомню. В ростовской футбольной команде много человек заразилось короновирусом, но сочинский клуб отказался переносить матч. Ростов выставил на поле сборную команду из игроков молодёжной и юниорской команд своего клуба, которые провели вместе 1 тренировку перед матчем. Сопляки проиграли взрослым профессионалам 1:10. И это, конечно, малодушие. Отличие от первого события из этой статьи в том, что неудача в Ростове случилась сильно заранее, а не во время матча, и от борьбы они не отказывались, а просили перенести матч. Torino 1949 Я напомню исторический случай. Итальянская команда Torino 4 мая 1949 года в полном составе разбилась в самолёте, но всё равно стала чемпионом страны в пятый раз подряд. На оставшиеся матчи Турин выставлял свою молодёжную сборную, и остальные команды против Турина тоже выставляли свои молодёжные сборные. Вот это называется fair play. Это было уважение не просто игры, а тех самых футболистов погибших 4 мая.

    Возвраясь к геройству. Бывает, что геройство необходимо. В 1943 году ты сегодня прыгаешь на амбразуру пулемёта, а завтра твой друг. А в итоге фашисты отброшены, выживает семья и твоя, и твоего друга, выжили их дети, а внуки 9 мая идут с портретом деда-героя. Хорошо бы если было не так, чтобы никому не надо было гибнуть в окопах, в атаках, на гестаповских допросах, но было что было.

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

    • wifi_tethering open_in_new

      This post is public

      nl.movim.eu

    • Pictures 1 image

    • visibility
    • chevron_right

      Ваше мнение не имеет значения. Как на самом деле работает демократия

      nerdfella · Tuesday, 9 June, 2020 - 11:07 edit

    People voting

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

    Накануне всяческого голосования и после него в новостях много трясут процентами поддержки того или иного кандидата, партии, решения на референдуме и т. п. "65% населения поддерживают Пупкину-Залупкину, настоящую национальную лидерку!" А на самом деле, если посмотреть в протокол избирательной комиссии, мы увидим там совершенно другие другие по природе цифры, не относительные, выраженные в процентах, а абсолютные. Потому что только проголосовавшие избиратели имеют значение. Мнение избирателя не имеет никакого значения, только его голос имеет значение. Фраза по Пупкину-Залупкину на самом деле должно звучать как "Полтора миллиона человек проголосовали за Пупкину-Залупкину. Это гораздо больше чем за любого другого кандидата или кандидатку, но всё равно довольно мало по сравнению с населением страны. Пупкину-Залупкину трудно назвать лидеркой нации, но остальных ещё труднее." В России эта борьба за голоса, а не мнения выражена особенно ярко, так как явка у нас традиционно низкая. Поэтому реальная политическая борьба на самом деле идёт вовсе не за распространение идей (они распространяются сами собой), а за привлечение сторонников на участки для голосования.

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

    Именно поэтому на предстоящем странном мероприятии 25 июня - 1 июля я поддерживаю сторонников воображаемого штаба "нет", а не сторонников бойкота. Да, процедура странная; да, подсчёт скорее всего будет нечестным; да, агитация запрещена; да, вся эта процедура не имеет никакого смысла и решение в протоколе счётной комиссии уже известно. Но значение имеет голос только того человека, который дошёл до участка. Если желаете, то можете считать мероприятие 1 июля таким вот странным митингом. Я, как член участковой избирательной комиссии с правом решающего голоса, отказался учавствовать в подсчёте голосов, но как избиратель я несомненно приду на участок и брошу бюллетень в урну. Надеюсь то же самое сделаете и вы.

    • wifi_tethering open_in_new

      This post is public

      nl.movim.eu

    • Pictures 1 image

    • visibility
    • favorite

      1 Like

      GeoBor

    • chevron_right

      Навальный — лучший выбор

      nerdfella · Tuesday, 12 May, 2020 - 13:41 edit

    Navalny

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

    Итак, первое, передача "Россия будущего", а до того "Навальный 20:18". Когда эфиры только начинались, Навальный пытался уложиться в 60 минут, но ни разу не сумел этого сделать. Потом даже пытаться перестал. И этому человеку вы хотите доверить страну на 4 года (я надеюсь всё же будет возврат к такому сроку)? Думаете Навальный просидит 4 года, а потом спокойно пойдёт на выборы? Думаете не прилипнет к креслу? Он пробубнить заготовленные новости за час не может, а вы хотите чтобы он реформы в 4 года уложил.

    Второе, Котляросрач. Напомню контекст: 2015 год, демократическая коалиция решает выдвинуть список от РПР-Парнас по результатам праймериз, и для этого все участники этой процедуры подписывают некоторую бумагу. Председатель одного из отделений РПР-Парнас Татьяна Котляр в результате праймерзов не получает права на выдвижение и поднимает бунт. После этого долго идут споры обязана ли она выдвинуть список без себя или нет. Все споры могли бы быть прекращены предъявлением одной единственной бумажки, того самого обязательства Котляр с её подписью, но этой бумажки нет. 3 месяца Волкова, Навального и всю коалицию возят мордой об стол, потом наконец-то бумажка находится. И что, вы хотите доверить государство людям, которые одну единственную значащую бумажку посеяли и 3 месяца не могли отыскать? Такой вот уровень подготовки и организованности вы считаете достаточным?

    Далее, отчёты ФБК. Вы когда-нибудь читали финансовую часть этих отчётов? И после этого у них хватает наглости называть себя самой открытой организацией в России. Там же написано примерно ничего. Все эти отчёты составлены по формуле "100 лямов получили, 100 лямов потратили". Но ведь именно такие отчёты Навальный не хотел бы видеть от правительства. Да, в отчёте указано сколько ушло на аренду офиса, сколько на зарплаты, но по такому отчёту невозможно понять сколько там скрыто коррупции. Как зарплаты распределены между сотрудниками, может быть всё забирает Жданов (и отстёгивает Навальному), может быть для офиса закупается бумага по стократно завышенной цене. Я догадываюсь, что ничего такого на самом деле не происходит, но что мешает опубликовать бухгалтерскую базу данных полностью? Всё равно ФБК принужден регулярно проводить аудит, сдавать документацию в мин.юст, и вообще, все их банковские проводки в реальном времени отслеживаются кей-джи-би и апешечкой. К чему секреты?

    Раз уж заговорили про ФБК. Что там делает Навальный? Он официально не работает в ФБК, не получает там зарплату, но при этом руководит этой организацией. У него там свой кабинет, у него там кресло Herman Miller Aeron (видно в интервью). Очень недешёвое кресло. На какие средства оно куплено? Нет ли в этом коррупции? Почему пожертвования собирает ФБК, а ролики выкладывают на канале Алексея Навального? Почему за фильм "Он вам не Димон" присядет (надеюсь нет) Жданов, а популярность набирает Навальный? Политическую "прибыль" "приватизирует" Навальный, а "уголовные" "убытки" "национализируются" в ФБК. Ещё мне всё это напоминает отношения между Путиным и "Единой Россией", вроде бы не состоит, но на самом деле руководит.

    Теперь, поговорим о доходах Навального. Сто раз об этом уже спрашивали, но ответы меня всё равно не убеждают. Когда-то Навальный прямо говорил: "Я адвокат номер 1 в России по истребованию документов,"— и это звучало очень убедительно. Но сейчас Навального лишили статуса адвоката. В ФБК он денег не получает. В интервью он говорил о частных юридических консультациях, но кто эти консультации заказывает говорить нельзя. А почему, Алексей? Всё равно все ваши финансовые операции тщательно отслеживаются. Почему Сарделенычу можно знать ваши источники доходов, а мне нельзя?

    Теперь о Белыхе. Или Белых? 2009 год, Алексею 32 года, он становится внештатным советником губернатора Кировской области. Почему? Как так? Вот прямо с улицы зашёл и стал советником губернатора? Может они где-то вместе работали или давно знакомы? Навальный подмосквич, Белых пермяк. Ну ладно, бывает. Но они ведь даже на охоту вместе ездили. Как и когда успела возникнуть эта дружба? Нет ли тут неизвестной широкой публике преступной или коррупционной истории? Нипаня-ятна.

    Переходим к самому пикантному кусочку этого блюда. В 2013 году в штабе Навального произошла неприятная история с участием Волкова, Каца и Патюлиной. Я читал объяснения всех участников конфликта, и у меня сложилось впечатление, что наиболее достоверную картину даёт Патюлина, Волков с ней в общем-то не спорит о поступках, но об их охарактеризовании. Действительно, Волков приставал к Патюлиной. Между Волковым и Кацем на этой почве произошёл конфликт. Потом конфликт обострился от того, что Кац позвонил в штаб Собянина и поздравил с победой. Оставим этот звонок на его совести. Позвони Навальный сам, получил бы 10 очков договороспособности, но потерял бы 5000 очков доверия своих избирателей. Оставим за скобками вопрос имел ли Кац право через голову начальника поздравлять соперника. Я хочу обратить внимание на другое. С одной стороны конфликта Кац, с другой Волков. И в этой ситуации Алексей решает окончательно разругаться с Кацем (он потом его то игнорировал, то обзывал обидными словами, то это делала за него Любовь Соболь) и выгораживать Волкова. Вся история с харасментом полностью проигнорирована Алексеем, известным поборником нравственности и критиком Слуцкого. Получается ситуация похожая на известную поговорку о путинской России: "Друзьям всё, врагам — закон". Волков друг, ему надо всё прощать, а Кац — враг, его репутацию нужно уничтожать.

    Теперь поговорю ещё об одной "путинской" черте Навального, которая вызывает у меня настороженность. Путина, губернаторов и прочих чиновников часто обвиняют, что они воспринимают бюджеты как собственные деньги, тратят их по своему усмотрению. То же самое я наблюдал у Навального в 2018 году. Вроде бы был отдельный счёт для сбора пожертвований на президентскую кампанию, региональные штабы, но фактически весь ФБК работал на кампании Навального. Это абсолютно нормально, что ФБК имеет политическую позицию, что поддерживает кандидатов, которые принесут пользу в борьбе с коррупцией, но мне кажется, что это не должно становиться основной и единственной деятельностью фонда даже временно. Люди жертвовали фонду борьбы с коррупцией, а тратились эти деньги конкретно на агитацию в пользу Алексея Навального. Если бы люди хотели поддерживать Навального, то могли пожертвовать на его кампанию. Если же люди жертвовали ФБК, то эти деньги должны были прежде всего пойти на финансирование расследований, а сотрудники ФБК должны не должны был по указке Навального (постороннего человека) бросаться копать против того чиновника на которого он укажет пальцем, против того кого именно сейчас надо замочить, кто посмел Навальному с̶т̶а̶в̶и̶т̶ь̶ ̶п̶а̶л̶к̶и̶забивать бетонные сваи в колёса.

    Последнее что упомяну, Навальный — популист. Я прошу не считать это слово совсем плохим, в конце концов, это задача демократического политика говорить то, что от него ждут избиратели. Но хороший политик должен формировать правильный запрос, убеждать избирателей, что предлагаемые меры правильные, а не идти на поводу у толпы. По вопросам прав сексуальных меньшинств Навальный трусливо старается не высказываться, по вопросу уничтожения контрафактной санционки поддерживает глупое и вредное мнение, что эти продукты надо раздать. Валютные ипотечники? Государство должно помочь! (За счёт других граждан) Образование/медицина? Должны быть бесплатные! Я не против широкого участия государства в финансировании образования и медицины, но все рейтинги лучших университетов возглавляют только платные ВУЗы.

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

    Выдохнул. Надеюсь эту статью мне не придётся дополнять.

    • wifi_tethering open_in_new

      This post is public

      nl.movim.eu

    • Pictures 1 image

    • visibility
    • favorite

      1 Like

      GeoBor

    • chevron_right

      Ржавый стыд

      nerdfella · Wednesday, 22 April, 2020 - 18:33 · 3 minutes

    Друзьяшечки, я учу Rust, и пока пишу на нём такую дичь, что аж стыдно и противно.

    Shame

    Сейчас кодить не могу, но могу сделать обзор своего же кода. Программка состоит из двух файлов как в 12 главе Rust Book'а. main.rs только запускает функцию run из lib.rs. А вот сам lib.rs:

    1> extern crate yaml_rust;
    2> 
    3> use yaml_rust::{YamlLoader, YamlEmitter};
    4> use yaml_rust::yaml::Yaml;
    5> use std::fs::File;
    6> use std::io::prelude::*;
    7> use std::collections::HashMap;
    8> use std::error::Error;
    9> 
    10> pub struct Config {
    11>     pub layout: String,
    12>     pub corpus: String,
    13> }
    14> 
    15> impl Config {
    16>     pub fn new(args: &[String]) -> Result<Config, &'static str> {
    17>     if args.len() > 1 {
    18>             return Err("Too many arguments.");
    19>     }
    20>     
    21>     let layout = String::from("layout.yaml");
    22>     let corpus = String::from("corpus.yaml");
    23> 
    24>     Ok(Config {layout, corpus})
    25>     }
    26> }
    27> 
    28> struct Layout(HashMap<String, HashMap<String, String>>);
    29> 
    30> impl Layout {
    31>     fn from_yaml(yaml: &Yaml) -> Layout {
    32>     let mut layout: HashMap<String, HashMap<String, String>> = HashMap::new();
    33>     for (lang, keys) in yaml.as_hash().unwrap() {
    34>         let mut hash: HashMap<String, String> = HashMap::new();
    35>         for (key, chord) in keys.as_hash().unwrap() {
    36>         hash.insert(key.as_str().unwrap().to_string(),
    37>                 chord.as_str().unwrap().to_string());
    38>         }
    39>         layout.insert(lang.as_str().unwrap().to_string(), hash);
    40>     }
    41>     Layout(layout)
    42>     }
    43> 
    44>     fn score(layout: Layout, corpus: Corpus) -> Result<f64, Box<dyn Error>> {
    45>     let mut summ = 0.0;
    46>     summ = summ + 1.0;
    47>     Ok(summ)
    48>     }
    49> }
    50> 
    51> struct Corpus(HashMap<String, HashMap<String, f64>>);
    52> 
    53> impl Corpus {
    54>     fn from_yaml(yaml: &Yaml) -> Corpus {
    55>     let mut corpus: HashMap<String, HashMap<String, f64>> = HashMap::new();
    56>     for (lang, pairs) in yaml.as_hash().unwrap() {
    57>         let mut hash: HashMap<String, f64> = HashMap::new();
    58>         for (pair, weight) in pairs.as_hash().unwrap() {
    59>         hash.insert(pair.as_str().unwrap().to_string(),
    60>                 weight.as_f64().unwrap());
    61>         }
    62>         corpus.insert(lang.as_str().unwrap().to_string(), hash);
    63>     }
    64>     Corpus(corpus)
    65>     }
    66> }
    67> 
    68> pub fn run(config: Config) -> Result<(), Box<dyn Error>>  {
    69>     let mut file = File::open(config.layout).expect("Unable to open file");
    70>     let mut contents = String::new();
    71>     file.read_to_string(&mut contents)
    72>         .expect("Unable to read file");
    73> 
    74>     let layout_yaml = &YamlLoader::load_from_str(&contents).unwrap()[0];
    75>     let layout = Layout::from_yaml(layout_yaml);
    76>     Ok(())
    77> }
    78> 
    

    Начну с начальца.

    1> extern crate yaml_rust;
    

    Я не знаю что делает эта строка. То ли надо Rust Book перечитывать, то ли я ещё не дошёл до объяснения этой конструкции. Я пока прочитал только первые 12 глав.

    3> use yaml_rust::{YamlLoader, YamlEmitter};
    

    Надо, конечно, убрать YamlEmitter, я им пока не пользуюсь.

    3> use yaml_rust::{YamlLoader, YamlEmitter};
    4> use yaml_rust::yaml::Yaml;
    5> use std::fs::File;
    6> use std::io::prelude::*;
    7> use std::collections::HashMap;
    8> use std::error::Error;
    

    В каком порядке принято это всё писать? Зачем нужны пространства std::io и std::fs, в чём разница?

    10> pub struct Config {
    11>     pub layout: String,
    12>     pub corpus: String,
    13> }
    

    Надо повторить разницу между String и &str. Ко всем остальным употреблениям String это тоже относится.

    28> struct Layout(HashMap<String, HashMap<String, String>>);
    

    Хотел определить новый тип для хранения раскладки. На stackoverflow ещё был вариант с trait'ами. Не понимаю как это работает и как этим пользоваться. Идём дальше.

    31>     fn from_yaml(yaml: &Yaml) -> Layout {
    32>     let mut layout: HashMap<String, HashMap<String, String>> = HashMap::new();
    33>     for (lang, keys) in yaml.as_hash().unwrap() {
    34>         let mut hash: HashMap<String, String> = HashMap::new();
    35>         for (key, chord) in keys.as_hash().unwrap() {
    36>         hash.insert(key.as_str().unwrap().to_string(),
    37>                 chord.as_str().unwrap().to_string());
    38>         }
    39>         layout.insert(lang.as_str().unwrap().to_string(), hash);
    40>     }
    41>     Layout(layout)
    42>     }
    

    Это что за жесть? Почему так многословно? И это при том, что я использовал unwrap(), а не полноценный pattern matching. И я в HashMap преобразую даже не файл, а уже переменную типа Yaml. Ниже ещё несколько строчек с чтением файла, тоже уродливых.

    И да, в похожей функции для Corpus'а я использую f64, потому что Yaml выдаёт только f64. Мне такая высокая точность не нужна, но как преобразовать в f32 я не знаю.

    Если у вас есть какие-то комментарии или ответы на мои вопросы, то я с удовольствием вас послушаю.

    • wifi_tethering open_in_new

      This post is public

      nl.movim.eu

    • chevron_right

      Некоторые заметки о раскладке

      nerdfella · Thursday, 16 April, 2020 - 23:50

    Так, нердач, ты уже достаточно ночной, можно с тобой вопросики обмозговать.

    Corjik keys

    Это расположение кнопок на Corjik'е. Давайте подумаем как сделать для коржика раскладку. Вариант взять раскладку с Corne сразу отметаем, потому что я хочу аккордовую клаву. Итак, на большие пальцы, или как это говорят по-русски "тамбы", вешаем самые частые действия: перевод строки, пробел, забой. Я пока 3 действия назвал, а кнопок 6, так что у меня к вам, эргоклавщики первый вопрос: что ещё повесить на тамбы? Не торопитесь предлагать Shift, Ctrl и Alt, у меня на них особые планы. На пальцы которые не тамбы, или как это по-русски "фингеры", повесим буквы. Понятное дело, самые частые на указы и безымы, в средней строке. Редкие символы будут на аккордах. Прежде чем я немного расскажу о требованиях к аккордам, поясню чем аккорд отличается от использования модификатора. Модификаторы это Shift, Ctrl и Alt, и они нажимаются до нажатия буквы. В аккорде же все кнопки жмутся примерно одновременно. Срабатывание аккорда я сделаю по отпусканию, но и по таймауту тоже. Если сделать все аккорды одноручными, то можно модификаторы разместить на другой руке. Алгоритм примерно такой. Если кнопка, одна или несколько, на правой половине нажата, затем отпущена, то в момент отпускания посылается соответствующая буква в ЭВМ. Если нажата кнопка на левой половине, потом на правой, то значит мы имеем дело с модификатором, после отпускания правой кнопки пошлётся буква с модификатором.

    С печатью символов разобрались, но это только начало клавиатурных извращений. Теперь поговорим о слоях. В мелкоклавах традиционно используется концепция слоёв, это нечто вроде раскладок, только используется для набора редких символов и команд. То что мы обсуждали выше относится к основному слою. В дополнительных слоях нам надо разместить цифры, навигацию, "функциональные клавиши" (всякие F с номерами) и мышь. Важно уточнить как у нас включаются слои, как CapsLock или как Shift. Встречаются оба варианта, оба варианта имеют свои достоинства. Понятно, что режим управления курсором a'la мышь должен включаться "защёлкой" (latch), то есть подобно тому как работает CapsLock. А вот для навигации (стрелки, PageUp, PageDown, Home, End) более естественным кажется "моментальный" (momentary) режим, то есть как Shift. Можно, конечно, запихнуть PageUp и PageDown в какие-нибудь сложные аккорды основноя слоя, но пока это не кажется хорошей идеей. И вот тут-то у меня и происходит затык. Как все эти слои переклюкивать?

    Пока писал это всё родилась идея переключать слои сочетанием двух тамбов. Не кривым нажатием одним пальцем на 2 кнопки. Дух Баунса уходи. Но нажатием двумя тамбами двух кнопок. В каждом тамбовом кластере по 3 кнопки, значит всего имеем 9 вариантов. Если сначал нажал левый тамб, то это мгновенное переключение, если сначала правый, то защёлка.

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

    Если есть вопросы или предложения, то пишите в комментариях. Мне очень нужна критика и отзывы на этом этапе.

    • wifi_tethering open_in_new

      This post is public

      nl.movim.eu