tag:blogger.com,1999:blog-54266862235739415092024-03-14T16:05:53.699+06:00Заметки с передовойРазработка ПО на переднем крае ИТ отрасли: проблемы, решения, технологииАлексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.comBlogger32125tag:blogger.com,1999:blog-5426686223573941509.post-23003516764322505872013-02-26T09:30:00.000+07:002013-02-26T09:30:00.513+07:00Вернёмся к Data Flow, теперь на C#<div>Некоторое количество заметок назад я рассказывал о <a href="http://mrnone.blogspot.ru/2011/10/data-flow.html">шаблоне многозадачного программирования <em>Data Flow</em></a> и <a href="http://mrnone.blogspot.ru/2011/10/data-flow_24.html">демонстрировал пример его реализации на C++</a><strong></strong> с помощью библиотеки <a href="http://msdn.microsoft.com/en-us/library/dd492627.aspx"><em><strong>Asynchronous Agents Library (AAL)</strong></em></a>. Пришла пора ещё раз вспомнить об этом шаблоне: дело в том, что с недавних пор его реализация стала доступной для платформы <strong>.NET</strong>.<br>
</div><a href="http://mrnone.blogspot.com/2013/02/data-flow-net.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com2tag:blogger.com,1999:blog-5426686223573941509.post-86785429572934785762012-11-26T09:30:00.000+07:002012-11-30T19:12:34.829+07:00Добавим к C# немного PowerShell`а<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
Как я уже описывал <a href="http://mrnone.blogspot.ru/2012/07/blog-post.html">тут</a> и <a href="http://mrnone.blogspot.ru/2012/09/blog-post.html">тут</a>, мы избрали <strong>PowerShell</strong> в качестве языка для разработки сценариев управления инфраструктурой. Дело осталось за малым – научиться вызывать <strong>PowerShell</strong> скрипты из серверного приложения, написанного на C#.<br>
</div></div><a href="http://mrnone.blogspot.com/2012/11/powershell.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com1tag:blogger.com,1999:blog-5426686223573941509.post-28288783200787792542012-09-03T09:30:00.000+07:002012-09-03T09:30:00.048+07:00Особенности управления крупной инфраструктурой. Переход<div dir="ltr" style="text-align: left;" trbidi="on">
Замена ключевого компонента системы никогда не бывает безболезненным: всегда приходится идти на компромиссы, чем-то жертвовать, что-то доделывать. Принимаемые решения всегда балансируют между двумя противоположными целями: сделать правильно и добиться обратной совместимости, чтобы минимизировать потери времени и не навредить стабильности продукта. В итоге новый компонент частично обретает черты старого, где-то вынужденно повторяет его ошибки. Это неизбежная плата за возможность наиболее безболезненным образом исправить некоторый фатальный недостаток старого компонента, из-за которого и был затеян весь переход. Не стал исключением и наш <strong>Windows Provisioning Engine</strong>, о котором я <a href="http://mrnone.blogspot.com/2012/07/blog-post.html" target="_blank">начал рассказывать в прошлый раз</a>. Если сравнить его с <strong>Microsoft Provisioning System</strong>, то можно обнаружить много общего.
<br>
</div><a href="http://mrnone.blogspot.com/2012/09/blog-post.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com5tag:blogger.com,1999:blog-5426686223573941509.post-17552041166637276892012-08-09T23:59:00.000+07:002012-10-03T11:50:05.897+07:00Современные подходы к параллельной разработке<div dir="ltr" style="text-align: left;" trbidi="on">
В разработке современных приложений параллельное программирование играет наиважнейшую роль не только на стороне серверного, но и на стороне клиентского ПО. Писать многопоточные приложения могут многие, многозадачные - единицы. Лекция посвящена обзору основных техник и шаблонов параллельной разработки, применяемых в промышленном программировании, и немного облегчающих рядовому программисту задачу написания эффективных многозадачных приложений.<br>
Именно этой теме была посвящена моя очередная лекция на летней школе Parallels. И хотя она составлена по мотивам более ранних заметок из этого блога, возможно кому-нибудь подобная комиляция материала может показаться весьма поленой.<br>
</div><a href="http://mrnone.blogspot.com/2012/08/school-parallels-multithreading.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com2tag:blogger.com,1999:blog-5426686223573941509.post-31325519838564839922012-07-03T09:30:00.000+07:002012-09-03T14:54:45.164+07:00Особенности управления крупной инфраструктурой. Начало<div dir="ltr" style="text-align: left;" trbidi="on">
При разработке контрольной панели управляющей крупной сетевой инфраструктурой и автоматизирующей такие рутинные сценарии, как: создание организационных единиц в <strong>Active Directory</strong> или подготовка почтовых ящиков пользователям, приходится сталкиваться с множеством оптимизационных задач. В новом цикле, открываемом этой заметкой, я расскажу об одном решении, применяемом нами в <strong>Parallels Automation</strong>, позволяющем справиться сразу с несколькими проблемами подобного рода. <br>
<div>
</div></div><a href="http://mrnone.blogspot.com/2012/07/blog-post.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com1tag:blogger.com,1999:blog-5426686223573941509.post-81041845609019481842012-04-18T09:30:00.000+07:002012-07-03T02:47:14.412+07:00Асинхронно в WinAPI. Продолжение<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
Нет ничего сложного в том, чтобы <a href="http://mrnone.blogspot.com/2012/03/winapi.html">отправить потоку асинхронное сообщение длинной в пару байт</a>. Гораздо интереснее проделать этот же трюк с неограниченным объёмом информации. Итак, цели прежние: организовать асинхронное взаимодействие между потоками с минимальным количеством блокировок. Лишь немного изменились условия: теперь сообщение – это строка произвольной длинны. <br>
</div></div><a href="http://mrnone.blogspot.com/2012/04/winapi.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com0tag:blogger.com,1999:blog-5426686223573941509.post-7357120239791141112012-03-19T09:30:00.000+07:002012-03-21T11:21:43.114+07:00Асинхронно в WinAPI. Начало<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
Различные средства параллельного программирования от библиотек вроде <a href="http://msdn.microsoft.com/en-us/library/dd504870.aspx"><strong>Concurrency Runtime</strong></a> до специализированных языков вроде <strong><a href="http://www.erlang.org/">Erlang</a></strong> предоставляют такую типовую операцию, как отправка асинхронного сообщения потоку. А каким образом можно реализовать эту возможность, опираясь только функционал <strong>WinAPI</strong>. Попробуем разобраться. <br>
</div></div><a href="http://mrnone.blogspot.com/2012/03/winapi.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com0tag:blogger.com,1999:blog-5426686223573941509.post-75816089634590884312012-01-18T09:30:00.000+07:002012-10-03T11:45:51.250+07:00MapReduce и Erlang – лучше когда вместе<div dir="ltr" style="text-align: left;" trbidi="on">
Пришла пора добавить немного кода к <a href="http://mrnone.blogspot.com/2011/12/mapreduce.html">рассказанной в прошлый раз теории</a>. Вот только идея написать <strong>MapReduce</strong> на <strong>C++</strong> или <strong>C#</strong> мне показалась слишком банальной и тривиальной. Захотелось немного экзотики. Если уж реализовывать "супер распределённый" алгоритм, то только на языке, который считается одним из наиболее приспособленных к параллельным вычислениям. Я говорю об <strong>Erlang</strong>`е.<br>
</div><a href="http://mrnone.blogspot.com/2012/01/mapreduce-erlang.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com4tag:blogger.com,1999:blog-5426686223573941509.post-26522087066180218902011-12-12T09:30:00.000+07:002011-12-12T09:30:01.058+07:00Кратко о MapReduce<div dir="ltr" style="text-align: left;" trbidi="on">
Среди всех параллельных алгоритмов, реализации которых легко масштабируются на произвольное количество ядер, <em>MapReduce</em> можно назвать одним из самым свежих. Компания <strong>Google</strong> представила его в 2004 году. Давайте попробуем разобраться: что это такое и зачем оно нужно. <div>
</div></div><a href="http://mrnone.blogspot.com/2011/12/mapreduce.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com3tag:blogger.com,1999:blog-5426686223573941509.post-15216670347602785352011-11-14T09:30:00.000+07:002011-11-14T09:30:00.703+07:00Параллельный зоопарк<div dir="ltr" style="text-align: left;" trbidi="on">
Рассказывая про методы многопоточного программирования в предыдущих заметках, я регулярно обращался за помощью к библиотеке <a href="http://msdn.microsoft.com/en-us/library/dd504870.aspx"><strong>Concurrency Runtime</strong></a>. Эта прекрасная библиотека имеет 2 недостатка: во-первых, она доступна только в составе <strong>Microsoft Visual Studio </strong><strong>2010</strong> и выше; во-вторых, она работает только в <strong>ОС Windows</strong> начиная с версии <strong>XP</strong> с 3-им сервис-паком. В данной заметке я хочу рассмотреть некоторые альтернативные библиотеки, для многопоточного программирования, лишённые таких ограничений. <br>
</div><a href="http://mrnone.blogspot.com/2011/11/blog-post.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com0tag:blogger.com,1999:blog-5426686223573941509.post-4930427546717772932011-10-24T09:30:00.000+07:002013-02-09T23:06:53.546+07:00Data Flow, или Данные управляют командами. Практика<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
В <a href="http://mrnone.blogspot.com/2011/10/data-flow.html">прошлый раз</a> я рассказывал о <em>Data Flow</em> подходе в разработке многозадачных приложений. Та заметка получилась совершенно без кода и примеров. В этот раз постараюсь исправиться – кода будет много. И весь код будет посвящён иллюстрации всё той же темы: <em>Data Flow</em> или <em>конвейер данных</em>.<br>
</div></div><a href="http://mrnone.blogspot.com/2011/10/data-flow_24.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com1tag:blogger.com,1999:blog-5426686223573941509.post-90230597615088573392011-10-03T09:30:00.000+07:002012-04-18T11:46:33.712+07:00Data Flow, или Данные управляют командами. Теория<div dir="ltr" style="text-align: left;" trbidi="on">
Заметку про <a href="http://mrnone.blogspot.com/2011/09/blog-post_14.html">асинхронных агентов</a> я начал с описания недостатка модели рабочих элементов. Поэтому, чтобы сохранить традицию, заметку о <strong>Data Flow</strong> я начну с критики агентов. А что, вы серьёзно ожидали, что таковой не будет?<br>
</div><a href="http://mrnone.blogspot.com/2011/10/data-flow.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com0tag:blogger.com,1999:blog-5426686223573941509.post-2847302632630968212011-09-14T09:30:00.000+07:002012-04-18T11:41:39.850+07:00Агент Асинхронность, ваш выход!<div dir="ltr" style="text-align: left;" trbidi="on">
В <a href="http://mrnone.blogspot.com/2011/09/blog-post.html">предыдущей заметке</a> я постарался объяснить, почему попытка решить задачу распараллеливания "в лоб" может потерпеть фиаско. И рассказал о модели рабочих элементов – самом распространённом паттерне параллельного мира, призванном эффективно решать задачу масштабирования. Пришла пора поговорить о его недостатке...<br>
<div>
</div></div><a href="http://mrnone.blogspot.com/2011/09/blog-post_14.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com5tag:blogger.com,1999:blog-5426686223573941509.post-7433594871979801932011-09-01T10:00:00.003+07:002011-10-03T11:54:51.374+07:00Сделайте мне параллельно<div dir="ltr" style="text-align: left;" trbidi="on">
Мир изменился – закон Мура перестал работать. Производители чипов более не могут увеличивать тактовую частоту процессоров с такой интенсивностью, с которой они это делали в конце 90-ых. Чтобы удовлетворить всё нарастающие аппетиты индустрии в новых мощностях, они вынуждены пойти по пути наращивания числа ядер. Для программиста этот путь означает следующее: если раньше он мог быть абсолютно уверен, что через полгода на новом процессоре даже без усилий с его стороны приложение будет работать в разы быстрее, то теперь, если он не позаботится заранее о хорошей степени параллелизма своего приложения, замена процессора на более новый не приведёт к росту производительности. Так как же добиться правильного параллелизма – об этом и поговорим в этот раз.<br>
</div><a href="http://mrnone.blogspot.com/2011/09/blog-post.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com1tag:blogger.com,1999:blog-5426686223573941509.post-42939263123257616642011-08-08T09:00:00.001+07:002011-08-08T09:00:00.908+07:00Подводный камни Active Directory: версионность объектов, как она есть<div dir="ltr" style="text-align: left;" trbidi="on">Если вы решаете задачу синхронизации объектов в <strong>Active Directory</strong> или просто следите за их изменениями для иных нужд, то в какой-то момент времени вам непременно придёт в голову <em>"гениальная"</em> идея: постойте, <strong>AD</strong> просто обязана содержать встроенный механизм версионности объектов, почему бы не воспользоваться им для оптимизации поиска изменившихся объектов?<br>
<br>
<div></div></div><a href="http://mrnone.blogspot.com/2011/08/active-directory.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com0tag:blogger.com,1999:blog-5426686223573941509.post-76478607836036307562011-07-31T12:05:00.000+07:002012-07-03T01:00:07.618+07:00Windows: теория и практика синхронизации паролей<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
28 июня этого года компания <strong>Microsoft</strong> запустила новый облачный сервис <strong>Office 365</strong>. Ожидается, что его основными потребителями станут предприятия, желающие сэкономить время и средства на поддержании собственной инфраструктуры офисного ПО. Поэтому, одной из важнейших задач, возникающей в подобном контексте использования, является синхронизация с облаком службы каталогов <strong>Active Directory</strong> предприятия. Для её решения подписчикам предоставляется специальное приложение, автоматизирующее данный процесс. Но оно имеет очень смешное ограничение, а именно: оно не умеет синхронизировать пароли пользователей. Компания <strong>Parallels</strong>, в которой я имею честь работать, имеет аналогичное решение в составе продукта <strong>Parallels Operations Automation</strong> уже более полутора лет. Вот только наше приложение <strong>Customer Directory Integration</strong>, в отличие от <strong>Microsoft Directory Sync</strong>, достаточно легко справляется с задачей синхронизации паролей. В этой заметке я хочу приоткрыть завесу тайны над тем, как оно это делает.<br>
</div></div><a href="http://mrnone.blogspot.com/2011/07/windows.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com0tag:blogger.com,1999:blog-5426686223573941509.post-29171228711987360802011-07-16T01:32:00.001+07:002012-10-03T11:48:31.835+07:00Виды информационных угроз и методы борьбы<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
Вчера я читал студентам Летней школы <strong>Parallels</strong> лекцию: "<em>Виды информационных угроз и методы борьбы</em>". Скорее всего, суровым гикам с богатым жизненным опытом материал покажется не особо интересным (он ориентирован на студентов 2-ого – 5-ого курса), но вот начинающим будет весьма полезно посмотреть.<br>
</div></div><a href="http://mrnone.blogspot.com/2011/07/blog-post.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com5tag:blogger.com,1999:blog-5426686223573941509.post-18732725047331930602011-07-01T16:44:00.003+07:002011-07-01T17:04:58.489+07:00Зачем нужен Apache Thrift?…<div dir="ltr" style="text-align: left;" trbidi="on"><div>В <a href="http://mrnone.blogspot.com/2011/05/google-protobuf.html">одной из прошлых заметок</a> я рассказывал о <strong>Google Protocol Buffers</strong>. В качестве альтернативы последнему иногда упоминают <strong><a href="http://thrift.apache.org/">Apache Thrift</a></strong>. Я проанализировал его возможности и в этой заметке хочу высказать свои мысли по поводу данной технологии.<br>
</div></div><a href="http://mrnone.blogspot.com/2011/07/apache-thrift.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com7tag:blogger.com,1999:blog-5426686223573941509.post-2777632885646276002011-06-22T10:13:00.003+07:002011-06-22T10:26:27.440+07:00Странный DirectoryServices. Совет третий: помните - данных может быть больше, чем дозволено<div dir="ltr" style="text-align: left;" trbidi="on">Горе тому серверу, который на просьбу клиента вернуть всё, действительно возвращает <u>все данные</u>. Это прямой путь к атаке типа <i>Deny of Service</i>. Любой разработчик должен позаботиться об устойчивости своего сервиса и не допускать передачи неограниченного объёма данных. Не является исключением и <b>Active Directory Domain Service</b>. По умолчанию любая операция поиска возвращает не более чем 1000 элементов. Давайте рассмотрим, как <u>правильно</u> обойти это ограничение и получить действительно все объекты, не нарушив производительности контроллера доменов.<br>
</div><a href="http://mrnone.blogspot.com/2011/06/directoryservices_22.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com7tag:blogger.com,1999:blog-5426686223573941509.post-80546781168933399812011-06-06T09:00:00.001+07:002011-06-06T09:00:00.454+07:00Странный DirectoryServices. Совет второй: прогревайте кэш атрибутов руками<div dir="ltr" style="text-align: left;" trbidi="on">Продолжим <a href="http://mrnone.blogspot.com/2011/05/directoryservices.html">начатую тему</a>. Вы знаете, что происходит, когда запрашиваешь тот или иной атрибут <strong>Active Directory</strong> у объекта типа <em>DirectoryEntry</em>, и почему большая часть программ делает это неоптимальным образом? А как сделать правильно? Поговорим об этом.<br>
</div><a href="http://mrnone.blogspot.com/2011/06/directoryservices.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com2tag:blogger.com,1999:blog-5426686223573941509.post-5930187139681208112011-05-30T08:00:00.008+07:002011-05-30T08:00:00.168+07:00Странный DirectoryServices. Совет первый: выражайтесь яснее, где искать<div dir="ltr" style="text-align: left;" trbidi="on">В <a href="http://mrnone.blogspot.com/2011/05/directoryservicesprotocols.html">прошлый раз</a> я вскользь упомянул про подводные камни, встречающиеся на пути программиста, решившего использоваться классы пространства имён <em>System.DirectoryServices</em> или <strong>DCOM</strong> объекты <strong>ADSI</strong>, что, по сути, то же самое. Данная тема заслуживает отдельного рассмотрения. Поэтому эту и несколько следующих заметок я посвящу ей.<br>
<div>Сегодня я хочу рассмотреть весьма распространённую ошибку, связанную с особенностью выбора контроллера домена, на котором будет осуществляться поиск. В большинстве случаев программист полагается на настройки по умолчанию и может получить существенное падение производительности при определённых конфигурациях. Самое неприятное то, что отследить такую ошибку на этапе тестирования очень сложно.<br>
<br>
</div></div><a href="http://mrnone.blogspot.com/2011/05/directoryservices.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com4tag:blogger.com,1999:blog-5426686223573941509.post-88358273281025712782011-05-23T08:00:00.002+07:002011-05-23T08:10:53.545+07:00DirectoryServices.Protocols – малоизвестная альтернатива<div dir="ltr" style="text-align: left;" trbidi="on">Все знают о существовании пространства имён <em>System.DirectoryServices</em>. Оно содержит набор классов, являющихся тонкой обёрткой над <strong>ADSI</strong> – <strong>DCOM</strong>-ориентированном API для работы с <strong>Active Directory</strong>. Но <strong>ADSI</strong> не единственный интерфейс, который можно использовать для общения с контроллерами домена. Помимо него в состав <strong>WinSDK</strong> входит библиотека <a href="http://msdn.microsoft.com/en-us/library/aa367008(VS.85).aspx"><strong>LDAP API</strong></a>, реализующая 3-ю версию <strong>LDAP</strong> API в соответствии с <a href="http://tools.ietf.org/rfc/rfc2251.txt">RFC 2251</a>. С её помощью приложение на <strong>C++</strong> может получить доступ к любому <strong>LDAP</strong> серверу под управлением любой операционной системы. Но что делать, если платформа приложения – <strong>.NET</strong>, а язык разработки – <strong>C#</strong>? Ответ на этот вопрос находится в пространстве имён <em>System.DirectoryServices.Protocols</em>.<br>
<div></div></div><a href="http://mrnone.blogspot.com/2011/05/directoryservicesprotocols.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com0tag:blogger.com,1999:blog-5426686223573941509.post-42406427473441717212011-05-15T21:47:00.002+07:002011-07-01T01:08:13.959+07:00Google Protobuf - замена вашему велосипеду<div dir="ltr" style="text-align: left;" trbidi="on">Как часто приходится сталкивать с проблемой <em>сериализации</em> / <em>десериализации</em> данных? И если в <strong>.NET</strong> подобная проблема решена более-менее стандартно, то, как быть, если вы пишите код на <strong>C++</strong>? Или ещё хуже: вам необходимо обмениваться сообщениями между сервером, написанным на <strong>C++</strong> и клиентом, написанным на <strong>C#</strong>. Некоторое время назад я открыл для себя такую вещь, как <strong>Google Protocol Buffers</strong>. В этой заметке я постараюсь рассказать, что это такое и зачем оно может быть полезно. <br>
</div><a href="http://mrnone.blogspot.com/2011/05/google-protobuf.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com1tag:blogger.com,1999:blog-5426686223573941509.post-58088033819479465242011-05-09T03:45:00.000+07:002011-05-09T03:45:35.697+07:00Чудеса аутентификации. Чудо второе: доступ запрещён<div dir="ltr" style="text-align: left;" trbidi="on">Допустим, вы пишете клиент-серверное приложение, причём серверная часть состоит из нескольких компонентов. После получения запроса, сервис, реализующий внешний интерфейс, выполняет <em>олицетворение</em> (<em>impersonation</em>) клиента и отправляет запросы к остальным частям сервера по мере необходимости. Рассмотрим типичную ситуацию: всё прекрасно работало, пока серверные компоненты были развёрнуты на одной машине в вашем тестовом окружении, но как только сервер попал в отдел контроля качества, и его части оказались на разных машинах (он стал действительно распределённым), клиент начал получать ошибку "<em>Access denied</em>". Даже программисты с хорошим опытом зачастую попадают в подобную ловушку и не могут сразу ответить, что же идёт не так. <div></div></div><a href="http://mrnone.blogspot.com/2011/05/blog-post_09.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com0tag:blogger.com,1999:blog-5426686223573941509.post-4531544343456040682011-05-01T06:02:00.002+07:002011-05-09T03:48:45.841+07:00Чудеса аутентификации. Чудо первое: доступ разрешён<div dir="ltr" style="text-align: left;" trbidi="on">Как-то раз я поспорил с одним коллегой о том, каким образом <strong>ОС</strong> <strong>Windows</strong> хэширует пароли, а именно: <em>солит</em> она их или нет. Коллега, будучи весьма опытным человеком, с абсолютной уверенностью утверждал, что хэш пароля просто обязан быть солёным. Его уверенность базировалась на теории о том, что без применения <em>соли</em> данные по хэшу легко вскрываются атакой со словарём. Вот только эта теория никак не могла объяснить такую странность: <ul><li>есть 2 хоста, не включённых в домен, – <em>AliceHost</em> и <em>BobHost</em>;</li>
<li>на обоих хостах есть одноимённые пользователи с одинаковыми паролями: <em>AliceHost\user</em> и <em>BobHost\user;</em></li>
<li>на хосте <em>AliceHost</em> есть сетевая папка <em>\\AliceHost\Folder</em>, доступ к которой предоставлен только пользователю <em>AliceHost\user</em>;</li>
<li>если на хосте BobHost осуществить вход пользователем BobHost\user, то вы легко получите доступ к папке <em>\\AliceHost\Folder.</em></li>
</ul><br>
</div><a href="http://mrnone.blogspot.com/2011/05/blog-post.html#more">Дальше »</a><div class="blogger-post-footer">Перепечатка материалов допустима с указанием ссылки на первоисточник.</div>Алексей Коротаевhttp://www.blogger.com/profile/07894235073825323676noreply@blogger.com1