Llemilio

Баги моего времени

Теги нашего времени

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

 1 комментарий    39   2 мес  

Чтение файла в приложении UWP

Решил я сделать красиво и с нуля писать приложение на Universal Windows Platform (UWP) по всем канонам. Однако, в Microsoft каноны пока еще не такие строгие как у РПЦ, поэтому даже из официальной справки половина кода не работает. А это еще чатжпт не подключили.... о каких ревизиях вообще может идти речь. Ладно, я отвлекся.

Нужно открыть файл хотябы для чтения. В справке предлагается добавить следующий код в Package.appxmanifest

<?xml version="1.0" encoding="utf-8"?>
<Package
    ...
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="... rescap">
...
<Capabilities>
    <rescap:Capability Name="broadFileSystemAccess"/>
</Capabilities>
</Package>

Но он не работает, даже не распознается как безошибочный.

Long story short, чтобы не томить. Вот готовый апплет:

var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
picker.SuggestedStartLocation =
    Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
picker.FileTypeFilter.Add(".txt");

Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
if (file != null) {
  // Приложение теперь вроде как должно иметь доступ 
  // к файлу... но смотрите catch блок
  Log("Выбранный файл: " + file.Name);
} else {
  Log("Операция выбора файла оменена");
  return;
}

try {
  var storageFile = await StorageFile.GetFileFromPathAsync(file.Path);
  using (StreamReader reader = new StreamReader(bs)) {
    string line;
    while ((line = reader.ReadLine()) != null) {
      Log("Строка прочитана: " + line);
    }
  }
}
}
catch (UnauthorizedAccessException) {
  // Чертов UWP не заводится пока ему не дашь 
  // полный доступ к файловой системе.
  // Да так быть не должно, но имеем то что имеем
  await Windows.System.Launcher.LaunchUriAsync(
      new Uri("ms-settings:privacy-broadfilesystemaccess"));
}

UPDATE Оказалось, что проекты из песочницы (те которые не загружены из МС стора, а например собраны локально) вообще не могут получать доступ к файлам за пределами папки в которую контент нужно еще загрузить программным путем — VS во время сборки делает это криво. И если какой-то доступ приложение получило, то это скорее баг чем победа. О боже, королеву ты не сохранил, сохрани хотя бы меня!

Возвращаюсь в баги моего времени

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

http://llemilio.ru/settings/

А не llemilio.ru/blog/settings/ как написано в помощи к этому движку 🤷

 Нет комментариев    43   2 мес   aegea

На ковид

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

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

Сам я, ни в коем случае не отрицаю ни существования вируса SARS-Cov-2, ни его повышенной контагиозности ни почти любой другой информации общего характера. Я не собираюсь лезть в дебри его молекулярного строения и не буду бравировать таблицами его генома. Я лишь пытаюсь посмотреть на ситуацию глазами разумного человека, который принимает решения не под влиянием (и не для) толпы, а в результате рассуждений и разумных допущений.

Про ужасы

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

Любой нуар поддаётся объяснению, даже если просто подумать. Взгляд изнутри тоже не всегда быает объективным. Точнее он чаще всего не объективный. Старый добрый пример — про Землю. Находясь на Земле почти невозможно понять, что она круглая. Нужен взгляд со стороны чтобы это стало очевидно. Либо обладать недюжим умом, а в некотором случае и гениальностью. Не хочу обижать сестёр и прочий мед.персонал, но их взгляд всё таки изнутри и им из-за текущей организации процесса просто нет времени подумать.

Одним из аргументов сторонников жестких мер является «прямой репортаж» из реанимации. Я не понимаю кому нужно это делать, возможно это банальный кликбейт, но подумайте, что вы видите на кадрах. Если откинуть хайп, чем это отличается от ежедневной работы реанимации?

