Как стать автором
Обновить
2
0
Дмитрий @LbISS

Руководитель отдела разработки .net

Отправить сообщение

Сравнение строк в C# (по умолчанию)

Время на прочтение10 мин
Количество просмотров53K
Часто бывает, что мы соединяем 2 коллекции или группируем коллекцию при помощи LINQ to Objects. При этом происходит сравнение ключей, выбранных для группировки или связывания.
К счастью, стоимость этих операций равна O(n). Но в случае больших коллекций нам важна эффективность самого сравнения. Если в качестве ключей выбраны строки, то какая из реализаций сравнения будет использована по умолчанию, подходит ли эта реализация для ваших строк и можно ли, указав IEqualityComparer<string> явно, сделать эту операцию быстрее?
clients.Join(orders, 
                   c => c.Name, 
                   o => o.ClientName, 
                   (c, o) => CreateOrederDto(c, o));

Как же выбирается реализация компаратора, если пользователь не указал её явно?
Пороемся в исходном коде coreclr
Всего голосов 28: ↑28 и ↓0+28
Комментарии1

Опыт переезда для работы программистом в Берлин (часть 1)

Время на прочтение7 мин
Количество просмотров76K
Добрый день.

Представляю на суд общественности материал о том, как я за четыре месяца получил визу, переехал в Германию и нашел там работу.

Считается, что для переезда в другую страну нужно сначала долго искать работу удаленно, потом, в случае успеха, ждать решения по визе, и лишь после паковать чемоданы. Я решил, что это далеко не оптимальный способ, поэтому пошел другим путем. Вместо того, чтобы искать работу удаленно, я получил так называемую «визу на поиск работы», въехал в Германию, нашел здесь работу и уже после подал документы на Blaue Karte. Во-первых, в этом случае документы не ездят из страны в страну, и время ожидания визы значительно уменьшается. Во-вторых, поиск работы на месте радикально повышает ваши шансы, и это тоже заметно ускоряет процесс.
Читать дальше →
Всего голосов 49: ↑48 и ↓1+47
Комментарии156

Опыт переезда для работы программистом в Берлин (часть 2)

Время на прочтение7 мин
Количество просмотров46K
Добрый день! В первой части я рассказывал о том, как получал визу и искал жилье, а в этой расскажу, как найти работу в Германии и как это делал я. Забегая вперед, скажу, что в Берлине мне потребовалась 10 дней, чтобы получить первый оффер, который я в итоге и принял. Но приготовления были, конечно, более длительными.
Читать дальше →
Всего голосов 32: ↑31 и ↓1+30
Комментарии108

Переезд IT-шника в Германию: от А до Я

Время на прочтение20 мин
Количество просмотров99K
Привет.

Germany Blue CardВ этом посте я хочу подробно рассказать о моём опыте переезда на работу PHP-разработчиком в Германию — от момента, когда есть просто желание переехать, но не знаешь что и как делать, до момента, когда уже переехал, вселился в квартиру и получил вид на жительство. Кроме того, в конце поста я приведу немного полезной информации и ссылок по переезду в некоторые другие страны.

Ещё с универа я понимал, что в Украине ловить нечего и надо валить. В течение нескольких лет я исследовал вопрос эмиграции: читал блоги, форумы, сообщества, общался с друзьями и знакомыми, которые могли мне рассказать что-то новое и, естественно, за это время, учитывая и сам переезд, у меня накопился определённый багаж информации, которым и хочется поделиться.

Итак, если вы имеете IT-шное образование и вам интересна идея сваливания из печальной пост-совковой реальности, прошу под кат.
Читать дальше →
Всего голосов 211: ↑189 и ↓22+167
Комментарии163

Примеры использования Moq

Время на прочтение8 мин
Количество просмотров152K
Moq – это простой и легковесный изоляционный фреймврк (Isolation Framework), который построен на основе анонимных методов и деревьев выражений. Для создания моков он использует кодогенерацию, поэтому позволяет «мокать» интерфейсы, виртуальные методы (и даже защищенные методы) и не позволяет «мокать» невиртуальные и статические методы.

