waqur: (Евро)
Поначалу идея построить такой себе Bitcoin 2.0, способный не просто переводить виртуальные деньги, а ещё и делать вычисления (smart contracts) поверх блокчейна, казалась интересной.

Хотя идея о том, чтобы допустить любые вычисления на блокчейне (пусть и ограниченные количеством операций) некоторым наблюдателям с самого начала казалась авантюризмом. С точки зрения банальной теории, у нас есть четыре класса вычислительных формализмов, каждый из которых слабее предыдущего (расширенная иерархия Хомского):
1. Тьюринг-полные языки (и эквивалентные им рекурсивно вычислимые функции Гёделя, λ-исчисление Чёрча, нормальные алгорифмы Маркова, двухстековые автоматы с магазинной памятью и т.д.)
2. Контекстно-свободные языки (и эквивалентные им одностековые автоматы с магазинной памятью)
3. Регулярные языки (и эквивалентные им регулярные выражения, а также конечные автоматы всех видов).
4. Программы, в которых ветвления возможны только вперёд (берклиевские пакетные фильтры).

Архитектор Ethereum'а, Виталик Бутерин, наивно посчитал, что самый сильный класс вычислительных формализмов — это то, что нужно. Прошло совсем немного времени, и нашёлся умник, который написал рекурсивную функцию (DAO attack), которая заполнила почти всю распределённую сеть своими копиями и съела почти всю комиссию в сети (на свою обработку).
http://www.coindesk.com/dao-attacked-code-issue-leads-60-million-ether-theft/

На этом, насколько я понимаю, в эксперименте Ethereum можно ставить точку. Хотя незадолго до этих событий Бутерину уже начали петь дифирамбы:
https://backchannel.com/the-uncanny-mind-that-built-ethereum-9b448dc9d14f
Не говори "гоп", пока не перепрыгнул!
waqur: (Евро)
Поразительно, как много людей не понимают, почему полное отключение журналирования (ZIL) на ZFS — это абсолютно безопасно с точки зрения целостности данных. Лично я всегда начинаю настройку ZFS с того, что отключаю ZIL.

В отличие от NTFS/ext4/HFS+/UFS2, ZFS — это copy-on-write файловая система, всегда консистентная на диске. Все изменения пишутся в свободные блоки, метаданные организованы в дерево, а при закрытии транзакционной группы обновляется корневой указатель (на самом деле, там кольцевой буфер корневых указателей для wear leveling и не только). Из формулы "всегда консистентна на диске" в частности выводится "fsck для ZFS не нужен" и "воспроизведение журнала в загрузчике ОС не нужно".

В первой версии ZFS вообще не было журнала. fsync(2) и sync(2) просто были NOPами, как им и надлежит быть в дивном новом мире COW файловых систем. Но тут понабежали формалисты-теоретики от баз данных и принялись жаловаться, что формула fsync=NOP нарушает то, что скрывается за буковкой D в аббревиатуре ACID. Т.е. если сервер СУБД вслед за успешно выполненным SQL-запросом INSERT/UPDATE/DELETE словит незапланированную перезагрузку, то после возврата в строй его состояние будет не актуальным, а отстающим от актуального на 1-30 секунд. Повторюсь: файловая система будет целая, база данных будет целая, все связи не нарушены, только произойдёт как бы прыжок в прошлое, для всего набора данных, довольно короткий.

И вот в угоду этим нытикам был добавлен уродливый ZIL, позволяющий сократить расстояние между "контрольными точками" от 30 секунд до субсекундных значений, ценой двойной записи всех изменений на диск (как в файловых системах предыдущего поколения). Как по мне — можно было сделать так, чтобы системные вызовы fsync(2)/sync(2) просто блокировались на тех же 1-30 секунд до закрытия транзакционной группы в ZFS-пуле, чтобы теоретики, вещающие про POSIX-совместимость fsync(2), заткнулись уже. Далее те, кому жизненно важна буква D в ACID (это где-то в области финансовых транзакций), создают себе отдельный пул на SSD, где настраивают закрытие транзакционной группы (ZFS TXG) не раз в 30 секунд как по умолчанию, а раз в 1 секунду или чаще. Чтобы их SQL-запросики не застревали. IOPS-характеристики типичного энтерпрайзного SSD это позволяют.
waqur: (Евро)
Apple анонировала новую фишку под названием Differential Privacy.
Раньше ваш телефон просто сливал всю интересную инфу в яблочное облако и в NSA, а теперь он будет ещё и подмешивать туда случайный шум, цитирую "to obscure an individual’s identity", т.е. "чтобы размыть вашу идентичность". Заодно новая версия iOS и шпионить будет больше, залезая в те места, куда раньше не совалась.

