Pull to refresh
4
Karma
0.5
Rating
Сергей Савостин @savostin

Еще один программист

Travel hacking: Покупаем билеты выгодно

Ух, сколько аффилиейтных ссылок в одном посте. Смело.

Проектируем процесс авторизации по номеру телефона: 130 гайдлайнов

Поле ввода номера телефона не должно по своему поведению отличаться от обычного текстового, ну ладно, числового, поля. Ведь нет (пока) общепринятого поведения и мои ожидания сильно отличаются от фантазий разработчика. Глядя на поле (с пробелами, дефисами) я хочу точно знать сколько раз нажать backspace, чтобы стереть часть номера. А поле нажимает его за меня. Еще бесит, когда ошибся в одной цифре посередине, тыкаешь мышкой, backspace и... номер быстренько переформатируется по загадочному алгоритму, потому, что он стал без этой цифры похож на номер Тувалу и разработчик услужливо переключил и страну и номер отформатировал. Или возьмем Великобританию. Внутри страны принято номера указывать с нулём вначале, а "снаружи" с +44. Как вы помните, номер я копирую. Для этих целей у меня в Контактах для себя указано 3 варианта одного номера - с кодом страны, с нулем и... без нуля, когда код страны в виде выпадающего списка флагов. Про такую роскошь как автозаполнение в браузере я давно забыл - там можно ввести только один вариант телефон (ну у человека ж не может быть второго номера, да?)

статью я писал только под РФ

Вот, извините, почему-то в РФ очень часто и встречается неадекватные ограничения по номеру телефона - или наглухо вбито +7, или уверенно матерится, что номер неверный, если он не начинается с +7. Я понимаю, что возможно таким образом или экономят на доставке смс, или ограничивают регистрацию из других стран, но все же.

Проектируем процесс авторизации по номеру телефона: 130 гайдлайнов

Как клиента всегда бесит навязчивое форматирование номера телефона при вводе. Все эти дефисы, пробелы и пр. символы, которые я не вводил. Так же бесит невозможность вставить номер телефона (например, я новый номер уже полгода не могу запомнить и постоянно копирую, да и кто сейчас на память вводит номер телефона?) или вставить, скопированный из "такого же удобного места", где он услужливыми дизайнерами отформатирован с дефисами или пробелами, ведь так "удобнее воспринимать и найти ошибку" (например Контакты в MacOS).

Пожалуйста, если уж ограничиваете ввод по количеству цифр, будьте на 142% уверены, что учли все варианты во всех странах.

Выбор кода страны в виде списка (еще и с флагами, красота - можно подучить как выглядят флаги всех стран) - сортирует его кто как вздумает, и по коду (а там разное количество цифр и идет +3, +4, ... +33, +5) и в алфавитном порядке названия страны (а че, удобно ж, но это пока не вводишь номер Великобритании/Англии/Соединенного (или даже Объединенного!) Королевства :] ), а то и вовсе названия стран на русском, а сортировка по ISO2 кодам где-то внутри.

Бывает и такое, что страна, указанная при регистрации (или в адресе доставки, например) может не совпадать с кодом страны номера телефона. Да-да, есть такие извращенцы.

Код присылайте пожалуйста в начале короткого сообщения - удобно вводить из уведомлений, не открывая полное сообщение.

Если только это не сайт банка, или криптобиржа, не заставляйте меня логиниться через код в смс после 5 минут неактивности. Но вообще авторизация по смс (да и через код в e-mail), как по мне, нужна только в действительно критично важных сервисах. Понятно, что все хотят собрать как можно более достоверную и полную информацию чтобы потом продать, но раз мы тут говорим об удобстве для клиента...

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

Похоже на вступление к реферату или книге. Много теории, осознание необходимости и т.п. Но ничего так и не узнал...

Как работают this, call, apply и bind в Java Script: разбираемся на примерах

Мало!

Где классы? Где prototype? Где статические функции? Замыкания?

Трудности перевода в разработке: как делать интернациональные проекты и говорить с пользователями на одном языке

const interfaceMsg =
  'На почту {bo}{email}{bc} отправлено п...';
// код внутри компонента/view
const msg = i18nLib.formatMessage(interfaceMsg, {
  email: htmlEscape(email),
  bo: '<b>',
  bc: '</b>',
});

Всегда было интересно почему переводчик занимается внешним видом. А если вдруг дизайнер захочет сделать italic? К кому идем? Переводчику, программисту или верстальщику?

И всегда было интересно как делать правильно ;)

Замена облакам в нашем кружке «oч.умелые ручки»

И мне лично Postgres + Redis как-то overhead...

