А ведь если перевести аббревиатуру SJW на русский язык, она станет гораздо ближе к истиной сути.
SJW == ВСС.
Воины СС, ага, ага.
А ведь если перевести аббревиатуру SJW на русский язык, она станет гораздо ближе к истиной сути.
SJW == ВСС.
Воины СС, ага, ага.
Преамбула, или минутка негодования
Вызвали сегодня к старым клиентам с симптомами, мол новый мальчик от провайдера приходил, нам что-то обновил, в черной коробочке покопался и теперь ничего не работает. «Черная коробочка» — это и есть тот самый DIR-300. С 2011-го «черная коробочка» нареканий не вызывала. Приезжаю, действительно вижу, что ничего не работает, да еще и пароль на вход в админку поменян. Фигня война, сбрасываю к заводским настройкам, захожу в админку роутера и вижу ЛЮТЕЙШИЙ ПИЗДЕЦ, ад и Израиль, крипоту почище Сайлент Хилла.
Сраный хипстер из провайдера действительно обновил прошивку, и, что самое ужасное, в прошивку оказались внедрены бэкдоры (официально «дополнительные сервисы») от главных спамеров, доставщиков гнилой шавермы и рабовладельцев Роисси. Да, не поверите — страшный сон любого админа, теперь не только Яндекс.Браузер, который пытается всеми правдами и неправдами пролезть на десктоп, но и Яндекс.Бэкдор в роутере.
Чуть челюсть не отвалилась. Это ж до какой ручки дошла когда-то уважаемая компания DLink, что связалась с Яндекс.Спамом? Но это полбеды. Яндекс.Скам еще и мешал нормальной работе роутера.
Выдал я такое, что дохлый основатель Хуяндекса завертелся в гробу, и принялся откатывать все назад. Слава Ктулху и Великим Древним, что я компьютерный Плюшкин, и таки нашлась у меня нормальная прошивка, сделанная до того, как DLink продался Яндекс.Сволочам.
Откатил, все заработало.
Яндекс.Спам, Яндекс.Срам, Яндекс.Дерьмо, Яндекс.Хуесосы.
Чтоб вы все нахуй сдохли, суки.
DIR-300A_C1
Заодно уж и мастер настройки DLink Click’n’Connect с оригинального диска

Ох, и задолбался же я его искать. Пусть теперь тут лежит, мало ли еще кому понадобится.
По многочисленным просьбам зрителей обновлена утилита DetecTOR, которая определяет, присутствует ли определенный IP в сети Tor.
— В связи с тем, что база данных Tor’овских IP по адресу http://torstatus.blutmagie.de/query_export.php/Tor_query_EXPORT.csv сдохла, то в качестве источника данных по умолчанию установлена https://check.torproject.org/exit-addresses и формат «Только IP».
В формате «Только IP» утилита пытается вытащить из источника данных все, что похоже на записи адреса IPv4 в полном формате (x.x.x.x, где x — число от 0 до 255).
— Выяснилось, что утилита не работает на Windows XP с IE6. Ошибка для C# программ (и не только их) известная, решение следующее:
Для Windows XP необходимо установить Internet Explorer 8 с обновленными корневыми сертификатами, отдельно или в составе кумулятивного обновления. Обновление можно скачать здесь или здесь
Основная статья о DetecTOR Копия
Скачать (портативная версия)
Исходники

