CrashPlan: Zálohování síťových složek

Používám pro zálohování mimo jiné CrashPlan+, který odlévá určené soubory do svého cloudového uložiště včetně verzování. Na rozdíl od SkyDrive, Dropbox nebo Google Drive je toto plnohodnotná zálohovací služba, drobnou slabinou však je, že nepodporuje zálohování ze síťových složek, ale jenom z lokálních disků.

Dá se to naštěstí napravit jednoduchým trikem – přes symbolické linky z lokálního disku na síťové složky:

  1. Vytvořím si na disku zastřešující složku, dejme tomu D:\BackupLinks.
  2. Vytvořím do příslušné složky symbolické linky na síťové složky, které chci zálohovat:
    mklink /D FolderName \\ServerName\FolderName
    
  3. Přenastavím lokální službu CrashPlan Backup Service, aby běžel pod uživatelským účtem, který má přístupová práva na všechny zálohované soubory (lokální i síťové).
  4. Restartuju službu.
  5. Nastavím CrashPlan, aby zálohoval složku D:\BackupLinks a zkontroluju, že si soubory načte a začne sypat do uložiště.

…hotovo.

Outlook: Automatické vypnutí reminderu na příchozích meeting requestech

Můj kalendář je hodně plný a poslední, co bych chtěl, je připomínání každého jednotlivého meetingu (obzvláště ne v době, kdy si připomenutí na meeting-requestu nastavil organizátor schůzky). Remindery si nastavuji výjimečně a chci je mít na událostech, kde si to explicitně určím já.

Hledal jsem tedy způsob, jak automaticky na příchozích žádostech o schůzku automaticky vypínat připomenutí. Našel jsem VBA snippet, který to zařizuje. Protože ale nejsem žádný Outlook-developer, raději si poznamenám celý proces, jak to zprovoznit (návod dávám pro Outlook 2013, ale bude to všude podobné):

  1. V Outlooku dám Alt + F11 (nebo na ribbonu Developer volbu Visual Basic, pokud máte zapnutý).
  2. Ve stromu vlevo vyberu položku ThisOutlookSession (laicky si to představuju jako obdobu global.asax :-))
  3. Do okna pro kód dáme:
    Private WithEvents Items As Outlook.Items
    
    Private Sub Application_Startup()
      Dim Ns As Outlook.NameSpace
    
      Set Ns = Application.GetNamespace("MAPI")
      Set Items = Ns.GetDefaultFolder(olFolderInbox).Items
    End Sub
    
    Private Sub Items_ItemAdd(ByVal Item As Object)
      On Error Resume Next
      Dim Meet As Outlook.MeetingItem
      Dim Appt As Outlook.AppointmentItem
    
      If TypeOf Item Is Outlook.MeetingItem Then
        Set Meet = Item
    
        Meet.ReminderSet = False
        Meet.Save
    
        Set Appt = Meet.GetAssociatedAppointment(True)
    
        If Not Appt Is Nothing Then
          Appt.ReminderSet = False
          Appt.Save
        End If
      End If
    End Sub
    
  4. Skript je potřeba ještě podepsat. V menu Tools zvolíme Digital Signatures
  5. Tlačítko Choose a vybereme certifikát. Pokud nemáme žádný k dispozici, vytvoříme si jej snadno pomocí
    C:\Program Files\Microsoft Office\Office15
  6. Uložit.
  7. Restartovat Outlook.

Pokud by se Outlook vzpouzel spustit, tak outlook /safe a ladit dle vlastních dispozic. ;-)

Coded UI Tests: The playback failed to find the control with the given search properties.

Ve VS 2013 pomocí Coded UI Test Builderu nahrávám skript pro proklikání stránek.

Test se podaří vyrobit, ale při přehrávání dostávám výjimku:

Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException: The playback failed to find the control with the given search properties. Additional Details:
TechnologyName:  'Web'
ControlType:  'Hyperlink'
TagName:  'A'
Id:  ''
Name:  ''
Target:  ''
InnerText:  'Kanda Jiří'
 Failed to find any control that matched the search condition Id='' && Name='' && ControlType='Hyperlink' && Target='' && InnerText='Kanda Jiří' ---> System.Runtime.InteropServices.COMException: Volání součásti COM vrátilo chybu HRESULT E_FAIL.

Hraji si s vyrobeným kódem a zjišťuji, že problém se vyskytuje pouze tehdy, pokud se hledá pomocí podmínky na InnerText.

This.Xyz.SearchProperties[HtmlHyperlink.PropertyNames.InnerText] = "xyz";