Хитрый ход. Во-первых, уж если хакеры с сайта Hacker News повелись как дети, то народ с гуманитарным образованием тем более свято уверует, что добавление случайного шума размывает идентичность (на самом деле нет — растёт энтропия потока данных, а значит два разных пользователя становятся различимее друг от друга). Во-вторых, нечто, выглядящее как случайный шум, может быть на самом деле шифртекстом (не зная ключа, нельзя сказать наверняка). В этом "как бы шуме" можно не только передавать идентификаторы пользователей и устройств, но и устроить такой себе стеганографический вариант SSL, посредством которого передавать историю браузера, приложений, ключевые слова, пароли, номера кредитных карт и т.п. Разумеется, можно развлекаться и по-другому: например, сливать внутреннее состояние /dev/urandom, позволяющее легко подобрать сессионные ключи https-сессий браузера или https-сессий подсистемы автоматической установки обновлений. Главное в этом деле — найти правдоподобную отмазку для пользователя, почему "энтропия течёт", а всё остальное — дело техники. И эта отмазка — в сабже.

Всё-таки умело яблочники обувают лохов. Инновационно. Сейчас эту "лучшую индустриальную практику в сфере privacy", разумеется, возьмут на вооружение в Microsoft и в Google.

BlockStack

2016-06-12 02:16 pm
waqur: (Евро)
BlockStack — это такая децентрализованная система DNS / WHOIS / Domain Name Registry, которая работают поверх базовой технологии Bitcoin, называемой блокчейн.

https://blockstack.org/

Узлы сети Blockstack одновременно выполняют серверный процесс Bitcoin, и когда они видят в биткойновском блокчейне транзакцию с определёнными данными в OP_RETURN, они переносят эти данные в собственный Blockstack'овый мета-блокчейн. Узлы сети Blockstack стремятся к тому, чтобы намайнить побольше в этом своём мета-блокчейне, потому что так они попутно получают оплату за регистрацию доменных имён.

Децентрализованные анонимные DNS существовали и ранее (например, .onion), однако BlockStack интересна тем, что она позволяет решить теоретическую проблему, известную как Zooko's triangle (простыми словами, делает доступными красивые короткие имена доменов, а не хэши). При этом проблема зловредного заспамливания DHT решается за счёт опоры на биткойновский блокчейн. Бесплатно заспамить не получится.

Доменная зона ".id" пока не отображена в ICANN DNS. Едва ли это критично, для 99% пользователей это может быть решено браузерным плагином, а остальные 1% достаточно умны, чтобы настроить себе альтернативный DNS.

Разумеется, эта штука может забить последний гвоздь в крышку гроба PKI и связанных с ним TLS MitM-проблем, если она когда-либо разрастётся до достаточных размеров. Согласитесь, выглядит гораздо мощнее, чем ZRTP SAS и сканируемые с экрана QR-коды в мобильных шифрочятиках.

LOL

2016-06-09 08:51 pm
waqur: (Евро)
Microsoft добавила сбор "телеметрии" уже даже в компилятор:
https://www.infoq.com/news/2016/06/visual-cpp-telemetry
waqur: (Евро)
Раньше некоторые библиотеки из базовой системы FreeBSD зависели от GPL-лицензированной библиотеки GNU libiconv (например libkiconv, обеспечивающая по необходимости загрузку в ядро таблиц Unicode-трансляции).

В FreeBSD 10+ избавились от этой зависимости. Как поётся в одной песне, we don't need no water ...

Таким образом, движение на пути к GPL-free base system продолжается. Базовая система FreeBSD теперь использует BSD-лицензированную libiconv из проекта Citrus. Технически, новая libiconv входит в состав /lib/libc.so.7 (добавочные данные хранятся в /usr/share/i18n и /usr/lib/i18n).