Попался вот такой вот раритетный телефончик, правда, не грузящийся. Кто-то его пытался перепрошить и чуть не окирпичил. Поскольку, пока делал, последовательность не записывал, то инструкция больше для себя. Осторожнее. В телефонах я не профи.
1. Заряжаем телефон полностью
2. Качаем архив (драйвера + прошивальщик + прошивка + менеджер мидлетов)
3. Ставим драйвера (в архиве версия для x86 и x64 системы, для Win7)
4. Ставим прошивальщик
5. Запускаем прошивальщик, рядом с полем Filename в главном окне тыкаем в кнопку с тремя точками, выбираем прошивку.
6. Переводим телефон в прошивочный режим. При выключенном телефоне нажимаем * # и кнопку включения. На экране телефона должно отобразиться:
Boot Loader
0A.30
SW Version:
[ВЕРСИЯ ПРОШИВКИ]
Все проверяем, та ли прошивка, если все ОК, втыкаем телефон в компьютер, ждем, пока схватятся драйвера и девайс определится в системе и отобразится в прошивальщике.
7. Нажимаем в прошивальщике кнопку Start
8. Появляется окно с описанием хода прошивки. В столбце Status текущая операция, в столбце Progress — ее ход.
9. В конце прошивки прошивальщик напишет Finish, и телефон перезагрузится. Иногда надо перезагрузить вручную.
10. Берем карту памяти, копируем на нее подкаталоги Elf и Java из каталога с прошивкой, вставляем карту в телефон.
Тема на 4pda
Инструкция по прошивке на motofan.ru
Описание прошивки из архива
Прямая ссылка: https://youtu.be/6HPRNnk_9nU
Официальный сайт
Копия на Mega.NZ
Официальный сайт
Автономный установщик
Firefox Setup 49.0.2
Firefox Setup 52.9.0esr
https://github.com/Feodor2/Mypal/releases
Дистрибутив
Справка (русская)
Копия на Mega.nz (Дистрибутив+справка в RAR SFX-архиве)
KB828041 (первое обновление)
Пакет обеспечения совместимости
Средство удаления скрытых данных
Официальный сайт
Far Manager v3.0 build 5577 x86
Far Manager v2.0 x86
Far Manager v2.0 x86 (урезанная версия для встраивания в образы)
.NET 2.0
.NET 3.5
.NET 4.0
Копии в одном архиве (ZIP)
Aimp + Aimp Tools + Plugins (визуализации) ZIP
Скачать с официального сайта:
Версия x86 (32-разрядная)
Версия x64 (64-разрядная)
Копии:
Версия x86 (32-разрядная)
Версия x64 (64-разрядная)
Вчера ты нефор, гей, развратник
Сейчас гебня, крымнаш и ватник.
Я гуляю по проспекту
Мне не надо ничего
Свои гены растопырил
Заражу я хоть кого
Эй прохожий проходи
Эх пока не заразил!
Эй прохожий проходи
Эх пока не заразил!
В помещеньях я хожу
Без билета
Осенью,весной хожу
Зимой и летом
Эй прохожий проходи
Эх пока не заразил!
Эй прохожий проходи
Эх пока не заразил!
Прихожу домой я ночью
И включаю интернет
А сосед за стенкой стонет
Кашляет, его уж нет
Эй прохожий проходи
Эх пока не заразил!
Эй прохожий проходи
Эх пока не заразил!
Эй прохожий проходи
Эх пока не заразил!
Эй прохожий проходи
Эх пока не заразил!
Прямая ссылка: https://youtu.be/ArbPkSVoA7E
Прямая ссылка: https://youtu.be/Z1Dtpr6EcCA
Довольно частой задачей является узнать, встречается ли в строке какое-нибудь слово или же, в более общем случае, подстрока.
Для решения можно воспользоваться внутренними механизмами bash, но я покажу более башенезависимый способ, с помощью grep. Благо он есть практически везде, даже в каких-нибудь системах, основанных на BusyBox, а вот вместо bash может встретится и просто sh, и что-нибудь более экзотическое.
Предположим, что в переменной STR имеется строка:
STR="cat lynx lion coguar"
В переменную SUBSTR запишем первый параметр командной строки скрипта ($1):
SUBSTR="$1"
Выводим содержимое переменной $STR, передаем вывод grep с нужными параметрами, а результат сохраняем в переменную-счетчик:
CNTR=`echo "$STR" | grep -w -c "$SUBSTR"`
В данной команде более всего интересны параметры grep:
-w — искать целое слово.
Примечание: Словом по умолчанию считается все, что отделено от других символов пробелом(-ами) табуляцией(-ами) или переводом(-ами) строки.
-с — подсчитать количество строк с нужным вхождением
Примечание: Ключ -с заставляет grep подсчитывать строки, а не сами вхождения, так что количество вхождений слова в строку, так посчитать не получится.
В итоге в переменной CNTR оказывается 0, если совпадений нет, и 1, если совпадение есть, остается только проверить:
if [ "$CNTR" -ne 0 ];then
echo "Exist"
else
echo "Not exist"
fi
Примеры работы:
./exist-word lion
Вывод:
Exist
./exist-word dog
./exist-word li
Вывод:
Not exist
Под подстрокой имеется любой набор символов, идущих подряд.
Задача решается аналогично предыдущей, только из параметров grep удаляется ключ -w
Если из вышеуказанного скрипта удалить ключ -w grep‘а, то вывод будет таким:
./exist-word li
Вывод:
Exist
Т.е. теперь была найдена подстрока li (часть слова lion).
В центре города Уханя,
Где травинки не растет,
Жил великий вирусолог,
Черный маг и руноплет.
Иногда ему Иные
Помогали, как могли
Даже, блин, грибы с Юггота
(Хоть им было неохота)
РНК ему дАли!
Тридцать три короны,
Тридцать три короны,
Тридцать три короны,
свежая строка
Тридцать три короны,
Вирь родился новый
Из куска Иного РНК!
В пять утра вставал он ровно,
Пентаграммочку чертил,
Заносил туда он колбы,
Чашки Петри заносил.
День за днём промчалось лето,
Звезды встали как должны.
Результат эксперимента
И побочные эффекты
Были всем нам явлены!
Тридцать три короны,
Тридцать три короны,
Тридцать три короны,
свежая строка
Тридцать три короны,
Вирь родился новый
Из куска Иного РНК!
При работе с конвейерами (пайпами, «трубами», pipe), часто возникает вопрос, как отловить ошибку, произошедшую внутри конвейера.
Для примера возьмем код, где ход загрузки файла отображается dialog’овым прогрессбаром (копия):
#!/bin/bash
FADDR="http://tolik-punkoff.com/static/test.mp3"
wget --progress=dot -O "./test.mp3" "$FADDR" 2>&1 |\
stdbuf -o0 awk '/[.] +[0-9][0-9]?[0-9]?%/ { print substr($0,63,3) }' | \
dialog --gauge "Download file from $FADDR" 10 100
Как видите, конвейер (т.е. передача вывода от одной команды другой через |), тут налицо.
Если после данной команды просто дописать echo $?, то будет видно, что результат будет 0.
И когда все в порядке:

