Открыть список
Как стать автором
Обновить
2
Карма
0
Рейтинг

Software Engineer

Илон Маск: у Tesla с включенным автопилотом вероятность аварии в 10 раз ниже

проехав тысячи километров и миль по разным странам Европы и по США, я обгонял всего около 5 (пяти!) раз

Соглашусь, за 30 тысяч миль в США за последние 3 года я совершал обгон по встречке тоже раз 5, если не меньше.

Илон Маск: у Tesla с включенным автопилотом вероятность аварии в 10 раз ниже

Обгон по встречке не нужен, если все машины на автопилоте и машина впереди тоже

Положение дел у Windows: сколько разношёрстных уровней UI в Windows 10?

Ещё диалог выбора драйвера всё ещё по умолчанию хочет читать с дискеты

Бизнес-эксперт: тест ноутбука ASUS ExpertBook B9 9400

Надо было сделать лаптоп с двумя microHDMI-портами, к которым даётся переходник на USB-C, с одним microHDMI-портом, к которому даётся переходник на USB-A, ещё одним microHDMI-портом, к которому даётся переходник на 3.5mm. Ну и на каждом порте подписать, какой переходник к нему подходит.
Так хотя бы консистентно)

Бизнес-эксперт: тест ноутбука ASUS ExpertBook B9 9400

Я пока смотрю в сторону Lenovo Thinkpad X1 Carbon Gen 9, который ещё не вышел

Бизнес-эксперт: тест ноутбука ASUS ExpertBook B9 9400

Я брал этот ноутбук на прошлой неделе, поигрался с линуксом и вернул в магазин. На то было несколько причин:


  • если заряжать от неоригинального USB-C кабеля (например, от макбуковского или любого другого с поддержкой PD), то тачпад начнёт сильно лагать. Нужна зарядка с заземлением. Возможно, брак моего устройства, не проверял. Этот пункт верен как для Windows, так и для Linux;
  • сканер отпечатков Elantech в линуксе не работает, техподдержка отправляет к Линусу: "you will be required to contact Linux directly for drivers and tools for the fingerprint sensor";
  • numpad в тачпаде не работает;
  • индикатор зарядки под тачпадом не работает;
  • кулер очень громкий, если включается на всю.

Из плюсов:


  • лёгкий и няшный;
  • открывается на 180 градусов;
  • линукс завёлся с полпинка, никаких сложностей с uefi/bios и ядром, wifi и bluetooth работают из коробки;
  • графика работает, анимации в КДЕ плавные, прозрачности прозрачные, что там в ирисе проверять не знаю;
  • powertop обещает более 30 часов на минимальной ненулевой яркости при отключенных сетевых интерфейсах:

Эксперт обнаружил баг в Windows 10. Использование определенного пути в адресной строке браузера уводит систему в ВSOD

Можно поставить через flatpak и с помощью гуя flatseal отрубить доступ к сети)
Ну или поставить через snap, там тоже есть команды для контроля разрешений.

Беспроводная отладка Android 11

В отличие от adb tcpip + adb connect, сделали супернеудобно. При каждом переподключении к сети нужно идти в настройки, смотреть новый порт, поэтому ввод одного и того же adb connect <ip>:<port> из истории баша не работает.

Мои доходы от работы очень хорошим инженером Facebook

Senior developer это E5, team lead — E6. E7 это руководитель продукта, у него несколько команд в подчинении и это большой начальник

Не совсем так. E5, E6, E7 — инженерные левелы, у всех трёх нет никого в формальном подчинении. На всех этих уровнях надо писать код, разница в размере проекта и в том, насколько взаимодействуешь с другими людьми/командами.
Чтобы иметь кого-то в подчинении, нужно быть EM (Engineering Manager).
Можно быть E5, формально руководить проектом в роли лида (при этом в проекте могут быть и другие E5/E6/E7), но быть всей командой под колпаком одного менеджера, а может быть проект из людей из-под разных менеджеров (кросс-командный проект). Если делаете несколько проектов/фич в одной команде, то разные люди могут быть лидами разных фич.

Нью-Йоркская биржа отказалась снимать с торгов акции китайских телеком-компаний

China Unicom

Всегда читаю как China Unicorn

