Часто разработчики утверждают, что read-only коллекции в .NET нарушают принцип подстановки Барбары Лисков. Так ли это? Нет, это не так, потому что IList интерфейс содержит флаг IsReadOnly. Исключением является класс Array, он действительно нарушает LSP принцип начиная с версии .NET 2.0. Но давайте разберемся во всем по порядку.
Андрей Гордиенков @VioletTape
Пользователь
Monitoring-as-a-service для инфраструктур на примере сервиса Anturis
3 min
8.6KМониторинг является одним из неотъемлемых компонентов менеджмента IT инфраструктур. На сегодняшний день существует множество решений и подходов к мониторингу, самые популярные из них можно выделить в две группы:
Существует множество IT специалистов, которым явно не хватает только внешнего мониторинга, а тратить большую часть своего времени и средств на разворачивание и поддержку собственной системы мониторинга они не готовы. Поэтому в последние несколько лет на рынке появился новый класс решений — monitoring-as-a-service или hosted monitoring.
- Только внешний мониторинг, который используется для анализа ситуации со стороны пользователей. В этом случае смотрятся такие метрики, как Response Time, Uptime, Round-trip Time и пр. Лидером в этом сегменте является шведский Pingdom, хотя существует множество аналогов (в т.ч. бесплатных), а также сервисов, специализирующихся на определенных регионах. Минусом таких решений является то, что при наличии понимания проблемы, сложно выявить ее причину и, соответственно, быстро устранить.
- Open-source системы для мониторинга, такие как Nagios или Zabbix. Такой подход популярен прежде всего высокой степенью кастомизации и практически безграничным функционалом, который можно расширить с помощью самописных скриптов и сторонних плагинов. В то же время, такие системы требуют достаточно много времени на обучение внедрению и поддержку компонентов самого мониторинга. Кроме того, теряется некоторый функционал внешнего мониторинга (например, проверки из разных географических положений).
Monitoring-as-a-service
Существует множество IT специалистов, которым явно не хватает только внешнего мониторинга, а тратить большую часть своего времени и средств на разворачивание и поддержку собственной системы мониторинга они не готовы. Поэтому в последние несколько лет на рынке появился новый класс решений — monitoring-as-a-service или hosted monitoring.
+6
Улучшаем LINQ для работы с IReadOnly-коллекциями
7 min
16KКак известно, при использовании интерфейса IEnumerable<> там, где подразумевается коллекция, могут случаться проблемы (см. например Проблемы использования IEnumerable и LINQ против LSP). К счастью, в .NET v4.5 в 2012-м году (немного поздновато, но лучше поздно, чем никогда), появились интерфейсы IReadOnlyCollection<>, IReadOnlyList<>, IReadOnlyDictionary<> (далее буду их обобщённо называть IReadOnly-интерфейсы). В отличие от IEnumerable<>, IReadOnly-интерфейсы дают возможность достаточно и без лишних требований обозначать функциональность коллекции, что и позволяет их рекомендовать для использования вместо IEnumerable<> везде, где подразумевается чтение коллекции. Но тут встречается одно затруднение. Одним из важных компонентов, потребляющим и создающим коллекции, является LINQ и, особенно, его часть «LINQ к объектам». К сожалению, IReadOnly-интерфейсы появились через 5 лет после LINQ, и в нём не используются. Все входные и выходные коллекции LINQ-операций имеют базовый тип IEnumerable<>, исходя из ограниченных возможностей которого, многие операции подразумевают лишние затраты: полный последовательный перебор или даже создание промежуточных копий входных коллекций. Более того, возвращая из операций тот же IEnumerable<>, LINQ требует при дальнейшем использовании результата опять использовать полный перебор и создание промежуточных копий. В связи с этим, у меня давно зрела мысль «подружить» LINQ с IReadOnly-интерфейсами.
+13
Унифицируем поведение LINQ to IEnumerable и LINQ to IQueriable в части работы с null значениями. Часть вторая. Своя реализация IQueryProvider
4 min
9.1KВ комментариях к первой части мне справедливо сделали замечание, что я обещал унификацию IEnumerable и IQueryable, а сам спрятал их за самописным интерфейсом типа репозитория. В этой статье я постараюсь исправится и дать пример что же делать, если мы хотим работать с LINQ напрямую. Для этого я предложу собственную реализацию интерфейса IQueryProvider.
GitHub
Nuget
GitHub
Nuget
+10
JSON, который можно комментировать
16 min
67K...{...
"some-key_comment":"my comment for key and value",
"some-key":"some-value",
...}...
Но если комментарии не пишем, следуя суровости протоколов, ошибки возникают уже из-за другого фактора — забывания смысла параметров настроек при редактировании человеком....{...
"some-key":"some-value", //какой-какой key?? Ай, комментарии - нельзя!
...}...
Придумаем JSON-подобный формат с комментариями в стиле JS, чтобы их можно было выполнять как JS, а, очистив от комментариев — читать как JSON. ("TL:DR: покажите мне код.")
+3
Программа курса и материалы по Scala
14 min
48KTutorial
Добрый день.
Меня зовут Головач Иван, я практикующий Java Tech Lead с опытом в программировании 10+ лет (Java EE, J2ME, C, C++, M-language, Delphi), который перешел на Scala.
Я подготовил и прочитал как обычные курсы по программированию (Java Core + Junior Java Developer), так и спецкурсы (Multicore Programming for JVM (раз и два)).
В данный момент я стартую спецкурс по Scala и в этом топике хочу поделиться материалами, которые я нашел наиболее интересными/информативными (курс готовился более года).
Меня зовут Головач Иван, я практикующий Java Tech Lead с опытом в программировании 10+ лет (Java EE, J2ME, C, C++, M-language, Delphi), который перешел на Scala.
Я подготовил и прочитал как обычные курсы по программированию (Java Core + Junior Java Developer), так и спецкурсы (Multicore Programming for JVM (раз и два)).
В данный момент я стартую спецкурс по Scala и в этом топике хочу поделиться материалами, которые я нашел наиболее интересными/информативными (курс готовился более года).
+26
Слой кэширования поверх Linq to SQL
10 min
7.8KЗа последний год мы перенесли внушительную часть настроек DirectCRM в базу данных. Множество элементов промо-кампаний, которые мы до этого описывали исключительно кодом, теперь создаются и настраиваются менеджером через админку. При этом получилась очень сложная структура БД, насчитывающая десятки таблиц.
Однако, за перенос настроек в базу данных пришлось расплачиваться. Об архитектуре, позволяющий кэшировать редко меняющиеся Linq to SQL сущности, смотрите под катом.
Однако, за перенос настроек в базу данных пришлось расплачиваться. Об архитектуре, позволяющий кэшировать редко меняющиеся Linq to SQL сущности, смотрите под катом.
+8
Делаем скриншоты правильно: практические советы
8 min
188KTutorial
Устройство для снимка экрана на первых компьютерах (Command-Shift-3)
Если вы когда-либо делали хелп или мануал для своего приложения, наверняка вы отметили, как неожиданно много времени и сил занимает создание скриншотов.
Ведь кажется, что скриншот — это “секунда работы, Alt+PrintScreen и Ctrl+V!”. Некоторые клиенты удивляются, когда слышат, что скриншот в мануале может стоить и $2 и даже $5.
В этой статье я расскажу, как правильно делать скриншоты, почему это не просто “два клика” и какие подводные камни встречаются на пути неопытного скриншотера. Рассматривайте ее как чеклист или список практических советов для тех, кто документирует ПО. Надеюсь, это поможет вам избежать разочарований и порадовать юзеров красочными понятными картинками.
+57
Пара слов об интернационализации приложений
12 min
46KЯ давно регулярно читаю Хабр и заметил, что здесь довольно мало внятных статей о локализации ПО, ориентированных на разработчиков. По своему опыту управления проектами локализации я могу сказать, что локализация — это не только перевод строк и адаптация приложения к контексту той или иной страны, но и постоянное противоборство (в идеальных случаях — равноправное взаимодействие) с разработчиками.
В этой статье я постараюсь на примере показать, как можно создать так называемый localization-friendly code, то есть, организовать ресурсы таким образом, чтобы существенно облегчить локализацию приложения, снизив избыточные временные и финансовые затраты.
Сразу же оговорюсь, что речь пойдёт в первую очередь об интернационализации, то есть, об учёте всех лингвистических особенностей на этапе разработки. Если же ресурсы вашего проекта изначально не подразумевали локализацию, а впоследствии вы решились на неё, то их «затачивание» под локализацию может выйти намного дороже, чем доход от неё.
В этой статье я постараюсь на примере показать, как можно создать так называемый localization-friendly code, то есть, организовать ресурсы таким образом, чтобы существенно облегчить локализацию приложения, снизив избыточные временные и финансовые затраты.
Сразу же оговорюсь, что речь пойдёт в первую очередь об интернационализации, то есть, об учёте всех лингвистических особенностей на этапе разработки. Если же ресурсы вашего проекта изначально не подразумевали локализацию, а впоследствии вы решились на неё, то их «затачивание» под локализацию может выйти намного дороже, чем доход от неё.
+111
«Трудности» перевода приложений для Windows Store
4 min
9.5KУ меня было локализованное приложение для Windows Store. В нем была возможность переключить язык на английский, но даже с английским интерфейсом приложение продолжало удивлять англоязычных пользователей русскими кириллическими «иероглифами» на заставке и логотипах. А русскоязычные пользователи в свою очередь удивлялись тому, что приложение называлось не по-русски. О том, как получилось такое безобразие и как сделать хорошо эта статья.
Всех, кому интересна разработка универсальных приложений Windows, приглашаю под кат.
+17
Семинар по анатомии CLR и .Net Framework. Roslyn, CoreCLR, CoreFx, Nitra, RyuJIT
4 min
4.4K03-04 Апреля в Москве и 29-30 мая — в Санкт-Петербурге пройдет серия семинаров CLRium. У данного семинара нет определенной целевой аудитории, мы рады всем. И начинающим свою карьеру, разработчикам, и махровым, повидавшим виды, архитекторам.
Как люди и хотят, у нас будут не просто технические доклады, без воды и маркетинга. У нас будет много тем, одна из которых — настоящая разминка для мозгов. Мы будем по дампам памяти понимать как устроена CLR и как с ней взаимодействовать не привычным для всех способом — напрямую.
У нас будет:
- Максимально глубокие, отборные доклады по редко-раскрываемым вопросам
- Целый вечер, посвященный исключительно ядру .Net. Как с ним работать «без перчаток», напрямую, со структурами в памяти, без рефлексии.
Чем мы гордимся:
- Наш материал не встретишь в сети Интернет: он полностью авторский
- Материал освещает самые интересные области .Net, которые почему-то не покрыты материалом.
- Мы не берем лишних денег с вас и потому у нас — самая дешевая конференция и всех существующих. 2,000 рублей за два дня — такого не предлагает никто. Это ведь как в магазин сходить.
+15
8 сортов муды в твоей веб-студии
6 min
74KМуда, что по-японски означает «потери» — это любая деятельность, которая потребляет ресурсы, но не создает ценности для клиента. (Источник).
Эта короткая заметка для тех, кто системно ищет, где его студия теряет деньги. Похвальное занятие в наше весёлое время.
Хорошо систематизировали виды потерь ребята из Toyota. Тойотовцы выделяют 7-8 видов муды, потерь на производстве. Посмотрим, есть ли аналоги между потерями в автомобилестроении и работе студии.
Эта короткая заметка для тех, кто системно ищет, где его студия теряет деньги. Похвальное занятие в наше весёлое время.
Хорошо систематизировали виды потерь ребята из Toyota. Тойотовцы выделяют 7-8 видов муды, потерь на производстве. Посмотрим, есть ли аналоги между потерями в автомобилестроении и работе студии.
+66
7 золотых правил одного программиста
3 min
143KЭто статья про семь простых правил, которые я сформулировал для себя за годы работы программистом. Семь правил, которые подняли мою эффективность. Сделали меня лучше. Это мои правила и они работают для меня. Я не пытаюсь навязать их вам, я хочу поделиться с вами, и, возможно, узнать о том, каких правил и принципов придерживаетесь вы.
Самая раздражающая ситуация в программировании — когда код верный, но не работает. “Да тут три строчки, блин, просто негде ошибиться! Наверное баг! Пойду потрачу три дня на изучение баг-репортов компилятора/интерпретатора/фреймворка...”. Возникает чувство, будто компьютер над вами издевается!
Тут главное помнить, что в этих трех строчках есть ошибка. Если код работает не верно — значит код написан не верно. Точка. Виноваты только вы. Универсальный совет — идите спать! Ну или хотя бы отвлекитесь на чашку чая. Когда, через некоторое время, вы вернетесь к коду, наверняка станет ясно, что тут лишний оператор отрицания, или перепутаны две переменные с похожими именами, или еще какая-нибудь мелочь, в которой мы никогда никому не признаемся.
Компьютер всегда прав
Самая раздражающая ситуация в программировании — когда код верный, но не работает. “Да тут три строчки, блин, просто негде ошибиться! Наверное баг! Пойду потрачу три дня на изучение баг-репортов компилятора/интерпретатора/фреймворка...”. Возникает чувство, будто компьютер над вами издевается!
Тут главное помнить, что в этих трех строчках есть ошибка. Если код работает не верно — значит код написан не верно. Точка. Виноваты только вы. Универсальный совет — идите спать! Ну или хотя бы отвлекитесь на чашку чая. Когда, через некоторое время, вы вернетесь к коду, наверняка станет ясно, что тут лишний оператор отрицания, или перепутаны две переменные с похожими именами, или еще какая-нибудь мелочь, в которой мы никогда никому не признаемся.
+100
Унификация и поиск с возвратом на C#
6 min
12KЭта статья является ответом на статью «Задача Эйнштейна на Прологе». В ней автор пишет, что Пролог очень хорошо подходит для решения этой задачи и что суммарное количество строк почти совпадает с условиями задачи. Здесь я хочу показать, что на C# количество строк кода может быть примерно тем же. Я просто скопирую решение на Прологе и немного изменю синтаксис. Сначала приведу итоговый результат, а потом распишу функции. Вот что получилось:
+22
Как загрузить Microsoft Office 16 с сайта Microsoft
3 min
167KНа днях я рассказал, как получить Windows 10 Preview через Windows Update для ваших Windows 7/8.1. Статья вызвала неожиданно бурный интерес и более сотни комментариев, что натолкнуло меня на мысль, что публике может быть интересно посмотреть Microsoft Office 2016 Technical Preview. На днях на Connect как раз стала доступна январская версия. Занятно, что обычно доступ к предварительным версиям Office крайне ограничен, а сейчас – без анонсов и рекламы, загрузить сборку может любой желающий. Доступны разные языки, включая русский. Также имеется возможность регулярно загружать новые сборки. Есть, правда, одно «но» – продукт поставляется в формате Click2Run. Подробно об этом я рассказывал в статье «Как загрузить последний Office с сайта Microsoft без всякого App-V». Посмотрим, что же надо для того, чтобы загружать предварительные сборки Office.
Внимание: параллельная установка к Office 2013 не поддерживается (речь идёт, видимо, о C2R версии, но именно так заявляется в описании), — потребуется выполнить обновление с 2013 на 16 или установка в виртуальную машину.
Внимание: параллельная установка к Office 2013 не поддерживается (речь идёт, видимо, о C2R версии, но именно так заявляется в описании), — потребуется выполнить обновление с 2013 на 16 или установка в виртуальную машину.
+20
Всё о версиях Windows 8.1 и о том, как легально загрузить последний образ без подписки
6 min
767KХочу поделиться в одной заметке важной, на мой взгляд, информацией о версионности образов Windows 8.1, и о том, как любой желающий может совершенно легально загрузить ту языковую версию и издание, которые ему требуется. С учётом того, что после выхода Windows 8.1 образы пересобирались минимум пять раз, вопрос версионности становится интересным для администраторов и энтузиастов.
Недавно я писал о том, как можно совершенно легально загрузить самый последний Microsoft Office с сайта Microsoft — как корпоративную версию, так и коробочную Retail — любые языки и продукты, со всеми интегрированными обновлениями. Сегодня я расскажу, как сделать то же самое и с операционной системой — средствами предоставляемыми самой Microsoft.
Но для начала я хочу рассказать о версиях Windows 8.1. Не об изданиях — этого добра в сети много, а именно о публичных версиях сборок ОС. Ведь для любого администратора удобно загрузить образ со всеми интегрированными обновлениями, чем устанавливать сотню самостоятельно. Причём загрузить образ с сайта Microsoft, а не самодельную сборку с торрентов. Всё что я буду рассказывать о версиях ОС Windows 8.1 применимо и к Windows Server 2012 R2, за исключением канала для бесплатной загрузки образов для переустановки ОС. Но давайте всё по порядку.
Недавно я писал о том, как можно совершенно легально загрузить самый последний Microsoft Office с сайта Microsoft — как корпоративную версию, так и коробочную Retail — любые языки и продукты, со всеми интегрированными обновлениями. Сегодня я расскажу, как сделать то же самое и с операционной системой — средствами предоставляемыми самой Microsoft.
Но для начала я хочу рассказать о версиях Windows 8.1. Не об изданиях — этого добра в сети много, а именно о публичных версиях сборок ОС. Ведь для любого администратора удобно загрузить образ со всеми интегрированными обновлениями, чем устанавливать сотню самостоятельно. Причём загрузить образ с сайта Microsoft, а не самодельную сборку с торрентов. Всё что я буду рассказывать о версиях ОС Windows 8.1 применимо и к Windows Server 2012 R2, за исключением канала для бесплатной загрузки образов для переустановки ОС. Но давайте всё по порядку.
+67
Потрясающая коллекция бесплатных шрифтов за 2014 год
1 min
123KПривет, Хабр! Многие уже знают о моей страсти к попытке собрать самое лучше, что может быть полезно для веб-разработчиков или веб дизайнеров. И шрифты — не исключение. Программное обеспечение для работы со шрифтами постоянно развивается. Количество дизайнеров желающих опробовать себя в типографике растет с каждый днем. А сегодня я хочу представить вам их наработки — 30 потрясающих бесплатных шрифтов, которые мне удалось собрать за последний год.
Polar
+60
Jump Start в PowerShell (часть II)
10 min
171KTutorial
Кто, если не ты? Когда, если не сейчас?
В предыдущей части мы научились запускать PowerShell, разобрались с политикой выполнения сценариев. Поняли, что такое командлеты, знаем, как передавать их по конвейеру и как получить их свойства. Узнали, что PowerShell имеет огромный Help.
В этой части мы разберёмся с переменными, узнаем, что они за типы и как к ним обращаться, как их сравнивать и выводить всевозможными способами. Обязательно разберёмся с циклами и напишем несколько функций.
В предыдущей части мы научились запускать PowerShell, разобрались с политикой выполнения сценариев. Поняли, что такое командлеты, знаем, как передавать их по конвейеру и как получить их свойства. Узнали, что PowerShell имеет огромный Help.
В этой части мы разберёмся с переменными, узнаем, что они за типы и как к ним обращаться, как их сравнивать и выводить всевозможными способами. Обязательно разберёмся с циклами и напишем несколько функций.
+13
Impact Mapping на практике
9 min
104KКогда читал книгу Impact Mapping первый раз, у меня было желание бросить её на середине. Всё, что там написано, слишком очевидно. Я нашел в себе силы и дочитал, благо книга коротная и с большими картинками. Как в последствии выяснилось, вся соль была в том, что все эти очевидные и простые практики из книги я не применял в своей работе.
Иногда заказчики писали свои цели в официальных документах к проекту. Иногда мне казалось, что я и так понимаю цели заказчика — они абсолютно очевидны. К чему уточнять очевидное? Разницу я почувствовал, когда начал применять Impact Mapping в работе.
+13
10 советов фрилансерам, как расставлять приоритеты задачам
9 min
27KTranslation
Вы когда-нибудь задумывались: «А сколько стоит пароход построить?”, “А сколько — дизайн-макет сделать?”, “А из чего складывается такая цена?»
Пароход — штука архисложная; его стоимость — это цена на материалы (металл, пластик и что там ещё нужно), оплата труда рабочих верфи, амортизация на износ оборудования, оплата инженерных изысканий и так далее и тому подобное…
А что с дизайн-макетом? Из чего складывается его цена? Ну, допустим, вложим в стоимость “амортизацию оборудования” — деньги на ПК и ПО, которые регулярно нужно обновлять. А что ещё? Остается, собственно, только оплата труда дизайнера-верстальщика. А как её рассчитать? Тут способов два: либо оплата за человеко-часы (сколько времени потратил — столько и оплатили); либо другой более распространенный подход — сдельная оплата (т.е. оценил бриф-ТЗ на макет, прикинул его сложность, назвал стоимость).
Что в первом случае (прямо), что во втором (косвенно), стоимость будет зависеть от времени, которое вы тратите на свою работу. А из чего складывается это время? Есть факторы внутренние: мотивация, навыки работы, муза, в конце концов… Они подвластны лишь вашей силе воли, тут дза-дзен и прочее самосовершенствование вам в помощь. Но остаются ещё и факторы внешние: от обстановки в рабочем кабинете до методологии, по которой вы работаете, — и с ними всё интереснее…
Пароход — штука архисложная; его стоимость — это цена на материалы (металл, пластик и что там ещё нужно), оплата труда рабочих верфи, амортизация на износ оборудования, оплата инженерных изысканий и так далее и тому подобное…
А что с дизайн-макетом? Из чего складывается его цена? Ну, допустим, вложим в стоимость “амортизацию оборудования” — деньги на ПК и ПО, которые регулярно нужно обновлять. А что ещё? Остается, собственно, только оплата труда дизайнера-верстальщика. А как её рассчитать? Тут способов два: либо оплата за человеко-часы (сколько времени потратил — столько и оплатили); либо другой более распространенный подход — сдельная оплата (т.е. оценил бриф-ТЗ на макет, прикинул его сложность, назвал стоимость).
Что в первом случае (прямо), что во втором (косвенно), стоимость будет зависеть от времени, которое вы тратите на свою работу. А из чего складывается это время? Есть факторы внутренние: мотивация, навыки работы, муза, в конце концов… Они подвластны лишь вашей силе воли, тут дза-дзен и прочее самосовершенствование вам в помощь. Но остаются ещё и факторы внешние: от обстановки в рабочем кабинете до методологии, по которой вы работаете, — и с ними всё интереснее…
+17
Information
- Rating
- Does not participate
- Location
- Wroclaw, Польша
- Registered
- Activity