Pull to refresh
9
0
Бевз Олег Денисович @RaTyS

User

Send message

Как работает реляционная БД

Reading time51 min
Views544K
Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
Читать дальше →
Total votes 232: ↑229 and ↓3+226
Comments134

Автоматизированное создание NuGet-пакетов

Reading time15 min
Views33K

Коль захотел ты сборки передать
И с ними пламенный привет
Нугетом не забудь запаковать
В пакет!


Сразу оговоримся, что в этой статье речь пойдёт о стеке технологий Microsoft .NET.

Часто так бывает, что какое-то подмножество проектов начинает использоваться в разных решениях.

Как правило, программисты, разглядев в соседнем проекте что-то полезное, первое время не заморачиваются — создают папку lib (dll, assemblies и т.п.) и складывают туда скомпилированные сборки из оригинального решения. Со временем становится понятно, что это не самый удобный вариант и вот почему:

  • оригинальное решение начинает развиваться в свою собственную сторону, без учёта «потребителей»: добавляются новые зависимости, обновляются версии .net и т.п. «приколы»;
  • если даже о «потребителях» задумываются, то забывают обновить сборки у них, когда выходит критическое обновление или просто новая версия, а потом всё становится ещё хуже, когда сборок становится больше одной и между ними возникают некоторые зависимости — обновляя одну сборку, получаем проблемы в момент исполнения, т.к. другая сборка может оказаться не той версии;
  • оригинальное решение перестаёт дальше разрабатываться.

Ответом на все эти неприятности может служить вынесение проектов в отдельное решение и создание NuGet-пакета, включающего общие сборки, и смена парадигмы развития этих сборок. По большому счёту, всё это можно сделать и без NuGet, но удовольствия в этом гораздо меньше.Как сделать так, чтобы NuGet-пакет собирался сам автоматически вместе с компиляцией проекта на сервере построения и включал все необходимые свистелки и гуделки — об этом и будет наш рассказ.
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments18

Готовим ASP.NET 5, выпуск №7: подробнее про работу с Gulp

Reading time6 min
Views15K
Мы продолжаем нашу колонку по теме ASP.NET 5 публикацией от Дмитрия Сикорского ( DmitrySikorsky) — руководителя компании «Юбрейнианс» из Украины. В этой статье Дмитрий подробнее рассказывает о сценариях применения с ASP.NET 5 популярного средства Gulp. Предыдущие статьи из колонки всегда можно прочитать по ссылке #aspnetcolumn — Владимир Юнев
До появления ASP.NET 5 я никогда не использовал такие инструменты, как Gulp, поэтому пришлось уделить некоторое время и разобраться, что же это такое, когда я создал свой первый проект на этой платформе (правда, тогда там еще был Grunt, но это не важно). Не стану вдаваться в базовые вещи, которые уже и так везде достаточно подробно описаны (подразумеваю, что в вашем проекте уже есть Gulpfile.js и вы можете выполнять задания из него, используя диспетчер выполнения задач Visual Studio 2015), а сразу перейду к делу и на практике покажу, как можно использовать Gulp для автоматизации всего-всего в вашем проекте на ASP.NET 5.


В статье будут приведены фрагменты файла Gulpfile.js тестового проекта AspNet5Gulpization, который целиком лежит тут: https://github.com/DmitrySikorsky/AspNet5Gulpization.

Вступление


Вы наверняка знаете, для чего используется новая папка wwwroot. На самом деле, с ее появлением я немного по-новому взглянул на скрипты, стили и картинки. А именно, как и серверный код сайта, теперь я разделяю их на исходники и готовые к публикации объекты.
Читать дальше →
Total votes 21: ↑18 and ↓3+15
Comments13

TOP (10) бесплатных плагинов для SSMS

Reading time3 min
Views51K


До того, как начать работать с SQL Server я толком то и баз данных в лицо не видел… Помню, что мне установили SQL Server Management Studio 2005 и дали задание активно «крутить педали». По прошествии пары недель, как бы так сказать, моя производительность по написанию запросов была явно в районе плинтуса…

Более опытный коллега с недоумением на меня посмотрел и посоветовал поставить пару плагинов для SSMS… после этого работать стало явно веселее.

В данном посте я хочу поделиться моим топ списком бесплатных плагинов для SSMS, которыми чаще всего пользовался.
Подробнее
Total votes 24: ↑20 and ↓4+16
Comments12