Pokud je tato podmínka odstraněna, test začne fungovat.

Řešení, jak tento problém obejít, je neuvěřitelné a pro mě těžko pochopitelné. V PlaybackSettings je třeba nastavit vlastnost AlwaysSearchControls (což je nutné i pro další problém s Coded UI Testy) a navíc značně prodloužit DelayBetweenActions z výchozí hodnoty 100 ms.

Playback.PlaybackSettings.AlwaysSearchControls = true;
Playback.PlaybackSettings.DelayBetweenActions = 500;

Coded UI Tests: Another control is blocking the control. Please make the blocked control visible and retry the action…

Ve VS 2013 pomocí Coded UI Test Builderu nahrávám skript pro proklikání stránek na www.havit.cz. Test se podaří vyrobit, ale při přehrávání dostávám výjimku:

Microsoft.VisualStudio.TestTools.UITest.Extension.FailedToPerformActionOnBlockedControlException: Another control is blocking the control. Please make the blocked control visible and retry the action. Additional Details:
TechnologyName:  'Web'
ControlType:  'Hyperlink'
TagName:  'A'
Id:  ''
Name:  ''
Target:  ''
InnerText:  '…'
 ---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0xF004F003

Na internetu se tomuto problému věnují obsáhlé diskuse, většinou okolo VS 2012 a IE9/10. Většina doporučených řešení spočívá v odinstalaci IE10, odinstalaci patche KB2870699 nebo instalaci VS 2012 Update 4. Některé řešení většině zabírá.

My jsme však o verzi dále – VS 2013 a IE 11, kde žádné z předchozích řešení nefunguje. Chyba se shodně projevuje na šesti ze sedmi počítačů, nepůjde tedy o náhodný problém s jedním počítačem. Shodou náhod reinstaluji jeden starý stroj, zkouším tedy čistou instalaci (Windows 7, Internet Explorer 11, Visual Studio 2013, kompletní aktualizace Windows Update) a ověřuji, že problém se objevuje i zde.

Výjimka říká, že se nepodařilo na control kliknout, že je z nějakého důvodu blokovaný. Pokud zkusím zobrazit místo, kde se control nachází (metodou DrawHightlight() ), je místo označeno správně, takže se domnívám, že v hledání controlu by neměl být problém a mělo by jít skutečně o problém přehrávání. K mému překvapení zabírá řešení, které čistě náhodně zkouším – nastavení AlwaysSearchControls na true.

Playback.PlaybackSettings.AlwaysSearchControls = true;

SQL Server ignoruje DEFAULT_SCHEMA pro uživatele v roli sysadmin

SQL Books online (dnes vlastně TechNet nebo spíš už dokonce MSDN) jsou nekompromisní:

The value of DEFAULT_SCHEMA is ignored if the user is a member of the sysadmin fixed server role. All members of the sysadmin fixed server role have a default schema of dbo.

Primárně je samozřejmě špatně se na DEFAULT_SCHEMA spoléhat, nicméně při práci na starším projektu mě to překvapilo, když jsem dal uživateli sysadmin roli a najednou mi to přestalo nacházet objekty v DB.

Word se ptá na ukládání změn v šabloně, může za to Send to Bluetooth add-in od Intelu

Na novém notebooku se mě Word 2013 při každém zavírání souboru založeném na vlastní šabloně ptá, jestli chci uložit změny do šablony.

image

Ptá se dokonce dvakrát. Ptá se, i když jenom poklepáním na náš DOTX založím nový soubor, vůbec nic neudělám a hned ho chci zavřít.

Ukázalo se, že se přestane ptát, pokud vypnu “Send to Bluetooth” COM-Add-In od Intelu (ani nevím, k čemu by mi byl).

Word > Files > Options > Add-Ins:

image

dole Manage: COM Add-ins, Go…

image

a vypnout “Send to Bluetooth”.

…a Word už se na nic neptá.

Domain Catch-all

Pro vývojářské a testovací účely máme často scénáře, že je potřeba pracovat s větším množstvím aplikačních uživatelských účtů a k nim přidruženým emailovým adresám. Samozřejmě, že jsme kvůli tomu nezakládali stovky emailových schránek na našem Exchange, ale používali jsme pravidlo, které všechny emaily došlé na adresu odpovídající patternu *@devmail.havit.cz přesměrovalo do předem určené schránky. Minulý čas je na místě, jelikož od migrace na verzi Exchange 2013, nyní už s CU3, stále ještě dokáže překvapit co za funkčnost zmizelo, nebo co nefunguje jak má.