И когда все не в порядке (в данном случае, сделан обрыв связи):

На самом деле, это происходит потому, что в переменной $? оказывается код завершения последней команды в pipe.
В современных версиях bash перед использованием контейнера, необходимо добавить команду:
set -o pipefail
В старых bash и некоторых других оболочках придется извращаться, может как-нибудь вернусь к вопросу (если для какого утюга что писать буду).
После добавления вышеуказанной команды в скрипт делаем тест с обрывом связи:

Или указываем в переменной $FADDR некорректный адрес:

Теперь echo $? отображает корректный код завершения.
Хотел, конечно, назвать как-нибудь типа «гадское поведение wget» или «уничтожение файлов wget‘ом», но остановился на этом. Добавлю ссылку в пост о кодах ошибок (копия) на этот пост.
Но на самом деле, это вроде маленькая и многим известная штука, но которой мало кто задумывается. Особенно, если использует wget в своих скриптах. Отдельно отметить это меня сподвиг тот самый скрипт, с которого я начал сегодняшний разговор о wget (копия)
Оказывается, wget создает новый файл перед закачкой. Несмотря на то, появятся там какие-то ошибки или нет, и несмотря на то, какие ошибки это будут, хоть это ошибки сервера (например 404, файл не найден), или ошибки сети (файл не удалось докачать), файл все равно будет создан. Хотя по логике, например, ошибку сервера (пусть 404) можно было бы сначала и проверить. Но wget этого не делает, если не случилась ошибка с кодом 2 (ошибка параметров командной строки или конфигурационных файлов).
На самом деле, такой подход довольно правильный, ну и правда, какая разница, почему оно не скачалось (или не сохранилось на диск в случае I/O error). И для анализа ошибок проблем меньше.
Наибольшую проблему это представляет собой тогда, когда пользователь указывает в параметрах wget ключ -O <путь к файлу>, тогда wget придется его полюбому перезаписать.
Так-то у wget есть «защита от дурака», если файл, например, file уже существует, то при следующей закачке файл file (под тем же именем) будет сохранен, как file.1, и если что, старый файл останется в целости и сохранности. Но в скриптах ключ -O удобно использовать. Не надо следить за этими номерами файлов, и вообще в скрипте, wget без ключей, один сплошной геморрой. Так что ключи используют. Но как же правильно это сделать? Да выбирать место сохранения скачанного и проверять коды ошибок wget!
1. Скачиваем файл во временный:
wget -O "/tmp/test.tmp" "http://example.org/test.dat"
2. Проверяем коды ошибок (здесь самый простой вариант)
if [ "$?" -eq 0 ]; then #Пункт 3 fi
3. Копируем скачанный файл в целевой: cp /tmp/test.tmp /home/pi/test.dat
Естественно, все имена файлов и пути меняем на свои.
1. Скачиваем файл:
wget -O "~.data/test.dat" "http://example.org/test.dat"
2. Проверяем коды ошибок (здесь самый простой вариант). Если ошибка — завершаем работу:
if [ "$?" -ne 0 ]; then rm "~.data/test.dat" echo "Data download error!" exit fi
И наглядно увидеть, где засрано 🙂
Для отображения размеров каталогов (с подкаталогами), есть стнадартная утилита du, но, если честно, она не очень удобная. Гораздо удобнее ее аналог, написанный с помощью ncurses — ncdu
Пользоваться очень просто. Заходим в каталог, в котором хотим узнать размеры подкаталогов, и просто вызываем утилиту:
ncdu
Наверное, ее единственный минус, что в каталог уровнем выше, чем тот, из которого ее вызвали, она не переходит. Так что если хотите посмотреть размеры каталогов сразу во всей файловой системе, надо вызывать ее из корня (/). Но причина такому поведению легко может быть найдена — после запуска утилита сканирует все подкаталоги, чтоб потом нам красиво показать. Чем с более верхнего уровня ее вызываешь, тем дольше процесс сканирования.

