Category: техника

Category was added automatically. Read all entries about "техника".

with Cat The Cat

Технонанологии.

Оказывается, медный купорос (кстати, это тавтология) сублимирует в газ в вакууме при температуре 150-200 градусов Цельсия.

Знакомые мне нанотехнологи использовали шестихлорид вольфрама, испаряющийся при 600 градусах Цельсия - из газообразного вольфрама вытаскивались ионы вольфрама при поднятии иглы-головки и потом помещались на подложку при опускании головки и изменении полярности напряжения. 100-150 тысяч атомов в секунду с помощью Texas Instruments DSP в 2006 году. Транзистор стоил 80-100 атомов, бит памяти примерно столько же. То есть, за три-шесть секунд можно было получить аналог 6502.

Вольфрам использовался из-за его массы - температурный дрифт в течении 10 лет приводил к отказу транзистора в системе с несколькими миллионами транзисторов с вероятностью половина.

Но всё равно - медь доступней, менее вредна и температура работы ниже.

Теперь меня будет мучить вопрос - почему не медь?
with Cat The Cat

Хромая судьба

Мокрецы в подпроизведении этого произведения не могут жить без чтения.

В настоящий момент зависимость от смартфонов вполне доступный в ощущениях факт. Иногда просто ужасный, смею заметить.

Так вот, если мокрецы есть пришельцы из будущего, и исправляют детей, чтобы в будущем самих мокрецов не было (одно из толкований сего произведения), то они явно из будущего, где выработка организмом допамина без внешней стимуляции (в романе это чтение, в нашем настоящем - смартфоны и соцсети) затруднена.

На этом всё.
with Cat The Cat

Сайт модульбанка

Если кто не знает, но основным достижением айфона была возможность работать (худо-бедно, но!) с обычными сайтами, а не с ухудшенными специальными мобильными версиями.

Это 2008 год. Вы работаете с 2014 года.

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

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

Это я к чему - где в мобильной версии вашего сайта вход в интернет-банк?
with Cat The Cat

Замена плат проводками

Скорость современных паяльных роботов 1,8-3,0 секунды на соединение.

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

Из приятного, мощность нагревательного элемента в районе 300 Ватт, это оставляет запас.

В общем, мощность нагрева оставляю, думаю над скоростью, она должна быть в районе трёх соединений в секунду.
with Cat The Cat

Про Верилог и VHDL, про образование.

Verilog это 1985 год, на два года позже VHDL, который был основан на языке Ada, принятом в 1979 году.

Для понимания - 1978 это год появления алгоритма вывода типов Хиндли-Милнера, когда в его имени появилось второе имя (первое - это 1968 год). Ada появилась через год после появления ML.

Поэтому Ada имеет структурную систему типов (positive это подмножество integer, или unsigned это такой специально ограниченный std_logic_vector (массив)).

Verilog пошёл по ещё более простому пути - он ВСЁ ЗАШИЛ В ЯЗЫК.

В VHDL есть тип std_logic, состоящий из девяти значений - неопределенного, не подключенного, 1 (буквально - подключение к цепи питания), 0 (подключение к земле), короткое замыкание (соединили вместе 1 и 0), питание через сопротивление, земля через сопротивление, среднее напряжение (как если бы мы смотрели на точку, подсоединённую к питанию и земле через резисторы) и "наплевать" (don't care).

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

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

В Верилоге это невозможно.

Не все типы VHDL позволяют соединять два выхода. Например, тип bit (ограничение character: только '0' и '1') так поступать не позволяет. И современная внутрикристальная микроэлектроника тоже не позволяет. Поэтому вы можете написать ядро процессора с использованием bit, bit_vector и соответствующих операций, а периферию описать с помощью std_logic(_vector).

В Верилоге это невозможно. ;)

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

И если посмотреть на эти языки внимательней, вы поймёте, что такая беда не из-за злого умысла, и не потому, что авторы стандартов не пишут компиляторы. Это потому, что в то время создатели языков не знали и не могли лучшего. При этом создатели VHDL знали чуть лучшее, чем создатели Верилога, которые вообще ленивые сволочи.

А далее изначальные решения проекта языка диктуют направление последующих решений.

Поэтому создавая язык в настоящее время, попробуйте знать лучше, чем средний программист. Как минимум, мне легче будет. ;)
with Cat The Cat

В дополнение к предыдущему посту.

Вот тут metaclass удивляется поведению файловых систем и спрашивает, как же быть.

При написании файловой системы авторы, обычно, руководствуются скорее скоростью, чем надёжностью. Поэтому надёжность страдает, в разной степени. У разных ФС по разному, но, обычно, очень серьёзно.

Как быть?

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