ПРИМЕЧАНИЕ
На рынке существует лишь два фрейморка, позволяющих «мокать» все, что угодно. Это TypeMockIsolator и Microsoft Fakes, доступные в Visual Studio 2012 (ранее известные под названием Microsoft Moles). Эти фреймворки, в отличие от Moq, используют не кодогенерацию, а CLR Profiling API, что позволяет вклиниться практически в любой метод и создать моки/стабы даже для статических, невиртуальных или закрытых методов.
Читать дальше →
Всего голосов 25: ↑23 и ↓2+21
Комментарии3

МТС: яйцом к клиенту, или как бороться с заменой sim

Время на прочтение10 мин
Количество просмотров61K
На хабра-сайтах не раз (см. тут и здесь) выходили статьи о том, как защитить себя от замены sim-карты. Но, не смотря на то, что все эти советы — дельные, в них есть одно слабое и при этом — очень значимое место, которое с юридической точки зрения называется добросовестность одной из сторон, т.е. провайдера.

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

Цель статьи простая — дать людям, не имеющим специальных юридических знаний, краткий список норм, спасающих от произвола операторов сотовой связи, в частности, МТС, потому как заменить sim могут не только без вашего ведома, но даже без поддельного паспорта и просто — по сговору с сотрудником, т.е. технически тут помочь нечем.

При подготовке искового изучил несколько десятков форумов, на которых повторялись типовые вопросы по нормативной базе. Попробовал изложить их в систематизированном виде.
Читать дальше →
Всего голосов 40: ↑39 и ↓1+38
Комментарии134

Телефонные продажи. Этапы продаж. Установление контакта. Выявление потребностей

Время на прочтение9 мин
Количество просмотров36K
image
Да, фото не глянцевое, но зато здесь отдел продаж именно такой, какой есть в реальности.

Обширный гид по телефонным продажам для b2b, часть 1 из 4. В этой части: предыстория, знакомство с экспертом, общие сведения о телефонных продажах.

Перед тем, как я начал вести проект Videolom, я работал в отделе телефонных продаж на позиции менеджера по продажам. Сам отдел назывался УТП (Управление телефонных продаж), а подразделение называлось CBP (англ. Credit by phone), и формально оно должно было обрабатывать входящие звонки, но по факту большая часть звонков была исходящей, как и подразделения TLM (Телемаркетинг), но речь не об этом.

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

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

  1. Предыстория, знакомство с экспертом, основные понятия, этапы продаж, установление контакта, выявление потребностей;
  2. Презентация продукта, работа с возражениями, завершение сделки;
  3. Как составить скрипт продаж. Как обойти секретаря;
  4. Бонус: общий список ошибок менеджеров по продажам + решения к каждому пункту.

Ладно, хватит вступления. Держите полезность!

Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии29

Async/await в C#: подводные камни

Время на прочтение6 мин
Количество просмотров104K
Я бы хотел обсудить подводные камни, которые наиболее часто встречаются при работе с фичей async/await в C#, а также написать про то, как их можно обойти.
Читать дальше →
Всего голосов 36: ↑35 и ↓1+34
Комментарии46

У нас проблемы с промисами

Время на прочтение16 мин
Количество просмотров236K
Разрешите представить вам перевод статьи Нолана Лоусона «У нас проблемы с промисами», одной из лучших по теме из тех, что мне доводилось читать.

У нас проблемы с промисами


Дорогие JavaScript разработчики, настал момент признать это — у нас проблемы с промисами.

Нет, не с самими промисами. Их реализация по спецификации A+ превосходна. Основная проблема, которая сама предстала передо мной за годы наблюдений за тем, как многие программисты борются с богатыми на промисы API, заключается в следующем:

— Многие из нас используют промисы без действительного их понимания.

Если вы мне не верите, решите такую задачку:

Вопрос: В чем разница между этими четырьмя вариантами использования промисов?

doSomething().then(function () {
  return doSomethingElse();
});

doSomething().then(function () {
  doSomethingElse();
});

doSomething().then(doSomethingElse());

doSomething().then(doSomethingElse);

Узнайте решение задачи
Всего голосов 139: ↑136 и ↓3+133
Комментарии121

Entity Framework Code First — индексация полей и полнотекстовый поиск

Время на прочтение7 мин
Количество просмотров30K
image

