SQL Server 2016/2017 – MS 70-761 Querying data with T-SQL

Подготовката за изпит MS 70-761 Querying data with Transact-SQL задължително минава през новостите в SQL Server 2016, като част от тях  са:

  • Dynamic Data Masking
  • Row Level Security
  • Always encrypted
  • Temporal data
  • JSON support
  • Polybase

Долните са по-скоро административни, но така или иначе са полезни

  • Query Store
  • Stretch Database

ASP.NET Core encoding на кирилица като UTF-8

По подразбиране в ASP.NET Core 1.0/1.1 при визуализация на кирилица (всичко non Latin) в сорс-а на страницата се появява нещо подобно на това:

Това затруднява дебъгването и увеличава размера на страницата. По-странното е, че текст написан на кирилица в cshtml-a се показва правилно както е изписан.

Мислех, че е проблем с encoding-а на страницата или контролера или нещо друго, но всичко беше настроено на UTF-8.

В крайна сметка попаднах на дискусия в github: https://github.com/aspnet/HttpAbstractions/issues/315 . Там се обяснява, че по подразбиране се кодира в BasicLatin и съответно всичко останало се променя до UTF-8 като по-горе.

Решението е, да се добави следния код в Startup.cs:

Така и не ми стана ясно, защо default-a e BasicLatin, но вероятно има някаква важна причина, която в момента ми убягва

 

Одитиране на заявки с ASP.NET Core

Лесен начин за одитиране на заявки с ASP.NET Core компилиран от няколко различни сайта и модифициран да работи с Core

Няколко неща, които си заслужава да бъдат обяснени:

Използваме стандартното ASP.NET Core cookie, за да установим нещо като сесия за потребителя. Така получаваме всички действия извършени в хубав хронологичен ред.

Целта да прихванем и OnResultExecuted е да запишем колко време е отнело да се изпълни метода (полезно за разрешаване на проблеми от сорта на “Много е бавно”)

С предаване на параметри може да решим колко детайлно да запазим информация за съответния метод – параметри, query strings и т.н.

Използва се по следния начин в базовия controller (прави се по този начин, за да може да извикаме атрибута хем с DI, хем без параметри)

Допълнително разполагаме с property AuditId, което показва Id на съответния одит запис, в случай че искаме да добавим допълнителна информация в тялото на метода.

 

Например по следния начин:

 

Debug на Clipper приложение

Clipper е популярен софтуер за разработка на DBase III ориентирани приложения от края на 80-те и 90-те години.

Наложи се да направя промени по едно такова приложение и в процеса научих някои неща, които могат да помогнат за в бъдеще (хе-хе-хе – Clipper и бъдеще в едно изречение!).

Като начало се оказа, че стандартно Clipper генерира p-Code – нещо като байткод, който се изпълнява на собствена виртуална машина.

Така че, за модифицирането на изпълнимия файл не трябва да се пишат ASM инструкции, а специфични Clipper p-Code инструкции.

Например JF (jump if false) e 1B, а JMP е 1E. Съответно лесно се променя кода, тъй като инструкциите са еднакъв размер ( по 1 байт)

Друго полезно нещо е, че приложението е 16 битово, съответно не работи под 64 битова OS. Решението е да се използва някакъв вид виртуална машина, като би трябвало и DosBOX да свърши работа в повечето случаи.

В случай, че започне да се появява грешка DOS Error 4, това обикновено означава, че File handles са изчерпани. Могат да се увеличат, като се редактира следния файл:

Полезни ресурси и инструменти:

Информация за Clipper (на руски) http://softclipper.net/soft/clipper/

Декомпилатор Valkyrie – много удобен, показва pCode-a на приложението. Turbo Vision интерфейс. http://softclipper.net/soft-skachat/dekompilyator-dlya-clipper-5-valkyrie-5.html

valkyrie5

Декомпилатор Rescue5 – генерира сорс кода на приложението и е полезен за бърза справка какво прави програмата. http://softclipper.net/soft-skachat/dekompilyator-dlya-clipper-5-rescue5.html

 