Po tom co se objevilo spoustu nedoručitelných emailů které dříve byly korektně zpracovávané, jsem si naplánoval hodinku na vyřešení problému, s tím že pouze něco lehce dokonfiguruji a bude hotovo.

Začal jsem kontrolou konfigurace našeho SPAM filtering serveru, kde běží produkt ORF (který mohu s dobrým svědomím všem doporučit – používáme léta k naší plné spokojenosti). Bylo potřeba do nastavení přidat výjimku, jelikož jedno z aktivních pravidel a jeho výchozí nastavení nebylo kompatibilní s naším záměrem. Jedná se o Recipient validation které kontroluje zdali v organizaci existuje mailbox s daným emailem. Pokud neexistuje, tak ukončuje okamžitě SMTP relaci a nedochází k dalšímu zpracování emailu.

ORF

Při migraci z Exchange 2010 na verzi 2013 se k mé radosti původní pravidlo (Transport rule)přeneslo a zachovalo si svoje nastavení. Samotné nastavení v prostředí verze 2013 vypadá takto:

ecp

Ve verzi 2010 jsme měli pravidlo postavené na regulárním výrazu – adresa příjemce musela splňovat určitý pattern. Jak vytvářet regulární výrazy ve verzi 10: http://technet.microsoft.com/en-us/library/aa997187(v=exchg.141).aspx

Přestože bylo pravidlo aktivní, všechny emaily zaslané do domény devmail.havit.cz vracely jako nedoručené s následující hláškou: domaincatchall@devmail.havit.cz
Remote Server  returned ‚550 5.1.1 RESOLVER.ADR.RecipNotFound; not found‘. V tušení možné zrady zde jsem začal pátrat v dokumentaci pro verzi 2013 – ta nyní plně podporuje Microsoft.NET Framework regular expression (regex). Trochu jsem si upravil předchozí regulární výraz na ^[A-Za-z0-9_-]*@devmail.havit.cz$. Nastavení pravidla je vidět na následujícím obrázku:

transportrule

Nicméně kýžený výsledek se nekonal. Při dalších pokusech jsem ještě narazil na zajímavou možnost (buď jsem ji ve verzi 10 přehlédl, nebo je ve verzi 2013 nová) – to co se snažím pracně nastavit přes regulární výraz jde nyní jednodušeji přímo přes předpřipravenou podmínku:

transportrule2

