Мой новый мини-проект: Timezoned

Представляю вам свой новый мини-проект Timezoned — веб-страницу для отслеживания разных часовых поясов и разницы между ними:

https://timezoned.vercel.app/

Регистрация не требуется, вся информация хранится локально в браузере.

Может быть полезно тем, кто меняет свой часовой пояс и взаимодействует с людьми в других часовых поясах, например, по работе. Мне самому нужна была эта страница, так что сапожник теперь не без сапог. ?

Заодно наконец попробовал все новомодные веб-технологии. Исходники на GitHub тоже прилагаются: https://github.com/kapxapot/timezoned

Использованные технологии и библиотеки:

  • React / Next.js / TypeScript
  • Tailwind CSS
  • Flowbite React
  • Headless UI
  • React Joyride

О политкорректности и разнообразии (diversity)

Как было раньше

Все продукты производились (грубо говоря) белыми для белых, и везде в иллюстрациях, фото и интерфейсах все было от белых для белых. И это было ок, пока это не стало напрягать всех остальных и эти остальные не получили возможность об этом заявлять.

Как теперь (тренд)

Теперь принято в иллюстрациях и интерфейсах использовать изображения людей разнообразных культур и полов. Во-первых, очень много женщин. Во-вторых, чернокожие, арабы, индусы, азиаты. И это ок, потому что разнообразие это хорошо и все люди равноправны (хотя местами это настолько «перекомпенсировано», что уже белые кажутся ущемленными и непредставленными (особенно, мужчины), но ничего, мы переживем).

Но что же теперь получается на самом деле?

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

Что мы имеем в итоге?

Если раньше были довольны белые, но недовольны все остальные, то теперь все остальные чуть более довольны, а белые значительно менее довольны. То есть, грубо говоря, теперь недовольны все (в разной степени), ибо наша бессознательная ксенофобия никуда не девается (например, вокруг нас (в России) белых намного больше, чем в интернете, поэтому в реальности в этом плане нам уютнее, чем в глобальном интернете).

Что дальше?

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

Ну а так в целом все это позитивно и прикольно, особенно, когда в каком-нибудь Slack под постом стоят ? всех цветов человеческой кожи. Возможно, нам (мне) просто стоит расслабиться и принять мультикультурализм таким, какой он есть. Но пока это дается с трудом. ?

Installing and configuring XAMPP

XAMPP is an easy-to-install bundle for Windows, Linux or Mac, that contains PHP, Apache, MySQL (MariaDB) and phpMyAdmin. Add Git and Composer and you are set to start local PHP development.

But actually, XAMPP requires some additional configuring if you want to make things working right. This mini-guide explains it step-by-step.

Installation

Change MySQL root password

By default, MySQL user name is root with an empty password. An empty password is not very secure, and there can be situations when an empty password doesn’t work and some actual password is required. So let’s change it to password, for example.

  • Open XAMPP Control Panel.
  • Open XAMPP shell (one of the buttons on the right side).
  • Execute command mysqladmin.exe -u root password.

Change password in phpMyAdmin

After changing the MySQL password we need to change it in phpMyAdmin config too.

  • Open file \xampp\phpMyAdmin\config.inc.php.
  • Add password to line: $cfg['Servers'][$i]['password'] = 'password';.

Correct the timezones

In some cases, you may end up with timezones out-of-sync between PHP, Apache and MySQL. Let’s sync them to Europe/Moscow timezone, for example.

Set correct timezone for PHP

  • Open \xampp\php\php.ini.
  • Add line date.timezone = "Europe/Moscow".

Set correct timezone for Apache

  • Open \xampp\apache\conf\httpd.conf.
  • Add line SetEnv TZ Europe/Moscow.

Set correct timezone for MySQL

  • Open \xampp\mysql\bin\my.ini.
  • Add line default-time-zone = "Europe/Moscow".

Ready, steady, go!

We’ve finished configuring XAMPP, grats! Now let’s start the servers.

  • Open XAMPP Control Panel.
  • Stop Apache and MySQL.
  • Start Apache.
  • Start MySQL.

If you open http://localhost in your browser, you should be redirected to http://localhost/dashboard and see the XAMPP welcome page.

To open phpMyAdmin, press MySQL‘s Admin button in XAMPP Control Panel or open http://localhost/phpmyadmin directly.

DB connection settings

To connect to DB from your code (PHP in this case), use these settings:

That’s it! Now you are ready to code!

О двухфакторной аутентификации

Умер телефон, к которому была привязана двухфакторная аутентификация (через Google Authenticator). Узнал много нового о различных сервисах, которыми пользуюсь…