Update BIOS от Линукс машина

Файловете за обновяване на BIOS обикновено се разпространяват от производителите на дънни платки като изпълними файлове за DOS или Windows.

Е, ако на машината има само Линукс, за съжаление трябва да се прибегне до непопулярни мерки. Най-лесното, което открих е да се следват инструкциите от http://www.biosflash.com/e/bios-boot-cd.htm

Свалят се DOS файлове за BIOS-a от производителя и се добавят към drdos.img файла в папка boot_cd.

Нататък може да се прескочи CDBurnerXP и се използва EasyBoot (https://www.ezbsystems.com/easyboot/download.htm) като се замени някое от менютата например от run winpe.iso на run drdos.img.

При нужда може да се добави и още нещо.за да се оправдае цяло cd с данни :))

Безплатни (като безплатна бира) сайтове за stock изображения

Сайтове, които предлагат безплатни изображения (stock images) във висока резолюция и които могат да се изпозлват за всякакви (включително комерсиални) цели и са без attribution (няма изискване за обратен линк или друго):

  1. Pixabay https://pixabay.com
    Вероятно най-добрия сайт, на който съм попадал – над 570 000 изображения, добра търсачка и хубав интерфейс
  2. StockSnap – https://stocksnap.io
    Добра търсачка, добър (макар и не богат) избор от изображения
  3. Unsplash – https://unsplash.com
    Може да се използват за всякакви цели
  4. Pexels – https://pexels.com
    Според тях имат 5000 изображения и всеки месец добавят около 600
  5. Picjumbo – https://picjumbo.com
    Навигацията и търсенето не е много удобна
  6. FreeImages – http://www.freeimages.com/
    Много изображения, не съвсем удобно търсене
  7. Списък със сайтове – http://publicdomainarchive.com/free-stock-photos/
    Дълъг списък със сайтове за изображения

Извличане на сертификат и частен ключ от pfx

Вече съм писал относно инсталиране на сертификати тук и тук   но днес ми се наложи да извлека сертификата и частния ключ от pfx файл. Това се оказа също лесна задача:

За частния ключ:

За сертификата

Silverlight 5 full trust application in the browser

Silverlight има какво да предложи (все още), макар и все по-малко и все по-трудно. Едно от предимствата достъпни във версия 5, които може да се използва е връзка с хардуер/ COM/ native call в браузър. Отделен е въпроса “защо” и “кой” би искал да се направи по този начин. Във всеки случай, ако сте стигнали дотам има няколко gotchas, които е хубаво да се знаят.
За да имате достъп до файлова система, хардуер и т.н., applet-а е нужно да е с повишени права, което става от настройките на проекта : Require elevated trust when running in-browser. Всичко работи идеално, ако аплета се хоства в localhost или 127.0.0.1 – в момента, който се изпълнява в Internet/ Local Internet всичко изведнъж се скапва и се получава грешки от рода на

За да работи нормално и тук са необходими няколко стъпки:

  • аплетът трябва да е подписан (настройки на проекта – Signing)
  • горния сертификат трябва да присъства в Trusted Publishers на всички клиентски компютри (!!!)
  • ако е self-signed, то разбира се трябва да присъства и в Trusted Root authorities
  • в Registry на всяка клиентска машина е необходимо да се позволи изпълнението на аплети с повишени права в бразуър (ако се изпълнява out-of-browser това не е необходимо).

Необходимите ключове, които търпят промяна са

както е описано в MSDN.
Не измислих нищо по-добро от проверка дали аплета върви с повишени права с

и ако не – да прехвърля към страница с допълнителна информация как да се разреши проблема. А именно еднократно изпълнение на изпълним файл (по-добри идеи?), който променя настройките в Registry и инсталира нужните сертификати.

За инсталиране на сертификатите може да се използва например:

а за настройките в registry:

 

Как да обновим Desire HD (Android 2.3.5) до CM11 (Android 4.4.4)

