All streams
Search
Write a publication
Pull to refresh
115
0
Щекн-Итрч @sheknitrtch

User

Send message
Вроде бы цифры в статье убеждают меня в том, что софт с большим количеством фич зарабатывает больше чем софт с меньшим количеством, даже не смотря на баги. Но когда мне надоело мириться с очередным багом Lastpass, Я перенёс свои данные в 1Password и был несказанно рад. Пусть в 1Password нельзя создать вложение к записи, нет простого шаринга с другими пользователями и генератор паролей не такой продвинутый. Зато работает стабильно во всех браузерах, на десктопе, телефоне и iPad.
Мне кажется, на конкурентном рынке отсутствие багов может перевесить обилие фич.
Если вы про case classes в Scala, то они всегда иммутабельные. Records в Java таким свойством не обладают. А в остальном похожий подход.
По поводу проблемного кода, когда вместо полного имени программист может вызывать функцию, передав только имя или только фамилию:

function get_user(name) {
  db_load_user_or_die(name)
}


Здесь как раз система типов может помочь подстелить соломку. Пример на Scala:
//Класс с 4 полями, 3 из которых имеют тип String
case class User(id:Long,
                firstName: String,
                lastName: String,
                email: String)

//Функция, которая принимает то ли имя, то ли фамилию, то ли всё сразу
def findUserByName(name: String) = ???


Чтобы отличать firstName от lastName и от email введём специальные классы, которые под капотом представляют из себя обычный String:
//Вспомогательные классы
case class FirstName(firstName: String)
case class LastName(lastName: String)
case class EmailAddress(emailAddress: String)
case class FullName(fullName: String)

case class UserEnhanced(id: Long,
                        firstName: FirstName,
                        lastName: LastName,
                        email: EmailAddress)

def findUserByName(name: FullName) = ???

//Пример использования
val x: FirstName = FirstName("Mike")
val y: FullName = FullName("Mike Smith")

findUserByName(x) //Ошибка компиляции
findUserByName(y) //Нет ошибки компиляции


В Scala 3 появятся Opaque Type Aliases, которые упростят синтаксис. Это пример, когда проверка типов не даёт 100% гарантии, но однозначно помогает отлавливать логические ошибки.
Samsung как раз анонсировал прототип домашнего робота. Посмотрим, что скажут потребители, и появится ли волна подражателей.
Мне кажется, byko3y, вы неправильно позиционируете язык Python. Вы критикуете фичи языка, которые лежат в основе Python. Нельзя ругать динамически типизированный язык за то, что он динамически типизированный.

Однако же, по логике вещей, x[0].append(0) должно было бы создать новый или взять уникальный список из нулевого элемента и добавить в него нуль
Откуда такая логика? Потому что каком-то другом языке так? Не стоит по умолчанию тянуть концепции из других языков в Python.

Оператор присвоения и статическая типизация… Ожидается вывод
С чего вы это решили? Если меняете значение переменной, то поменяется результат вычислений. Это работает во всех языках.

Стоит помнить, что смысл питона был в том, чтобы избавить пользователя от мороки явного описания структуры объектов.
Наверное, это самое странное утверждение в статье. Смысл Python зафиксирован в The Zen of Python. Всё остальное — ваши домыслы.
Julia — интересный язык с понятным синтаксисом и удобной многопоточностью (привет пайтоновскому GIL). Позле ознакомления с туториалом возник вопрос: что они натворили со строками?

julia> s = "\u2200 x \u2203 y"
"∀ x ∃ y"

julia> s[1]
'∀': Unicode U+2200 (category Sm: Symbol, math)

julia> s[2]
ERROR: StringIndexError("∀ x ∃ y", 2)
[...]

julia> s[3]
ERROR: StringIndexError("∀ x ∃ y", 3)
Stacktrace:
[...]

julia> s[4]
' ': ASCII/Unicode U+0020 (category Zs: Separator, space)


