DevFM
2.35K subscribers
80 photos
5 videos
492 links
О разработке: технологии, инструменты, system design, процессы, команды

Для связи @sa_bul
Download Telegram
На рынке браузеров сейчас складывается грустная монополия Chrome и Chrome-based движков. Монополия Internet Explorer 6 задержала развитие интернета на 15 лет. Использование Chrome своего доминирующего положения не за горами.

Поддержи Firefox как единственный альтернативный движок для браузера
#skills #trends
👍10🔥2
Расклад по РФ чуть лучше. Яндекс смог взять 20% рынка, пусть движок тот же Blink, что и у Chrome.
👍5🔥2
Мобильные браузеры тоже под Chrome. Кусок рынка Safari от пользователей IOS. Есть некий Samsung Internet с 5%, впервые такое вижу. А он с 2016 года взял 5% и не отдаёт.
👍2🔥2
В РФ на рынке мобильных до 2014 года правила Opera с долей аж до 80% (в 2010). А потом владельцы потеряли все полимеры.
👍4🔥1
Последние 15 лет google занимает 1 место в области поиска для настольных компьютеров (Desktop) с долей в 85%. Bing и yahoo 10% в сумме. Яндекс молодцы, смогли занять 1.5% мирового рынка
👍4🔥1
На рынке в РФ в категории Desktop Яндекс лидирует с 55% против 40% у Google. Провал справа технический, там yandex.ru заменился на yandex.
👍3🔥1
На глобальном рынке поиска в категории Mobile Google занимает 95%.
👍3🔥3
Для Mobile в РФ яндекс проигрывает гуглу. Почему? Средний пользователь мобильного телефона не лезет в настройки и пользуется всем по умолчанию. Отсюда всякие законодательные инициативы о предустановке или обязанности предоставления выбора при первом запуске
👍3🔥3👎1
Как удобно использовать сложный пароль? Речь про конструкции вроде

JVoZlEoHk~?rsnJFCZ1pJ%IEp

На помощь приходят менеджеры паролей:
– 1Password
– Bitwarden
– LastPass
– KeePass
и многие другие. Тут важна безопасность, поэтому убедитесь в отсутствии громких утечек от выбранного менеджера паролей за последние годы.

Можно пользоваться только оффлайн-хранилищем и не использовать облачную синхронизацию. Чуть менее удобно, зато ваши пароли не утекут. Можно синхронизировать пароли через файловую шару типа дропбокса. А если файл с паролями ещё и зашифровать... Ляпота.

PS: не доверяйте свои пароли браузеру. Мы же параноики, верно?
#skills
👍11🔥2
Пятничное развлекательное

Немного разобраться в себе и окружающих поможет старый советский фильм Я и другие – 50 минут результатов психологических исследований. Способны ли вы идти против мнения толпы? Насколько точна ваша память? Есть ли на столе черная пирамидка или обе белые?

Частично схожие вопросы поднимаются в просто идеальном фильме Трасса 60. Как люди отнесутся к оригиналу картины известного художника, если выдать её за подделку? Как будет выглядеть город, где живут только адвокаты? Что будет, если легализовать наркотики? Описание получилось отстойным, но фильм, право, очень хорош.

#fun #films #edu
🔥10👍7
Господа, нас круглое число – 128. Планируем захват мира через 3...2...^C

#ToTheMoon
🔥30🤯5👍2
DevFM
Одним из вариантов безопасной пересылки данных является передача зашифрованного rar/zip архива с паролем. В rar есть удобная галочка "шифровать имена файлов", когда названия файлов внутри архива не показываются. Но rar формат проприетарный, что плохо с точки…
Как сформировать надёжный мастер-пароль для менеджера паролей, о которых мы писали ранее? Самым простым, при этом самым неломаемым вариантом будет кусок стихотворения со всей пунктуацией.

Я вас любил: любовь ещё, быть может,

Это почти идеальный пароль. Можно ещё добавить спецсимволов вместо пробелов или ещё как-то усложнить текст одному вам понятным образом.

PS: Не используйте свои любимые цитаты. Выбранный фрагмент должен иметь нулевую связь с вами, как личностью.
#skills #sudo #devfm
👍12🔥2
Попроси программиста проверить 10 строк кода, он найдёт 10 проблем. Попроси его проверить 500 строк кода, он скажет: "выглядит норм".

На ревью кода надо отправлять небольшие наработки. Чем больше фрагмент кода для ревью, тем сложнее дать обратную связь. Либо легче — можно скипнуть внимательный анализ и просто проверить работоспособность, совершенно не вдаваясь в детали. Но польза от такого ревью невелика.

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

#procode #devfm
👍3🔥2
Давайте посмотрим на 10 строк кода.

Вроде всё хорошо. Классическое открытие файла с помощью контекстного менеджера with, классическая построчная обработка. Разбиваем строку, записываем в список словарей. Всё ли по канону? Неа:

1. Смотрим документацию: readlines возвращает список всех строк файла. Значит, для большого файла может быть беда. Современный питон позволяет итерироваться сразу по объекту file_. Просто пишем
for line in file_:

2. raw_line[0] и прочие индексы — это всегда ужас. Заменяем на
fio, login = line.split(";")

Вроде то же самое, но мы сразу понимаем, что было в строке. И тут же видим следующую проблему.

3. А что, если в строке нет двоеточия, или этих двоеточий больше одного? То есть нужна обработка ошибок на исключение ValueError, если справа split вернул не два значения. Добавляем try-except.

4. Частая проблема split — это лишние пробелы. Скорее всего, потребуется strip всем переменным после split.

Итого 4 ошибки на 10 строк кода

#python #codereview #devfm
👍14🔥4
Hoverboard — небольшой интерактивный комикс... Как бы не так. Это почти бесконечное полотно с миллиардом отсылок. Простой выйдите за пределы карты. Саму карту и объяснение отсылок можно найти тут. А zoomable-карту от фанатов — тут

#fun #xkcd
🔥7
Теперь посмотрим на переработанный код. Docstring вырезан для краткости. Код теперь крут:
1. Есть аннотация типов
2. С файлом работаем через контекстный менеджер, то есть закрыть не забудем — оно само
3. Не забыли про запрет использования file как ключевого слова, поэтому file_
4. При разбиении строки по точке с запятой используем именованные переменные
5. При ошибках — кастомные исключения. DownloadError название спорное, я бы заменил на ParsingError. Но если файл побился при скачивании, то самое то
6. Добавляем значения в список, не забывая обрезать лишние пробелы по бокам.

В общем, каждая строка на своём месте. Что можно улучшить? Я бы заменил result на logins, тогда и выходной словарик будет называться как надо.

#python #codereview #devfm
🔥9
Словарь student (или result) во вчерашнем примере не является удобной конструкцией, ФИО доступно как student["fio"]. Кроме того, мы демонстрируем наружу внутреннее представление, нарушая принцип инкапсуляции. Замена словаря на список, например, заставит переписать весь код, который использует эту структуру данных. Какой может быть выход?

Создадим класс Student и превратим словарь в экземпляр класса. Можно использовать namedtuple из collections, но мы пойдём своим путём. Бонусов много:
1. Мы скрываем внутреннее устройство студента. Наружу мы отдаём только пару полей, откуда мы их берём никто снаружи не знает
2. Можем к студенту добавлять методы. Например, вывод фамилии с инициалами в стиле Иванов И.И. — теперь это в нашей власти
3. Можем добавить новые способы создания этого студента, например, данные брать из базы данных.

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

#python #codereview
👍8🔥2