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

Опять про платы.

Претензии к моей идее: плата служит теплоотводом, дорожки контролируют импеданс, плохая ремонтопригодность полученных схем на проводках.

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

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

Современные схемы ремонтируют поблочно. В подавляющем большинстве случаев.

Теперь про многослойные платы.

Современные многослойные платы делаются по четыре слоя - земля, дорожки, дорожки, питание. 16-тислойная плата будет содержать четыре таких четверных слоя. То есть, слоёв с дорожками будет всего 8 (что много, конечно, но вдвое меньше). Почему так? Да потому, что никто не может посчитать взаимодействие между слоями дорожек в случае больше, чем двух слоёв. Ни человек, ни машина. Два слоя из четырёх играют роль обмотки коаксиального кабеля. И улучшают распределение тепла платы, конечно.

В типичном электронном устройстве типа смартфона 49% энергии уходит на производство микросхем (и экрана, если я всё правильно понял), 49% энергии уходит на сборку. Производство печатных плат без монтажа и пайки компонент входит в процесс сборки и занимает 7% от общего расхода на устройство. То есть, одна седьмая или 14% от процесса сборки. Если энергетическая стоимость платы станет меньше вдвое, то экономия будет значительной.

Экономия энергии производства важна для высокосерийных устройств. Есть даже такое направление автоматического проектирования плат - design for manufacturability, проектирование с учетом производства. При таком подходе стараются уменьшить количество перемещений подающей "руки" робота, размещающего компоненты. Экономия времени размещения составляет десятки процентов, если что. И народ не стесняется оптимизировать всего одну часть довольно продолжительного процесса создания полной материнской платы.
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, только с улучшенным механизмом выбора ограничений противоречий.