Pull to refresh
0
0
Send message

Не буду холиварить. Haskell, F# интересны для изучения. C/C++ - для встраиваемых систем. C++, C#, Java для индустриального программирования и зарабатывания денег. Python, Bash, Sed, Awk. Даже PowerShell. Ещё много вариантов в IT индустрии. Каждой задаче, свой инструмент. Ну и самый мощный в мире язык программирования - Lisp. Это все надо ценить и принимать с подобающим уважением

Начал карьеру сисадмина 10 лет назад. Сейчас карьеру разраба .NET. 39 лет. Без ваших курсов. Статья - перевод, это отлично. Но по вашим курсам, как может быть fullstack на Python? Где JS? В этом мире что-то изменилось? F#, Haskell трансилируется в JS, у Clojure есть Cljs. У C# есть Blazor. У вас бесконечный лендинг с самыми модными словами в поиске?

Можно было упомянуть F# и Fable — его компилятор в JavaScript. Целый стек для разработки на них: SAFE, Elmish и новоиспеченный Sutil (аналог Svelte). Бандлы JS получаются вполне приемлемых размеров и даже остаются читаемы, есть приличный FFI
Да, это точно. Следующий возможный шаг — приклеить коды к содержимому коробочки, что в случае SMD компонентов, к сожалению невозможно.

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

Было такое приложение WIZT, там похожая идея, но более универсальная. В целом — для любого склада или системы хранения подходит.

Вы с автором говорите про разные вещи. Вы имеете ввиду сети TN-C и TN-C-S. Автор про TN-S и TT. Третий проводник меняет свою роль: PE, PEN или N.


Заземляется не только нейтрали трансформаторов, а ещё точки расщепления. Но также третий проводник может быть чистой землей.


Я использую обычно недорогой Hantek 2C42 на аккумах и в корпусе с двойной изоляцией.

В квадратных скобках это генераторное выражение, как например в Python. Слева от стрелки < — это деструктуризация результата применения парсера p1 к строке s. Т.е. кортеж из строки sf и функции f (которая в данном случае это значение (a -> b) для парсера p1). В втором кортеже x потому, что для парсера p2 нужно просто значение a (см. описание типа). Результат данного выражения это список кортежей из строк и результатов применения функции f из парсера p1 к значению из парсера p2 )))

Это можно было бы написать с помощью 2 вложенных циклов, если бы они были в Haskell. Тут достаточно настроить свой внутренний интерпретатор и научится читать декларативный код Haskell. В первую очередь обращать внимание на аннотацию типов, а само данное выражение проще читать справа-налево и снизу-вверх, а не наоборот.
Как итого напишу коммент здесь. Я схемку замещения набросал для 3 групп потребителей по 24Вт на длины магистралей по 15 метров (176мОм на схеме).

http://everycircuit.com/circuit/5269027256795136

Все неплохо, на потребителях 12.2 вольта при 13.6 на аккумуляторе. Пропорционально можно напряжение на аккуме покрутить и примерно увидеть при каком разряде светодиодные ленты погаснут. Рассчетный ток при КЗ между полюсами 46.9 ампер, но я бы добавил плавкие вставки на 6-10 ампер на плюс каждой отходящей линии. Возможно кто-нибудь дополнит схему или покритикует? Чтобы посмотреть ток КЗ надо замкнуть любой из ключей слева на схеме.
Сначала коммент разместил на YouTube, но тут более технически подкованная аудитория:
Кабель в земле надо протягивать через ПНД трубу, канализационная сломается из-за сезонных подвижек грунта. Весной, скорей всего, Ваша протяжка перестанет протягиваться через трубу. Но это относительно легко устранить перекладкой трассы, хотя СИП какое-то время может и так пролежит в земле.
Но самые интересные вопросы:
Какая у Вас протяженность линии 12 вольт?
Насколько падает напряжение в самой конечной точке, какие потери, нет не так, насколько большие потери в линии? Может у Вас завышено сечение кабеля, но тогда какое влияние емкостной составляющей на таких протяженных линиях 12 вольт?
Насколько приходится завышать напряжение на основном блоке? Какое сечение провода на нем и какая нагрузка в амперах?
Неужели не дешевле резервировать существующую сеть освещения 220 вольт и использовать инвертор 12 на 220? А в конечных потребителях использовать копеечные светодиодные драйверы 220 на 12? Или просто светодиодные лампы?
Для пяти потребителей в коридоре, можно было еще использовать импульсные реле.
И таки да ОСБ панель горит плохо, но выделяет огромное количество ядовитого дыма :)
Разговор был про virtual. А если подойдет прохожий и скажет, что virtual это способ организовать перегрузку функции (методов) в рантайм с помощью таблиц в памяти, из-за ограниченности императивных ЯП?! Вы ему поверите? Да, ни смотря ни на что, они тоже стремятся к полиморфизму. А замыкания это просто поглощение значении переменных из внешней области переменных, которое на разных ЯП может быть по разному?