Анатомия GNU/Linux

В винде тоже такое — хочешь поставить маленькую программулину типа Paint.NET, сначала поставь .NET Framework.
В новых виндах дотнет предустановлен, и это аналогично тому, как если после установки линукса сразу предустановить либы Qt/GTK/etc.

NFC на банкомате: небольшой ликбез

Все в комментариях ругают сбербанк, а в это время в США редкие банки выпускают карты с NFC, банкоматов с NFC почти нет, зато на многих банкоматах есть слот для вставки платёжных чеков :)

NFC на банкомате: небольшой ликбез

А если карта из Европы и счет у неё в евро? И нужна конвертация

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

Я стал думать над мелочами в коде, и уничтожил все желание программмировать

Мне this нравится тем, что во всяких парных методах (compare, equals, etc.) можно называть аргумент that и обращаться к полям как this.field, that.field.

Я стал думать над мелочами в коде, и уничтожил все желание программмировать

Многие из Java мира имеют альтернативное мнение и называют это
Checked exceptions — Java’s biggest mistake

Я тоже так думал в Java, пока не пописал год на C#. После этого изменил мнение на противоположное :)

Я принес вам решение проблемы с исключениями в C#. Но вам не понравится

В джаве сложно с ветками наследования)
Есть базовый Throwable, у него подклассы Error и Exception. При этом Throwable — checked, а Error — unchecked.
Потом идёт Exception, у него подкласс RuntimeException. При этом Exception — checked, а RuntimeException — unchecked.
Сделали бы две базовые ветки (как вариант, просто переименовать RuntimeException в RuntimeError и запихнуть в Error) и было бы норм.

Я принес вам решение проблемы с исключениями в C#. Но вам не понравится

Как быть с интерфейсами? Checked Exceptions — это свойство интерфейса или реализации?

Свойство интерфейса.
Как вы пишете


interface Foo {
  Either<Result, Error> getResult();
}

так можно и писать


interface Foo {
  Result getResult() throws Error;
}

Я принес вам решение проблемы с исключениями в C#. Но вам не понравится

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

То же самое можно будет сказать про Either/Maybe из поста.
Допустим, у нас есть OneOf, который работает как Either с несколькими типами. И тогда у вас будут что сотни эксепшенов, что сотни видов результатов.


OneOf<GoodResult, OpenError, ReadError, FindError> result = getResult();
if (result.first()) {
  // good
} else if (result.second()) {
  // open error
} else if (result.third()) {
  // read error
} else if (result.fourth() {
  // find error
}

эквивалентно:


try {
  GoodResult result = getResult();
  // good
} catch (OpenError) {
  // open error
} catch (ReadError) {
  // read error
} catch (FindError) {
  // read error
}

На это вы можете возразить, что мы не хотим использовать OneOf<GoodResult, OpenError, ReadError>, а хотим использовать Either<GoodResult, BadResult> из только двух состояний.
В этом случае и с эксепшенами можно писать:


try {
  GoodResult result = getResult();
  // good
} catch (BadResult) {
  // some error
}

Я принес вам решение проблемы с исключениями в C#. Но вам не понравится

достаточно перед открытием файла проверить, что он действительно существует

Если проверили файл перед открытием, а потом между проверкой и самим открытием случилось удаление файла, то будут проблемы)
В этом случае нужно именно атомарное открытие с одновременной проверкой.

Я принес вам решение проблемы с исключениями в C#. Но вам не понравится

так и надо вводить для них соответствующие сущности

Эти сущности и есть исключения)
Checked exceptions — это ожидаемые ошибочные состояния. Если мы читаем из сети, то мы ожидаем или ошибку, или ответ. Если мы читаем из файла, то мы ожидаем или ошибку, или данные.
Unchecked exceptions — неожидаемые. Типа, закончилась оперативная память и не получилось аллоцировать объект. Или случился assertion, который ну никак не должен был случиться, но из-за бага кто-то его допустил. Или деление на 0 (которое по-хорошему надо делать checked exception, или оформлять в виде отдельной сущности — Either<Integer, DivisionByZeroError> result = 10 / 0;, — но это сильно замусорит код).

Информация

В рейтинге
5,890-й
Зарегистрирован
Активность