Вот вам карты «возможного» местоположения разработчиков Telegram и React для затравки.
Параметры:
масштаб +/- страна;
промах до тыс. км.;
вероятность ошибки, по ощущениям, пока ~20%;
Факты:
время коммита сохраняется с timezone пользователя;
мы можем извлечь историю коммитов вызывав
git log
;
Текущий алгоритм:
смотрим часовой пояс в метке времени коммита;
в некоторых часовых поясах расположен лишь один крупный город (например: +4:30 Кабул, +5:45 Катманду, +10:30 Аделаида);
в некоторых часовых поясах расположена лишь одна страна (например: +05:30 Индия, +12:00/+13:00 Новая Зеландия);
имея зону с N странами учитываем только те, где большая вероятность IT (например: в зоне Буркина Фасо / Великобритания исключаем Буркина Фасо)
проверяем домен первого уровня у почтового ящика (например: mil в основном используют военные США);
проверяем почтовый сервер (например: китайцы предпочитают qq.com)
проверяем уникальные символы в текстах коммитов (например: ł для Польши, ß для Германии, ñ для Испании);
проверяем популярные фамилии (например: Ким и Пак это ~15 млн. корейцев из зоны Корея/Япония, а Судзуки и Сато ~4 млн. японцев)
Что можно ещё:
сохранить ТОП 100 IT-компаний и их адресов. Из email узнать компанию (например: для ivan@luxoft.com это, скорее всего, Luxoft). Сопоставить почту, офисы и текущий диапазон стран.
если человек долго и много коммитил, можно составить гистограмму и сопоставить провалы в ней с гос. праздниками (например: рождество у католиков, фиеста и сиеста у испанцев, день независимости в Папуа — Новая Гвинея).
сопоставить местоположение с другими метриками и выделить на карте работающих и уволенных (или основной состав). Далее корректировать местоположение отдельных ребят по позиции большинства.
Минусы:
много мест с «если», поэтому будут ошибки. Моя задача угадать не 100% случаев, а верно предположить «для большинства».
алгоритм легко обмануть, но «для большинства» это бессмысленная задача.
Да, метод не самый точный. Но текущая реализация (с багами) уже неплохо угадывает, а если добавить правильные переходы на летнее и зимнее время, а также расширить метрики, станет ещё лучше. Исходники тут, онлайн демо тут.
Пакеты для Python, Ruby, JS, PHP, Docker
Python:
установка:pipx install assayo
создать отчёт:assayo
Ruby:
установка:gem install assayo
создать отчёт:assayo
JS:
создать отчёт:npx assayo
PHP:
установка:composer require bakhirev/assayo
создать отчёт:vendor/bin/assayo
Docker:
образ: https://hub.docker.com/r/bakhirev/assayo
P.S.: Когда я писал это, новости про Linux ещё не было. А теперь как-то странно выходит, ведь это потенциально можно использовать для массовых баннов. Но с другой стороны, причина банов не в инструменте составления списков. Странно будет удалять это.
Комментарии (13)
artemmoscow
23.10.2024 20:34а разве телеграм опенсорсный? как там посмотреть коммиты
bakhirev Автор
23.10.2024 20:34Я взял это https://github.com/telegramdesktop/tdesktop Возможно это не официальная сборка, но выглядит как официальная
ishchu_kota
23.10.2024 20:34Частично опенсорсный, клиентная часть. https://telegram.org/apps#source-code
AndreiKud
23.10.2024 20:34Репа, конечно, есть, но как минимум клиент мобильный для андроида в сторе собирается из чуть другого кода. Видимо, у них какая-то приватная репа, изменения в которой они со временем в публичный апстрим льют
stangri
23.10.2024 20:34проверяем уникальные символы в текстах коммитах (например: ł для Польши, ß для Германии, ñ для Испании);
Насколько я помню, из немецко-говорящих стран ß действительно используется только в Германии (ну и для ваших целей, можно пренебречь), но из испано-говорящих стран ñ используется всюду. Есть и другие языки, где ñ используется. Если вы определяете страну по ñ в комбинации с часовой зоной, будет точнее (из текста неочевидно).
bakhirev Автор
23.10.2024 20:34Да, все так и есть. Это проверка только для Европы или островов. В районе Латинской Америки она уже не используется, т.к. слишком много испаноязычных стран.
A4E
23.10.2024 20:34С последней картинкой интересно. Аргентина внезапно наибольшее количество имеет. Знаю, что c у Canonical здесь много персонала, конечно. Но все равно удивительно
bakhirev Автор
23.10.2024 20:34В данном случае это смесь Аргентино-Бразильцев. При том, что часть Бразильцев я отрезал по Испанскому алфавиту и частично по популярным фамилиям, а в сторону Аргентины сдвинул, т.к. у неё более сильная экономика и IT отрасль. Но возможно я ошибся, т.к. следуя "карте офисов", работяги Canonical имеются в Сан-Паулу, а это Бразилия (на 1000 км выше).
Видимо "карта офисов" для ТОП 100 компаний сильно поправит разброс и нужно будет её сделать.
denismartyanov
23.10.2024 20:34Вам бы кружочки побольше делать, а то на последней картинке четырёхзначные числа не влезают, я сначала удивился даже от странного распределения, пока не разглядел.
bakhirev Автор
23.10.2024 20:34Готово (пока только в онлайн версии). Так же добавил цвета и фильтры, чтобы понять где основная команда или сотрудники конкретного суб. подрядчика.
ImagineTables
23.10.2024 20:34Я думал, скорость света будет сопоставляться со временем в коммитах, или что-то вроде этого. А тут — «смотрим в таймзону юзера».
— И это всё дал анализ слюны?!
— Да. К счастью, преступник, уходя, обронил паспорт, что полностью подтвердило наши подозрения.(Но всё равно круто).
muryk
23.10.2024 20:34Для тех, кого это волнует - можно указать таймзону для git. Например, вот так можно установить UTC для всей активности (а заодно писать лог команд):
#!/bin/bash LOG=..... path to your log file.txt timestamp=$(date +'%Y-%m-%d %H:%M:%S %Z') # quote the arguments if necessary args_string=$(printf "%q " "$@") echo -e "$timestamp: git $args_string\n" >> "$LOG" # Check if the file has 1500+ lines, truncate it to 1000 if [ $(wc -l < "$LOG") -ge 1500 ]; then tail -n 1000 "$LOG" > "$LOG.tmp" && mv "$LOG.tmp" "$LOG" fi export TZ="UTC" /usr/bin/git "$@"
И работать только через этот скрипт. Рецепт для macOS и unix-like. Как это сделать в Windows - не знаю, скорее всего примерно так же.
Shaman_RSHU
Какая-то доля OSINT в этом есть