Выводы:

  1. Использовать двухфакторную аутентификацию (2FA) через СМС, где это возможно. Потерять доступ к номеру телефона менее вероятно, чем потерять доступ к определенному устройству. Точнее, восстановить симку можно всегда, если вы не забыли ее номер и не потеряли свой паспорт.

  2. Google Authenticator — не лучший выбор для 2FA. Собственно, все проблемы из-за отсутствия облачной синхронизации. Понятно, что, скорее всего, так сделано, с одной стороны, чтобы повысить надежность (уж очень надежно вышло, не поспоришь), а, с другой стороны, просто потому, что идите нахуй, вот почему.

    В данный момент планирую попробовать Authy — у него есть облачные бэкапы (но приоритетным способом 2FA выбирать СМС, где возможно).

  3. Даже если потерян доступ к 2FA, большинство сервисов позволяют восстановить доступ или через СМС (ВК), или путем обращения в службу поддержки (Okta, Amazon). Пока что у меня не восстановлен доступ только к DiscordIFTTT), заявка в рассмотрении, но официальная позиция компании «потеряли 2FA — сами дураки, заводите новый аккаунт» не очень воодушевляет.

    Дополнение: Discord так и не восстановил доступ, так что я им больше не пользуюсь.

    Дополнение 2: IFTTT тоже не восстановил доступ. Мой аккаунт деактивировали и выслали мне бэкап всех моих настроек в системе. Т.е. я могу зарегиться под тем же е-мейлом и восстановить все свои настройки. В целом, нормально.

  4. Ну и вообще, пожалуй, если нет острой необходимости защитить какой-то аккаунт, то, возможно, лучше к нему вообще не подключать 2FA. Редкий случай, когда перебдеть может быть хуже, чем недобдеть.

Здоровья и долголетия вашим телефонам. ;)

Произносим правильно IT-термины

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

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

  • ЗАГЛАВНЫМИ буквами обозначено ударение.
  • Статья будет обновляться по мере обнаружения мной новых антипаттернов.
  • Если вам есть что добавить, или вы со мной не согласны — добро пожаловать в кОмменты!
English Ошибка Правильно Новояз/перевод
Agile агиль, агиле эджАйл
API Апи э(й)-пи-Ай апИ
comment кОммент коммЕнт см. ниже
driven дрАЙвэн дрИвэн
engine энджАйн Энджин движок
head хид хэд
header хИдер хЭдер заголовок
JSON джейсОн джЕйсон
login лОгин логИн имя пользователя
ORM орм о-эр-Эм
plugin плАгин плагИн
profit профИт прОфит польза, выгода, прибыль
SAP сап эс-эй-пи
service сервАйс сЕрвис сервис
URI Юри ю-эр-Ай урИ

Заметки

Логин

Тут все несколько сложнее. Если обычно надо ориентироваться как раз на английское произношение (например, prOfit => прОфит), то в случае с логином слово уже вошло в русский язык, и тут ударение ставится по-своему. Мне всегда казалось естественным произносить логИн, я даже не знал долгое время, что по-английски такие слова как login и plugin произносятся с ударением на первый слог.

Был приятно удивлен, что в словарь внесен вариант именно с ударением на второй слог, так что произносите правильно!

Google Translate произносит это слово неверно. Так что ориентироваться на него можно не всегда. А вот в Викисловаре все корректно.

Коммент

Я всегда читал и произносил это слово как коммЕнт, однако в последнее время все чаще встречаю вариант кОммент. Мне понятно, откуда это пошло — в английском языке в слове cOmment ударение падает на первый слог. Однако коммент это еще и сокращение от слова комментАрий (как я его всегда и воспринимал). Мне неизвестны правила переноса ударения при сокращении слов, но я не вижу причин переносить его на первый слог в данном случае.

Аргументы в мою пользу:

  • mOment => момЕнт.
  • коммЕнтить. Кто-то говорит кОмментить?

На Грамоте.ру сначала я нашел только этот ответ. Неизвестно, насколько он новый (даты там нет, к сожалению), но там утверждается, что словарной фиксации для этого слова пока нет, и допустимы оба ударения. Это опровергает Викисловарь, утверждая, что словарная фиксация уже есть (вероятно, там более актуальная информация), и произносить надо кОммент. Он отталкивается от английского слова, совсем не принимая в расчет сокращение русского. Google Translate тоже произносит как кОммент, но ему доверия мало.

В общем, в данном случае нет фиксированной нормы, более того, есть словарная фиксация, которую я считаю некорректной.