Почему операция s[i] возвращает ошибку для индексов 2 и 3? Почему программисту нужно помнить внутреннюю кодироку строки и количество байт в каждом символе? В Python 3 эту проблему давно решили раз и на всегда.
Насколько Я знаю, AES — это алгоритм симметричного шифрования. Может всё-таки где-то в исходниках хранится ключ?
В Bitcount для ассиметрической криптографии (приватные ключи, публичные ключи, наложение ЭЦП) используется эллиптическая криптография, а именно кривая Secp256k1.
Как здесь пригодится разложение суммы кубов — не знаю. Но математика взаимосвязана, и прорыв в одной области может привести к результатам в соседней. Например гипотеза Таниямы-Симуры позволила доказать Великую теорему ферма.
Возможно это как-то используется в эллиптической криптографии. А эта криптография лежит в основе Bitcoin и многих других протоколов.
Если бы процент продаж игр на MacOS был не 4%, а существенно больше, чтобы окупить устройства Apple и время на разработку, то, думаю, программисты лучше поддерживали бы MacOS. Ведь на iOS и на PS4 такие же строгие правила публикации: обязательная премодерация игр, подпись софра платным сертификатом, принудительное устаревание API.
Сервиса группового адресного поиска не знаю. Возможно поможет nominatim.openstreetmap.org У них даже REST API есть: nominatim.org/release-docs/develop/api/Overview
Спасибо за полезные советы. Опытным программистам они должны быть в большинстве своём очевидными.
По поводу совета «Не используйте булевы значения в качестве параметров» мне вспомнилось правило «Язык определяет сознание». В Java код
getUserMessage(userId, true)

действительно выглядит неинформативно, но в Python можно писать:
getUserMessage(userId, includeBody=True)

A в Smalltalk синтаксис предполагает многословное имя метода:
getUserMessage: userId.    //Метод с один аргументом
getUserMessage: userId includeBody: True.    //Метод с двумя аргументами
А ещё с помощью выведения типов ключевым словом "var" можно делать пересечения типов:

public static void main(String... args) {
   var duck = (Quacks & Waddles) Mixin::create;
   duck.quack();
   duck.waddle();
}
 
interface Quacks extends Mixin {
   default void quack() {
       System.out.println("Quack");
   }
}
 
interface Waddles extends Mixin {
   default void waddle() {
       System.out.println("Waddle");
   }
}
 
interface Mixin {
   void __noop__();
   static void create() {}
}

Есть полезные программы, которые облегчают жизнь:
  • Билеты на поезд/самолёт/кинотеатр, чтобы всегда знать где они лежат и не рыться в сумках;
  • Отслеживание почтовых посылок;
  • Копии всех документов в виде JPG сканов на телефоне, если вдруг понадобится ИНН или номер загранпаспорта;


Но есть вещи, которые без телефона делать очень трудно — 2FA через Google Authenticator (или Lastpass Authenticator). Можно заменить на SMS — но это небезопасно и требует роуминга при путешествии заграницу.
Если взглянуть на статью «11 лучших шрифтов для программирования» (плюс комментарии), то выбор моноширный шрифтов не такой уж маленький. Интересно, чем Майкрософтовский шрифт сможет удивить?
О каком новом шрифте идёт речь в статье? Это шрифт из первого видео? По-моему в мире и так слишком много различных моноширных шрифтов. Какую задачу Microsoft решает, создавая ещё один? Больше эмодзи?
Мне интересно, как типографический UI решает стандартные задачу «объясни пользователю как пользоваться программой»? Как отличить кнопку от простого заголовка? Куда кликнуть, чтобы лайкнуть пост? Как показать, что элемент можно перетягивать влево-вправо? Как изобразить два состояния checkbox-а?

За что Я люблю скефоморфизм (незаслуженно забытый), так это за очевидность элементов управления. Выпуклая кнопка — можно нажать, ползунок — можно тащить, круговой регулятор громкости — можно крутить. А как без инструкции понять принципы работы с типографским UI?
Всегда будет компромисс между безопасностью и удобством. Кому-то нужно быстро передавать фотки родственникам, а кому-то — секретные чаты с самоуничтожающимися сообщениями. Я для себя открыл проект Keybase. Номер телефона не требуют, сквозное шифрование, мобильный, десктопный и консольный клиенты под BSD лицензией. Врядли ваши близкие захотять им пользоваться, ведь там нет голосовых звонков, стикеров, каналов с прикольными видосами. Но авторы концентрируются на безопасности, заказывают сторонние аудиты и позиционируют себя как замену Slack.
У меня к WSL 2 есть только один вопрос: можно ли будет Docker в нём запустить? Сейчас Docker под Windows работает плоховато.
По сути, так сейчас работает Keybase.io. Новое устройство можно добавить только просканировав QR код с подключенного устройства или введя код, с экрана компьютера. Команда Keybase.io решила множество проблем с отзывом устройств без потери всей истории переписки, с подтверждением личности на других сайтах (twitter, github, др.), со сквозным шифрованием в командных чатах. При этом протоколы организованы таким образом, что клиент не обязан доверять серверу, а сервер — клиенту.
Например на странице keybase.io/max/sigchain можно увидеть, как менялись устройства и обновлялись ключи пользователя «max» (основатель компании).

Information

Rating
Does not participate
Location
Одесса, Одесская обл., Украина
Date of birth
Registered
Activity