Copy–Paste a nechtěné mezery ve formulářích

Ve formulářovém poli chceme po uživateli e-mailovou adresu nebo třeba nový login name – jaké je jeho rozčarování, když po vložení adresy pomocí CTRL-V (zkopírované např. z Excelu), aplikace hlásí
nevalidní údaj.
Na vině jsou nechtěné mezery připojené za (a někdy i před) adresu.
Nechtěné mezery nám pomůže odstranit funkce aktivovaná událostí input -> na oninput řetězec trimujeme.
Provedeme to pouze, pokud se otrimovaný a původní řetězec liší (tj. je co trimovat) – pokud bychom to dělali bez této podmínky, tak vždy, když by uživatel ručně vepsal nějaký znak, skočil by mu kurzor v políčku na konec pole (i tehdy, pokud by něco editoval uprostřed textu).

if (formField.value != formField.value.trim())
{
    formField.value = formField.value.trim();
}

Pro ASP.NET si můžeme vytvořit takovýto skin:

<asp:TextBox SkinID="TrimOnInput" oninput="if (this.value!=this.value.trim()) {this.value=this.value.trim();};" runat="server" /> 

Funkce se nehodí pro pole, která mají obsahovat mezeru mezi slovy (např. „Jan Novák“) – i když takové celé jméno lze do pole vložit pomocí CTRL-C, zcela určitě nebude možné jméno pohodlně napsat – pole se totiž chová tak, že na stisk mezerníku za slovem nereaguje.

Azure WebSites – rozcestník pro počáteční orientaci

Nejprve jsem myslel, že to dám k nám na interní wiki, ale mohlo by se to hodit i dalším…

Domain Catch-all – pokračování

Pár měsíců nazpět jsem si tu zoufal (Domain Catch-all) při neúspěšných pokusech o nastavení doménového koše pro jednu z našich domén, kterou používáme na příjem testovacích emailů, které během vývoje produkují naše aplikace. Cílem bylo aby jakýkoliv email který je odeslán na emailovou adresu *@devmail.havit.cz došel do konkrétní schránky. Tenkrát se ještě nezadařilo, neboť Exchange tvrdošíjně odmítal přijmout jakékoliv zprávy určené uživatelům které neznal a pravidlo se tak nemohlo uplatnit. To už je ale minulostí, problém se podařilo vyřešit.

Stačilo nastavit v menu mail flow v záložce accepted domains pro danou doménu s pravidlem Domain cach all volbu Internal Relay: Email is delivered to recipients in this Exchange organization or relayed to an email server at another physical or logical location.

Nastavení accepted domains pro Domain catch all pravidlo

Nastavení accepted domains pro Domain catch all pravidlo

Od té doby funguje všechno jak má. Naštěstí nemusíme řešit situaci kdybychom chtěli podobné chování pro naši regulérní doménu havit.cz.

Stránky která se tématu věnuje do větší hloubky: Catch-All for MS Exchange 2013 SP1 on specific Authoritative Domains – Server Fault

Automatické ukončování odpojených RDP session po určité době

Na Terminal Services lze nastavit, aby se odpojené (disconnected) session automaticky ukončily:

  1. Control Panel ~ Administrative Tools
    ~ Terminal Services ~ Terminal Services Configuration (do Windows Server 2008).
    ~ Remote Desktop Services ~ Remote Desktop Session Host Configuration (od Windows Server 2008 R2)
  2. Right-Click na RDP-Tcp + Properties (nebo double-click, je to default akce).
  3. Záložka Session, volba End a disconnected session:image

Pozor, že se jedná opravdu o tvrdé nevybírané ukončení session, takže se to nebude mazat s žádnou neuloženou rozpracovanou úlohou, běžícím Profilerem/Debuggerem/Fiddlerem nebo čímkoliv podobným.

Windows Explorer: Založení/přejmenování souboru s názvem začínajícím tečkou