Следует отметить, что все проблемы касаются довольно больших непрерывных участков данных, никак не меньше сектора жесткого диска. То есть, мы потеряем, допустим, килобайт последовательно идущих данных. "Потеряем" здесь означает, что мы прочитаем, возможно, не то, что записали. Вставок и удалений байтов в нашей модели проблем не бывает, количество данных не изменится.

Самая простая схема - это закодировать данные в коды типа БЧХ, где N бит данных кодируются M бит кода, N и M определяются из количества обнаруживаемых и исправляемых ошибок. Последовательно располагать все M бит кода не имеет смысла - "портятся" (теряются) последовательные данные, поэтому мы потеряем M/N*размер_потерянных_данных байт, принципиально картина не изменится. А вот если мы сделаем нашу последовательность из M блоков, и в первый блок будем писать только первые биты, во второй - вторые, в третий - третьи и так далее, то если мы потеряем (последовательно идущие) данные из какого-то блока, это будет означать порчу всего лишь одного бита в каком-то количестве кодов.

Такая штука называется транспонирование данных, и применяется очень часто.

Блоки у нас располагаются в разных частях файла - в начале, в середине, в конце и даже могут находиться вне зафиксированной длины файла. Если что-то неправильно прочитается (система потеряла размер, данные не прочитались, данные не были записаны), то вероятность перекрытия мест с ошибками не очень велика.

Подводя итоги - да, мы должны считать файловую систему ненадёжным механизмом. И у нас есть механизм, как с этим бороться. ;)
with Cat The Cat

iPhone 6s+

Лена подарила на ДР.

Очень приятная в использовании вещь.

Он заряд держит, как мало кто. Выходные пережил, оставив 32% заряда, работая на аккумуляторе 67 часов, из которых 4 с половиной часа я им пользовался активно (звонил, читал и так далее). Причём чтение у меня совмещено с прокруткой по горизонтали (я, обычно, увеличиваю текст).

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

При этом телефончик яркий, четкий, плавный, громкий и так далее. Я им очень доволен.

Надо попробовать под него приложение какое написать.
with Cat The Cat

Продолжая про булевскую выполнимость.

Немного терминологии.

Любую формулу можно привести к коньюнктивной нормальной форме - конъюнкции дизъюнкций литералов. Конъюнкция - Логическое И. Дизъюнкция - Логическое ИЛИ. Литерал здесь - прямое или обратное значение булевой переменной. x или ~x. Дизъюнкцию ещё можно называть ограничением, именно они ограничивают возможные значения переменных КНФ.

Самый первый алгоритм вычисления выполнимости (Davis-Putnam, DP) делал так называемое разрешение (resolution): если у нас есть в КНФ две дизъюнкции x\/Y и ~x\/Z, то мы можем заменить две эти формулы на формулу y\/z. Здесь x переменная, а Z и Y - дизъюнкции. Алгоритмически это выполняется так: для всех a, содержащих x и всех b, содержащих ~x, выполнить разрешение a и b. Исходные формулы можно убрать. Если разрешение выполнялось для формул вида x\/y\/A и ~x\/~y\/B, то в результате получится тривиальная формула y\/~y\/A\/B - тождественно равная истине.

Если при итеративном применении этого правила мы пришли к пустой дизъюнкции, то формула невыполнима (пример: x/\~x). Если в конце получилась пустая формула (все разрешения завершились тривиально), то формула выполнима. Может также получиться набор независимых формул, в этом случае тоже легко найти решение. Если мы не можем произвести разрешение по какому-то литералу, то по нему нельзя сделать выбор - зафиксируем его переменную в его значении.

Этот вариант требует большого количества пространства.

Второй алгоритм, предложенный Logemann и Loveland (LL в сокращении DPLL), перебирал значения всех переменных КНФ. Зафиксировав значение переменной, он проверял, не выводятся ли значения других переменных из уже зафиксированных и не приводит ли этот вывод к противоречию. Если можно было произвести вывод значений, он производился. Если у нас вывелись два противоположных значения, то это противоречие. При противоречии производился откат, убирались все результаты текущего вывода и фиксированное значение заменялось на противоположное.

Вот простая КНФ: a \/ b \/ c /\ a \/ b \/ c. Если мы зафиксируем значения a=Ложь и b=Ложь, то из первой дизъюнкции выводится c=Истина, а из второй - c=Ложь. Противоречие. Заменив любое из фиксированных значений a и b, мы получим удовлетворяющее присваивание.

Зайдем с другой стороны. Зафиксируем c=False. Вторая дизъюнкция станет тривиально истинной. Останется только первая. Выберем a=Ложь, останется только вывод b=Истина.