Составные сущности как скалярные величины (на примере денег)

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

Допустим, у нас есть класс Money со свойствами Amount (количество) и Currency (валюта), в которое реализовано неявное преобразование к decimal и int. Также перегружен оператор + для сложения Money с Money:

Это позволяет безо всяких приведений типов и выковыривания Amount складывать Money не только с Money, но и с decimal и int. Результатом таких операций будет число decimal или int соответственно.

Читать далее

Null[able] Hacks

Знаете ли вы, как работает nullNullable) в различных операциях и логических выражениях в C#? Некоторые моменты неочевидны.

Арифметика

Например, null пожирает остальные значения в арифметических операциях и превращает результат в null:

Где это может пригодиться

Не знаю, где это может пригодиться, но это довольно забавно. А если серьезно, то просто имейте это в виду.

Читать далее

Этикет 2.0

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

Одно из его требований, которое меня занимает — держание ножа в правой руке, а вилки — в левой (вариант использования #1). Требование #1 это происходит, по-видимому, от того, что ножом надо резать (и нередко прилагать к этому усилия), что у людей получается лучше основной рукой (для большинства людей — правая). Проблема в том, что орудуя ножом и вилкой, нам далеко не всегда приходится резать что-то твердое, то есть мы бы прекрасно справились с ножом и в левой руке, в то же время, вилкой часто надо делать что-то более сложное, чем просто накалывание еды, левой рукой это делать неудобно, и так и хочется взять вилку в правую руку.

Читать далее

Русский язык на страже гетеросексуальности

Читая статьи и книги на английском, периодически встречаю как автор-мужчина пишет о пользователе (user) в женском роде (she).

Не очень понятно, это торжество политкорректности, или в голове у этого человека пользователь ассоциируется именно с женщиной (что навряд ли), или просто он так пишет «на всякий случай», ибо мужчин пользователь женского рода не обидит, а вот некоторых «женщин» это с определенной вероятностью возмутит.

Впрочем, речь не об этом, а о том, что в английском языке у глаголов нет рода, нет рода и у большинства существительных вроде «user», поэтому род может быть обозначен только местоимением.

При этом русский язык совсем не такой — у нас существительные обладают родом, род также есть и у глаголов единственного числа прошедшего времени. Тот же «пользователь» — мужского рода, и нечего тут заморачиваться. Говоря о пользователе в мужском роде, мы не подразумеваем, что это именно мужчина. Мы понимаем, что это произвольный человек, который может быть как мужчиной, так и женщиной. Это никого (из адекватных людей) не возмущает и не волнует.

То есть, наш язык изначально обозначает, где у нас мужское, а где — женское, и нечего тут сомневаться и раздумывать. И даже если на самом деле и не идет речь о принадлежности к какому-то полу и роду, то по умолчанию звучит это все равно в мужском роде. Для нас это естественно, мы этого не замечаем. Но для иностранцев это, наверняка, звучит так, как будто мы насквозь патриархальны (на самом деле это так и есть, но мы, опять же, не отдаем себе в этом отчета).

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

Размышления об именах и патриархальном устройстве общества

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

Каждый мужчина передает своим детям сразу две части своего имени (фамилию и отчество), в то время как каждая женщина не оставляет в именах своих потомков никаких следов.

Дальнейшее рассмотрение этого вопроса привело меня к размышлениям об одном из ярчайших проявлений патриархальности нашего общества.

Рассмотрим имена мужчин и женщин: фамилию, имя и отчество.

Каждый из нас получает свои фамилию и отчество от отца, тем самым наши отцы как бы отмечают, что 2/3 нашего имени принадлежат им, и только 1/3 — наше имя — наше собственное.

Далее если сравнить мужчину и женщину, то (будем рассматривать только «нормальное» течение жизни человека) женщина выходит замуж и меняет свою фамилию на фамилию мужа, после чего ее «акции» распределяются поровну между ее отцом, мужем и самой ей. То есть, женщине принадлежит только 1/3 собственного имени в любой ситуации.

С мужчиной все немного по-другому. Его «акции» не просто принадлежит его отцу на 2/3, мужчина становится «дистрибьютором» отцовской фамилии, к нему переходят права на нее. Кроме того, он захватывает 1/3 имени своей жены (фамилию) и получает уже свои 2/3 в именах собственных детей. С учетом этих обстоятельств можно считать, что мужчине (если он переходит в свою «полноценную форму» отца и мужа) принадлежит уже 2/3 собственного имени, а 1/3 остается во владении его отца навсегда.

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

Написано мной в Google Buzz (R.I.P.) 21.10.2010