HTC Desire HD е телефон от края на 2010 с 1 GHz процесор и 768 MB RAM. HTC отдавна спряха всякаква поддръжка и телефонът си остана с Gingerbread 2.3.5.

За радост телефонът се държи изненадващо добре с Android KitKat 4.4.4, който  е и оптимизиран за работа с устройства с по-малко RAM

За да се обнови софтуера до CM11 M8.1 unofficial (Android 4.4.4) са нужни няколко стъпки:

Подготовка:

  1. Компютър с инсталирани HTC USB drivers и USB 2.0 порт, препоръчително с Windows 7. Драйверите за 8/8.1 не са много надеждни, а USB 3.0 портовете не работят по някаква причина с този телефон
  2. USB кабел – най-добре оригиналния. Някои китайски кабели стават само за зареждане, но не и за data transfer
  3. Препоръчително е да работят добре бутоните за звука нагоре/ надолу 🙂
  4. Windroid инструмента от тук: http://forum.xda-developers.com/showthread.php?t=2499926

Отключване на bootloader-a

Всички HTC телефони са със заключен bootloader, но могат да се отключат чрез процедурата описана на http://www.htcdev.com/bootloader

Нов recovery software

Телефонът идва с ограничен recovery software (нещо средно между BIOS и Safe Mode), който е добре да се замени, за да се улеснят всички операции по инсталирането на нов ROM.

Най-лесно това се прави от Windroid като аз flash-нах с TWRP ( за радост автоматично изтегли версия 2.6)

Нов Kernel + ROM

Аз използвах този : http://forum.xda-developers.com/showthread.php?t=2533007 Използва модифициран CyanogenMod 11 M8.1 базиран на Android 4.4.4.

След изтегляне на файла, трябва да се модифицира update-binary или да се изпозлва по-нова версия на TWRP. Към момента на писане  нямаше по-нова официална версия на TWRP, затова просто модифицирах zip файла, както е описано в http://forum.xda-developers.com/showthread.php?t=2532300

След като се модифицира ZIP файла с ROM-a се използва Flash ROM функционалността на WinDroid и се следват инструкциите.

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

След свършване на операцията в TWRP трябва да се рестартира в recovery mode, за да качи Kernel-а през операцията Flash Kernel
boot.img се намира в главната папка на сваления Custom ROM

Restart и вече всичко би трябвало да е нормално и да се радвате на чисто нов и актуален Android 4.4.4

Има някои неща, които трябва да се конфигурират, за да заработи целия хардуер нормално, но затова в следващите post-ове

Oracle .NET 2 provider разработка под Visual Studio 2013

Така, ето какво е положението:

  • стар код от .NET 3.5
  • използва Oracle .NET 2 provider
  • DataSet-и
  • трябва да се подкара спешно, а има налично само VS 2013

Резултатът е: Exception of type System.Data.Design.InternalException was thrown при отваряне на dataset и при build на проекта.

Повечете предложения за решения се ограничаваха до това, че в xsd файла има директни референции към Oracle Connection String и съответно те причиняват проблем. Това, не беше случая при мене, макар и да имаше доста коментари по Интернет, че решава проблема.

Почти бях изпаднал в безизходица докато не стигнах до http://blogs.msdn.com/b/psssql/archive/2011/04/21/conversion-issues-moving-from-vs-2005-to-vs-2008.aspx. Макар и подобен проблем, пътят до решението беше описан методично и точно! InternalException в System.Data.Design може да се появи само в два случая:

  • Cannot find provider factory named {0}
  • More than one data row for provider named {0}

Аха! И двата имаха нещо общо с provider и то вероятно Oracle-ския. Нещата започнаха да се избистрят – ODP.NET беше инсталиран, но само за 2.0, а VS 2013 използва .NET 4.5 и съответно друг CLR и не може да го намери design time.

И наистина в C:\windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config има

и

Ако тези секции се преместят и в machine.config за .NET 4 всичко, донякъде изненадващо, върви точно.