Нестандартный подход к стандартной разработке дополнения (Add-In’а) на C#

Reading time15 min
Views8.3K
С помощью Add-In'a можно реализовать дополнительную функциональность, серьезно облегчающую повседневное использование приложения. Типовой подход прост – изучаем API приложения для разработки дополнения и реализуем его в виде отдельной библиотеки. На выбор обычно предлагается несколько языков, С# скорее всего будет в данном списке из-за его распространенности и популярности для разработки приложений под Windows на платформе .Net.

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

Как правило в самой среде приложения все организовано как надо — нужные действия реализованы в виде дополнительных окон, расположение и размер которых пользователь как хочет, так и настраивает для себя. Можно предположить, что API должен содержать данную функциональность интеграции пользовательских окон в среду, но как ни странно, скорее всего такой функционал будет отсутствовать. Но, если очень нужно, это можно реализовать.
Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments2

Десктопные приложения на JavaScript. Часть 1

Reading time6 min
Views158K
Ни для кого не секрет, что в наше время JavaScript стал одним из самых популярных языков программирования. В далекие 90е годы, в момент зарождения языка, когда он был создан с единственной целью добавить интерактивность веб страницам и улучшить процесс взаимодействия с пользователем, кто бы мог подумать, что он достигнет столь небывалых высот. Ведь сейчас на нем можно делать практически все что угодно. Хотите написать сайт: и бэкэнд и фронтэнд на JavaScript? пожалуйста! Хотите написать мобильное приложение на JavaScript? нет проблем. Программируете микроконтроллер – и тут вам на помощь придет JavaScript.

Есть конечно небольшие минусы в подходе использования JavaScript везде, но если поразмыслить, то сколько времени и сил можно сэкономить, изучив всего лишь одни язык, особенно, если то же самое приложение должно работать на разных платформах. Разных платформах говорите? Хм… Точно – разных платформах – теперь JS может позволить себе десктопные приложения для Windows, Linux, Mac, как спросите вы? Ответ прост: встречайте – NW.js.

По первым буквам можно прочитать – Node.js + Webkit, если данные понятия вам пока не знакомы, то скоро вы поймете о чем идет речь.

Node.js – программная платформа, основанная на движке V8, который транслирует наш скрипт в машинный код. Данная платформа была создана в 2009 году преимущественно для работы с бэкэндом сайтов.

WebKit — свободный движок, разработанный компанией Apple. Впервые был анонсирован в составе Safari в 2003 году
Итак, коду, написанному на JS для данной технологии, будут доступны как Node.js модули, так и стандартный браузерный API (соответственно WebKit)
Читать дальше →
Total votes 31: ↑24 and ↓7+17
Comments24

SQL Server 2016 CTP3.1 — что нового для разработчика?

Reading time9 min
Views24K
Еще недавно в моей памяти отложился анонс SQL Server 2016, которую лично презентовал Сатья Наделла. И вдруг, как снег на голову, стали одна за одной выходить свежие Community Technology Preview (на данный момент самая свежая версия – CTP3.1). По мере знакомства с новой версией, все больше хотелось поделиться впечатлениями…

Далее обзор новых синтаксических фишек SQL Server 2016: JSON, GZIP, DROP IF EXISTS, TRUNCATE TABLE по секциям, новые функции…

#1 – DROP IF EXISTS


CREATE TABLE dbo.tbl (
    a INT, b INT,
    CONSTRAINT ck CHECK (a > 1),
    INDEX ix CLUSTERED (a)
)

Если раньше перед удалением объекта приходилось делать проверку:

IF OBJECT_ID(N'dbo.tbl', 'U') IS NOT NULL
    DROP TABLE dbo.tbl

То сейчас появился более компактный синтаксис:

DROP TABLE IF EXISTS dbo.tbl
Подробнее
Total votes 37: ↑37 and ↓0+37
Comments13

Лучшие доклады конференции DotNext 2015 Piter. Часть 1 (Видео внутри)

Reading time7 min
Views9.7K
В июне в Петербурге прошла третья по счету конференция DotNext, а уже через месяц в Москве пройдет четвертая — DotNext 2015 Moscow. Видеозаписи всех докладов и круглых столов питерской конференции мы опубликовали отдельным плейлистом на YouTube. Ну а чтобы вы не теряли время попусту и сразу начинали с самого сладкого — я заморочился с различной (не очень сложной) аналитикой и разобрал для вас десяток топовых докладов, тех, которым участники конференции поставили наивысшие оценки.