Как вы думаете, что из себя будет представлять реанимация в любой другой день года если больных со всего города Глупов везти в условную ОДНУ больницу, а все остальные не использовать потому-что.... потому что так решили? И какова вероятность не увеличить вирусную нагрузку на свой организм оказавшись в гетто с заболевшими. Даже если у вас было небольшое заболевание, то только в идеальной больнице в таких условиях оно не начнет прогрессировать. А больницы почти во всем мире далеко не идеальные, все это знают.

Все эти картинки с людьми на ИВЛ, фотографии гробов и прочее должны были бы задурманить только особо впечатлительную барышню, но по факту, сейчас почти все журналисты занимаются тем, что множат этот ужас среди своих читателей/зрителей вместо того чтобы разобраться в ситуации. Мне честно неинтересно разбираться в ситуации с гробами на улицах, но всему есть объяснение: где-то, как в Эквадоре, люди так живут. А где-то морги банально отказываются брать умерших от ковид. Почему? — Спросите у них. Я же ещё раз отмечу, что никогда не увлекался некромантией, чего и вам желаю. Мне больше интересно почему издеваются над живыми.

Что медики делали предыдущие годы со всеми больными с сильными симптомами ОРВИ и гриппа? Откуда-то же взялись эти десятки тысяч умерших ежегодно от сезонных респираторных заболеваний? Как был организован процесс если тоже самое количество людей размещалась в больницах без привлечения репортёров? Почему в этом году понадобилось кошмарить всех стерильными красными зонами и медсёстрами падающими в обморок от переработки?

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

Попробуйте посмотреть на поверхность почти любой части своего тела под сильным микроскопом или, лучше, каплю морской воды:

И если вы такое еще в своей жизни не делали, вы там увидите такое что «кушать не сможете»! Примерно тоже самое, выступая в роли микроскопа, делают журналисты и прочие тренд-сеттеры: вываливают на вас информацию к которой вы как минимум не готовы, а как максимум о чём-то таком слышали, но в реальности никогда не сталкивались.

Многие предлагают ни в коем случае не сравнивать ковид с гриппом и ОРВИ. Ни статистически, ни тем более по вирусологии. А я и не собираюсь сравнивать. Я лишь хочу задать вопрос: почему даже 1% людей из тех которые сейчас ведут чуть ли не прямые репортажи из моргов, в никакую из прошлых зим, нам не сообщали о том что, де, сегодня в мире умерло 5000 человек от гриппа? Это какие-то другие пять тысяч и их не жалко? Так почему жалко стало сейчас?
Точнее почему эти рассказчики видят ужас именно в ковиде, результат же один и тот же, нет? Заболевшие же не в зомби обращаются — все по старинке: кашель, температура, ломота в суставах.

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

Про статистику

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

Для начала нужно определиться с терминами. Ежедневно из каждого утюга на меня сыплется «статистика заболеваемости» ковидом. И здесь кроется первый, очень серьёзный камень преткновения. Среди источников в масс-медиа я не встречал ни одного который хоть как-то попытался бы нормализовать эту статистику, привести ее к виду в котором она имела бы хоть какое-то значение. То что публикуется под видом статистики новых случаев по существу в лучшем случае является статистикой выявленных случаев. К примеру (пора переходить к конкретике), предположим, что мы имеем дело с некоторым городом Глупов. В этом городе люди могут болеть только ковидом и находится в двух состояниях: здоров или болеет. Предположим, что в Глупове при населении в 10 тысяч человек реальная динамика заболеваемости была следующая:

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

Даже такое простое понятие как число заболевших может принимать практически любое значение. К примеру, если выборка будет нерепрезентативной, то возможен и такой вариант:

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

А теперь вспомните, когда вы в последний раз видели данные по масштабным НАУЧНЫМ исследованиям заболеваемости ковидом? С указанием методологии выборки, ее погрешности и прочее. Не количество выявленных а хотя бы процент выявленных среди протестированных? Скорее всего вы видели только ежедневную сводку с цифрами заболевших/умерших. Но если вы внимательно читали этот раздел, то теперь понимаете, что они по своей сути ничего не значат.
Даже простейшие дополнительные расчеты на тех цифрах которые уже есть можно нормализовать. К примеру, посмотрим, как будет выглядеть процент «выявленных» от общего числа протестированных и наложим его на уже знакомую диаграмму (желтая линия):