Замена облакам в нашем кружке «oч.умелые ручки»

⚠️ The project is under very active development. Expect bugs and changes. Do not use it as the only way to store your photos and videos!

Кто ворует крипту: хакеры, сотрудники или владельцы. И какая биржа следующая?

Странно читать в обратном хронологическом порядке, особенно когда в тексте часто в прямом.

Как упростить жизнь за 312 коротких шагов: проектируем GraphQL API в микросервисной архитектуре

Т.е. в данном случае GraphQL используется "тупо" как БД? Как мне кажется, идея была именно в том, чтобы отдать клиенту всю логику приложения и убрать слой php полностью.

Т.е. Javascript на клиенте делает запрос типа

curl 'https://zvuk.com/api/v1/graphql' --data-raw $'{"operationName":"getTracks","variables":{"withReleases":true,"withArtists":true,"ids":[124167105]}}"

и получает JSON с данными напрямую (автор говорит через NGINX, но без PHP). Захотел, отсортировал как надо. Захотел, получил больше полей. Захотел, скачал всю базу ;)

Как упростить жизнь за 312 коротких шагов: проектируем GraphQL API в микросервисной архитектуре

О каких библиотеках речь? Клиентских? "Плохие люди" могут использовать "плохие библиотеки". Если я правильно понимаю, то GraphQL по сути как открытый MySQL - пиши свои запросы как хочешь и кто хочешь (понятно утрировано, но все же). Имхо, слой приложения хорош тем, что в нем относительно удобно можно (и нужно) ограничить доступ к данным.

Как упростить жизнь за 312 коротких шагов: проектируем GraphQL API в микросервисной архитектуре

Ну, доступ-то к GraphQL имеют не только "хорошие разработчики backed'а", но и "плохие хакеры". Можно ж тупо выкачать всю, пусть и публичную, базу. Веса спасут, если нагрузка спокойная и/или прогнозируемая. А если маркетинг что-то хорошее придумает, а у вас сервис будет отваливаться по "Too many requests", полетят щепки... Есть ли какой-нибудь fail2ban в GraphQL?

Токены "хорошие"? Со сроком действия и возможностью/необходимостью обновления, типа JWT? В современном мире даже e-mail уже становится "конфиденциальной информацией", а тут такой простор для "парсинга", даже параметры можно выбрать...

Как упростить жизнь за 312 коротких шагов: проектируем GraphQL API в микросервисной архитектуре

И все-таки, как вы решаете 1,2 и 4 "минусы"? Это, мне кажется, настолько большие проблемы, что без решения могут поставить крест на всей этой замечательной архитектуре.

Разработка мобильных приложений на Go

Вот теперь понятно. Но... мда.

Система типов — лучший друг программиста

Код учитывает инфляцию по ходу выполнения кода :)

Эффективная защита RDP «на минималках» ч.2

Украдено подсмотрено здесь (10-летней давности, но у меня работает):

#Checks for IP addresses that used incorrect password more than 10 times
#within 24 hours and blocks them using a firewall rule 'fail2ban'

#Check only last 24 hours
$DT = [DateTime]::Now.AddHours(-24)

#Select Ip addresses that has audit failure
$l = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $DT | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }

#Get ip adresses, that have more than 10 wrong logins
$g = $l | group-object -property IpAddress | where {$_.Count -gt 10} | Select -property Name

#Get firewall object
$fw = New-Object -ComObject hnetcfg.fwpolicy2

#Get firewall rule named 'BlockAttackers' (must be created manually)
$ar = $fw.rules | where {$_.name -eq 'fail2ban'}

#Split the existing IPs into an array so we can search it for existing IPs
$arRemote = $ar.RemoteAddresses -split(',')

#Only collect IPs that aren't already in the firewall rule
$w = $g | where {$_.Name.Length -gt 1 -and !($arRemote -contains $_.Name + '/255.255.255.255') }

#Add the new IPs to firewall rule
$w| %{
  if ($ar.RemoteAddresses -eq '*') {
    $ar.remoteaddresses = $_.Name
  }else{
    $ar.remoteaddresses += ',' + $_.Name
  }
}

#Write to logfile
if ($w.length -gt 1) {
  $w| %{(Get-Date).ToString() + ' ' + $_.Name >> '.\blocked.txt'}
}

Разработка мобильных приложений на Go

Странно, что в статье нет ни одного скриншота приложения...

Information

Rating
1,424-th
Location
Isleworth, England - London, Великобритания
Date of birth
Registered
Activity

Specialization

Chief Technology Officer (CTO)
Lead
JavaScript
HTML
CSS
JQuery
Web development
Node.js