Category: it

Бритоголовый и С1-97

Маленький домашний Роскомнадзор

Не спрашивайте, как, но я набрел на настройки DNS-сервера для блокировки “неонацистских и гомофобных” сайтов:

https://git-01.md.hardenedbsd.org/shawn.webb/dnspinning-for-human-rights/

Удивительно, что борцы “за права человека” непременно изобретают собственную цензуру, в надежде, что она будет белой и пушистой, не то что у этих нехороших роскомнадзоровцев.

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

Кто все эти люди?

Увидел на Stackoverflow шедевральный вопрос – как на питоне посчитать коэффициент корреляции Пирсона:

http://stackoverflow.com/questions/3949226/calculating-pearson-correlation-and-significance-in-python/5713856

Ответы типа “используй SciPy/NumPy/WhateverPy” в принципе понятны – но кто поставил 12 “лайков” ответу пользователя compski?

import math

# calculates the mean
def mean(x):
    sum = 0.0
    for i in x:
         sum += i
    return sum / len(x) 

# calculates the sample standard deviation
def sampleStandardDeviation(x):
    sumv = 0.0
    for i in x:
         sumv += (i - mean(x))**2
    return math.sqrt(sumv/(len(x)-1))

# calculates the PCC using both the 2 functions above
def pearson(x,y):
    scorex = []
    scorey = []

    for i in x:
        scorex.append((i - mean(x))/sampleStandardDeviation(x)) 

    for j in y:
        scorey.append((j - mean(y))/sampleStandardDeviation(y))

# multiplies both lists together into 1 list (hence zip) and sums the whole list
    return (sum([i*j for i,j in zip(scorex,scorey)]))/(len(x)-1)

И прошло целых три года, прежде чем Николай Фоминых сподобился написать крайне токсичный по нынешним понятиям комментарий “ты мудак, тебе надо оторвать руки, а клавиатуру засунуть в жопу, чтобы ты больше не мог написать ни одной строчки кода” “У этого способа ужасающая сложность и низкая производительность на списках из 500+ элементов”.

Так вот – ладно, я не регистрируюсь на SO, потому что влом – но кто-то же проходил мимо этого образца говнокода, и за несколько лет так никто и не обложил хуями автора. Почему?

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

Еще один сборник задач по программированию

Наткнулся на опубликованные на сайте 57 школы “листочки” с задачами по программированию для математических и биологических классов:

https://prog.sch57.ru/

Это подборка из достаточно большого количества задач, укладывающихся в содержание хорошего школьного курса информатики “с программированием” (Python, основные алгоритмы, немного разной экзотики от machine learning до представления о веб-программировании) – к сожалению, на сайте она разбита по годам и классам, поэтому собрать курс целиком (или даже несколько – кажется, у “математиков” и “биологов” программа слегка отличается) в более-менее адекватном порядке может быть слегка затруднительно. По сложности – где-то между Pythontutor и книжкой Шеня. Из достоинств – задач больше, чем на Pythontutor, и в отличие от книжки, здесь есть задачи на “элементарные” темы. Есть критерии оценок – например, из листочка “Строки” на тройку надо решить 5 задач из 12, на четверку – 8, на пятерку – 10. Пользоваться для переворота строки всякими дебильными способами в явном виде запрещено, что не может не радовать.

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

Ознакомился с парой “обувных” ютуб-каналов

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

Помнится, несколько лет назад [info]infowatch утверждал, что человеческая письменность доживает последние годы, и следующим поколениям уже не надо будет уметь читать и писать – все будут пользоваться повсеместно распространенным ютубами и скайпами. Собственно, речь даже не о “поколениях” – вот уже в 2020 году для того, чтобы донести до своей небольшой аудитории несколько нехитрых мыслей, выбирают не формат “текста с картинками”, а видеоролик.

Собственно, по информативности эти видеоролики, скажем честно, уступают хорошо написанному “тексту с картинками”. Возьмем хотя бы первый из них – да, он хорошо снят и смонтирован, присутствует какой-то сценарий и подобие режиссерской работы – но в нем не хватает одного, и самого важного – крупных планов с происходящим. Ну вот скажите, что я должен увидеть на разложенных перед баночками клочках кожи? Остается верить на слово “говорящей голове” в кадре, слушая про то, как очередное средство делает кожу мягкой и шелковистой. Да и зачем смотреть получасовой ролик, который можно было бы заменить коротким текстом про то, чем отличаются средства для ухода за обувью, как правильно их использовать (тут можно вставить пятиминутное видео про полировку обуви, ладно) и несколькими фотографиями крупным планом, как что блестит и впитывается?

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

PS Умение читать и писать, конечно, никуда не денется, но перейдет в разряд специальных, “как выжить вдали от цивилизации”, наравне с разжиганием костра с одной спички и ориентированием по компасу.

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

Как стать специалистом по машинному обучению

Открыл для себя два прекрасных метода, позволяющих добавить волшебные слова “машинное обучение”, “искусственный интеллект” и даже “нейросети” практически куда угодно. Что особенно весело – оба способа доступны любому кодопису с IQ чуть выше обезьяньего.

Итак способ первый, для интеллектуалов, еще не забывших правила дифференцирования (матан, первый курс…). Представьте, например, что у вас есть десяток-другой каких-то числовых параметров, и вы уже порываетесь сделать какой-нибудь линейный классификатор. АСТАНАВИТЕСЬ! Вместо линейного классификатора возьмите простейшую модель искусственного нейрона (ADALINE подойдет), выпишите дифференцируемую функцию активации (гиперболический тангенс, например), честно продиффиренцируйте это все (да, придется попыхтеть с бумажкой и карандашиком) и не менее честно выпишите уравнение градиентного спуска. Готово! Вкорячив это в свою программу, не забудьте везде упомянуть про применение нейросетей.