По роду моей деятельности, мне часто приходится делать различные небольшие проекты, в основном, это сайты написанные на ASP.NET MVC. В любом современном проекте присутствуют данные, а значит и база данных, а значит с ней нужно как то работать.
Если отбросить все дискуссии про «за и против», то спешу сообщить, что мой выбор пал на Entity Framework Code First. Во время разработки проекта, я уделяю внимание исключительно бизнес-логике и не трачу время на проектирование базы данных и прочие шаблонные действия. Неприятным сюрпризом при использовании такого подхода для меня стало отсутствие возможности «из коробки» у Entity Framework возможности строить индекс по полям, а так же пользоваться удобным и современным механизмом полнотекстового поиска.

После многочасового гугления, опробовав десятки различных методов со StackOverflow и прочих подобных сайтов, я пришел к выводу, что очевидного и простого решения проблемы нет, поэтому решил сделать собственное, об этом и пойдет речь далее.
Читать дальше →
Всего голосов 35: ↑32 и ↓3+29
Комментарии24

Как писать тестируемый код

Время на прочтение17 мин
Количество просмотров87K
image


Если вы программист (или чего хуже архитектор), то можете ли вы ответить на такой простой вопрос: как писать НЕ тестируемый код? Призадумались? Если с трудом можете назвать хотя бы 3 способа добиться не тестируемого кода, то статья для вас.

Многие скажут: а зачем мне знать, как писать не тестируемый код, плохому хочешь меня научить? Отвечаю: если знать типичные паттерны не тестируемого кода, то, если они есть, можно легко увидеть их в своем проекте. А, как известно, признание проблемы — уже половина пути к лечению. Также в статье дается ответ, как собственно осуществляется такое лечение. Прошу под кат.
Читать дальше →
Всего голосов 72: ↑63 и ↓9+54
Комментарии77

Поисковые подсказки изнутри

Время на прочтение11 мин
Количество просмотров27K


Ночная зала. Тысячи таинственных ликов в темноте, подсвеченных голубоватым свечением мониторов. Оглушительный треск миллиона клавиш. Подобные выстрелам автомата удары по клавишам «Enter». Зловещее стрекотание сотен тысяч мышек… Так, наверняка, играло воображение каждого разработчика высоконагруженной системы. И если его вовремя не остановить, то может выйти целый триллер или фильм ужасов. Но в данной статье мы будем гораздо ближе к земле. Мы кратко рассмотрим известные подходы к решению задачи поисковых подсказок, как мы научились делать их полнотекстовыми, а также расскажем о парочке уловок, на которые мы пошли, чтобы придать им скорости, но при этом не научить жадности к ресурсам. В конце статьи вас ждёт бонус — небольшой рабочий пример.
Читать дальше →
Всего голосов 64: ↑60 и ↓4+56
Комментарии14

Tестирование сериализаторов под .NET

Время на прочтение12 мин
Количество просмотров15K
Код Serbench находится на GitHub.

Начало проекта


Этот бенчмарк проект начался со статьи “Serializers in .NET v.2” на GeeksWithBlogs.net. В статье было рассмотрено довольно много имеющихся под .NET сериализаторов. Но, чтобы превратить эту статью и соответствующий код в настоящий бенчмарк, надо было сделать несколько улучшений.

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

Во-вторых, сериализаторы сильно отличаются по интерфейсам. Наш бенчмарк не должен заставлять сериализатор следовать нашему выбору интерфейса. Наоборот, бенчмарк должен быть настолько гибким, чтобы каждый сериализатор мог бы использовать наиболее подходящий для него интерфейс. То есть надо передавать в бенчмарк дополнительные параметры конкретного сериализатора.
Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии24

Почему программировать так тяжело?

Время на прочтение7 мин
Количество просмотров132K
Привет, Хабр!

В феврале мы публиковали перевод крутой статьи "Почему научиться программировать так чертовски тяжело?", которую теперь показываем новичкам. Да, научиться программировать – это целая история, длинная, с кучей разных этапов, с эмоциональными взлетами и падениями. Мы все через это проходили (или еще проходим – так держать!).