Эта работа стала bachelor thesis для студента по имени Gábor Kövesdán в Budapest University of Technology and Economics.
waqur: (Евро)
Купил новый монитор — NEC EA 193Mi. IPS-матрица, 19", 5:4, LED-подсветка.

Производитель уже не знает, чем заманить покупателя — придумали какой-то "эко-режим". Наклейка Energy Star Ally; прошивка показывает в меню монитора, сколько килограммов выбросов CO2 в атмосферу удалось сэкономить, все дела. Только есть небольшая проблема: когда оно включено, картинка на мониторе заваливается либо в чёрные цвета, либо в белые. Особо хорошо это видно в TFT test, который умеет показывать шкалу оттенков серого от 0% до 100% с шагом 2%. Какие настройки не поставь (яркость, контрастность, яркость подсветки LED, глубина чёрного) — будут неразличимы оттенки либо с нижней стороны шкалы, либо с верхней. Впрочем, отключение всей этой "экологии" на удивление быстро решает проблему. Всё евросоюзовское регулирование энергопотребления мониторов — такой же бред, как и недавний автомобильный скандал с занижением выбросов CO2 на тестовом стенде. Вместо того, чтобы чмырить очкариков-технарей, занялись бы лучше наведением порядка с беженцами, идиоты.

Ещё одна подобная глупость — "режим улучшения времени отклика" матрицы, который по-умолчанию включён. Лично мне *VA- и IPS-матрицы кажутся достаточно быстрыми даже в играх, но есть гурманы, которые вроде как могут различить разницу с TN-матрицами в двойном слепом тесте. Это фича для них. OK, визуально это проявляется так: когда крутишь чёрный текст на белом фоне (как в Word'е) — вроде всё нормально, а как только цвета немного меняются (например, фон становится бежевым, как на Hacker News) — при прокрутке за буквами тянется мерзкий белый шлейф. Напрягает конкретно. Слава б-гу, я нашёл как отключить это безобразие.

Выводы? Лучшее — враг хорошего, overengineering — зло. Если все дополнительные фишки, прибамбасы и свистоперделки на корню отключить — вроде нормальный монитор. NEC'у нужно уволить весь R&D отдел, а для поддержки старого кода оставить одного 60-летнего дедушку, который в общении с маркетинговым отделом использует только одно слово: "запрещено". Эволюция мониторов закончилась, а дополнительные попытки что-либо "изобретать" только портят ситуацию.
waqur: (Евро)
Одну из моих файловых систем UFS как-то особо неудачно скорраптило, в результате чего ядро (FreeBSD 10.0) на операции распределения блока в файловой системе выкидывает kernel panic и уходит в перезагрузку (в моём случае — в циклическую):

Подробности для интересующихся )
waqur: (Евро)
Проапгрейдил VMware Workstation с 10-й версии до 12-й (вместе с переездом на новый компьютер).

Случайно забыл про одну виртуальную машину, которая осталась в состоянии suspend.
Как ни странно, после пробуждения она отлично работает, включая виртуальную сеть и звук (хотя изменились образ BIOSа, API гипервизора, VmWare Tools for Guest, дифференциальный формат снэпшотов и наверное многое другое, о чём я не знаю). Даже хостовый процессор научился VT-d, чего раньше не умел. Как бы там ни было, эти башковитые парни из VMware, похоже, очень хорошо понимают смысл термина "обратная совместимость".
waqur: (Евро)
Помимо альтернативных потоков данных (ADS), когда за одним элементом каталога скрывается фактически несколько разных файлов, NTFS поддерживает фичу под названием Extended Attributes (EAs).

Что это такое и зачем оно надо? )
waqur: (Евро)
В своё время авторы GCC и MSVC пошли по пути наименьшего сопротивления в реализации таких фич языка, как исключения и RTTI (dynamic_cast + typeof). Вместо того, чтобы усложнять компоновщик, они возложили эти задачи на библиотеку времени выполнения.

Вместо возврата адреса объекта-исключения в другом регистре было решено нагородить огород с развёрткой стека в NTDLL.DLL, KERNEL32.DLL, LIBC*.LIB; а также в libstdc++.so/a, libgcc_s.so/.a. На платформе x64 регистров стало больше (16 широких РОНов + 16 всегда существующих SSE против 8 узких РОНов + 8 может существующих SSE), но эта странная технология не только не была отвергнута, но достигла апогея: для каждой функции компилятор порождает уйму вспомогательных структур, сегменты .eh_frame и .eh_frame_hdr, кругом какие-то personality functions и прочие синдромы "проектирования комитетом".

