<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог Сергея Атрощенко</title>
	<atom:link href="https://kapxapot.ru/feed/" rel="self" type="application/rss+xml" />
	<link>https://kapxapot.ru</link>
	<description>[Not] wasting my time</description>
	<lastBuildDate>Wed, 15 Mar 2023 09:34:35 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.2.23</generator>
	<item>
		<title>Мой новый мини-проект: Timezoned</title>
		<link>https://kapxapot.ru/2023/03/14/timezoned/</link>
				<comments>https://kapxapot.ru/2023/03/14/timezoned/#respond</comments>
				<pubDate>Tue, 14 Mar 2023 08:37:09 +0000</pubDate>
		<dc:creator><![CDATA[kapxapot]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Timezoned]]></category>
		<category><![CDATA[проекты]]></category>

		<guid isPermaLink="false">http://kapxapot.ru/?p=1150</guid>
				<description><![CDATA[Представляю вам свой новый мини-проект Timezoned &#8212; веб-страницу для отслеживания разных часовых поясов и разницы между ними: https://timezoned.vercel.app/ Регистрация не требуется, вся информация хранится локально в браузере. Может быть полезно тем, кто меняет свой часовой пояс и взаимодействует с людьми в других часовых поясах, например, по работе. Мне самому нужна была эта страница, так что [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Представляю вам свой новый мини-проект <strong>Timezoned</strong> &#8212; веб-страницу для отслеживания разных часовых поясов и разницы между ними:</p>
<p><a href="https://timezoned.vercel.app/">https://timezoned.vercel.app/</a></p>
<p>Регистрация не требуется, вся информация хранится локально в браузере.</p>
<p>Может быть полезно тем, кто меняет свой часовой пояс и взаимодействует с людьми в других часовых поясах, например, по работе. Мне самому нужна была эта страница, так что сапожник теперь не без сапог. ?</p>
<p>Заодно наконец попробовал все новомодные веб-технологии. Исходники на GitHub тоже прилагаются: <a href="https://github.com/kapxapot/timezoned">https://github.com/kapxapot/timezoned</a></p>
<p>Использованные технологии и библиотеки:</p>
<ul>
<li>React / Next.js / TypeScript</li>
<li>Tailwind CSS</li>
<li>Flowbite React</li>
<li>Headless UI</li>
<li>React Joyride</li>
</ul>
]]></content:encoded>
							<wfw:commentRss>https://kapxapot.ru/2023/03/14/timezoned/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>О политкорректности и разнообразии (diversity)</title>
		<link>https://kapxapot.ru/2021/10/24/diversity/</link>
				<comments>https://kapxapot.ru/2021/10/24/diversity/#respond</comments>
				<pubDate>Sun, 24 Oct 2021 14:30:12 +0000</pubDate>
		<dc:creator><![CDATA[kapxapot]]></dc:creator>
				<category><![CDATA[Поток сознания]]></category>
		<category><![CDATA[Diversity]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Мультикультурализм]]></category>
		<category><![CDATA[Политкорректность]]></category>
		<category><![CDATA[Разнообразие]]></category>

		<guid isPermaLink="false">http://kapxapot.ru/?p=1138</guid>
				<description><![CDATA[Как было раньше Все продукты производились (грубо говоря) белыми для белых, и везде в иллюстрациях, фото и интерфейсах все было от белых для белых. И это было ок, пока это не стало напрягать всех остальных и эти остальные не получили возможность об этом заявлять. Как теперь (тренд) Теперь принято в иллюстрациях и интерфейсах использовать изображения [&#8230;]]]></description>
								<content:encoded><![CDATA[<h2>Как было раньше</h2>
<p>Все продукты производились (грубо говоря) белыми для белых, и везде в иллюстрациях, фото и интерфейсах все было от белых для белых. И это было ок, пока это не стало напрягать всех остальных и эти остальные не получили возможность об этом заявлять.</p>
<h2>Как теперь (тренд)</h2>
<p>Теперь принято в иллюстрациях и интерфейсах использовать изображения людей разнообразных культур и полов. Во-первых, очень много женщин. Во-вторых, чернокожие, арабы, индусы, азиаты. И это ок, потому что разнообразие это хорошо и все люди равноправны (хотя местами это настолько «перекомпенсировано», что уже белые кажутся ущемленными и непредставленными (особенно, мужчины), но ничего, мы переживем).</p>
<h3>Но что же теперь получается на самом деле?</h3>
<p>Если раньше везде были изображения белых и белые были довольны, а все остальные недовольны, то теперь чаще всего <em>любой</em> человек видит изображение человека другой культуры (непохожего на него). Скорее всего, мы к этому привыкнем, но пока это вызывает какую-то подсознательную неуютность и отторжение. Наверное, теперь белые могут в полной мере ощутить себя так же неуютно, как раньше было не-белым. Как себя теперь ощущают не-белые, могу только гадать, но думаю, что лучше, чем раньше.</p>
<h3>Что мы имеем в итоге?</h3>
<p>Если раньше были довольны белые, но недовольны все остальные, то теперь все остальные чуть более довольны, а белые значительно менее довольны. То есть, грубо говоря, теперь недовольны все (в разной степени), ибо наша бессознательная ксенофобия никуда не девается (например, вокруг нас (в России) белых намного больше, чем в интернете, поэтому в реальности в этом плане нам уютнее, чем в глобальном интернете).</p>
<h2>Что дальше?</h2>
<p>Дальше, мне кажется, возможна некоторая <em>персонализация</em>. Нравится кому-то видеть везде в интерфейсах и т.п. арабов и индусов — пожалуйста, не вопрос. Но вот, например, мне было бы приятнее и спокойнее видеть все-таки хотя бы <em>половину</em> изображений белых людей. Чем я хуже тех же чернокожих в этом своем желании? Опять же, это затрагивает исключительно мое <em>личное пространство</em>, никому другому от этого абсолютно точно хуже не станет.</p>
<p>Ну а так в целом все это позитивно и прикольно, особенно, когда в каком-нибудь <em>Slack</em> под постом стоят ? всех цветов человеческой кожи. Возможно, нам (мне) просто стоит расслабиться и принять мультикультурализм таким, какой он есть. Но пока это дается с трудом. ?</p>
]]></content:encoded>
							<wfw:commentRss>https://kapxapot.ru/2021/10/24/diversity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Installing and configuring XAMPP</title>
		<link>https://kapxapot.ru/2019/06/04/installing-and-configuring-xampp/</link>
				<comments>https://kapxapot.ru/2019/06/04/installing-and-configuring-xampp/#respond</comments>
				<pubDate>Tue, 04 Jun 2019 08:42:01 +0000</pubDate>
		<dc:creator><![CDATA[kapxapot]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[XAMPP]]></category>

		<guid isPermaLink="false">http://kapxapot.ru/?p=1107</guid>
				<description><![CDATA[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 First of all, [&#8230;]]]></description>
								<content:encoded><![CDATA[<p><strong>XAMPP</strong> is an easy-to-install bundle for <strong>Windows</strong>, <strong>Linux</strong> or <strong>Mac</strong>, that contains <strong>PHP</strong>, <strong>Apache</strong>, <strong>MySQL</strong> (MariaDB) and <strong>phpMyAdmin</strong>. Add <strong>Git</strong> and <strong>Composer</strong> and you are set to start local PHP development.</p>
<p>But actually, <strong>XAMPP</strong> requires some additional configuring if you want to make things working right. This mini-guide explains it step-by-step.</p>
<h2>Installation</h2>
<ul>
<li>First of all, install <strong>XAMPP</strong>: <a href="https://www.apachefriends.org/download.html">https://www.apachefriends.org/download.html</a>.</li>
<li>Choose <strong>Apache</strong>, <strong>MySQL</strong> and <strong>phpMyAdmin</strong>.</li>
<li>Open the <strong>Control Panel</strong>, we&#8217;ll need it later.</li>
<li>Start <strong>Apache</strong> and <strong>MySQL</strong>.</li>
</ul>
<h2>Change MySQL root password</h2>
<p>By default, <strong>MySQL</strong> user name is <code>root</code> with an <strong>empty password</strong>. An empty password is not very secure, and there can be situations when an empty password doesn&#8217;t work and some actual password is required. So let&#8217;s change it to <code>password</code>, for example.</p>
<ul>
<li>Open <strong>XAMPP Control Panel</strong>.</li>
<li>Open <strong>XAMPP shell</strong> (one of the buttons on the right side).</li>
<li>Execute command <code>mysqladmin.exe -u root password</code>.</li>
</ul>
<h2>Change password in phpMyAdmin</h2>
<p>After changing the <strong>MySQL</strong> password we need to change it in <strong>phpMyAdmin</strong> config too.</p>
<ul>
<li>Open file <code>\xampp\phpMyAdmin\config.inc.php</code>.</li>
<li>Add password to line: <code>$cfg['Servers'][$i]['password'] = 'password';</code>.</li>
</ul>
<h2>Correct the timezones</h2>
<p>In some cases, you may end up with timezones out-of-sync between PHP, Apache and MySQL. Let&#8217;s sync them to <code>Europe/Moscow</code> timezone, for example.</p>
<h3>Set correct timezone for PHP</h3>
<ul>
<li>Open <code>\xampp\php\php.ini</code>.</li>
<li>Add line <code>date.timezone = "Europe/Moscow"</code>.</li>
</ul>
<h3>Set correct timezone for Apache</h3>
<ul>
<li>Open <code>\xampp\apache\conf\httpd.conf</code>.</li>
<li>Add line <code>SetEnv TZ Europe/Moscow</code>.</li>
</ul>
<h3>Set correct timezone for MySQL</h3>
<ul>
<li>Open <code>\xampp\mysql\bin\my.ini</code>.</li>
<li>Add line <code>default-time-zone = "Europe/Moscow"</code>.</li>
</ul>
<h2>Ready, steady, go!</h2>
<p>We&#8217;ve finished configuring XAMPP, grats! Now let&#8217;s start the servers.</p>
<ul>
<li>Open <strong>XAMPP Control Panel</strong>.</li>
<li>Stop <strong>Apache</strong> and <strong>MySQL</strong>.</li>
<li>Start <strong>Apache</strong>.</li>
<li>Start <strong>MySQL</strong>.</li>
</ul>
<p>If you open <a href="http://localhost">http://localhost</a> in your browser, you should be redirected to <a href="http://localhost/dashboard">http://localhost/dashboard</a> and see the <strong>XAMPP</strong> welcome page.</p>
<p>To open <strong>phpMyAdmin</strong>, press <strong>MySQL</strong>&#8216;s <code>Admin</code> button in <strong>XAMPP Control Panel</strong> or open <a href="http://localhost/phpmyadmin">http://localhost/phpmyadmin</a> directly.</p>
<h2>DB connection settings</h2>
<p>To connect to DB from your code (PHP in this case), use these settings:</p>
<p></p><pre class="crayon-plain-tag">DB_ADAPTER=&quot;mysql&quot;
DB_HOST=&quot;localhost&quot;
DB_PORT=&quot;3306&quot;
DB_DATABASE=&quot;test&quot; // change it to your database
DB_USER=&quot;root&quot;
DB_PASSWORD=&quot;password&quot;</pre><p></p>
<p>That&#8217;s it! Now you are ready to code!</p>
]]></content:encoded>
							<wfw:commentRss>https://kapxapot.ru/2019/06/04/installing-and-configuring-xampp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>О двухфакторной аутентификации</title>
		<link>https://kapxapot.ru/2019/02/08/2fa/</link>
				<comments>https://kapxapot.ru/2019/02/08/2fa/#respond</comments>
				<pubDate>Fri, 08 Feb 2019 06:25:30 +0000</pubDate>
		<dc:creator><![CDATA[kapxapot]]></dc:creator>
				<category><![CDATA[Цифровая безопасность]]></category>

		<guid isPermaLink="false">http://kapxapot.ru/?p=1090</guid>
				<description><![CDATA[Умер телефон, к которому была привязана двухфакторная аутентификация (через Google Authenticator). Узнал много нового о различных сервисах, которыми пользуюсь&#8230; Выводы: Использовать двухфакторную аутентификацию (2FA) через СМС, где это возможно. Потерять доступ к номеру телефона менее вероятно, чем потерять доступ к определенному устройству. Точнее, восстановить симку можно всегда, если вы не забыли ее номер и не [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Умер телефон, к которому была привязана двухфакторная аутентификация (через <code>Google Authenticator</code>). Узнал много нового о различных сервисах, которыми пользуюсь&#8230;</p>
<p>Выводы:</p>
<ol>
<li>Использовать двухфакторную аутентификацию (2FA) через <code>СМС</code>, где это возможно. Потерять доступ к номеру телефона менее вероятно, чем потерять доступ к определенному устройству. Точнее, восстановить симку можно всегда, если вы не забыли ее номер и не потеряли свой паспорт.</p>
</li>
<li>
<p><code>Google Authenticator</code> — не лучший выбор для 2FA. Собственно, все проблемы из-за отсутствия облачной синхронизации. Понятно, что, скорее всего, так сделано, с одной стороны, чтобы повысить надежность (уж очень надежно вышло, не поспоришь), а, с другой стороны, просто потому, что идите нахуй, вот почему.</p>
<p>В данный момент планирую попробовать <strong><a href="https://play.google.com/store/apps/details?id=com.authy.authy">Authy</a></strong> — у него есть облачные бэкапы (но приоритетным способом 2FA выбирать СМС, где возможно).</p>
</li>
<li>
<p>Даже если потерян доступ к 2FA, большинство сервисов позволяют восстановить доступ или через СМС (<code>ВК</code>), или путем обращения в службу поддержки (<code>Okta</code>, <code>Amazon</code>). Пока что у меня не восстановлен доступ только к <code>Discord</code> (и <code>IFTTT</code>), заявка в рассмотрении, но официальная позиция компании «потеряли 2FA — сами дураки, заводите новый аккаунт» не очень воодушевляет.</p>
<p><b>Дополнение:</b> Discord так и не восстановил доступ, так что я им больше <a href="https://twitter.com/kapxapot/status/1090577193649012741">не пользуюсь</a>.</p>
<p><b>Дополнение 2:</b> IFTTT тоже не восстановил доступ. Мой аккаунт деактивировали и выслали мне бэкап всех моих настроек в системе. Т.е. я могу зарегиться под тем же е-мейлом и восстановить все свои настройки. В целом, нормально.</p>
</li>
<li>
<p>Ну и вообще, пожалуй, если нет острой необходимости защитить какой-то аккаунт, то, возможно, лучше к нему вообще не подключать 2FA. Редкий случай, когда перебдеть может быть хуже, чем недобдеть.</p>
</li>
</ol>
<p>Здоровья и долголетия вашим телефонам. ;)</p>
]]></content:encoded>
							<wfw:commentRss>https://kapxapot.ru/2019/02/08/2fa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Произносим правильно IT-термины</title>
		<link>https://kapxapot.ru/2018/07/18/right-pronunciation/</link>
				<comments>https://kapxapot.ru/2018/07/18/right-pronunciation/#respond</comments>
				<pubDate>Wed, 18 Jul 2018 06:30:43 +0000</pubDate>
		<dc:creator><![CDATA[kapxapot]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Английский язык]]></category>
		<category><![CDATA[произношение]]></category>
		<category><![CDATA[Русский язык]]></category>

		<guid isPermaLink="false">http://kapxapot.ru/?p=1058</guid>
				<description><![CDATA[В последнее время я смотрю много разных презентаций на тему программирования и всего, что с этим связано. Все это очень познавательно и полезно, и я уважаю многих докладчиков, но раз за разом меня корежит от того, как они произносят те или иные профессиональные термины вроде драйвен или хидер. Поэтому я составил список наиболее частых ошибок [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>В последнее время я смотрю много разных презентаций на тему программирования и всего, что с этим связано. Все это очень познавательно и полезно, и я уважаю многих докладчиков, но раз за разом меня корежит от того, как они произносят те или иные профессиональные термины вроде <code>драйвен</code> или <code>хидер</code>.</p>
<p>Поэтому я составил список наиболее частых ошибок произношения с моими предложениями по их исправлению. Часть из них просто без вариантов должны произноситься так же, как и на английском языке. А некоторые слова получили в русском языке собственное звучание, но и тут у меня есть свое мнение на их счет (например, <code>апИ</code>).</p>
<ul>
<li>ЗАГЛАВНЫМИ буквами обозначено ударение.</li>
<li>Статья будет обновляться по мере обнаружения мной новых антипаттернов.</li>
<li>Если вам есть что добавить, или вы со мной не согласны — добро пожаловать в кОмменты!</li>
</ul>
<table>
<thead>
<th>English</th>
<th>Ошибка</th>
<th>Правильно</th>
<th>Новояз/перевод</th>
</thead>
<tbody>
<tr>
<td><b>Agile</b></td>
<td>агиль, агиле</td>
<td>эджАйл</td>
<td></td>
</tr>
<tr>
<td><b>API</b></td>
<td>Апи</td>
<td>э(й)-пи-Ай</td>
<td>апИ</td>
</tr>
<tr>
<td><b>comment</b></td>
<td>кОммент</td>
<td>коммЕнт</a></td>
<td>см. ниже</td>
</tr>
<tr>
<td><b>driven</b></td>
<td>дрАЙвэн</td>
<td>дрИвэн</td>
<td></td>
</tr>
<tr>
<td><b>engine</b></td>
<td>энджАйн</td>
<td>Энджин</td>
<td>движок</td>
</tr>
<tr>
<td><b>head</b></td>
<td>хид</td>
<td>хэд</td>
<td></td>
</tr>
<tr>
<td><b>header</b></td>
<td>хИдер</td>
<td>хЭдер</td>
<td>заголовок</td>
</tr>
<tr>
<td><b>JSON</b></td>
<td>джейсОн</td>
<td><a href="https://youtu.be/zhVdWQWKRqM">джЕйсон</a></td>
<td></td>
</tr>
<tr>
<td><b>login</b></td>
<td>лОгин</td>
<td><a href="http://new.gramota.ru/spravka/buro/search-answer?s=%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD">логИн</a></td>
<td>имя пользователя</td>
</tr>
<tr>
<td><b>ORM</b></td>
<td>орм</td>
<td>о-эр-Эм</td>
<td></td>
</tr>
<tr>
<td><b>plugin</b></td>
<td>плАгин</td>
<td><a href="http://gramota.ru/slovari/dic/?word=%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD&#038;all=x">плагИн</a></td>
<td></td>
</tr>
<tr>
<td><b>profit</b></td>
<td>профИт</td>
<td>прОфит</td>
<td>польза, выгода, прибыль</td>
</tr>
<tr>
<td><b>SAP</b></td>
<td>сап</td>
<td>эс-эй-пи</td>
<td></td>
</tr>
<tr>
<td><b>service</b></td>
<td>сервАйс</td>
<td>сЕрвис</td>
<td>сервис</td>
</tr>
<tr>
<td><b>URI</b></td>
<td>Юри</td>
<td>ю-эр-Ай</td>
<td>урИ</td>
</tr>
</tbody>
</table>
<h2>Заметки</h2>
<h3>Логин</h3>
<p>Тут все несколько сложнее. Если обычно надо ориентироваться как раз на английское произношение (например, <code>prOfit</code> => <code>прОфит</code>), то в случае с <code>логином</code> слово уже вошло в русский язык, и тут ударение ставится по-своему. Мне всегда казалось естественным произносить <code>логИн</code>, я даже не знал долгое время, что по-английски такие слова как <code>login</code> и <code>plugin</code> произносятся с ударением на первый слог.</p>
<p>Был приятно удивлен, что <a href="http://new.gramota.ru/spravka/buro/search-answer?s=%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD">в словарь внесен</a> вариант именно с ударением на второй слог, так что произносите правильно!</p>
<p>Google Translate <a href="https://translate.google.ru/#ru/en/%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD">произносит</a> это слово неверно. Так что ориентироваться на него можно не всегда. А вот в Викисловаре <a href="https://ru.wiktionary.org/wiki/%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD">все корректно</a>.</p>
<h3>Коммент</h3>
<p>Я всегда читал и произносил это слово как <code>коммЕнт</code>, однако в последнее время все чаще встречаю вариант <code>кОммент</code>. Мне понятно, откуда это пошло — в английском языке в слове <code>cOmment</code> ударение падает на первый слог. Однако <code>коммент</code> это еще и сокращение от слова <code>комментАрий</code> (как я его всегда и воспринимал). Мне неизвестны правила переноса ударения при сокращении слов, но я не вижу причин переносить его на первый слог в данном случае.</p>
<p>Аргументы в мою пользу:</p>
<ul>
<li><code>mOment</code> => <code>момЕнт</code>.</li>
<li><code>коммЕнтить</code>. Кто-то говорит <code>кОмментить</code>?</li>
</ul>
<p>На Грамоте.ру сначала я нашел только этот <a href="http://new.gramota.ru/spravka/buro/search-answer?s=276375">ответ</a>. Неизвестно, насколько он новый (даты там нет, к сожалению), но там утверждается, что <em>словарной фиксации</em> для этого слова пока нет, и допустимы оба ударения. Это опровергает Викисловарь, <a href="https://ru.wiktionary.org/wiki/%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82">утверждая</a>, что словарная фиксация уже есть (вероятно, там более актуальная информация), и произносить надо <code>кОммент</code>. Он отталкивается от английского слова, совсем не принимая в расчет сокращение русского. Google Translate тоже <a href="https://translate.google.ru/#ru/en/%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82">произносит</a> как <code>кОммент</code>, но ему доверия мало.</p>
<p>В общем, в данном случае нет фиксированной нормы, более того, есть словарная фиксация, которую я считаю некорректной.</p>
]]></content:encoded>
							<wfw:commentRss>https://kapxapot.ru/2018/07/18/right-pronunciation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Составные сущности как скалярные величины (на примере денег)</title>
		<link>https://kapxapot.ru/2018/06/29/composite-money-to-scalar/</link>
				<comments>https://kapxapot.ru/2018/06/29/composite-money-to-scalar/#respond</comments>
				<pubDate>Fri, 29 Jun 2018 08:18:38 +0000</pubDate>
		<dc:creator><![CDATA[kapxapot]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://kapxapot.ru/?p=965</guid>
				<description><![CDATA[Для ряда сущностей имеет смысл их представление в скалярном виде. Например, деньги состоят из количества и валюты, но при работе с ними зачастую нам нужно просто числовое представление, которое можно, в первую очередь, складывать с другими числами. Допустим, у нас есть класс Money со свойствами Amount (количество) и Currency (валюта), в которое реализовано неявное преобразование [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Для ряда сущностей имеет смысл их представление в скалярном виде. Например, <strong>деньги</strong> состоят из количества и валюты, но при работе с ними зачастую нам нужно просто числовое представление, которое можно, в первую очередь, складывать с другими числами.</p>
<p>Допустим, у нас есть класс <code>Money</code> со свойствами <code>Amount</code> (количество) и <code>Currency</code> (валюта), в которое реализовано неявное преобразование к <code>decimal</code> и <code>int</code>. Также перегружен оператор <code>+</code> для сложения <code>Money</code> с <code>Money</code>:</p>
<p></p><pre class="crayon-plain-tag">public class Money
{
    public decimal Amount { get; }
    public Currencies Currency { get; }

    ...

    public static implicit operator decimal(Money m) =&gt; m.Amount;

    public static implicit operator int(Money m) =&gt; (int)m.Amount;

    public static Money operator +(Money m1, Money m2)
    {
        var conv = m2.ConvertTo(m1.Currency);
        return new Money(m1.Amount + conv.Amount, m1.Currency);
    }

    ...
}</pre><p></p>
<p>Это позволяет безо всяких приведений типов и выковыривания <code>Amount</code> складывать <code>Money</code> не только с <code>Money</code>, но и с <code>decimal</code> и <code>int</code>. Результатом таких операций будет число <code>decimal</code> или <code>int</code> соответственно.</p>
<p></p><pre class="crayon-plain-tag">var m = new Money(100, Currencies.RUR);
var x = 200;
var sum = m + x; // (int)300</pre><p></p>
<p><span id="more-965"></span>Кроме арифметических операций можно передавать <code>Money</code> в качестве параметра везде, где требуется <code>decimal</code> или <code>int</code>.</p>
<p></p><pre class="crayon-plain-tag">private double TotalSum(double partOne, double partTwo) {
    return partOne + partTwo;
}

private void Test() {
    var m = new Money(100, Currency.USD);
    var total = TotalSum(m, 1000); // (int)1100
}</pre><p></p>
<p>Однако будьте внимательны и имейте в виду, что при использовании нескольких <code>Money</code> таким способом их валюты будут игнорироваться, то есть такие операции следует делать только между экземпляром <code>Money</code> и числами (или проводить операции отдельно над <code>Money</code> и отдельно над смешанными объектами).</p>
<p>Говоря языком математики, операция сложения разнородных величин в данном случае теряет <strong>коммутативность</strong> обычной операции сложения чисел. То есть, от перемены мест слагаемых сумма в данном случае легко может поменяться.</p>
<p></p><pre class="crayon-plain-tag">var m1 = new Money(100, Currencies.RUR);
var m2 = new Money(200, Currencies.USD);

var sum1 = m1 + m2 + 1000;
// переведет $200 (m2) в рубли (допустим, по курсу 60 получим 12000 р), сложит их со 100 рублями, после чего прибавит к ним 1000
// результат: 13100

var sum2 = 1000 + m1 + m2;
// сложит все в виде чисел
// результат: 1300

var sum3 = 1000 + (m1 + m2);
// результат: 13100</pre><p></p>
<p>Лучше вообще не складывать более двух сущностей сразу, чтобы не получить непредсказуемых результатов. Ну или используйте скобки, чтобы задать явный порядок выполнения операций.</p>
<p>Полный код примера (<a href="https://github.com/kapxapot/money-example">Github</a>):</p>
<p></p><pre class="crayon-plain-tag">using System;
using System.Linq;

namespace Money
{
    public class Program
    {
        public static void Main()
        {
            // test 1
            var m = new Money(100, Currencies.RUR);
            var x = 200;

            Console.WriteLine($&quot;{m} + {x} = {m + x}&quot;); // 300

            //test 2
            m = new Money(100, Currencies.USD);
            x = 1000;

            Console.WriteLine($&quot;{m} + {x} = {Sum(m, x)}&quot;); // 1100

            // test 3
            var m1 = new Money(100, Currencies.RUR);
            var m2 = new Money(200, Currencies.USD);
            x = 1000;

            Console.WriteLine($&quot;{m1} + {m2} + {x} = {m1 + m2 + x}&quot;);
            // переведет $200 (m2) в рубли (допустим, по курсу 60 получим 12000 р), сложит их со 100 рублями, после чего прибавит к ним 1000
            // результат: 13100

            Console.WriteLine($&quot;{x} + {m1} + {m2} = {x + m1 + m2}&quot;);
            // сложит все в виде чисел
            // результат: 1300

            Console.WriteLine($&quot;{x} + ({m1} + {m2}) = {x + (m1 + m2)}&quot;);
            // результат: 13100

            Console.ReadLine();
        }

        private static decimal Sum(params decimal[] x) =&gt; x.Sum();
    }

    public enum Currencies
    {
        RUR,
        USD,
        EUR
    }

    public class Money
    {
        public decimal Amount { get; }
        public Currencies Currency { get; }

        public Money(decimal amount, Currencies currency)
        {
            Amount = amount;
            Currency = currency;
        }

        public Money ConvertTo(Currencies newCurrency)
        {
            var newAmount = (Currency == newCurrency)
                ? Amount
                : Amount.Convert(Currency, newCurrency);

            return new Money(newAmount, newCurrency);
        }

        public static implicit operator decimal(Money m) =&gt; m.Amount;

        public static implicit operator int(Money m) =&gt; (int)m.Amount;

        public static Money operator +(Money m1, Money m2)
        {
            var conv = m2.ConvertTo(m1.Currency);
            return new Money(m1.Amount + conv.Amount, m1.Currency);
        }

        public override string ToString() =&gt; $&quot;{Amount} {Currency}&quot;;
    }

    public static class Extensions
    {
        public static decimal Convert(this decimal amount, Currencies from, Currencies to) =&gt;
            (decimal)((double)amount * from.GetCourseTo(to));

        public static double GetCourseTo(this Currencies from, Currencies to)
        {
            if (from == to) return 1;

            // placeholder
            if (from == Currencies.USD &amp;&amp; to == Currencies.RUR)
            {
                return 60;
            }

            throw new Exception($&quot;No course set for conversion from {from} to {to}.&quot;);
        }
    }
}</pre><p></p>
<p>Результатом выполнения этой программы будет следующий текст:</p>
<p></p><pre class="crayon-plain-tag">100 RUR + 200 = 300
100 USD + 1000 = 1100
100 RUR + 200 USD + 1000 = 13100
1000 + 100 RUR + 200 USD = 1300
1000 + (100 RUR + 200 USD) = 13100</pre><p></p>
]]></content:encoded>
							<wfw:commentRss>https://kapxapot.ru/2018/06/29/composite-money-to-scalar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Null[able] Hacks</title>
		<link>https://kapxapot.ru/2018/06/28/nullable-hacks/</link>
				<comments>https://kapxapot.ru/2018/06/28/nullable-hacks/#respond</comments>
				<pubDate>Thu, 28 Jun 2018 08:58:05 +0000</pubDate>
		<dc:creator><![CDATA[kapxapot]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://kapxapot.ru/?p=963</guid>
				<description><![CDATA[Знаете ли вы, как работает null (и Nullable) в различных операциях и логических выражениях в C#? Некоторые моменты неочевидны. Арифметика Например, null пожирает остальные значения в арифметических операциях и превращает результат в null: [crayon-69a3ee36c62cb525252851/] Где это может пригодиться Не знаю, где это может пригодиться, но это довольно забавно. А если серьезно, то просто имейте это [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Знаете ли вы, как работает <code>null</code> (и <code>Nullable</code>) в различных операциях и логических выражениях в <strong>C#</strong>? Некоторые моменты неочевидны.</p>
<h2>Арифметика</h2>
<p>Например, <code>null</code> пожирает остальные значения в арифметических операциях и превращает результат в <code>null</code>:</p>
<p></p><pre class="crayon-plain-tag">null + null: null
null + 1: null
1 + null: null
1 + 1: 2</pre><p></p>
<h3>Где это может пригодиться</h3>
<p>Не знаю, где это может пригодиться, но это довольно забавно. А если серьезно, то просто имейте это в виду.</p>
<p><span id="more-963"></span></p>
<h2>Сравнение с числами</h2>
<p>Если сравнивать <code>null</code> с числами, то он одновременно <strong>не меньше</strong> и <strong>не больше</strong> их:</p>
<p></p><pre class="crayon-plain-tag">null &gt; 0: false
null &lt; 2: false</pre><p></p>
<h3>Где это может пригодиться</h3>
<p>Например, у нас есть строка, но мы не знаем, <code>null</code> она или нет, а нам надо проверить ее длину. В голову может прийти такой неэлегантный вариант:</p>
<p></p><pre class="crayon-plain-tag">if (!string.IsNullOrEmpty(str) &amp;&amp; str.Length &gt; 10) { ... }</pre><p></p>
<p>Или даже так:</p>
<p></p><pre class="crayon-plain-tag">if (!string.IsNullOrWhiteSpace(str) &amp;&amp; str.Length &gt; 10) { ... }</pre><p></p>
<p><code>IsNullOrWhiteSpace</code>, как и <code>IsNullOrEmpty</code> — хорошая (отличная!) практика, но в данном случае это излишне, поскольку мы сразу же за этим проверяем длину строки (что нам придется делать в любом случае). Поэтому можно написать проще:</p>
<p></p><pre class="crayon-plain-tag">if (str != null &amp;&amp; str.Length &gt; 10) { ... }</pre><p></p>
<p>А теперь вспомним наш хак и сократим это еще больше:</p>
<p></p><pre class="crayon-plain-tag">if (str?.Length &gt; 10) { ... }</pre><p></p>
<p>Если <code>str == null</code>, выражение выдаст <code>false</code>, поскольку <code>str?.Length == null</code>. Если же строка не <code>null</code>, будет произведена обычная проверка ее длины.</p>
<p>Пример:</p>
<p></p><pre class="crayon-plain-tag">public static class Extensions
{
  public static string Truncate(this string str, int length)
  {
    return (str?.Length &gt; length)
      ? str.Substring(0, length)
      : str;
  }
}</pre><p></p>
<h2>Сравнение с булевскими величинами</h2>
<p>С булевскими значениями все без сюрпризов. <code>null</code> не равен как <code>true</code>, так и <code>false</code>:</p>
<p></p><pre class="crayon-plain-tag">null == false: false
null == true: false
null != false: true
null != true: true</pre><p></p>
<h3>Где это может пригодиться</h3>
<p><code>null</code> у нас опять сущность из другого измерения, которая ни с чем не совместима. Но эта особенность позволяет немного элегантнее проверять значения переменных типа <code>bool?</code>.</p>
<p>Мы довольно часто встречаемся с булевскими полями в сущностях БД, которые могут быть пустыми. Бывают и такие параметры функций.</p>
<p>Например, у нас есть такой код:</p>
<p></p><pre class="crayon-plain-tag">using (var model = new Model())
{
  var project = model.Projects.Where(p =&gt; p.Id == 12345);
  ...
}</pre><p></p>
<p>Нам нужно проверить, особенный это проект или нет, за это отвечает поле <code>project.IsSpecial</code>, тип которого <code>bool?</code>. У него может быть три значения: <code>null</code>, <code>false</code> и <code>true</code>. Первые два соответствуют значению <code>ложь</code>, и только третье означает <code>истина</code>, что типично для булевских полей БД, которые могут быть <code>null</code>.</p>
<p>Таким образом, чтобы узнать, что поле имеет значение <code>истина</code>, нам нужно убедиться, что оно не пустое и имеет значение <code>true</code>. Если бы у нас было простое значение <code>bool</code>, мы бы просто написали:</p>
<p></p><pre class="crayon-plain-tag">if (project.IsSpecial) { ... }</pre><p></p>
<p>Но оно у нас <code>Nullable</code>, поэтому все печально, и нам приходится писать такие монструозные конструкции, как:</p>
<p></p><pre class="crayon-plain-tag">if (project.IsSpecial.HasValue &amp;&amp; project.IsSpecial.Value) { ... }</pre><p></p>
<p>Или:</p>
<p></p><pre class="crayon-plain-tag">if (project.IsSpecial != null &amp;&amp; project.IsSpecial.Value) { ... }</pre><p></p>
<p>Что немногим лучше.</p>
<p>Мало того, что нам нужно делать две отдельные проверки, так нам еще два раза приходится писать наименование переменной, которую мы проверяем. В данном случае это не очень страшно, но может быть и хуже:</p>
<p></p><pre class="crayon-plain-tag">if (campaign.Project.IsSpecial != null
  &amp;&amp; campaign.Project.IsSpecial.Value) { ... }</pre><p></p>
<p>Мало того, что код получается длинным и малочитабельным, так мы еще имеем и повторение кода, которое тоже чревато последствиями. Одним из вариантов будет вынесение <code>campaign.Project</code> во временную переменную (и я рекомендую так делать для увеличения читабельности кода и избавления от его дублирования), но есть вариант и получше.</p>
<p>Нам на помощь приходит вышеописанный волшебный хак.</p>
<p></p><pre class="crayon-plain-tag">if (project.IsSpecial == true) { ... }</pre><p></p>
<p>Вуаля! Элегантно и просто, не правда ли?</p>
<p>Как вариант:</p>
<p></p><pre class="crayon-plain-tag">if (project.IsSpecial ?? false) { ... }</pre><p></p>
<p>Результат абсолютно такой же, но этот вариант мне почему-то нравится меньше (наверное, потому что он пришел в голову не мне, а кому-то другому).</p>
<p>Для вложенной структуры все будет выглядеть примерно так же:</p>
<p></p><pre class="crayon-plain-tag">if (campaign?.Project?.IsSpecial == true) { ... }</pre><p></p>
<p>Что позволяет не проверять на <code>null</code> все части пути к финальному полю.</p>
<p>Что же нам делать, если нам нужно проверить значение <code>bool?</code> на <code>false</code>? Да примерно то же самое:</p>
<p></p><pre class="crayon-plain-tag">if (project.IsSpecial != true) { ... }</pre><p></p>
<p>Обратите внимание, что вот так писать нельзя, потому что значение <code>null</code> мы тоже считаем <code>ложью</code>:</p>
<p></p><pre class="crayon-plain-tag">if (project.IsSpecial == false) { ... }</pre><p></p>
<h2>Сортировка</h2>
<p>Мы выяснили, что <code>null</code> не равен ни <code>true</code>, ни <code>false</code>. Но что произойдет, если отсортировать массив значений типа <code>bool?</code>?</p>
<p>Проверить это очень просто:</p>
<p></p><pre class="crayon-plain-tag">var list = new bool?[]
{
  true, true, null, false, false, null, true
};

foreach (var item in list.OrderBy(i =&gt; i))
{
  Console.WriteLine(item == null ? &quot;null&quot; : item.ToString());
}</pre><p></p>
<p>Результат:</p>
<p></p><pre class="crayon-plain-tag">null
null
False
False
True
True
True</pre><p></p>
<p>Получается, что <code>null</code> меньше любого другого значения, причем это не зависит от типа. С числами и строками будет то же самое.</p>
]]></content:encoded>
							<wfw:commentRss>https://kapxapot.ru/2018/06/28/nullable-hacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Этикет 2.0</title>
		<link>https://kapxapot.ru/2018/06/27/manners-2-0/</link>
				<comments>https://kapxapot.ru/2018/06/27/manners-2-0/#respond</comments>
				<pubDate>Wed, 27 Jun 2018 10:43:36 +0000</pubDate>
		<dc:creator><![CDATA[kapxapot]]></dc:creator>
				<category><![CDATA[Поток сознания]]></category>
		<category><![CDATA[Анализ]]></category>
		<category><![CDATA[Вилка]]></category>
		<category><![CDATA[Нож]]></category>
		<category><![CDATA[Требования]]></category>
		<category><![CDATA[Этикет]]></category>
		<category><![CDATA[Этикет 2.0]]></category>

		<guid isPermaLink="false">http://kapxapot.ru/?p=978</guid>
				<description><![CDATA[Я не большой знаток и приверженец этикета за столом. Стараюсь его соблюдать, но у меня это не всегда получается. Я не сильно над этим заморачиваюсь, но некоторые требования этикета раз за разом наводят на размышления. Одно из его требований, которое меня занимает — держание ножа в правой руке, а вилки — в левой (вариант использования [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Я не большой знаток и приверженец этикета за столом. Стараюсь его соблюдать, но у меня это не всегда получается. Я не сильно над этим заморачиваюсь, но некоторые требования этикета раз за разом наводят на <strong>размышления</strong>.</p>
<p>Одно из его требований, которое меня занимает — держание ножа в правой руке, а вилки — в левой (<code>вариант использования #1</code>). <code>Требование #1</code> это происходит, по-видимому, от того, что ножом надо резать (и нередко прилагать к этому усилия), что у людей получается лучше основной рукой (для большинства людей — правая). Проблема в том, что орудуя ножом и вилкой, нам далеко не всегда приходится резать что-то твердое, то есть мы бы прекрасно справились с ножом и в левой руке, в то же время, вилкой часто надо делать что-то более сложное, чем просто накалывание еды, левой рукой это делать неудобно, и так и хочется взять вилку в правую руку.</p>
<p><span id="more-978"></span>Смею предположить, что возмущение окружающих за столом вызывает больше не то, в какой руке нож, а перекладывание ножа и вилки из одной руки в другую (<code>требование #2</code>, причем, даже более важное и основополагающее). Это требование более логично и понятно, чем просто «нож в правой».</p>
<p>Выходит, что это правило этикета (как и большинство других) направлено больше на эстетичность процесса поедания пищи, а не на его удобство. Причем, по-видимому, этикет и не пытается прийти к компромиссу этих направлений, а ставит первое во главу угла.</p>
<p>Если научиться резать мясо левой рукой и не перекладывать вилку туда-сюда (а в таком случае в этом и нет нужды), то теоретически это тоже должно быть приемлемо (<code>вариант использования #2</code>). Но если воспринимать <code>требование #1</code> формально и считать его основополагающим, а не <code>требование #2</code>, то <code>вариант использования #2</code> неприемлем. То есть, окружающим не важно, что вы мастерски режете мясо левой рукой, их может возмущать нож в левой руке, ведь это <b>нарушение этикета</b>.</p>
<p>Дополнительные сложности возникают с левшами, потому что для них юзкейсы меняются местами. Если считать основным <code>требование #1</code>, то левши тоже должны держать нож в правой руке. Что им как раз и <strong>на руку</strong>, потому что им так удобнее и привычнее (не надо переучиваться держать вилку в другой руке). Но если исходить из <code>требования #2</code>, то левшам надо держать нож в левой руке (например, когда надо резать мясо). Но при этом на лбу у левши не написано, что он левша, поэтому для окружающих он будет выглядеть как невежа, не соблюдающий этикет.</p>
<p>Таким образом, налицо конфликт между функциональными и формальными требованиями, что ставит под сомнение целесообразность всего этого этикета в принципе. Как можно придерживаться противоречивого свода правил? Это неприемлемо.</p>
<p>Больше смысла имеет декомпозиция и анализ правил этикета до основополагающих составляющих, от которых и следует отталкиваться. То есть, в <strong>этикете 2.0</strong> требование к ножу и вилке будет сформулировано так:</p>
<blockquote><p>
  <strong>Держите нож и вилку так, как вам удобно в данный момент. Запрещается лишь перекладывать их из руки в руку в рамках одной транзакции.</strong>
</p></blockquote>
]]></content:encoded>
							<wfw:commentRss>https://kapxapot.ru/2018/06/27/manners-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Русский язык на страже гетеросексуальности</title>
		<link>https://kapxapot.ru/2018/04/05/heterosexual-russian/</link>
				<comments>https://kapxapot.ru/2018/04/05/heterosexual-russian/#respond</comments>
				<pubDate>Thu, 05 Apr 2018 07:28:13 +0000</pubDate>
		<dc:creator><![CDATA[kapxapot]]></dc:creator>
				<category><![CDATA[Поток сознания]]></category>
		<category><![CDATA[Английский язык]]></category>
		<category><![CDATA[Патриархальность]]></category>
		<category><![CDATA[Русский язык]]></category>

		<guid isPermaLink="false">http://kapxapot.ru/?p=918</guid>
				<description><![CDATA[Читая статьи и книги на английском, периодически встречаю как автор-мужчина пишет о пользователе (user) в женском роде (she). Не очень понятно, это торжество политкорректности, или в голове у этого человека пользователь ассоциируется именно с женщиной (что навряд ли), или просто он так пишет «на всякий случай», ибо мужчин пользователь женского рода не обидит, а вот [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Читая статьи и книги на <strong>английском</strong>, периодически встречаю как автор-мужчина пишет о пользователе (user) в женском роде (she).</p>
<p>Не очень понятно, это торжество политкорректности, или в голове у этого человека пользователь ассоциируется именно с женщиной (что навряд ли), или просто он так пишет «на всякий случай», ибо мужчин пользователь женского рода не обидит, а вот некоторых «женщин» это с определенной вероятностью возмутит.</p>
<p>Впрочем, речь не об этом, а о том, что в английском языке у глаголов нет рода, нет рода и у большинства существительных вроде <em>«user»</em>, поэтому род может быть обозначен только местоимением.</p>
<p>При этом <strong>русский язык</strong> совсем не такой — у нас существительные обладают родом, род также есть и у глаголов единственного числа прошедшего времени. Тот же <em>«пользователь»</em> — мужского рода, и нечего тут заморачиваться. Говоря о пользователе в мужском роде, мы не подразумеваем, что это именно мужчина. Мы понимаем, что это произвольный человек, который может быть как мужчиной, так и женщиной. Это никого (из адекватных людей) не возмущает и не волнует.</p>
<p>То есть, наш язык изначально обозначает, где у нас мужское, а где — женское, и нечего тут сомневаться и раздумывать. И даже если на самом деле и не идет речь о принадлежности к какому-то полу и роду, то по умолчанию <em>звучит</em> это все равно в мужском роде. Для нас это естественно, мы этого не замечаем. Но для иностранцев это, наверняка, звучит так, как будто мы насквозь <strong>патриархальны</strong> (на самом деле это так и есть, но мы, опять же, не отдаем себе в этом отчета).</p>
<p>А поскольку язык определяет сознание (и наоборот), то, наверняка, все это отпечатывается и в нашем мировоззрении, что делает русских (в общем смысле этого слова) менее толерантными и политкорректными. И это хорошо, хотя и немного плохо.</p>
]]></content:encoded>
							<wfw:commentRss>https://kapxapot.ru/2018/04/05/heterosexual-russian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Размышления об именах и патриархальном устройстве общества</title>
		<link>https://kapxapot.ru/2018/04/05/androcentric-names/</link>
				<comments>https://kapxapot.ru/2018/04/05/androcentric-names/#respond</comments>
				<pubDate>Thu, 05 Apr 2018 07:01:21 +0000</pubDate>
		<dc:creator><![CDATA[kapxapot]]></dc:creator>
				<category><![CDATA[Поток сознания]]></category>
		<category><![CDATA[Патриархальность]]></category>

		<guid isPermaLink="false">http://kapxapot.ru/?p=949</guid>
				<description><![CDATA[Появление первого ребенка в моей жизни стало направлять мои философские размышления в определенное русло &#8212; стал задумываться о потомстве и родословной. И вот совсем недавно я осознал одну простую, но, возможно, не совсем очевидную вещь. Каждый мужчина передает своим детям сразу две части своего имени (фамилию и отчество), в то время как каждая женщина не [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Появление первого ребенка в моей жизни стало направлять мои философские размышления в определенное русло &#8212; стал задумываться о потомстве и родословной. И вот совсем недавно я осознал одну простую, но, возможно, не совсем очевидную вещь.</p>
<p>Каждый мужчина передает своим детям сразу две части своего имени (фамилию и отчество), в то время как каждая женщина не оставляет в именах своих потомков никаких следов.</p>
<p>Дальнейшее рассмотрение этого вопроса привело меня к размышлениям об одном из ярчайших проявлений патриархальности нашего общества.</p>
<p>Рассмотрим имена мужчин и женщин: фамилию, имя и отчество.</p>
<p>Каждый из нас получает свои фамилию и отчество от отца, тем самым наши отцы как бы отмечают, что 2/3 нашего имени принадлежат им, и только 1/3 &#8212; наше имя &#8212; наше собственное.</p>
<p>Далее если сравнить мужчину и женщину, то (будем рассматривать только &#171;нормальное&#187; течение жизни человека) женщина выходит замуж и меняет свою фамилию на фамилию мужа, после чего ее &#171;акции&#187; распределяются поровну между ее отцом, мужем и самой ей. То есть, женщине принадлежит только 1/3 собственного имени в любой ситуации.</p>
<p>С мужчиной все немного по-другому. Его &#171;акции&#187; не просто принадлежит его отцу на 2/3, мужчина становится &#171;дистрибьютором&#187; отцовской фамилии, к нему переходят права на нее. Кроме того, он захватывает 1/3 имени своей жены (фамилию) и получает уже свои 2/3 в именах собственных детей. С учетом этих обстоятельств можно считать, что мужчине (если он переходит в свою &#171;полноценную форму&#187; отца и мужа) принадлежит уже 2/3 собственного имени, а 1/3 остается во владении его отца навсегда.</p>
<p>Не думаю, что приведенный выше анализ несет какую-то практическую пользу, но мне показался такой взгляд на наше общество интересным. :)</p>
<p><em>Написано мной в Google Buzz (R.I.P.) 21.10.2010</em></p>
]]></content:encoded>
							<wfw:commentRss>https://kapxapot.ru/2018/04/05/androcentric-names/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
	</channel>
</rss>
