Luc

Csőhalmadár!

A .net runtime optimization service lassítja a szervert

Egy MVC framework patch és több honlapot is érintő javítás után az IIS nagyon lassan szolgálta ki a kéréseket. A Task Manager-ben észrevettem, hogy a CPU terhelése 99% körül mozog és a. net runtime optimization service eszi a CPU idő legnagyobb részét. Pontosabban mindig annyit, amennyi épp szabad lenne. Az IT crowd féle megoldás nem hozott eredményt, viszont a http://support2.microsoft.com/kb/2571181/en-us cikk igen. Röviden:
Az ngen.exe executequeueditems parancs kiadása utáni újraindítás megoldja a problémát. Az ngen.exe a v4.0 framework könyvtárában van.

MS-SQL össze tábla törlése

Az aktuális adatbázishoz tartozó összes tábla törlése: EXEC sp_MSforeachtable @command1 = "DROP TABLE ?" A system táblákat nem bántja. Ha van reláció a táblák között, akkor esetleg többször is le kell futtatnunk.

MS-SQLelsődleges kulcs újrakezdése, RESEED

Egy tábla kövekező kiosztandó azonosítójának megváltoztatása:

DBCC CHECKIDENT (táblaneve, reseed, 42)

Ezzel az épp aktuálisan kiosztott azonosítót változtatjuk meg, így ha 1-ről szeretnénk újrakezdeni az azonosítók kiosztását, akkor a harmadik paraméter 0 legyen.

Forrás: http://blog.sqlauthority.com/2007/03/15/sql-server-dbcc-reseed-table-identity-value-reset-table-identity/

Google drive-ra feltöltött dokumentumok verziókövetése

Akikkel előfordult már, hogy egy dokumentum sokadik verziójától már nem látta át a saját maga kialakította rendet, azoknak jól jöhet az, hogy a google drive-on a régi állományainkat az újak mögé rejthetjük.* A verziókezelés lehetővé teszi, hogy a korábbi munkaverzióink ne legyenek útban, de elérjük őket, ha mégis szükségünk lenne rájuk a későbbiekben.

Bármelyik feltöltött állományon jobb gombot nyomva válasszuk a "Verziók kezelése..." menüpontot.

Ezután válasszuk az új verzió feltöltése linket, és jelöljük ki az új feltöltenivalót.

A jobb szélső X-szel lehet törölni. A jelölőnégyzet arra jó, hogy ha bekapcsoljuk, akkor megmaradnak a korábbi verziók is és foglalják a helyet. Ha pedig kikapcsoljuk, akkor az állomány mérete nem számít bele a tárhelyünkbe, viszont ebben az esetben 30 nap, vagy a századik verzió feltöltése után automatikusan törlődnek a régi változatok. A bal oldali linkekre kattintva letölthetjük a korábbi változatokat.

Erre a verziókezelésre nincs lehetőség a drive-on létrehozott dokumentumoknál. Ott a "Fájl" menü "Módosítási előzmények megtekintése" menüpontja áll rendelkezésünkre. Polipkezűeknek ez elérhető a CTRL+ALT+SHIFT+G kombinációval is. Itt egyébként láthatjuk a módosításokat is kiemelve, ha kiválasztjuk valamelyik verziót.

* Így volt a legegyszerűbb megfogalmazni és egyébként is így látszik, még ha nem is ez történik valójában.

DKIM és SPF egyszerűen

A következő leírást szándékosan nem szakmai nyelvezettel írtam, ezért kicsit pontatlan lehet, de áttekintésre még megfelel. Akit pontosabban érdekelnek a technikai részletek, annak ajánlom a lenti linkek megtekintését.

Az e-mail küldéséért felelős rendszer (SMTP) lehetővé teszi, hogy bármilyen számítógépről bárki nevében lehessen levelet küldeni. Sajnos vannak, akik ezt kihasználják kéretlen reklámleveleket kiküldésére. Ennek kivédésére szolgál az SPF és a DKIM. Mindkét technika lehetővé teszi annak eldöntését, hogy a kapott e-mail olyan szerverről jön, ami jogosult a küldésre.

DKIM: Ez a technológia a levélben elhelyezett digitális aláírás és a szerveren elérhető nyilvános aláírás összevetésével állapítja meg, hogy a küldésre jogosult szerver, vagy valami csaló gépéről érkezett-e a levél. Fontos, hogy ez nem a feladó személy, hanem a szerver digitális aláírása.

SPF: Ez tulajdonképpen egy lista a küldésre jogosult rendszerben arról, hogy milyen IP címekről nyilvánítjuk érvényesnek a kiküldött leveleket. Itt a fogadó levelezőszerver megnézi, hogy ahonnan kapta a levelet, az szerepel-e a jogosult küldők listájában.