ENTER, возврат назад по стрелке влево, клавише h или < (обычно запятая с шифтом) или по нажатию ENTER на .., как в mc. Краткая справка по ? (не забывайте нажать SHIFT), выход по q.

В Slackware устанавливается штатным образом через sbopkg, как в других линуксах не знаю, в Убунте и Дебиане есть в репозиториях.
Раз уж пошел разговор про wget (копия), решил я заодно дополнить добрым людям скрипт какими-нибудь осмысленными сообщениями об ошибках, а для того нужны коды завершения.
Кто-то, неизвестно почему, утверждал, что в man их нет. Есть. Но пусть уж будут и тут, и мне от склероза, и мало ли кому другому, кто не любит на буржуйском читать.
0 — OK (ошибок нет)
1 — Иная / общая ошибка (generic error code)
2 — Ошибка в параметрах командной строки или файлах конфигурации (.wgetrc или .netrc)
3 — Ошибка файлового ввода/вывода (I/O error)
4 — Ошибка сети (например, при обрыве связи)
5 — Ошибка SSL
6 — Ошибка идентификации (неправильное имя пользователя или пароль)
7 — Ошибка протокола
8 — Ошибка сервера (например, нужный файл на сервере не найден, ошибка 404)
За исключением 0 и 1, коды выхода с меньшими номерами имеют приоритет над кодами с большими номерами, когда встречаются многочисленные типы ошибок.
Написали тут с вопросом, мол виснет у нас программа, почему никто не знает, кто ее писал уволился давно, поможи. Ну от чего же не помочь. Программа оказалась башевским скриптом, точнее, набором скриптов. Задача небольшая, выгрузить файл с удаленного сервера, переформатировать и положить на другой сервер, где его подхватывает бухгалтерия. Выгрузка делалась банальным wget.
Оказалось, скрипт вис, если пропадало соединение с сетью.
Выгрузка производилась простой командой:
wget -O "~/buh01/data/kassa01.dat" "https://example.org/mag01/kassa.dat"
Оказывается, у wget не проставлен тайм-аут ожидания, а по умолчанию, если его не проставить, wget будет ждать аж 900 секунд (15 минут). Надо, соответственно, его напрямую указать в параметре ключа -T <секунды> (--timeout=<секунды>),
Например, можно поставить вменяемые полминуты (30 с.):
wget --timeout=30 -O "~/buh01/data/kassa01.dat" "https://example.org/mag01/kassa.dat"
Т.е. вис-то, собственно wget, хотя конечно же, не вис, а терпеливо ждал. Но тут и не бухгалтеру, а даже не сильно опытному пользователю ничего не стоит принять такое поведение за то, что wget виснет при разрыве соединения.
Заодно можно указать wget‘у количество попыток для скачивания файла: -t <число> (--tries=<число>), тем более, что указание параметра -O (имя выходного файла) сбрасывает этот параметр в 1.
wget --timeout=30 --tries=3 -O "~/buh01/data/kassa01.dat" "https://example.org/mag01/kassa.dat"
Сделал гибрид старого скрипта waiter (копия) с dialog --infobox. В infobox‘е отображается псевдографическая «мельница»
https://www.youtube.com/watch?v=o9KempHy5To
Не стал уж совсем дублировать waiter, так что никаких параметров демо-скрипт не принимает, просто отсчитывает 10 секунд, показывая псевдографическую «крутилку».
Заметка от склероза. Способ ниже удаляет закомментированные, а заодно и пустые строки из файла, но не трогает комментарии в строках. Хорошо помогает почистить какой-нибудь конфиг, в котором комментариев больше, чем самих параметров, и хрен че найдешь:
grep -o '^[^#]*' file.txt > cleaned.txt
Вместо file.txt подставляем исходный файл, вместо cleaned.txt — выходной.
Там есть и другие варианты решения задачи.