Теперь о dynamic_cast. По хорошему, компилятор на месте каждой команды dynamic_cast должен подставить серию проверок, которые сравнивают __vptr против списка констант (и в случае успеха делают соответствующие арифметические поправки к указателю-аргументу). Проблема в том, что полный список этих констант в каждом из таких контекстов неизвестен компилятору, хотя известен компоновщику. В 90-е годы оперативной памяти в компьютерах было мало, опции компоновщика наподобие /LTCG или -flto были мечтой, а clang с его изначально глобальной оптимизацией кода вообще не существовал, и в целом идея генерации кода в компоновщике выглядела крайней ересью. Так что было решено генерировать RTTI-информацию как побочный продукт работы компилятора и возложить на runtime-библиотеку всю эту дурную работу по навигации в графе наследования и коррекции указателей. При этом x64-реализация dynamic_cast в MSVC ещё и умудряется брать loader lock в RtlPcToFileHeader() вместо линковки на __ImageBase, но это уже, как говорится, патология.

Этот технический долг ранней эпохи развития C++ через какое-то время, что называется, всплыл. Пришла весна и стало видно, кто где срал. Исключения и RTTI не используются при разработке игр под консоли, такие как Sony PlayStation, они отключены по умолчанию в EASTL. Для платформы UEFI нельзя писать приложения на "полном C++" по той же причине. Поддержка исключений и dynamic_cast так никогда и не была добавлена в avr-gcc. Проект FreeBSD потерял массу времени, ожидая завершения работы над libcxxrt на своём пути к GPL-free base system. На платформе PNaCl исключения по умолчанию сводятся к abort(), хотя можно заставить их работать через setjmp/longjmp (что медленно, даже когда программа не порождает исключений во время выполнения). Таким же способом они долгое время работали в среде mingw, пока в gcc не была реализована хотя-бы минимальная поддержка SEH. Исключения не работают в Emscripten (транслятор llvm-биткода в asm.js). Не всё гладко с этой шнягой на Android / bionic libc. Устаревшие платформы, такие как Watcom и Symbian, так и не увидели хотя-бы минимальной поддержки стандартных C++ исключений. Google Style Guide запрещает использовать C++ исключения. В частности, они забанены в исходном коде браузера Google Chrome и серверном коде Google. У нас нет ядер операционных систем, написанных на C++, по той же причине. Не может быть и речи о поддержке C++ исключений в CUDA.

А ещё команда поддержки компилятора gcc любит периодически делать патчи для libgcc_s, которые переносят инкремент глобальной переменной __cxa_get_globals()->uncaughtExceptions из __cxa_allocate_exception() в __cxa_throw() и обратно. За последние пять лет таких патчей было штуки три, если я ничего не упустил. Если вы линкуете libgcc_s статически, то на границе с кодом, который линкует её другую версию динамически или статически, возникают интересные эффекты. Ну, класноглазикам не привыкать. У них постоянная пересборка всего на свете — любимое занятие. Слава б-гу, команда поддержки NT RTL из Microsoft не выпускает каждые полгода патчи типа "туда-сюда". По крайней мере, пока. Говорите, надо всегда линковать libgcc_s только динамически, и не может быть такого, чтобы в системе были две разных версии /usr/lib/libgcc_s.so? Зато в системе могут быть две разных версии libgcc_s_dw2-1.dll или libgcc_s_sjlj-1.dll, причём одна из них в папке приложения, а другая в папке SYSTEM32. Какая победит в битве титанов? А если что-то инсталлировать? А если деинсталлировать? А если инсталлировать две программы в разном порядке? То-то же.

В наше время, не так уж и сложно сделать транслятор для LLVM-биткода, который преобразует "сиплюсплюсный" биткод всей программы, использующей исключения и dynamic_cast, в "сишный" биткод, избавленный от таких вещей. Это и был бы долгожданный zero cost exception handling and zero cost RTTI for C++, который бы "одним махом" решил все накопившиеся проблемы на всех устаревших или экзотических платформах. Это была бы очень существенная разгрузка библиотеки времени выполнения и перенос нагрузки на линковщик, чем в наше время уже никого не испугаешь.