Здесь пространство не так важно, зато сложность алгоритма в худшем случае экспоненциальная. Важно, что "в худшем случае". Если мы каким-то образом можем выбирать правильные значения фиксируемых переменных (по структуре задачи, по предыдущему опыту решения похожих задач, наконец, нам подсказали!), то мы можем решить задачу быстрее, чем за полный перебор всех значений.

Это очень важно. Решатель Minisat показывает отличные результаты в категории "Индустриальные задачи" в соревновании решателей булевой выполнимости в частности потому, что он выбирает для новых переменных значение v=Ложь. Оказывается, большая часть задач этой категории имеет решение с ключевыми переменными, равными Лжи. А вот в категории "Случайные задачи" он отстает - там отлично работают системы, что учитывают структуру задачи (решатель march_xx из таких, например) или просто стохастические алгоритмы типа WalkSAT.

В середине 90-х решатель GRASP совершил прорыв - он начал запоминать причины, по которым решатель пришёл к конфликту, добавляя дизъюнкции противоречия (conflict clauses) к задаче. Здесь преследуются две цели - избегнуть в будущем похожей ситуации и автоматически перещелкнуть последнее выбранное значение.

Пример приведу все на том же конфликте выше. Мы установили переменные a=Ложь и b=Ложь и получили конфликт c и ~c. Мы говорим, что мы не должны посетить в будущем такой набор переменных, при котором a=Ложь И b=Ложь. Мы добавляем к нашей задаче ещё одно ограничение - ~(~a/\~b)=a\/b. Последней мы выбрали переменную b, отменяем её выбор. Новая задача a\/b\/c /\ a\/b\/~c /\ a\/b с выбором a=Ложь автоматически выберет b=Истина (третье ограничение) и решение будет найдено.

Это риешение важно ещё и потому, что если мы запоминаем все причины конфликтов, то мы (а) экспоненциально быстрее полного перебора (доказано) и (б) можем начинать с чистого листа и не придём к той же ситуации.

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

Современные решатели начинают с чистого листа довольно часто - после нескольких сотен конфликтов. Есть тендениця ещё увеличить частоту рестартов.

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

Последняя ссылка на сегодня - glueminisat. Это вариант всё того же MiniSAT, только с улучшенным механизмом выбора ограничений противоречий.
with Cat The Cat

Geometric algebra.

Достаточно интересная новость: трассировка лучей с помощью операций над 5D GA представлением от 30% медленней до 40 процентов быстрей.

Цитата из статьи по ссылке: GA is not always slower than LA. We implemented inverse kinematics algorithm [10] using Gaigen 2. The algorithm is based on conformal geometric algebra. It was designed as a replacement of an existing LA-based algorithm [11]. Our result was 43% faster than the exising solution. This improvement is mostly due to the fact that GA has a superior representation for rotations built right into the algebra. The LA implementation had to convert back and forth between matrices and quaternions.

Это относится ко второй версии Gaigen, генератору операций над (3,4,5)D GA представлениями. В первом отставание для 5D GA было 3 5 с лишним раз.

Геометрическая алгебра интересна компактностью записи. Например, вращение и перемещение описываются одним и тем же механизмом - перемещение - это вращение вокруг точки в бесконечности, а обычное вращение - вращение вокруг точки 0. Поэтому комбинировать их весьма просто, запись получается короче и становится проще рассуждать.
with Cat The Cat

Тут у ivan_ghandhi случилось обсуждение...

...и я выяснил кое-что про Reduceron.

Вся его реализация занимает 14% от 17300 слайсов (slices) Xilinx Viertex-5. Прикинув, что слайс равен 4-м 4И-НЕ вентилям, я получил оценку в 10000 вентилей. Или 80000 транзисторов.

Ещё он занимает 90% полуторакилобайтной памяти. Это, исходя из оценки в 6 транзисторов на бит памяти, даёт ещё 66000 транзисторов.

Итого, 150 тысяч транзисторов. Это уровень количества транзисторов процессоров GreenArrays, творений Чака Мура.

В тысячи раз меньше, чем современные процессоры уровня Core2 Duo. Да добавим кэш, всё равно площадь будет в сотни раз меньше - единицы квадратных миллиметров.

Тактовая частота синтеза в ASIC поднимается раз в 8-10 по сравнению с частотой FPGA. Reduceron получит частоту в районе 700-800 MHz. Отставая сейчас в три раза, он будет быстрее в два раза, если сделать ASIC.

Получается, что эта штука будет работать быстрее и меньше занимать.

Сейчас в haskell-cafe напишу. ;)

PS
http://www.1-core.com/library/digital/fpga-logic-cells/

Ошибся в количестве эквивалентных 4И-НЕ. Там их 8 на slice. Ошибся в два раза.

Ну, не в 10, и то хорошо. ;)
PPS
С частотой я тоже поторопился. 5-8 раз.