Пусть автор не сдается, собеседование это всего лишь этап.
Да вариант действительно отличный. Только сколько людей могут предложить такой вариант? Сколько людей знают что такое аппликативный функтор и что монада тоже им является? А в статье написано сел и за один вечер освоил, быстро накидал и в продакшн (((
main = do
    args <- getArgs
    stdIn <- getContents
    let file = if null args
                    then filter (not . isControl) stdIn
                    else head args
    content <- readFile file
    putStr content

Я использовал do нотацию как мог, чтобы упростить. Правда похоже на императивный код? Я его за минуту написал, а над прошлым вариантом задумался, хотя он много лучше
Вот взять например язык для «умных» и выразить вторую задачу:
putStrLn $ show $ foldl1 (+) [1, 2, 3.3]

И это будет работать на всех числах которые могут складываться.

Хорошо решим первую задачу:
import System.Environment
import Data.Char
main = getArgs >>= printFile
    where printFile (x:_) = readFile x >>= putStr
               printFile [] = getContents >>= 
                   readFile . filter (not . isControl) >>= 
                       putStr

Сколько надо затратить труда, чтобы найти это решение на Haskell? А если добавить обработку исключений? Наверно Go это другая сторона медали и вполне имеет право на существование.
Можно упомянуть еще про команду точка с запятой
; — Повтор предыдущего перехода к позиции командой f[a-z] или F[a-z].

Бывает удобно использовать с командой точка (. — повтор последней команды изменения текста). Для того, чтобы быстро повторить последние команды: переход по тексту, изменение текста, просто нажимаем ;.;.;.;.;. мизинцем и безымянным пальцем
Ценность vim в модальном режиме, в котором каждая команда переход-действие обозначается отдельной буквой (отдельной клавишей). Одно действие — одна кнопка. Набор нового текста — скорость как у всех, но вот редактирование текста как игра на пианино. Если привыкнуть, происходит безболезненно и почти со скоростью мысли.

Нужно ли это для всех? Нет. Для всех нужен notepad. Для vim надо владеть слепой печатью и долго тренироваться набивать комбинации. Но вот если научиться, то залипнешь настолько, что во всех системных комбинациях клавиш будут h,j,k,l. В Chrome будет установлен плагин Vimium. А во всех остальных местах будешь набивать ciw, dw, cw, yy, dd, p, , i и не понимать что собственно говоря происходит.

Еще vim быстрый и нетребовательный, очень просто настраивается и работает удаленно, да и еще при использовании вместе с tmux, zsh получается очень сильное кунг-фу.
Обычно использую псевдокод на Haskell:
selectEvenNumbers = filter even

Помогает сразу выбросить все лишнее
Какой у Вас резкий переход в примерах проверки на null. От JavaScript, CoffeeScript к Haskell. Например на том же JavaScript можно использовать Maybe как функтор, проверку на null и undefined спрятать в метод map. А если еще упростить

function mayBe(value, fn) {
    return value === null || value === undefined ? value : fn(value)
}


или на ES6

const mayBe = (v, f) => v === null || v === undefined ? v : f(v)


Вроде как корректный функтор, который можно использовать при цепочечных вызовах функции, но такого сахара как do конечно не будет. Сидя в JS к прекрасному тоже можно стремится
В статье описывается функциональный подход к программированию JS. Можно использовать для Redux, когда требуется обеспечить иммутабельность данных в хранилище данных store, именно такой код используется для редюсеров (чистых функции которые принимают хранилище данных store и возвращают новое измененное хранилище).

И да, если внутри объекта есть ссылка на другой объект, то она копируется поверхностно, надо это учитывать и использовать deep clone или деструктуризацию и последующую структуризацию объектов, что кстати описано в указанной книге Кайла Симпсона на стр.62. Так что книга дельная

Information

Rating
Does not participate
Registered
Activity