Только вот пока увы, никто такое не сделал. Когда-то в проекте LLVM был бэкэнд для генерации сишного кода из llvm-биткода. Там проблему нетранслируемости сиплюсплюсных LLVM-IR-инструкций тоже не пытались решать: они просто добавили к компилятору новый "проход", который заменял throw на что-то типа целочисленного деления на ноль, убирал catch-блоки и всегда возвращал NULL из dynamic_cast. Со временем бэкэнд для генерации сишного кода обветшал, перестал компилироваться и был исключён из проекта LLVM. А зря, решение проблем этого маленького бэкэнда решило бы в сотню раз больший по объёму и сложности класс проблем в отрасли.
waqur: (Евро)
Похоже, новая Windows 10 менее популярна у юзеров, чем предполагалось. Пришлось мелкомягким включить её принудительное пропихивание через Windows Update:
http://arstechnica.com/information-technology/2015/09/microsoft-is-downloading-windows-10-to-pcs-even-if-you-dont-reserve-a-copy/

Шестигиговый апдейт качается как критическое обновление, по принципу "сначала скачали, а потом спросили юзера, надо ли оно вообще". Неважно, что у некоторых пользователей платный интернет-трафик. Неважно, что не у всех пользователей достаточно места на диске C:. Добровольно-принудительно. :)
waqur: (Евро)
Из-за изменившего формата журнала NTFS между Windows 8 и Windows 8.1, пользователи испытывают забавную проблему:
http://superuser.com/questions/842888/windows-10-boot-issue

Конфигурация: Win8/Win10 в дуалбуте, вторая с невыключенным hybrid boot; проблема: загрузка Win8 после Win10 влечёт автоматическое срабатывание autochk, каждый раз. Это из-за непустого NTFS-журнала, имеющего незнакомый формат. Речь идёт о том разделе, который в win10 является диском C:, а незнакомый формат NTFS-журнала получается с точки зрения autochk из win8. Та же проблема будет в дуалбуте десятки не только с win8, но и с win7, vista и XP.

Юзверям предлагается хачить параметры автозапуска autochk в реестре старой ОС, хотя это тупо; т.к. после загрузки ОС всё равно в эксплорере всплывёт окно с предложением проверить этот чёртов диск. Я на их месте лучше б выключил hybrid boot в десятке, тогда она бы делала шатдаун с чистым журналом и старый autochk не возбуждался бы.

Во времена апгрейда с Windows NT 4.0 на Windows 2000 формат метаданных файловой системы NTFS тоже менялся, так вот, в те времена установщик Windows 2000 выискивал на диске старые NT4-версии autochk/chkdsk/ntfs.sys/untfs.dll/и_так_далее и заменял их на новые. (Ну а если вы установили NT 4.0 после 2000, то ССЗБ.) Почему так не делает установщик Windows 8.1/10 — непонятно. Почему они не сделали сервиспак для старых ОС с поддержкой $LogFile V2.0 — тем более непонятно. Совсем Microsoft разучилась мышей ловить.
waqur: (Евро)
Линуксоиды уже пилят новую файловую систему:
https://lkml.org/lkml/2015/8/21/22
Ребята, да у вас же ещё хомячки не сдохли ещё btrfs не готова!
Вот поэтому я не люблю Linux и использую FreeBSD всюду, где мне нужен UNIX. В Linux всегда так: ещё не довели до ума предыдущую реализацию чего-либо (в данном случае — файловой системы третьего поколения), а уже бросили и делают новую реализацию того же велосипеда, только на этот раз с квадратными колёсами.