Ani to mě však nedovedlo k cíli. Další cesta vedla přes pokusy o nastavení Antispam protection – Recipient filtering přímo na Exchange. Toto nejde nastavit v UI, ale je potřeba provést přes EMS(Exchange management shell) (více k Antispam konfiguraci: http://technet.microsoft.com/en-us/library/bb125187(v=exchg.150).aspx)

  • Set-RecipientFilterConfig -Enabled $false
  • pro jistotu ještě Set-RecipientFilterConfig -RecipientValidationEnabled $false

Ani toto však bohužel nevedlo k cíli. Byl jsem už poměrně rozladěný a tak jsem googlil co to šlo, až jsem narazil na podobný problém který byl na Microsoft fóru vyřešen takto:

Hi Frank – Thanks for checking in.  At this point I’ve marked it up as „can’t be done“ on exchange 2013.

Dále jsem našel ještě nějaké diskuze vedené v podobném duchu , případně vysvětlování proč tuto funkci uživatelé vlastně nepotřebují (třeba zde).

Další cesta kterou se ale vydat moc nechci, je řešení založené na doinstalování Domain catch-all agenta (https://github.com/Pro/exchange-catchall), kdoví co všechno co dosud fungovalo by se tím rozbilo. Zbývá tedy čekat na balíček s CU4 , nebo vyřešit problém nějakým workaroundem.

Toto je právě ten typ problémů, kvůli kterým přechod na Exchange 2013 zatím nemohu doporučit.

Update: Problém se asi po roce podařilo vyřešit viz Domain Catch-all – pokračování

Vybírám notebooka IV. – Dorazil T440s, trochu jiný než jsem čekal

Někdy před měsícem jsem si objednal Lenovo ThinkPad T440s. Dnes notebook dorazil.

Objednával jsem ho s popisem „LENOVO TP T440s černý 20AQ0066 14″ 1920x1080m Touch,i7-4600U@2.1G,8GB,512SSD,iVGA,noDVD,BT,FP,3G,2x3c,W7P+W8P+3r on-site“, což se dnes ukázalo jako nesmyslná kombinace P/N a popisku (která se však vyskytuje v českých shopech úplně všude, resp. dnes si zřejmě opravila popisek Alza).

Dnes mi dorazil kus s označením modelu „20AQ-0066MC“, což se od výše uvedeného (očekávaného) liší zejména:

  • nemá to Touch display
  • má to 12 GB RAM, nikoliv 8 GB
  • vypadá to, že to má SmartCard reader

Asi si ho nechám, i když je to něco jiného, než jsem očekával. Touch jsem sice nakonec chtěl, ale víceméně jsem byl rozhodování tehdy ušetřen, protože všechny (oba) modely s i7, co se v objednatelné nabídce objevily, byly Touch.

Trochu jsem o Touch pochyboval, protože

  • verze Touch je tlustší  – o trochu masivnější víko s displayem
  • verze Touch je těžší – asi o 200g
  • verze Touch má prý horší koukatelnost displaye (na sluníčku prý bída, hodně odráží, atp.)
  • naopak se mi líbilo překrytí Touch displaye Gorilla-glass přes celé víko, takže by se to asi lépe čistilo
  • Touch jsem chtěl nakonec tak nějak kvůli Win8.1 a s výhledem, že notebook bude Kinder-friendly, matlání prsty po display mi však vždy přišlo trochu divné (i když třeba s iPadem nebo iPhonem mi to přijde naprosto přirozené),

…takže nakonec mi ani tak nemrzí, že to Touch nemá

Že to má více paměti, než jsem chtěl, asi přežiju. Bude to žrát více baterky a nemám pro ní zatím využití.

SmartCard reader nevím, k čemu mi bude.

První dojmy

Prakticky hned jsem disk kompletně smazal a pustil se do instalace Windows 8.1 (můj druhý pokus přejít z Win7 od doby, co jsem zhnuseně po třech dnech mazal Windows 8 RC).

  • TouchPad sice dělá rámus a drnčí, ale mám pocit, že si na něj zvyknu. Na stupnici od 0 do 100, kde 0 je X230 (fakt nepoužitelný) a 100 je MacBook Air, bych mu dal asi 75 bodů.
  • Výše posazená klávesnice mi zatím dělá trochu problémy, zadrhávám hodinkami na levé ruce o přední hranu notebooku.
  • Klávesa Esc nějak divně cvaká (hned v první části zdvihu), budu to pozorovat a zkoumat.
  • Váhově srovnatelný s X230, co jsem měl dosud.
  • Budu si muset zvyknout na FullHD a tím, jak na něm Windows velikostně škálují. Jsa zvyklý na ostrý obraz nativního rozlišení mám nyní z klasických aplikací divný pocit. Snad se to srovná. Každopádně nechat si nastavení na „Smaller“ (100%) vypadá nereálně, všechno by bylo nečitelně mrňavé.
  • Největší boj pro mě evidentně budou Windows 8.1 oproti Windows 7. Těch pár hodin pokusů o nějaké nastavení (a to jsem se nepustil ještě do instalací SW) mě zatím optimizmem nenabíjí.
  • Jinak oproti Win7 je to s drivery a tooly Lenovo pro Win8.1 bída. Ještě neumím posoudit, jak kvalitně to dokážou pokrýt Windowsy sami (postrádám hlavně Power Manager)

…dám tomu pár dní praxe a zkusím zas hodit nějaké dojmy do placu.

Řízení SW projektů a vztahů se zákazníky – slides a záznam [MS Fest Ostrava 2013]

Slides z mé nedělní přednášky pro MS Fest Ostrava 2013 (inovovaná podoba vystoupení pro MS Fest Praha 2013 před měsícem nebo MS Fest Brno 2013 před dvěma):

Z přednášky jsem pořizoval záznam, který najdete na našem HAVIT YouTube Channelu:

WatiN: Could not load file or assembly Interop.SHDocVw

Pokud by vás WatiN po instalaci z NuGetu obšťastnil hláškou ve stylu

Unhandled Exception: System.IO.FileLoadException: Could not load file or assembl y ‚Interop.SHDocVw, Version=1.1.0.0, Culture=neutral, PublicKeyToken=db7cfd3acb5 ad44e‘ or one of its dependencies. The located assembly’s manifest definition do es not match the assembly reference. (Exception from HRESULT: 0x80131040) File name: ‚Interop.SHDocVw, Version=1.1.0.0, Culture=neutral, PublicKeyToken=db

…pak je potřeba na referenci Interop.SHDocVw nastavit v Properties volbu „Embed Interop Types“ na false:

imageimage

Jinak si zkouším hrát s WatiN-em. Máte s tím někdo zkušenosti? Výhody/nevýhody proti Visual Studio Coded UI Test (mimo licenčních)?