Category: it

Category was added automatically. Read all entries about "it".

Пну-ка я снова Линукс

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

А вот теперь поменяй Винду 7 на Убунту 16, а десятую винду на Убунту 18. И получишь конскую эту самую на воротник, чтобы шею не натирало. Софт будет отваливаться с дикими криками по поводу ненахождения старых версий самых разнообразных библиотек (например, libc или libwebp — это уж смотря какой софт).

А на десятой винде софт, работающий на XP, до сих пор запустится (в большинстве случаев) вполне нормально.

Линупс бесплатен только в том случае, если твоё время ничего не стоит.

Пост написан по мотивам “как Плотник обновлял машинку с Apache Guacamole, которую надо из сырцов собирать, потому что в apt-шных репозитариях оно древнее говна мамонта.”

Mirrored from Лабораторный Журнал №6.

BlueHost — замумил

Основное зеркало блога я держу на bluehost.com. Задолбали, ироды. PHP 7.0 — единственная версия PHP, в которой есть mysqli. Соответственно, шаг вправо, шаг влево — и Вордпресс пролетает как фанера над городом Парижем. Только вот 7.0 у нас нынче “deprecated”, так что грёбаный хостер каждый день переключает меня на PHP 7.3, и всё благополучно рушится. В поддержке все как один, индусы, и говорят “мы ничего не можем сделать отсюда”. Нах-нах, сваливаю при первой же возможности.

Mirrored from Лабораторный Журнал №6.

Про обновления

Всё же надо признать, что у Линукса, при всём моём пренебрежительно-ироническом отношении к этой операционной системе, выросшей из дипломной работы и непонятно как ставшей популярной, значительно лучше с установкой обновлений.

На Демьяне и Демьяно-подобных: sudo apt-get update && sudo apt-get install && reboot и всё. И устанавливается всё очень быстро.

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

Mirrored from Лабораторный Журнал №6.

Нейронные сети

Ух, как продвинулся прогресс! Раньше создание своих нейронных сетей было занятием дико сложным, требующим понимания математики и нехилого программирования. Я даже нарисовал свою, на Сишарпе. Она, конечно, была простенькая, но я очень много понял (особенно хорошо я понял, почему ничего, кроме свёрточных сетей, для классификации изображений использовать невозможно — тупо памяти не хватит).

А теперь движок нейронных сетей не надо писать самому. Сначала появилась Caffe (я использовал её для одного из проектов в университете по поиску изображений), а потом Гугл открыл свой TensorFlow для всех. Но даже TensorFlow был ОЧЕНЬ непрост в использовании. А теперь выяснилось, что для TensorFlow написали кучу вменяемых библиотек, и создание нейронных сетей стало очень несложным занятием.

Их несколько, но больше всего мне понравилась библиотека keras. И дело не сколько в том, какая она хорошая, а в том, что для неё больше всего документации 🙂 В прошлый раз, когда я щупал нейронные сети, я использовал библиотеку TF-Slim. Документации для неё, можно сказать, не было. Пришлось хакать исходники примеров, чтобы получить что-то своё.

Но оцените, как это теперь просто!

Вот, например, Питонный код для создания простой нейронной сети из двух входных нейронов, 16 скрытых, и 3 выходных. На входе единички и нолики, представляющие собой True и False, и три выходных нейрона, один выдаёт результат логической операции XOR, второй AND, третий OR. Тренируется сеть меньше, чем за 1000 эпох (если увеличить количество нейронов в скрытом слое, то ещё быстрее).

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

model = tf.keras.Sequential()
model.add(layers.Dense(16, activation=’relu’))
model.add(layers.Dense(3))
model.compile(optimizer=’adam’, loss=’mean_squared_error’, metrics=[‘binary_accuracy’])

data = np.array([[0,0],[0,1],[1,0],[1,1]], “float32”)
labels = np.array([[0,0,0],[1,0,1],[1,0,1],[0,1,1]], “float32”)

model.fit(data, labels, epochs=1000)

print(model.predict(data).round())

Элементарщина же!

Осталось понять, чего прикольного теперь можно с этим сделать 🙂 Наверное, ничего — чтобы сделать что-то прикольное, надо поставить задачу и дать вводные 🙂 Разве что сделать нейронную сеть и запустить её наоборот, в генеративном режиме, предварительно скормив ей, например, музыку Моцарта в формате MIDI 🙂 Кстати, вполне реальная вещь, вот чувак кормил сеть Бахом: https://www.youtube.com/watch?v=SacogDL_4JU

Mirrored from Лабораторный Журнал №6.

Папа знает