A fogadó szerver beállításaitól függ, hogy ha valamelyik ellenőrzésen elbukik egy beérkező levél, akkor az a SPAM-ba került, vagy esetleg azonnal törlődik. Ezek általában elég szigorú beállítások és a felhasználóknak nincs lehetőségük ezen módosítani, de nem is ajánlott.

Tanúsítvány konvertálás DER -> PFX

Ha DER formátumban kapunk UCC tanúsítványt, akkor azt IIS esetén abban a formátumban akár a hajunkra is kenhetjük. A következőkre lesz szükségünk:
  • a tanúsítváyn igényléskor létrehozott privát kulcsra, legyen a neve mondjuk private.key
  • a tanúsítványszolgáltató nyilvános kulcsára, legyen a neve mondjuk public.key
  • a tanúsítványszolgáltatótól kapott vadi új tanúsítványra, legyen a neve mondjuk certificate.cer
OpenSSL-re lesz szükségünk és a következő két parancsra:
openssl x509 -inform der -in certificate.cer -out certificate.pem

openssl pkcs12 -export -out certificate.pfx -inkey private.key -in certificate.pem -certfile public.key

FileSystemWatch​­er alkönyvtár figyelése

Mi a különbség a két kódrészlet között?
            importWatcher.IncludeSubdirectories = true;
            importWatcher.Path = ConfigurationManager.AppSettings["ImportFolder"];
            importWatcher.Path = ConfigurationManager.AppSettings["ImportFolder"];
            importWatcher.IncludeSubdirectories = true;
Az, hogy az első leginkább csúnya szavakat generál. Addig ne nagyon próbálkozzunk alkönyvtárfigyelést beállítani, amíg nincs beállítva maga az útvonal, amit figyeltetni szeretnénk.

T-SQL és a reguláris kifejezések

T-SQL-ben is használhatjuk a reguláris kifejezéseket, csak némi hegesztést igényel a dolog.
 Hozzunk létre egy Class Library-t, valami ilyesmi tartalommal:
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;

namespace LunirSqlExtensions
{
    
    public class SqlRegex
    {
        [SqlFunction(IsDeterministic=true, IsPrecise=true)]
        public static bool IsMatch(string inputfield, string pattern)
        {
            return Regex.IsMatch(inputfield, pattern);
        }
    }
}
Fontos, hogy 3.5 framework-re buildeljünk, különben az SQL szerver beszól, legalább is a 2008 R2. Ebből lesz egy DLL, amit használni tudunk SQL-ből, némi előkészítés után:
sp_configure 'clr enabled', 1
go
reconfigure
go
create ASSEMBLY LunirSqlExtensions from 'x:\SqlExt\LunirSqlExtensions.dll' with PERMISSION_SET = SAFE
go
create function [dbo].[LunirRegexIsMatch] (@inputfield [nvarchar](MAX), @pattern [nvarchar](255)) RETURNS [BIT] with execute as caller AS EXTERNAL NAME LunirSqlExtensions.[LunirSqlExtensions.SqlRegex].[IsMatch]
go
Ez pedig a használata:
select dbo.LunirRegexIsMatch('a','a')
Tudom, hogy nem a legvilágrengetőbb az 'a' stringen alkalmazni az 'a' reguláris kifejezést, de példának megfelel :)

Teljes hónap lekérdezése

Ha egy táblából szeretnénk egy teljes hónap eseményeit megszerezni, de úgy, hogy az eseménytelen napok is kerüljenek kilistázásra, arra itt egy módszer:
with nums (i) as ( select i = 0 union all select i + 1 from nums where i < 100 )
    select a.dte, COUNT (d.[Date])
    from
        (select dte = dateadd(dd,nums.i,@StartDate) from nums) a
    left  join
        [valamilyentabla] d
    on
        DATEADD(DAY, 0, DATEDIFF(DAY, 0, d.[Date])) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, a.dte))
    where a.dte <= @EndDate
    group by a.dte
    order by a.dte
Természetesen ez nem csak egyetlen hónapra alkalmas, illetve nem csak napokra, hanem akár órákra, vagy hónapokra is lehet bontani a kívánt időszakot. A JOIN feltételben ekkor nem DAY intervallumot kell használni, hanem azt, ami éppen tetszik, YEAR, MINUTE, akármi.
A megoldás ötletét innen vettem: http://www.sqlteam.com/

Visual Studio 2010 és a dezertőr solution node

Ha a Solution explorerben nem látszik a solution node, csak egyetlen egy árva projekt, akkor itt lehet bekapcsolni a solution node megjelenítését: Tools - Options - Projects and solutions és kapcsoljuk be az Always show solution jelölőnégyzetet.