Как всегда, для наших оценок мы используем российскую академическую шкалу:
  • плохо — 2 балла
  • нормально — 3 балла
  • хорошо — 4 балла
  • отлично — 5 баллов

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




10 место


Михаил Самарин, Futurice — Универсальные приложения для Windows 10
Средняя оценка: 4.19



Михаил — не только бизнес-директор финской компании Futurice, но еще и трижды Microsoft MVP, и поэтому имеет право выступать на конференциях чуть ли ни от имени Microsoft. Так получилось и на этот раз — Михаил выступил с обзорным докладом о том, как с выходом новой версии .NET и Windows 10 изменилась разработка под различные девайсы.

Как и было обещано, доклад получился обзорным. Сначала Михаил рассказал про инструменты разработки — Visual Studio 2015 и различных лицензиях на нее, Microsoft Expression Blend, изменениях в VS, которые появились для удобства разработки под мобильные устройства. Дальше речь пошла о новой схеме «версионирования» Windows, универсальных приложениях и решениях, которые принимает рантайм в зависимости от платформы, на которой выполняется приложение (теперь единый солюшен на все платформы, а не по одному для каждой). После этого речь пошла про различные расширения платформы и того, как система сборки работает с ними. Ну и ближе к концу речь пошла про адаптивный UI, физические и effective пиксели (теперь рекомендуется игнорировать физическое разрешение экрана, а использовать «эффективные» пиксели).



На московском DotNext Михаил обещает сделать доклад об использовании аппаратных API, доступных на мобильных платформах. Поскольку про мобильную разработку на .NET в России практически не рассказывают, будет особенно интересно его послушать. Так что ждем анонса.
Читать дальше →
Total votes 20: ↑15 and ↓5+10
Comments2

Service Locator нарушает инкапсуляцию

Reading time4 min
Views40K
Service Locator нарушает инкапсуляцию в статически типизированных языках, потому что этот паттерн нечётко выражает предусловия.

Лошадь уже давно мертва, но некоторые до сих пор хотят на ней поездить, так что я пну эту лошадь ещё раз. Годами я предпринимал попытки объяснить почему Service Locator это антипаттерн (например, он нарушает SOLID), но недавно меня осенила мысль, что большая часть моих аргументов фокусировалась на симптомах, упуская из внимания фундаментальную проблему.
Читать дальше →
Total votes 31: ↑23 and ↓8+15
Comments74

Do good code: 8 правил хорошего кода

Reading time9 min
Views123K
Практически всем, кто обучался программированию, известна книга Стива Макконнелла «Совершенный код». Она всегда производит впечатление, прежде всего, внушительной толщиной (около 900 страниц). К сожалению, реальность такова, что иногда впечатления этим и ограничиваются. А зря. В дальнейшей профессиональной деятельности программисты сталкиваются практически со всеми ситуациями, описанными в книге, и приходят опытным путём к тем же самым выводам. В то время как более тесное знакомство могло бы сэкономить время и силы. Мы в GeekBrains придерживаемся комплексного подхода в обучении, поэтому провели для слушателей вебинар по правилам создания хорошего кода.

В комментариях к нашему первому посту на Хабре пользователи активно обсуждали каналы восприятия информации. Мы подумали и решили, что тему «совершенного кода» стоит развить и изложить ещё и письменно — ведь базовые принципы хорошего кода едины для программистов, пишущих на любом языке.
Читать дальше →
Total votes 46: ↑35 and ↓11+24
Comments111

Сравни меня полностью. Рефлексия на службе .NET разработчика

Reading time23 min
Views32K


Недавно передо мной встала следующая задача: необходимо сравнить множество пар объектов. Но есть один нюанс: объекты — самые что ни на есть object'ы, а сравнивать нужно по всему набору публичных свойств. Причём совершенно необязательно, что типы сравниваемых объектов реализуют интерфейс IEquatable<T>.

Было очевидно, что следует использовать рефлексию. Однако при реализации я столкнулся со множеством тонкостей и в конечном счёте прибегнул к чёрной магии динамической генерации IL. В этой статье я хотел бы поделиться опытом и рассказать о том, как я решал эту задачу. Если Вас заинтересовала тема, то прошу под кат!
Читать дальше →
Total votes 34: ↑31 and ↓3+28
Comments20

Information

Rating
Does not participate
Location
Томск, Томская обл., Россия
Date of birth
Registered
Activity