15.01.2022

Тренажёр для работы с Git

Наткнулся на отличный тренажёр для работы с git-ом (https://learngitbranching.js.org/), который поможет новичкам освоить работу с ветками, а также обучит другим полезным трюкам. Рекомендую.

27.09.2021

Azure: построение кросс-запросов для различных БД в MS Azure SQL Server

 MS Azure SQL Server с точки зрения взаимодействия с ним крайне похож на классический MS SQL Server и во многих аспектах повторяет функциональность. Однако быстрое и удобное создание linked server пока не доступно в Azure версии. В качестве решение можно воспользоваться способом с подключением внешнего источника данных:

-- Производим очистку данных
DROP EXTERNAL TABLE tblSource
DROP EXTERNAL DATA SOURCE RemoteSource
DROP DATABASE SCOPED CREDENTIAL sourceCredential
DROP MASTER KEY

-- Настраиваем соединение
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'your_password';

CREATE DATABASE SCOPED CREDENTIAL sourceCredential
WITH IDENTITY = 'your_login',
SECRET = 'your_password';

CREATE EXTERNAL DATA SOURCE RemoteSource
WITH
(
    TYPE=RDBMS,
    LOCATION='your_server.database.windows.net',
    DATABASE_NAME='your_db_name',
    CREDENTIAL= sourceCredential
);

CREATE EXTERNAL TABLE dbo.tblSource(
    [Id] [int] NOT NULL,
    [Name] [nvarchar](2000) NOT NULL
)
WITH
(
    DATA_SOURCE = RemoteSource
);

-- Производим выборку
SELECT * 
FROM dbo.tblSource

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

21.09.2021

.NET: compiling single file executables in .NET 5

 .NET 5 is not a very new technology, very soon MS will perform release version of .NET 6. Hovewer 5th version is still in use and not all problems were solved in it. One of such problems is compiling single file executables. If you try to do it just by selecting checkbox in publish settings window, just like you did for .Net core 3.1 and ealrlier, it will not work. Visual Studio will still compile multifile build. 

Here is a workaround for it. You will need to manually add properties (PublishSingleFile, SelfContained, IncludeAllContentForSelfExtract and RuntimeIdentifier) in your project file. Thus you csproj will look like this:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net5.0-windows</TargetFramework>
        <PublishSingleFile>true</PublishSingleFile>
        <SelfContained>true</SelfContained>
        <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
        <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    </PropertyGroup>
</Project>

Of course your parameters (like runtime or generated file type) may be different according to your task.

20.09.2021

MS Office: снятие защиты с файла Word, Excel, PowerPoint

Как известно современные файлы из пакета MS Office (docx, xlsx и т.п.) являются переименованными zip архивами, содержимое которых легко можно просмотреть. Поэтому есть достаточно простой способ снятия защиты с документа/листа. Пример для Excel можно посмотреть в этом видео:


PS. Надеюсь в следующей ревизии это исправят.


20.04.2021

SQL: Функция для получения по подстрок из строки с разделителями

Возникла задача по разбиения строкового столбца, в котором есть разделители, например, точка с запятой на отдельные столбцы. Для этого из оригинальной строки нужно получать подстроки с учетом порядкового номера/индекса. Сделать это можно, написав sql-функцию следующего вида:

CREATE FUNCTION [dbo].[f_GetValueFromSeparatedStringByIndex]
(
    @InputString nvarchar(MAX),
    @Index int,
    @Separator nvarchar(1) = ';'
)
RETURNS nvarchar(255)
AS
BEGIN
    DECLARE @Result nvarchar(255) = NULL

    SELECT @Result = TRIM(Value)
    FROM (
        SELECT TRIM(value) as Value, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) as OrderNumber
        FROM string_split(@InputString, @Separator)
    ) as t
    WHERE OrderNumber = @Index

    RETURN  @Result
END

31.03.2021

.Net библиотеки для работы с маркетинговыми системами

В конце прошлого кода на своей текущей работе в компании Wavemaker (Russia) запустил несколько opensource решений, базирующихся на наработках, сделанных в ходе работы над программным комплексом Data Feeds Platfrom. Часть функциональности задействует ряд библиотек из моего фреймворка Ak.Framework. Как раз недавно было выпущено обновление для одной из библиотек. 

Что было сделано:

Adverity.Api.Connector - библиотека для работы с API Adverity Datatap.

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

Github - https://github.com/wm-russia-software/Adverity.Api.Connector

Nuget - https://www.nuget.org/packages/Adverity.Api.Datatap.Connector


Segmento.Api.Connector - библиотека для работы с API Segmento.

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

Github - https://github.com/wm-russia-software/Segmento.Api.Connector

Nuget - https://www.nuget.org/packages/Segmento.Api.Connector

Делитесь и пользуйтесь.


25.03.2021

Azure: Проблема масштабирования SQL Database при включенном резервном копировании

Недавно наткнулся на интересный момент. В рамках MS Azure при попытке перемасштабировать базу с DTU-варианта на виртуальные ядра с включенным автоотключением падает неизвестная ошибка без какой-либо детализации. Экспериментальным образом удалось выяснить, что проблема заключалась в настроенном у БД резервном копировании. При его оключении масштабирование проходит успешно. 

Провел дополнительные эксперименты: если включить автоотключение при неиспользовании резеррвное копирование тоже нельзя настроить. О таком поведении можно догадаться, но было бы здорово, если бы Azure выдавал явное системное сообщение о настройках, препятствующих выполнению операции.