Самыми умными людьми в истории человечества, наверное, были первобытные охотники-собиратели. При средней продолжительности жизни в 35 лет, в условиях частого голода, нерегулярного питания, человек должен был в кратчайшие сроки познать мир для того, чтобы выжить. Надо было знать повадки зверей (у всех разные), методы охоты на них, основы навигации, а также иметь способность мгновенно определять вид растений и грибов — съедобные ли, ядовитые? Выживали только умные. Остальные мёрли с голоду или же их задирал медведь.

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

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

Но зато отличат так сильно любимые нами ныне нейронные сети. А нейронные сети нынче работают везде, даже в телефонах. Скачал себе программу PictureThis (дают триал на три дня), теперь каждый выход на улицу с детьми обязательно сопровождается расспросами “папа, а что это за дерево?” И папа незамедлительно даёт ответ 🙂 Впрочем, хошь не хошь, а при помощи этой программы и сам начинаешь запоминать разные виды растений. Теперь я и сам без проблем отличу вереск от дикого винограда. Кстати, и для грибов такие программы тоже есть. Но в Алабаме с грибами хреново — хороших мало. Самый лучший гриб, который у нас есть — красный подберёзовик. Он редкий, и в 95% случаев червивый, зараза. Так что программу для определения грибов я использую в основном для того, чтобы понять, что за несъедобная хрень выросла у меня на заднем дворе.

Mirrored from Лабораторный Журнал №6.

IT-гримасы кризиса

Все помнят Y2K? Тогда огромное количество существующих государственных систем потребовали переписывания, так как они некорректно отрабатывали двузначные даты. Огромное количество этих приложений были созданы в 1970-80е на Коболе, и внезапно программисты на Коболе оказались дико востребованными.

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

Правда, ищут они волонтёров, то-есть, предлагают работать за бесплатно, так что #goodluckwiththat

И не вполне понятно, чего они хотят починить. Древний мейнфрейм, хоть ты программу обпереписывайся, быстрее работать не станет.

Поглядел я этот Кобол, кстати. Дико раздражает его многословность. Даже в таких простых вещах как операторы сравнивания. Чего стоит, например, условие “A не равняется B”. На Сях оно просто: A != B. А на Коболе надо писать A IS NOT = B. Ага, вот так, знай наших! Мы не как другие всякие! Меня, кстати, то же самое раздражает в Повершелле. Там нельзя написать A > B. Надо писать A -gt B. Дичь какая-то. Создателем Кобола, кстати, является женщина, и я не хочу показаться сексистом — но может быть эта многословность оттуда?

Mirrored from Лабораторный Журнал №6.

FIPS

Дальше всякое сисадминское.

FIPS это Федеральный Стандарт по Обработке Информации (Federal Information Processing Standard). Когда говорят FIPS, обычно подразумевают публикацию Национального Института Стандартов и Технологий (NIST) за нумером 140-2. В ней описываются всяческие стандарты безопасности, включая алгоритмы шифрования, генерации случайных чисел и т.д. В России тоже есть аналог этого документа, это ГОСТ 54583-2011.

В Винде режим совместимости с FIPS включается довольно просто — либо через групповые политики (если у нас домен) или же через локальные настройки безопасности: Local Policies -> Security Options -> Use FIPS Compliant algorithms for encryption, hashing, and signing. Это заставит все программы, выполняемые на компьютере, использовать только безопасные алгоритмы. Если же программа захочет использовать небезопасный алгоритм (например, алгоритм хеширования MD5), то она вывалится с ошибкой “не шмагла”, а в евентах останутся соответствующие матюги от SCHANNEL.

И вот заодно пнём Линукс. Вернее, не сколько сам Линукс, сколько восторженных линуксофанатов. Скажите мне, дарагие друзиа, как на вашей любимой платформе включается режим совместимости с FIPS? А? Чего молчите? Ну, тогда отвечу я: НИКАК. Чтобы получить FIPS-совместимый Линукс, надо менять ядро на FIPS-совместимое, а оно (кокой сурприз!!) — продаётся и обновляется строго за деньги. Просто вы, дарагие друзиа, ничего сложнее пишмашинки или стандартного LAMP-сервера в жизни не делали, поэтому продолжаете считать, что Линукс — он бесплатный.

Пойдём далее. Самая большая засада с включением FIPS в том, что весь софт, который не умеет в SHA, AES и прочие умные слова, перестаёт работать. И ладно там если перестаёт работать какое-то самописное изделие или ещё какой несерьёзный софт. А вот у меня вчера перестал работать SQL Server. Ага, вот так вот, мля, знай наших! Вернее, перестал работать не сам сервер баз данных, а сервис линкования серверов. Он же шпарит по шифрованому протоколу между сервантами. И вот видимо конкретно эта часть не является FIPS-совместимой, так как от сервера прилетает TCP RST сразу после попытки TLS-рукопожатия.

Будем сегодня разбираться, не то это DBA чего-то не так наконфигурял, либо надо писать телегу в Microsoft, чтобы FIPS-совместимый продукт стал, наконец, FIPS-совместимым.

Mirrored from Лабораторный Журнал №6.

Пнём Линукс

Есть у меня флешка на 128 гигабайт. Винда её форматирует NTFS примерно секунды две. Та же самая флешка, воткнутая в Линуксовую машину, форматируется ext4 уже полчаса. И конца-края этому процессу не видно.

Современная, дружественная пользователю операционная система, да.

PS: Не говоря уже о том, что NTFS в сто раз круче ext4. На флешке, правда, не так важно.

Mirrored from Лабораторный Журнал №6.

PHP порадовал

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

var_dump(md5(‘240610708’) == md5(‘QNKCDZO’));

Выдаёт bool(true).

То-есть, MD5 хеши для строк ‘240610708’ и ‘QNKCDZO’ являются одинаковыми (с точки зрения PHP).

С нормальной точки зрения хеши неодинаковы. Первый 0e462097431906509019562988736854, второй — 0e830400451993494058024219903391.

Но. Оператор сравнения == в PHP может на ходу преобразовать тип данных (type mangling). Эти строки оно переделывает в цифры в экспоненциальной записи. Всё, что до ‘e’ — мантисса, всё, что потом — порядок. А так как мантисса у нас 0, её можно умножать хоть на чёрта лысого, она всё равно останется нулём. 0 == 0, естественно, возвращается true.

Вот, что случается, когда кто-то придумывает свой язык программирования с синтаксисом Си, но что-то записанное этим синтаксисом, работает не как в Си.

В PHP данная ошибка программиста (программиста ли?) лечится использованием специального оператора сравнения === вместо ==, т.е. строгим сравниванием вместо обычного, без преобразования типов.

Вот именно поэтому не следует учиться программированию на языках со слабой и динамической типизацией данных. На питонах, перлах и php можно, например, сравнить “1” и 5. А Джава незамедлительно пошлёт погромиста нахер: не сравнивай божий дар с яичницей. Плюс на Джаве то, что выглядит так как на Си, работает так же. Что, на мой взгляд, архиверно.

Mirrored from Лабораторный Журнал №6.

Про десятую винду

Меня, в принципе, десятая винда удовлетворяет. Хотя стартовое меню я до сих пор считаю одним из кривейших решений в истории Микрософта. Его, конечно, можно настраивать, и сделать довольно удобным, но всё равно — хреновое это решение, если честно. Это, впрочем, не с десятой винды началось, а ещё с восьмой. И что характерно, совершенно непонятно, почему и зачем. То-есть, в случае с десятой виндой ещё более-менее понятно — ради лучшей работы на мобильных устройствах (Microsoft Surface весьма неплохо себя чувствует на рынке, у меня даже такое есть). Но совершенно непонятно, на кой хер это издевательство надо было тянуть на серверные версии винды, там что, тоже мобильные устройства, что ли? Ага, сервер баз данных на планшете. Или доменный контроллер. Рехнуться и не встать.

Но одна вещь в десятой винде просто ВЫБЕШИВАЕТ. Это работа с не очень стандартными USB устройствами. Почему-то тут всё строго через анальное отверстие.

Вот у меня, например, есть игра RockSmith. Игра заключается в том, чтобы подключить настоящую электрогитару с компу и играть по табам. В комплекте с игрой идёт USB кабель, с точки зрения компьютера представляющий собой USB микрофон. Один конец кабеля в комп, другой в разъём 1/4 дюйма на родном стратокастере и погнали.

Так вот заставить этот микрофон работать на десятой винде — это просто майн кампф какой-то. В последний раз я это сделал, вынеся ВСЕ USB устройства из диспетчера устройств к соответствующей матери нахер. После этого оно заработало. Но проработало недолго — до следующего обновления. Потому что в обновлении они в очередной раз что-то докручивают, после чего нихера не фурычит.

И ладно бы ещё устройства третьих фирм бы ломались. Но сейчас я, например, не могу заставить винду увидеть контроллер от коробокса. Хотя уж, ЕПТЫТЬ, казалось бы — Микрософтовский же продукт! И Микрософтовская ОС его в упор не видит.

Что за ерунда….

Mirrored from Лабораторный Журнал №6.