К сожалению, нет такого момента, когда можно встать и заявить, что «я закончил обучение и теперь я программист!». Учиться придется всю жизнь, и всю жизнь вы будете встречать неведомые проблемы, сталкиваться с совершенно непонятными ситуациями и спрашивать «какого хрена?!» даже будучи профессиональным программистом с многолетним стажем.

Сегодня мы публикуем перевод заметки «Почему программировать так тяжело?». Тем, кто еще изучает основы программирования и разработки будет полезно узнать, что их ждет в будущем. А опытным разработчикам будет просто приятно взглянуть на реальность и покивать головой.




Много лет назад я думал, что программировать легко, но прошли годы, и я понял, что это не так. Всё из-за неверного восприятия того, что я считал программированием и того, какую работу выполняет программист.

Вначале я думал, что программировать – это только указывать компьютеру, что делать, эта часть процесса относительно лёгкая. После двадцати с лишним лет опыта, я действительно пришёл к выводу, что эта часть программирования достаточно лёгкая.
Читать дальше →
Всего голосов 89: ↑73 и ↓16+57
Комментарии111

Про модель, логику, ООП, разработку и остальное

Время на прочтение29 мин
Количество просмотров109K
Часто ли вы задумываетесь – почему что-то сделано так или иначе? Почему у вас микросервисы или монолит, двухзвенка или трехзвенка? Зачем вам многослойная архитектура и сколько у вас вообще слоев? Что такое бизнес-логика, логика приложения, презентационная логика и почему все так разделено? Посмотрите на свое приложение – как оно вообще спроектировано? Что в нем и где находится, почему это сделано именно так?
Потому что так написано в книжках или так говорят авторитетные личности? Какие ВАШИ проблемы решает тот или иной подход/паттерн?
Даже то, что на первый взгляд кажется очевидным, порой бывает очень сложно объяснить. А иногда, в попытке объяснения, приходит понимание того, что очевидные мысли были и вовсе ошибочны.
Давайте попробуем взять какой-нибудь пример и изучить на нем эти вопросы со всех сторон.
Читать дальше →
Всего голосов 55: ↑51 и ↓4+47
Комментарии34

Обзор способов и протоколов аутентификации в веб-приложениях

Время на прочтение18 мин
Количество просмотров627K


Я расскажу о применении различных способов аутентификации для веб-приложений, включая аутентификацию по паролю, по сертификатам, по одноразовым паролям, по ключам доступа и по токенам. Коснусь технологии единого входа (Single Sign-On), рассмотрю различные стандарты и протоколы аутентификации.

Перед тем, как перейти к техническим деталям, давайте немного освежим терминологию.

  • Идентификация — это заявление о том, кем вы являетесь. В зависимости от ситуации, это может быть имя, адрес электронной почты, номер учетной записи, итд.
  • Аутентификация — предоставление доказательств, что вы на самом деле есть тот, кем идентифицировались (от слова “authentic” — истинный, подлинный).
  • Авторизация — проверка, что вам разрешен доступ к запрашиваемому ресурсу.


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

Аналогично эти термины применяются в компьютерных системах, где традиционно под идентификацией понимают получение вашей учетной записи (identity) по username или email; под аутентификацией — проверку, что вы знаете пароль от этой учетной записи, а под авторизацией — проверку вашей роли в системе и решение о предоставлении доступа к запрошенной странице или ресурсу.

Однако в современных системах существуют и более сложные схемы аутентификации и авторизации, о которых я расскажу далее. Но начнем с простого и понятного.
Читать дальше →
Всего голосов 48: ↑48 и ↓0+48
Комментарии20

Тестирование парольных политик крупнейших веб-сервисов

Время на прочтение9 мин
Количество просмотров18K
image

Passwords, passwords never change...
Почти каждый пользователь сети Интернет имеет хотя бы один аккаунт или хотя бы однажды оставлял свои данные в различных службах. Почтовые сервисы, социальные сети, облачные хранилища, онлайн-игры и многое другое, – в одном Facebook уже более 1 млрд учетных данных. Естественно, что, имея большую аудиторию, компании стараются обеспечивать хорошую защищенность своих серверов и сервисов. Однако, если пользователи не прилагают усилий к защите своих аккаунтов и вообще не соблюдают минимальных мер информационной безопасности, все усилия извне могут оказаться напрасны.
Читать дальше →
Всего голосов 28: ↑26 и ↓2+24
Комментарии19