Даже на таких странных данных видно, что пик заболеваемости уже давно прошёл.

А в реальном мире данные о заболевших в большинстве своём вообще собираются только по группам риска или людям с симптомами ОРВИ. Представляете насколько эти данные не имеют ничего общего к статистике заболеваемости во всей популяции!!!

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

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

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

В статистику по заболеванию также включают данные построенные на экстраполяции и домыслах. То есть манипулируют уже не интервалами и мат.моделями, а самыми настоящими первичными данными. Я видел статьи о том, что вдруг во многих местах вдруг прекратились заболевания ОРВИ и гриппа, которые всегда были в первых рядах сезонных заболеваний. То есть ковид заместил собой эти заболевания.

Если бы та статистика которая публикуется ежедневно в любой стенгазете была верна (2-10% смертности) то это обязательно отразилось бы на общей ситуации. Но она не изменилась.

Такие вот игры со статистикой из-за которой вы уже месяц #сидитедома а экономика #летитвпропасть (вместе с пропастью)!

Про манипуляцию

Дьявольский тандем хайпа на ужасе и неправильной статистики выглядит как одна большая манипуляция. Я уже отметил, что к сожалению не верю в теории заговора (была бы надежда что кто-то всё таки думает головой, а не жопой). Но зато я верю в то, что очень многие решили воспользоваться ситуацией в своих интересах. ВОЗ — заявить о своей нужности, Трамп — прикрыться от и так неизбежного финансового кризиса, Путин — спутать всем карты, Красовский — заработать денег. И все они, а их тысячи, тут же нашли огромную пользу от такого неожиданного подарка. Обычные люди, мы с вами, никого не интересуют. Неужели, в одночасье, человеческая жизнь стала для них чего-то стоить? Для тех персонажей которые на Ближнем Востоке играют в людей как в солдатиков, а  информации о смертельном голоде в местности М просто упускается как незначительная.

Да даже сам карантин, который немыслимо углубил и так назревавший экономический кризис, очевидно принесёт очень много лишений, страданий а вместе с ними и смертей. Хорошо тов. Минаеву сидя на диване шеймить людей за то что они вышли на работу. Откуда ему знать, что кому-то нужно работать каждый день для того чтобы буквально прокормить семью. Почему только возможные смерти на ковиде «заботят» интересантов, а все остальные тысячи и тысячи смертей остаются в области периферийного зрения?

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

Туда же можно отнести крики отчаяния о том что во всём мире умирают все более молодые люди. Это ничто иное как манипуляция, на самом деле ничего не происходит, смертность среди людей моложе 40 вообще не изменилась. Нигде. Даже в Бергамо. А так-то да, ничего личного, молодые люди тоже умирают от воспаления лёгких — добро пожаловать в реальный мир!

Решение

Я не государь в макиавеллевском понимании, я не способен к искусству невозможного. А ситуация заведена в состояние невозможного. Большинство интересантов ковида уже и сами не рады такому развитию событий. Видимо они забыли о том, что революция пожирает своих детей, а то что они учинили, иначе как революцией назвать нельзя. За короткий период времени рухнула такая куча общественных институтов, что вавилонская башня по сравнению с ними покажется детским куличиком из песка.
Изначально же, если вдруг политикам стали так важны человеческие жизни, нужно было сконцентрироваться на проблеме, а не на советах друзей: cобрать более или менее приличную статистику, на основе этой статистики выделить группы и сценарии риска. — Изолировать группы и переработать сценарии для ограничения бесконтрольного распространения вируса. Полностью его распространение всё равно невозможно остановить. Вот всё что нужно было сделать.
Да, это было бы недешево, но уж точно намного дешевле тех средств которые сейчас буквально сбрасывают с вертолёта. Правительства выбрали очень странное решение — выплеснуть младенца вместе с водой.

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

Cogito ergo sum

 Нет комментариев    508   2020  

Чиним phpmyadmin для Ubuntu 18.04

Нормальный phpmyadmin в репозиторий Ubuntu видимо никогда уже не зальют, поэтому если у вас при каждом клике выскакивает ошибка:

Problem with phpMyAdmin and PHP 7.2: “Warning in ./libraries/sql.lib.php#613 count(): Parameter must be an array or an object that implements Countable

То починить это можно довольно просто. В файле

/usr/share/phpmyadmin/libraries/sql.lib.php

в строке 613 меняем

(count($analyzed_sql_results['select_expr'] == 1)

на

((count($analyzed_sql_results['select_expr']) == 1)

т.е нужно взять count в дополнительные скобки.

 1 комментарий    348   2020   admin   phpmyadmin   ubuntu

Включение консоли групповых политик (gpedit.msc) в Windows 10

1) Cоздать бат файл с текстом:

@echo off
dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >find-gpedit.txt
dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>find-gpedit.txt
echo Installing gpedit.msc
for /f %%i in ('findstr /i . find-gpedit.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i"
echo Gpedit install has finished
pause

2) Запустить его с правами администратора. Windows сам доустановит недостающие компоненты

Как заставить ssh на Mac Os Mojave+ работать со старыми алгоритмами шифрования

Начиная с какого-то момента коннект ко всякому интернету вещей поколения 0, вроде дисковых накопителей стало невозможным благодаря бдительности Apple, теперь для удобства пользователя в таких случаях требуется небольшой танец с бубном.

Основную информацию можно почерпнуть здесь:
https://discussions.apple.com/thread/8196671

Редактируем файл ssh_config

sudo nano /etc/ssh/ssh_config

Раскомментируем строку:

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc

Сохраняем файл (Write Out) и выходим (Exit)

 Нет комментариев    291   2019   cipher   macos   ssh

Установка openssl 1.0.2 на ubuntu 18.04 и выше

Если уж пришлось сделать такой финт ушами (НИКТО не рекомендует даунгрейдить openssl, но писатели всякого нужного софта в большинстве своем на хую вертели ubuntu 18.04 и вместе с ним и openssl 1.1.0), то делаем все предельно просто:

wget https://launchpad.net/ubuntu/+source/openssl/1.0.2g-1ubuntu13/+build/12610155/+files/openssl_1.0.2g-1ubuntu13_amd64.deb

sudo dpkg -i openssl_1.0.2g-1ubuntu13_amd64.deb

Потом, после того как софт скомпилируется можно вернуться на базовый openssl

sudo apt-get dist-upgrade
sudo apt --fix-broken install

Функции C++ определяющие битовый характер числа

Проверка на то, что в «1» установлен только один бит

// 000001000 - true
// 000001010 - false
// 000000000 - false
template< typename T > // работает только для целых чисел
bool only_one_bit_set_to_one (T bits)
{
    return bits && !(bits & (bits-1));
}

Обратите внимание, что операторы «&&» и «!» логические, а не битовые!


Проверка на то что установлен только один бит и его порядковый номер от 0 до sizeof(T)-1

template< typename T >
int findSetBit(T bits)
{
    if (!(bits && !(bits & (bits-1))))
        return -1;
    return log2(bits);
}



Компилятор GNU (GCC) имеет в своем арсенале стандартную функцию для определения числа установленных битов

#include <iostream>

int main()
{
   std::cout << __builtin_popcount (4) << std::endl;
   std::cout << __builtin_popcount (3) << std::endl;

   return 0;
}



Начиная с С++11 можно использовать тип bitset в котором реализованы функции any(), none(), count() etc

#include <iostream>       // std::cin, std::cout
#include <bitset>         // std::bitset

int main ()
{
  std::bitset<16> foo;

  std::cout << "Please, enter a binary number: ";
  std::cin >> foo;

  if (foo.any())
    std::cout << foo << " has " << foo.count() << " bits set.\n";
  else
    std::cout << foo << " has no bits set.\n";

  return 0;
}
Ранее Ctrl + ↓