Pokud potřebujete vytvořit nebo přejmenovat ve Windows Exploreru soubor/složku na jméno, které začíná tečkou (.tfignore, .svn, …), funguje jednoduchý trik – přidejte ještě jednu tečku na konec jména(např. „.tfignore.“). Windows Explorer to překousne a záměru je dosaženo.

…starý trik, ale občas si ho musím připomenout.

sp_MSForeachDB – Vykonání SQL příkazů pro každou DB

Microsoft SQL Server má nedokumentovanou uloženou proceduru, která usnadní vykonání stejného SQL příkazu pro více DB. Např. nalezení CLR assemblies přes všechny DB:

sp_MSForeachDB 'use [?]; SELECT DB_NAME(), * FROM sys.assemblies WHERE name LIKE ''Havit%'';'

Pokud chceme příkaz vykonat s výjimkou některých DB, můžeme použít IF:

sp_MSForeach 'IF ? NOT IN (''master'', ''msdb'', ''tempdb'', ''model'') USE [?]; -- atp'

(Pozor, že pokud dáte pod IF jenom USE, tak se Vám následný příkaz vykoná pro aktuální DB několikrát, protože neproběhne jenom přepnutí USE na jinou DB.)

HTTP Redirect nastavovaný z IIS Manageru umí zavařit

Dneska ráno nás v práci uvítal critical ticket v HelpDesku, jednomu ze zákazníků „nešel web a všechno, co po přihlášení zkusil, vedlo na homepage“. Hned se nám spojilo, že to je web, na který kolega nastavoval přesměrování HTTP requestů na HTTPS a zkoušel si různé způsoby, jak to udělat.

Jeden z testů, které udělal, byl přes <httpRedirect> (HTTP Redirection). Pak od něj ale upustil a redirect nastavený přes IIS Manager zase vypnul.

Souhra okolností chtěla, aby toto zapnutí a vypnutí způsobilo poměrně velký problém.

Po IIS Manageru zůstalo v hlavním ~/web.configu webu toto:

<system.webServer>
		<httpRedirect enabled="false" destination="https://chester.xerox.cz" httpResponseStatus="Permanent" />
</system.webServer>

To by samo o sobě nevadilo. Peklo však nastalo v okamžiku, kdy se to potkalo s web.config soubory v podsložkách, v nichž byla různá specifická přesměrování od vývojářů:

<system.webServer>
		<httpRedirect enabled="true" exactDestination="true">
			<add wildcard="/Old-URL.aspx" destination="New-URL.aspx"/>
			...
		</httpRedirect>
</system.webServer>

Když se to celé sečetlo, tak ve všech takových podsložkách se reaktivoval disablovaný redirect z rootového web.configu a veškeré requesty na resources v dané složce přesměrovával.

…další důvod proč nemám rád, když IIS Manager modifikuje web.config. Hlavním je ten, že při nasazování chci web.config přepisovat vždy celý novou verzí a jakékoliv production-specific volby z něj mít vyextrahovány třeba pomocí atributu configSource.

Trvalá deaktivace klávesy CapsLock

…další zbytečný čudlík, který nepřináší nic užitečného :-)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,00,00,3a,00,00,00,00,00

Vypnutí animací v Office

Další z množiny tweaků, které na svém počítači aplikuji a nebaví mě to pokaždé hledat:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Graphics]
&quot;DisableAnimations&quot;=dword:00000001

…v novějších verzích Office to samozřejmě bude potřeba upravit.

Jak zaregistrovat příkaz pro kontextové menu Windows Exploreru (např. Notepad2)

Řeším to tak akorát v četnosti, kdy právě zapomenu, jak se to přesně dělá. Tedy pro připomenutí, stačí do registry přidat:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Notepad2]

[HKEY_CLASSES_ROOT\*\shell\Notepad2\command]
@="\"C:\\Program Files\\Notepad2\\Notepad2.exe\" \"%1\""

…název klíče odpovídá textu položky v menu.

Připravený soubor: Notepad2 Shell Context Menu.reg