Способ второй, доступный даже обезьяне. Честно прочитайте в англоязычной википедии про Q-learning. Если вы тупой – прочтите аналогичную статью в русскоязычной википедии. Определите “множество состояний” и “множество действий”, наукообразно это распишите, …, PROFIT!

Поочередно предлагая в подходящих случаях два этих способа, можно прослыть большим специалистом по artificial intelligence. Особый шарм ситуации придает то, что оба алгоритма реализуются за полчаса под пивко.

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

Кружевных трусиков псто

Чуваки и чувихи, а что вам показывает гуглопоиск первым результатом на запрос “C string”? Руководства по программированию или трусы оригинальной конструкции?

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

Про Agile

Навеяно беседами (раз, два) в фейсбуке, в которых железячники и к ним примкнувшие гнобят программистов за общую инфантильность и неспособность в предсказуемые сроки выдавать работающий результат. Так вот, хоть я и зарекся писать про TU D-stadt – что взять с убогих? – но не могу пройти мимо темы того, как в немецком программистском образовании освещены методологии разработки программного обеспечения. Их обзору посвящена целая лекция в конце первого семестра “общей информатики” (где учат в основном каким-то азам Java, да и тем плохо).

Краткое содержание лекции – “водопад это плохо, много ненужного бюрократизма, чуть получше – спиральная и V-модель, но истинное «наше все» – это гибкие методологии, Agile и прочий Scrum”. Под стать ей – и вопросы в итоговой экзаменационной работе – например, “назовите недостатки Waterfall model”. Напомню, что лучшее средство для того, чтобы студенты усвоили какую-то непреложную истину – вынести ее на экзамен, а в такой вот форме – будьте уверены, запомнят они именно недостатки.

Пожалуй, неправильно будет обвинять профессора в какой-то злонамеренности, он вроде бы хороший чувак, но ни дня не работал в “индустрии” – так что просто вынужден некритически пересказывать модные сейчас штуки про “гибкие методологии разработки”. Что получается на выходе – разумеется, такие же жизнерадостные программисты, обитатели страны розовых пони.

PS Да, что касается шуточек о том, что скоро курс информатики будут преподавать по материалам ebanoe.it. Уже! В Штатах в University of Massachusets Boston в рамках курса CS410 (Introduction to Software Engineering) читается лекция What to Expect from Tech Companies and their Hiring Processesразъясняется, что такое галера, гребцы, хрюши и все такое (нет, до такого еще не дошли – но скоро, очень скоро все будет!).

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

Боже, какой ужас

Джаваскриптеры и не только решают задачку:

Написать функцию, которая для заданного отсортированного массива чисел (все числа разные) выводит текстовую строку диапазонов:

getRanges([0, 1, 2, 3, 4, 7, 8, 10]); // 0-4,7-8,10
getRanges([4, 7, 10]); // 4,7,10
getRanges([2, 3, 8, 9]); // 2-3,8-9

Кто-то создает на каждый чих по объекту, кто-то собирается писать “с помощью гугла и Stackoverflow”, обсуждают читаемость простынки в несколько десятков строк с нетривиальной логикой… Ребята! Неужели приведенное на хабре решение более “читаемо”, чем такое (простите, но это будет plain old C), написанное за десять минут?

void printRanges( int *arr, int len ) {
    int start = arr[0];
    int prev = arr[0];
    int printed = 0;
    int i;
    for ( i = 1; i < len + 1; i++ ) {
        if ( i == len || arr[i] != prev + 1 ) {
            if ( printed ) {
                printf( "," );
            }
            if ( start == prev ) {
                printf( "%i", start );
            } else {
                printf( "%i-%i", start, prev );
            }
            printed = 1;
            if ( i < len ) {
                start = arr[i];
            }
        }
        if ( i < len ) {
            prev = arr[i];
        }
    }
    printf( "\r\n" );
}

Да, тут есть возможные улучшения - но неужели решение из поста кажется более понятным?

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

А вот что про гитхаб пишут

Некая мадам с гуманитарным образованием пишет про свою работу в техподдержке Github:

Летом 2014 года я пришла на собеседование в стартап-платформу для разработки продуктов с открытым кодом, офис которой находился на месте бывшей фабрики по производству сухофруктов.

В комнату ожидания меня проводил охранник в рубашке с логотипом компании и вышитой на ней надписи «Служба безопасности». А сама комната оказалась точно воспроизведённой копией Овального кабинета.

<…>

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

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

<…>

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

https://vc.ru/life/86558-rukovoditeli-kotorye-ne-umeyut-rukovodit-yadovitaya-atmosfera-i-vygoranie-pochemu-ya-razocharovalas-v-startap-kulture

Вот прямо интересно стало, не играл ли кто в ролевую игру “Билл Клинтон и Моника Левински” в этой копии Овального кабинета.

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Бритоголовый и С1-97

Инсулиновая помпа по джаваскриптерски

Вместо “охуеть” следует говорить “я поражен”:

https://liamz.co/blog/im-a-cyborg-now-on-building-my-own-artificial-pancreas/ (пересказ на русском)

А также интересно посчитать количество способов, которыми залетные хакеры, Роскомнадзор или просто глюки оборудования могут уменьшить поголовье программистов на Javascript.

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).