Налоговый суслик. Особенности упрощенной системы налогообложения при работе по договорам с Apple, Google и другими

Время на прочтение46 мин
Количество просмотров53K
В данной статье я постараюсь провести краткий юридический ликбез для разработчиков по некоторым положениям Гражданского кодекса, имеющим значение в контексте деятельности индивидуальных предпринимателей и организаций, применяющих упрощенную систему налогообложения, в работе по договорам с Apple, Google и другими компаниями, а также обратить внимание на некоторые не всегда очевидные налоговые нюансы, которые, как показал личный опыт изучения данной темы, довольно часто ускользают от внимания разработчиков или вызывают множество вопрос и споров.

Прочтите внимательно эту статью, если вы применяете упрощенную систему налогообложения с объектом налогообложения «доход» по ставке 6 процентов и продаете игры или приложения в Google Play, Apple App Store, а также прочий цифровой контент — например, 3D-модели — в Steam, Unity Asset Store или на других площадках, в условиях договоров с которыми фигурируют комиссии, агентские вознаграждения и прочие формы разделения выручки между сторонами.

Из материала вы узнаете:

  • Почему разработчику желательно обладать хотя бы базовой юридической грамотностью
  • Чем с точки зрения Гражданского кодекса являются игры и приложения и какие права на них есть у разработчиков помимо авторского права
  • Что такое агентский договор и почему все это важно при работе по договору с Apple или Google
  • Кто такой налоговый суслик и почему он может превратиться в пушного зверя
  • Какой «подвох» существует для применяющих «упрощенку» в части определения налоговой базы
  • Почему налог на добавленную стоимость (НДС) продолжает преследовать нас, даже когда мы не являемся его плательщиками
  • Как, с точки зрения Федеральной налоговой службы, облагаются НДС внутриигровые покупки (InApp Purchases)
Покажите мне суслика!
Всего голосов 40: ↑36 и ↓4+32
Комментарии84

Домашний медиа-сервер на основе Ubuntu Server 12.04 LTS

Время на прочтение8 мин
Количество просмотров355K
Привет, Хабр! В ходе обсуждения одной статьи про «идеальную» домашнюю сеть, возник спор, что лучше, аппаратный NAS или мини-компьютер с Linux дистрибутивом. Автор предлагал использовать аппаратный NAS, т. к. якобы он проще в администрировании, не требует знаний Linux, да и вообще NAS тихий. Но при этом, для просмотра на DLNA-телевизоре видео, который он не поддерживает, предлагал включать ноутбук с транскодирующим DLNA. Меня это, мягко говоря, удивило, т. к. в идеальной сети такого быть не должно. Поэтому хочу представить своё видение одного из ключевых компонентов домашней сети — централизованного хранилища данных, и основано оно будет на мини-ПК с ОС Ubuntu Server.
Читать дальше →
Всего голосов 112: ↑99 и ↓13+86
Комментарии76

Домашний медиа-сервер: настройка и аспекты применения

Время на прочтение6 мин
Количество просмотров253K

Преамбула


Наверное, у каждого из нас дома немало цифровых медиа-устройств, общающихся по WiFi или подключённых к сети с помощью обычной витой пары. У меня, к примеру — КПК, нетбук, пара ноутбуков, пара компьютеров и ещё пара смартфонов. Последние (парочка Nokia 5800 Xpress Music), благодаря тому, что даже в ванной или в постели постоянно находятся под рукой, оказались самыми часто используемыми девайсами. Благо и серфинг, и общение через GTalk/Skype, и простенькие игрушки-убийцы времени — всё доступно. Вот только памяти у девайсов всего по 8 Гб, так что фильмов туда не шибко накидаешь, да и конвертировать, а потом заливать на смартфон каждый фильм — на это нужно время, а ведь есть ещё такая штука, как лень! Одним словом, захотелось иметь возможность как-то просматривать медиаконтент (и в первую очередь — видео) с домашнего сервера в любой момент, не конвертируя и не совершая лишних телодвижений.
Читать дальше →
Всего голосов 42: ↑40 и ↓2+38
Комментарии19

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность