Мой небольшой нетбук на Linux работает 24/7. Он выполняет сразу несколько периодических скриптов. Так уж получилось, что его обязанность нельзя перенести на VPS или какой-нибудь хостинг. Поэтому крайне необходимо, чтобы этот нетбук непрерывно функционировал. Но наличие устойчивой ОС не гарантирует стабильность работы. Читать
Архив метки: Программирование
Linux. Запуск скрипта каждые N секунд
wget: команда не найдена
У некоторых дистрибутивов Linux отсутствует пакет wget из коробки. Поэтому могут возникнуть сложности с установкой и работой других программ и обновлений. Читать
Как создать действительно случайный и доказуемо безопасный пароль / Все про пароли

Менеджеры паролей, такие как KeePass, 1Password и множество других, в значительной степени решают эту проблему. С их помощью вы можете генерировать уникальный и безопасный пароль для каждого сайта, который вы посещаете. Но такой менеджер защищен ровно настолько, насколько безопасен главный пароль, который вы используете для доступа к нему. Вы должны быть уверены, что его достаточная случайность и неугадываемость подтверждена количественными измерениями, а не только тем, что вы воспринимаете его случайным по причине наличия нескольких цифр или восклицательных знаков. Если нам требуется истинная случайность, нам понадобится кое-что специальное.
К счастью, есть возможность купить что-то недорогое, с достаточной энтропией набора вероятностей и способное генерировать 3 бита информации за раз. Без электричества и достаточно надежно, позволяя сотням миллионов долларов ежедневно менять владельцев, основываясь на непогрешимости этой случайности.

Бросание игральной кости позволяет получить случайное число от 1 до 6, которое даёт нам 2,58 бита информации.
Основоположник теории информации Клод Шеннон определил информацию, как снятую неопределенность. Точнее сказать, получение информации — необходимое условие для снятия неопределенности. Неопределенность возникает в ситуации выбора. Задача, которая решается в ходе снятия неопределенности — уменьшение количества рассматриваемых вариантов (уменьшение разнообразия), и в итоге выбор одного соответствующего ситуации варианта из числа возможных. Снятие неопределенности дает возможность принимать обоснованные решения и действовать. В этом управляющая роль информации.
Энтропия — мера неопределенности, выраженная в битах. Так же энтропию можно рассматривать как меру равномерности распределения случайной величины.

В действительности нет нецелых, поэтому мы всегда округляем до ближайшего бита. В этом случае нам нужно 3 бита для хранения числа от 1 до 6, но на самом деле мы можем хранить и от 0 и до 7:
000 - 0
001 - 1
010 - 2
011 - 3
100 - 4
101 - 5
110 - 6
111 - 7
Количество комбинаций 0 и 1 определяет, насколько большое число вы можете хранить с помощью определенного количества бит. Каждый раз, когда вы добавляете еще один бит, вы удваиваете количество комбинаций. Это достаточно просто: если вы добавите еще один бит к двоичному числу, у вас будут все комбинации, которые у вас были раньше дважды: с 0 слева от них и с 1.
По сути, переменная с n-ным количеством битов может иметь 2^n (2 в степени n) возможных значений. Поскольку байт состоит из 8 битов, то он может иметь 2^8 (256) возможных значений.
Размер переменной накладывает ограничения на количество информации, которую она может хранить — переменные, которые используют больше байтов, соответственно, могут хранить более широкий диапазон значений.
Компьютеры имеют ограниченное количество свободной памяти. Каждый раз, когда мы объявляем переменную, небольшая часть этой свободной памяти выделяется до тех пор, пока переменная существует. Поскольку современные компьютеры имеют много памяти, то в большинстве случаев – это не проблема, особенно когда в программе всего лишь несколько переменных. Тем не менее, для программ, которые требуют большого количества переменных (например, 100 000), разница между использованием 1-байтовых или 8-байтовых переменных может быть значительной.

Так видеоигра The Legend of Zelda, выпущенная в 1987 году была 8-битной и имела ограничение для значений переменных равное 255.
Я хотел бы, чтобы энтропия для подбора моего пароля была по крайне мере 128 бит. По большинству исследований, взлом 128-битного шифрования практически невозможен с использованием методов грубой силы менее чем за несколько миллиардов лет. Используя уравнение 2^n, мы можем хранить одно из 3.4*10³⁸ различных значений, используя 128 бит. Если бы вы могли протестировать 100 миллиардов возможных значений в секунду, все равно потребовались бы десятки триллионов лет, чтобы угадать правильный пароль. Я считаю это достаточно хорошо. 128-битный пароль почти наверняка не будет слабым звеном в цепочке вашей онлайн-безопасности.
Если каждый из наших кубиков вырабатывает 2,58 бита энтропии за один бросок, то подбрасывание пяти даст нам 12,9 бита. Если мы используем 5 игральных костей 10 раз, то мы получим 129 бит информации, а для тех кто не знает результатов создадим неопределенность или энтропию равную 129 битам.
Но как превратить эти результаты в безопасный, но запоминающийся пароль?
Я использую Diceware, который является словарем слов, индексированных с помощью результатов подбрасывания пяти игральных костей. Каждый раз, когда вы бросаете 5 кубиков (или один 5 раз), числа, которые получаются, соответствуют слову в списке. Например, если на 5 кубиках выпало 1-4-2-6-3, нужно перейти на страницу со всеми словами 14xxx и обнаружить, что 14263 соответвтует «blab». Сделайте это десять раз, и вы получите строку из десяти слов. Эти десять слов — потенциальный пароль.
Далее нам поможет мнемотехника — совокупность специальных приёмов и способов, облегчающих запоминание нужной информации и увеличивающих объём памяти путём образования ассоциаций (связей). Например, можно использовать «принцип сюжета» — сочинить рассказ (сюжет), в котором задействованы запоминаемые слова. Например, чтобы запомнить последовательность слов: «Слон, домик, телевизор», — придумываем: «Слон шёл к себе в домик смотреть телевизор». Возможно, вы будете чувствовать себя глупо, но это работает, и вы будете удивлены, как быстро вы можете запомнить вещи таким образом.

В PDF формате одна из версий словаря доступна по ссылке тут, а тут версия на русском языке.
Если все это кажется излишним, помните, что это пароль, за которым хранится вся ваша финансовая и онлайн-жизнь. Если считаете, что этого того стоит, спуститесь в магазин комиксов и купите кубики. Зайдите в комнату, где нет камер, телефонов или компьютеров, бросьте кубики и напишите соответствующие слова из словаря (я бы выбрал 15 слов, чтобы убрать несколько, которых бы не знал). Затем выберите десять слов и запомните их. Это ваш пароль. Храните запись в течение нескольких дней, пока не убедитесь, что запомнили пароль, который предложено использовать для входа в менеджер паролей.
Теперь вы знаете как получить пароль, который действительно и доказуемо случайный, который не контролировался или не генерировался для вас третьей стороной и который безопасно хранится в вашем уме. Вы можете использовать его в течение нескольких лет, и это единственный пароль, который вам нужно будет знать. Даже если кто-то знает, что вы использовали 10 слов, и знаете, какой словарь вы использовали, им все равно придется «пробиваться» через 129 изнурительных бит энтропии.
Снимите шапочку из фольги и продолжайте свою жизнь. Надевать её время от времени — это нормально.
Комментарий Cloud4Y
Ранее этот вопрос поднимался на Хабрахабре в постах «Ликбез по псевдослучайным генераторам» и «Практические рекомендации по выбору паролей по результатам взлома antichat.ru«.
Основные выводы полученные автором:
1. Не столь важно, каким образом программа генератор получает пароли, сколь — откуда берет начальные данные. Если не происходит никакого интерактива вообще, следует усомниться.
2. Человек едва ли может уследить за отсутствием статистически популярных комбинаций в пароле, что подтверждается подбором 31790 паролей из 41037 MD5 хешей за 8 часов.
В связи с этим метод описанный Charlie Hoey может быть полезным особенно при отсутствии двухфакторной аутентификации.
Для повышения безопасности без добавления новых слов, вставьте один специальный символ или цифру, выбранную случайным образом в вашу кодовую фразу. Вот как это сделать безопасно: бросьте один кубик, чтобы выбрать слово в вашей фразе, повторите, чтобы выбрать букву в этом слове. Подбросьте игральную кость третий и четвертый раз, чтобы выбрать добавленный символ из следующей таблицы:
1 2 3 4 5 6
1 ~! # $% ^
2 & * ( ) — =
3 + [ ] { }
4:; » < >
5? / 0 1 2 3
6 4 5 6 7 8 9
Вставка буквы в случайном порядке добавит около 10 бит энтропии. Всё это, конечно, предполагает секретность кодовой фразы.
P.S.
Также рекомендую статью Charlie Hoey «A Eulogy for the Headphone Jack» (Хвала «джеку»), в которой он описывает то, как, не имея страховки, сэкономил 1000 долларов на проверке собственного здоровья, собрав аппарат ЭКГ и почему нам важно сохранить разъем для наушников и не потерять доступ к почти универсальному и свободному от лицензий порту ввода-вывода.
Эта и переведенная выше его статьи схожи идеей о том, как важно и приятно понимать то, как работает всё в окружающем нас технологическом пространстве.
Автор: Валерий Фетисов
Дата публикации: 2018-02-04T07:44:00.000+02:00
Создан портрет типичного ИТ-шника. Чем отличаются программисты на Java и .NET? Фото — CNews
Портрет типичного программиста
Технические особенности

Средняя зарплата айтишника


Автор: Валерий Фетисов
Дата публикации: 2018-02-02T07:26:00.004+02:00
7 смертных грехов программирования / Начинающему программисту
Джон Парселл, создатель CaveOfProgramming.com
- Использовать «Пробел» вместо «Tab». Всегда, всегда используйте «Tab», а не «Пробел».
- Использовать «Tab» вместо «Пробела». Всегда, всегда используйте «Пробел», а не «Tab».
- Не использовать автоформатирование. Забудьте про весь мусор вроде табов и пробелов, используйте автоформатирование в своем коде и людям не придется видеть ваши странные скобки и отступы.
- Использовать интегрированную среду разработки (IDE) с ее автоформатированием и цветными клавишами. Все коды должны быть написаны в vi или Emacs, что подтверждает безупречность ваших навыков программирования.
- Не использовать IDE. Никто не хочет платить за время, которое вы тратите на набор текста, если это можно сделать в один клик, или за прокручивание вверх-вниз с помощью заумной комбинации клавиш из LISP.
- Не учить С и С++. Два этих языка жизненно необходимы любому программисту. Думаете, Java так же хорош? Отлично, создайте мне систему управления гоночными автомобилями в режиме реального времени на Java, и я вам поверю.
- Учить С и С++ в то время, которое вы могли бы использовать на что-то более современное, например, на Java. Признайте – все таблицы, написанные на С или С++, изживают себя в течение 5 лет. И в таком случае в программном обеспечении есть серьезные ошибки, которые Java просто не позволил бы вам совершить.
Рой Леман, разработчик ПО
- Сначала написать, потом подумать. Вы получили требования к товару, пробежались по ним, запустили свою любимую IDE и принялись за работу. Легко, не правда ли?
Стоп! Вы уверены, что поняли требования до конца? Я не сомневаюсь в вашем умении читать. Но учли ли вы все пограничные случаи? Продумали, как будете тестировать систему? Набросали алгоритм, который собираетесь использовать? Завтра вы этого и не вспомните! - Изобретать колесо. Итак, вам нужно создать шаблон проектирования Producer-Consumer. Вы знаете, как это сделать, еще с университетской скамьи… Легко, не правда ли?
Стоп! Не важно, с каким языком вы работаете, уже существуют готовые шаблоны, или модули, или открытые исходники. Используйте их. Или по крайней мере изучите их перед тем, как создавать свои. - Бояться прикасаться к коду. Итак, у вас есть задание добавить несколько функций к 20 000-линейному файлу (О, нет! За что?) Вы радостно беретесь за работу и вдруг замечаете огрехи в исходных функциях – нет пограничного случая или проверки на нулевой показатель. Это находится за пределами сферы вашей ответственности. Так? Стоп! Если вы видите небезопасный код – исправьте его. Вы еще хлебнете на этих ошибках, даже если код написан не вами!
- Быть безразличным к тому, чем занимается ваша компания. Вы программист, верно? Написание кодов – это здорово, вы не изучали маркетинг или продажи, с чего вам интересоваться тем, что не имеет к вам отношения?
А следовало бы! Как можно создать продукт, не понимая, чем занимается компания? Как сделать так, чтобы продукт удовлетворял потребности клиента?
Никак! Изучите дело, будьте в курсе всех вопросов компании, а не только тех, которые касаются непосредственно вас. Это важно! В какой-то момент это даже может повлиять на ваше повышение.
- Не следить за новыми трендами. Вы занимаетесь программированием уже 10 лет и подыскиваете работенку.
Перед этим вы работали старшим разработчиком С++ в крупной корпорации – за многое отвечали и имеете отличные рекомендации. Вы вроде знаете, что такое DevOps, но на практике никогда не сталкивались с этими практиками и с С++14? На вашем предыдущем месте работы в ходу был С++98… Не так уж важно, не так ли?
Нет, не так!
Никто не похвалит вас за владение технологиями 15-летней давности!
Если вы не учитесь в свободное время, чтобы соответствовать запросам работодателя, ваша кандидатура будет отвергнута! - Не обладать коммуникативными навыками. Вы разработчик, к чему вам уметь общаться с людьми! Вам платят за умение общаться с компьютером, а не коллегами. Сиди себе, пиши качественные коды и добьешься успеха, верно?
Не верно!
Ваше неумение кратко и четко изложить суть дела вышестоящим – самая большая головная боль для менеджера.
Очевидно, что это не единственный параметр, по которому вас оценивают, но все же – грамотное предоставление информации в дружественной манере повысит доверие со стороны коллег и вот тогда вы добьетесь успеха. - Не иметь целей. Вам нравится ваша работа, вы прекрасно владеете технологиями Deep Learning. Передовые технологии, прекрасные коллеги… Вы могли бы работать так вечно.
Но – вы не будете. Все когда-нибудь заканчивается, иногда резко и неожиданно. Если у вас не будет карьерных целей, вы можете оказаться на задворках, выполняя работу и получая зарплату, которые вас не достойны.
Так что думайте наперед – где бы вы хотели оказаться через 10 лет? В какой роли вы себя видите?
Научным работником? Разработчиком? Менеджером по продукции? Вице-президентом? Техническим директором? Исполнительным директором?
Вам решать!
Нико Салминен, старший консультант
- Лень: Ну, кажется, код работает нормально. Нет необходимости писать комментарии или проводить автоматизированное тестирование.
- Похоть: Эй, а ведь этот новый срочный проект – отличная возможность опробовать новый крутой фреймворк, о котором все говорят!
- Зависть: Другая команда продвигается быстрее, чем мы. Лучше не помогать, если у них возникнут проблемы при интеграции с нашим кодом.
- Чревоугодие: Мне нужно выполнить итерацию ключей объекта. Мне совершенно необходимо импортировать 1,5-Мбайтную библиотеку для проведения этой операции.
- Гордыня: Прочтение этой книги по шаблонам проектирования сделало меня лучшим разработчиком, нежели коллеги! Я собираюсь использовать каждый шаблон, упомянутый в книге при работе над следующим проектом.
- Гнев: К черту все! Пускаю этот патч hotfix прямиком в производство!
- Алчность: Они что предлагают изменить код в моем репозитории? Отклонить! Это мой проект!
Усман Шаукат, более 8 лет опыта в сфере веб-разработки, PHP, Javascript, Node.Js
- Программировать, не планируя. Самый страшный из всех грехов.
- Пытаться изобрести колесо. Если есть возможность, всегда используйте алгоритмы, предложенные в книгах и научных статьях (например, алгоритмы сортировки, поиска и т.д.), а не пишите собственные.
- Писать несистематизированные/некачественные коды и не придерживаться стандартов программирования.
- Считать, что тестирование – это не ваша забота. Я вас очень прошу, пожалуйста, тестируйте свои коды.
- Писать сложный код, когда с тем же успехом можно обойтись простым. Простые коды – это элегантно.
- Слепое копирование-вставка с сайтов вроде stackoverflow.com без ознакомления с пояснениями и комментариями.
- Последнее, и самое важное – совершенствуйтесь сами и осваивайте новый инструментарий. Никогда не бойтесь новшеств. Знакомьтесь с ними раньше всех. Это поможет вам оставаться востребованным.
Автор: Валерий Фетисов
Дата публикации: 2018-01-31T06:09:00.000+02:00