Вообще, все файловые системы можно разделить на три поколения:
1) Простые (например FAT, minix, ext2, UFS v1). Преимущество: реализация простая и требует мало оперативной памяти, что очень хорошо например для 8-битных микроконтроллеров. Недостаток: теряют данные (иногда — все) при незапланированных перезагрузках.
2) Журналируемые (NTFS, ext4, UFS+J, HFS+). Преимущество: после незапланированных перезагрузок целостность файловой системы автоматически восстанавливается во время монтирования, путём проигрывания журнала. Недостатки: двойная запись всех изменений (сначала в журнал, затем в файловую систему), проблема "курицы и яйца" при загрузке с таких файловых систем.
3) copy-on-write filesystems (ZFS, UFS+SU, Storage Spaces / ReFS, btrfs). Преимущества: файловая система всегда согласована на диске, нет загрузочной проблемы "курицы и яйца", изменения на диск пишутся однократно. Недостатки: сложная трудноотлаживаемая реализация; требуется много оперативной памяти; для нормальной работы ФС нужно, чтобы часть дискового пространства тома всегда оставалась свободной (обычно порядка 5%).
waqur: (Евро)
Купил флешку, которая рекламировалась производителем как быстрая. Реклама была подтверждена отзывами в интернет-магазине.

Тестирую скорость записи — 25 Мб/с. Исходная файловая система — FAT32.
Переформатирую в NTFS — получаю обещанные 100 Мб/с.
waqur: (Евро)
Поставил винду-десяточку на виртуалке (Insider Preview). Описываю свои впечатления от получасового ознакомления.

Некоторый прогресс по сравнению с 8 и 8.1, конечно, есть, но какое ж оно ещё сырое.

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

Пользовательский интерфейс больше не прыгает туда-сюда между Metro-style и рабочим столом. Новые приложения чинно запускаются в окошках. (Кстати, как их модно называть в этом сезоне? Metro Apps? Modern Apps? Universal Apps? Windows Store Apps? Ладно, неважно, всё равно их никто не создаёт и не использует.) С одного взгляда на экран снова можно понять, что сейчас выполняется; и опять между приложениями можно "переключаться одним нажатием кнопки, как между каналами телевизора" (это была цитата из маркетинговых материалов Windows 95). Операционная система, которая называется "Окна", опять отображает окна. Это самое главное.

Та хрень, оптимизированная под touch-интерфейс, которая сейчас вместо Панели Управления, не содержит и 20% старых настроек. Минут 20 я потратил на то, чтобы найти оснастку Управление Дисками, чтобы создать диск D:, но так и не нашёл. Зато нашёл дублирующиеся пункты меню (натурально, две менюшки с одинаковым названием и содержимым), а потом при открытии какого-то очередного пункта вся эта хрень просто упала. Наверное, память закончилась из-за того, что сборщик мусора не успел отработать. Или наоборот, отработал слишком хорошо, убрал мусор вместе с самой программой.

Меню Пуск открывается три секунды и заметно тормозит. Неужели Explorer Shell не может заранее рассчитать его содержимое и всегда держать напоготове в ОЗУ? Часть дебильных плиточек переехала туда, но их можно повыковыривать совсем. Значки в списке программ занимают много площади, под и над каждой надписью по пустой строке, так что неудобно, надо всё время крутить, список же длинный.

Пункт меню "Power", где можно выключиться и перезагрузиться, при нажатой кнопке Пуск всё время на виду, и это очень хорошо, потому что например винду 8 не всякий юзер мог даже выключить, т.к. не они все знают про клавиатурную комбинацию Alt+F4 на рабочем столе без окон, а в Charms Bar'е хрен что найдёшь, особенно, на виртуалке, когда курсор убегает за край экрана. Выключение восьмой винды было сродни выходу из редактора vi — особо изощрённый способ издевательства над новичками. Так вот, по поводу меню "Power" в десяточке: хорошо то, что оно всё время на виду, но плохо то, что надмозги перевели его как "Мощность".

На таскбаре есть что-то типа постоянно видимой строки web-поиска, но оно ещё не работает. Или уже. А если я люблю таскбар в вертикальном положении на правой стороне экрана? Оно ж не влезет.

У всех файликов в VS_VERSION_INFO версия 10.0.что-то-там, хотя по архитектуре (загрузчик, ядро и драйверы, хайвы реестра и так далее) всё та же NT 6.4. На пуркуа было дёргаться — непонятно. Наверное, у Мозиллы и Линупса заразились.

В общем, не там точку в номере версии поставили! Вернёмся к ней после первого сервиспака.
waqur: (Евро)
Мелкомягкие в последних версиях винды для чего-то испоганили функцию GetVersionEx() из kernel32.dll. Программа с пустым манифестом будет через GetVersionEx() неизменно получать версию NT 6.2 (Windows 8) под Windows 8, 8.1, 10 и так далее. Что будет получать DLLка — зависит от того, какой процесс её загрузил.

Сомнительная фича с точки зрения например, crash reporter'а, который собирает сведения о системе в файл дампа, который юзер будет отправлять техподдержке по e-mail'у.

Возможный обходной путь, использующие документированные API: GetModuleHandle("kernel32") → FindResource(hMod, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION)) → LoadResource() → VerQueryValue(pBlock, "\", ...) → struct VS_FIXEDFILEINFO. Кстати, функцию LockResource() вызывать не нужно. Последний раз она не была пустой заглушкой ещё в Windows 3.11. Ну а LoadResource() с тех же пор ничего никуда не загружает, а просто совершает прогулку по PE-заголовкам, уже загруженным ранее в виртуальную память процесса. Вообще, вся эта цепочка вызовов ни разу не переходит в режим ядра, а только "бродит" по структурам, ранее загруженным в ОЗУ, начиная с Thread Information Block.

Кратчайший обходной путь, использующие недокументированные API: напрямую из KUSER_SHARED_DATA.
waqur: (Евро)
В разных интернетах можно начитаться всевозможных глупостей о том, что максимальная длина кабеля шины I2C не должна превышать нескольких метров, а то прям ой-ой-ой, вы превысите лимит на ёмкость шины в 400 пикофарад, начнётся жуткий crosstalk и все ваши девайсики перестанут работать, и вообще эта шина годится только для обмена данными в пределах одной печатной платы, так что бегом в мазагин покупать дифференциальный драйвер / буфер шины I2C, кабель с индивидуально экранированными жилами для тёплого лампового звука, развязывающие конденсаторы с электролитом из соплей девственницы, а лучше всё вместе и подороже.
https://www.raspberrypi.org/forums/viewtopic.php?t=82049
http://electronics.stackexchange.com/questions/106265/maximum-i2c-bus-length
http://www.picaxeforum.co.uk/showthread.php?22174-I2C-over-twisted-pair

На самом деле, всё это враки. Тесты показывают, что I2C отлично работает по обычной неэкранированной 8-жильной витой паре длиной 20 метров, на полной скорости в 100 кГц, безо всяких буферов, драйверов, экстэндеров, конденсаторов и прочих глупостей.

Детали теста, если кому-то захочется повторить )

Шок

2015-05-27 05:34 pm
waqur: (Евро)
В Windows 10 Microsoft вернула меню Пуск, открывающийся по умолчанию Рабочий Стол, дебильные плитки спрятала подальше, к тому же от них можно избавиться полностью. Такими темпами в Windows 11-12 у элементов интерфейса даже могут появиться бордюры и градиенты, что, теоретически, может сделать эту операционную систему кандидатом на установку. Представляете? Вот это да. Никогда бы не подумал, что нынешняя Microsoft имеет шанс выпустить операционную систему, которую можно охарактеризовать как "кандидат на установку".

Всё-таки ослабевает влияние евангелиста Flat UI, бывшего сотрудника этой компании Стивена Синофски, который дизайнил пользовательские интерфейсы будущего в Пейнтбраше с помощью 16-цветной палитры и квадратной резинки. Вырвиглазности добавляли тоненькие шрифты на пёстрых плиточках.
waqur: (Евро)
О! Кацапчегам уже VPN прикрывают.
http://geektimes.ru/post/245416/

Кстати, протокол OpenVPN инкапсулируется в стандартный SSL/TLS поток, как при просмотре https-сайтов или при приёме-отправке почты. Или обновлении браузера. Или айфончега. Так что, скорее всего, их тоже зацепит. И действительно — зачем москалям https? А сертификат из ФСБ у него есть? То-то же.
Тем более, что он поддерживает только сотоНАТОвские AES_GCM, AES_CBC и RC4 и не поддерживает православный ГОСТ 28147-89.

July 2017

S M T W T F S
      1
2345 678
9101112131415
16171819202122
23242526272829
3031     

Синдикация

RSS Atom

Автор стиля

Развернуть

No cut tags
Page generated 2017-07-23 04:33 pm
Powered by Dreamwidth Studios