Инсталация и използване на Tika OCR сървър

 

Сървърът е достъпен на

Инсталиране на нов език за Tesseract:

Извличане на текст от съдържанието на документ:

Доълнителна информация може да се намери тук: https://medium.com/@masreis/text-extraction-and-ocr-with-apache-tika-302464895e5f

Проверка дали сървърния сертификат е с пълна верига

Ако сървърния SSL не е с пълна верига е възможно мобилни браузъри и приложения да имат проблем със свързването като дават SSL грешки.

Локално това може да се провери с OpenSSL

Например:

Ако се получава цялата верига, ще има информация подобна на:

Certificate chain

Ако по някаква причина се връща само последния сертификат, то ще има резултат от сорта на:

В този случай, трябва да се оправи сървърния сертификат, така че да връща цялата удостоверителна верига

Повреден лог в SQL Server Express

В случай, че база не може да се закачи към SQL Server с подобна грешка:

и стандартната команда с ATTACH_REBUILD_LOG не работи, може да се използва ATTACH_FORCE_REBUILD_LOG, която ще създаде лог-а при всички ситуации.


Взето от тук:

https://blog.sqlauthority.com/2016/11/04/sql-server-unable-attach-database-file-activation-failure-log-cannot-rebuilt/

Parameter sniffing или защо понякога заявките в SSMS са бързи, а в приложението не

SQL Server има оптимизация, която се нарича parameter sniffing, която запазва и кешира query планове при извикване и компилиране на stored procedure за конкретни параметри.

По подразбиране .NET приложенията използват малко по-различни параметри отколкото SSMS например:

За приложения:

за SSMS:

Съответно в някои случаи заявките се оптимизират грешно за .NET приложения (с arithabort off), но в SSMS работят наред, тъй като няма натрупана статистика, за да се оптимизират.

Бързо решение на проблема (временно!) е да се изпълни

Това изчиства кеша на сторнатите процедури и започва наново да се съхраняват. Тези статистики се пазят в паметта, поради което рестарт на сървъра също върши работа.

Има и други опции, като да се добавят различни опции към заявката като use recompile, option recompile, optimize for unknown и т.н.

По-глобално решение би било използването на Trace flag 4136 или

По-долу има подробна информация за този (и други случаи) и различни решения на проблема:

http://www.sommarskog.se/query-plan-mysteries.html

Сериозен недостатък при .NET приложения и EF е генерирането на  dynamic SQL, който използва sp_executesql и лесно може да възникне такъв проблем.

Overclock на Intel GMA 950

Intel GMA950 e стара вградена видеокарта в Intel 945 chipset (2008), която се използва в много  netbooks (като Acer Aspire One и др.). Тези нетбуци са много остарели, но интересното е, че с известни усилия могат да подкарат Windows 10 и даже да са използваеми.

Видео картата поддържа 400MHz, но е ограничена на 166MHz с цел по-дълга работа на батерията. Това и преди, и сега водеше до по-бавна графика. Сега обаче всеки бит производителност е добре дошъл и е необходим за по-нормална работа.

За XP имаше програма GMABooster, която позволяваше да се възстановят оригиналните 400 MHz (беше нужно да се изпълнява след всяко стартиране), но тази програма не работи за нови OS като Windows 10.

В този пост https://forums.freebsd.org/threads/under-overclocking-the-gma950-gpu-with-pciconf-setpci-works.58668/ е описано какви pci команди е необходимо да се изпълнят, за да се контролират стойностите.

Оказа се, че lspci/setpci имат съответни портове за Windows – https://eternallybored.org/misc/pciutils/ и може да се работи нормално с тях (при админски права).

Долното ще установи работата в 400 MHz (като 02.0 се вижда от lspci и е кода на видео картата)

Какъв е резултатът след всичко това?

GPU-Z показва 400MHz (вместо 166) и Pixel FillRate от 1.6 GPixels(вместо 0.7). Разлика има, като може и да се забележи в някои случаи.

Тъй като горният код трябва да се стартира при всяко стартиране, най-лесно е да се сложи като Scheduled Task с админ права, който да се стартира при всяко стартиране на системата.

Конкретният модел е Acer Aspire One D150 с параметру Intel Atom N270 (1 core, 1.6GHz), 2 GB RAM, 128GB SSD

 

Tile Server за OpenStreetMaps

OpenStreetMaps са прекрасни карти, които са безплатни за  използване, могат да се редактират от всеки и допускат да се изтеглят сурови данни.

За да се използват данните е нужен “tile server”, който да ги предоставя. Стандартните mapnik и т.н. са много добри, но и сложни за подкарване.

Тук идва Tile Server GL – лесен за инсталиране като npm пакет или docker контейнер. NPM пакета съществува и в разновидност, която е изцяло javascript (без растер) и включва node сървър.

За работа са необходими mbtiles карти например от OpenMapTiles

Цялото подкарване отнема по-малко от 5 мин и след това it just works 🙂

Генериране на Nuget пакет и качване в локално хранилище

Бърз начин за генериране на nuget пакет и Upload към локално (shared folder) хранилище

 

Криптиране на връзката към MS SQL Server

Бърз начин за осигуряване на криптирана връзка по пътя (data at transit) до MS SQL server е използването на SSL сертификати от сървърна страна.

Ако не може да се издаден валиден SSL сертификат или няма възможност за локален CA, то може да се добави TrustServerCertificate=Yes към connection string-a към базата, за да вярва на сървърния сертификат.

Разбира се по този начин осигуряваме криптирана връзка с лесна конфигурация на цената на риска от използването на self-signed сертификат.

 

Криптиране на конфигурационни файлове в ASP.NET

Криптиране на connectionStrings секцията в web.config използвайки DPAPI. Командата трябва да се изпълни на машината, където е сървъра, защото използва данни от machine.config

и съответно декриптиране на секцията

 

Конфигуриране на TDE за SQL Server

SQL скрипт за създаване на TDE (Transparent Data Encryption) и осигуряване на “Encrypt the data at rest”.

Информацията в базата данни е криптирана и ако някой намери backup на базата няма да може да я използва.

Друга положителна страна е, че приложението,което достъпва данните няма нужда се променя и продължава да работи както и досега.

Криптирането на базата е онлайн, прозрачно и може да се проследи до къде е стигнало чрез изпълнение на query към dmv таблица.

Важно е да се запазят ключовете и сертификата, за да може базата данни да се прочете, ако се премести на друг сървър!