All posts by Jonas

JonikaBot – En liten uppdatering

Nu har jag lagt till några fler funktioner till min bot.

  • Ny hashtag #jonikabotfbkvit om man vill ha en svart puck med vitt FBK-emblem på sin profilbild

  • Nu kan man även bifoga en bild i sin tweet om man vill ha ett emblem på den istället för sin nuvarande profilbild.

  • Några små justeringar av positionen av emblemen, så att inga delar ska klippas bort när Twitter rundar bilden.

Har ni fler idéer om funktioner eller tycker någon funktion måste ändras så säg gärna till, jag är öppen för det mesta 🙂

JonikaBot – Möt min Twitterbot

Lite då och får man lust att hitta på något kul projekt hemma, något annorlunda än det man gör dagligen på jobbet. Men ofta är det väldigt svårt att komma på bra idéer, och utan bra idéer blir det ofta tråkigt att lägga tid på saker.

Men plötsligt kom jag på vad jag ville bygga, en Twitterbot! Det dök genast upp den hel del idéer på vad den ska göra (men jag avslöjar bara dom som är klara just nu 🙂 ). Min första idé var en “Smurfalizer”. Det har ju funnits en som försmurfar webbsidor i flera år, så varför inte göra det samma med tweets? Just nu används en ordlista med knappt 400 verb. Det är dessutom viss slump i mina beräkningar, så inte alla verb översätts. Om någon vill testa den, se till att ha gott om verb i texten. Tagga en tweet med #jonikabotsmurf, så bör det komma ett svar inom ca 3 minuter. Så här kan ett svar se ut:

Den andra idén var att kombinera mitt intresse för programmering med mitt intresse för hockey, och i synnerhet Färjestad.  Jag har en hel del idéer inom ämnet, men den första funktionen är att ta den tweetande användarens profilbild i storleken 400x400px, lägga på ett Färjestademblem i nedre vänstra hörnet och skicka tillbaka bilden i en tweet. Om någon känner ett behov av en snyggare profilbild så skicka en tweet med vilket innehåll som helst och taga den med #jonikabotfbk

Boten kommer säkert byggas på med funktioner, så stay tuned 🙂

När boten väl var i hyfsat skick insåg jag nästa bekymmer: Var ska jag köra den? Tiden då hemmet kryllar av servrar och datorer är förbi, och nu för tiden är det mest paddor och telefoner i huset, förutom iMac:en (som jag för övrigt utvecklar på hemma). En tur till NetOnNet gjorde mig en Raspberry Pi 3 rikare, och efter 1 knapp timma var Raspbian Jessie Lite installerat, och burken uppkopplad på Wifi. Eftersom jag lever med C# så föll valet på Mono, vilket var lätt att installera även på Raspberry.

OBS! Boten är högst experimentell och innehåller säker en del buggar, så kommer det inget svar kan den antingen vara nere för tillfället, eller så har du lyckats hitta en bugg 🙂

Så här ser den extremt snygga konsolen ut:

Recycle bin won’t empty when using EPiServer Relate

A few days ago i found i strange behaviour on our intranet site. The waste basket didn’t empty! The scheduled job ran just fine, but the log always contained the same message: 0 content items were deleted from recycle bin

Thats a new one! So where to look? The logs are, off course, a great place to start looking for errors. The first line that cought my attention was this one: ERROR EPiServer.Util.EmptyWastebasketJob: 17.3.1 Error when trying to delete content from recycle bin

At first, i thought it was some kind of permission issue. The site runs Windows authentication, and that has some side effects, but than i found another line in the log: EPiServer.Core.TypeMismatchException: Content with id ‘<xxxxx>’ is of type ‘Castle.Proxies.FormContainerBlockProxy’ which does not inherit required type ‘EPiServer.Core.PageData’

and than another similar line: EPiServer.Core.TypeMismatchException: Content with id ‘29990’ is of type ‘EPiServer.Core.ContentFolder’ which does not inherit required type ‘EPiServer.Core.PageData’

I couldn’t believe there’s still code in EPiServer that requires PageData!! And, off couse, there wasn’t. BUT! EPiServer Relate is another story. The CmsIntegrationModule had a few fingers in that cookie jar!

To be specific, the method RemovePageEntity, which deletes corresponding page entities when a page is deleted:

It first, it looks like the code really do try to avoid null references by checking if PageEventArgs are null and than if PageEventArgs.PageLink is null, but: when you have a ContentFolder or FormContiner in the recycle bin, both of them are set. The problem is that PageEventArgs.Page is null.

So, just throw in one more null check for e.Page, like this:

And you also need to handle errors in GetClubId. I took the easy way and put a try around the code.

Now the recycle bin should empty just fine!

How i automate website creation with Powershell

If you, like me, create lots and lots of websites almost every day you probably noticed that a lot of the things you do are repetitive.

I have a lot of rules that almost all my websites follow.

  • I name the pool, the site and the folder the same (like site.domain.com)
  • I always add a binding following the pattern 17000 + site id, so a site with site id 13 has a binding for localhost:17013
  • I set idle time-out to 0
  • I add a scheduled recycle at 02:00 (for load balanced environments att set it at 03:00 for the other node)
  • I always create a scheduled job to take care of log rotation

To avoid making misstakes, and to make sure it gets done the same way every time, i use this Powershell. It’s not perfect, but it works for me, and it does exactly what i need it to.

In the end of the script, where the scheduled job is created, i use a little application called LogRotate which i may publish on the internet. In the mean time, you can use it as a way to add a scheduled task.

Maybe it will work for you as well, or maybe you can pick the parts you need. Enjoy!

 

SQL-Server service won’t start after enabling SSL

Maybe you followed this guide to enable SSL for your SQL-server instance, but when you thought you were ready, the service won’t start.

What to do next?

A good guess is that your SQL-Server error log tells you “Unable to load user-specified certificate [Cert Hash(sha1) “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”]. The server will not accept a connection. You should verify that the certificate is correctly installed. See “Configuring Certificate for Use by SSL” in Books Online.

You can find out by logging in to SQL Server Management Studio and expand your server->Management , right-click SQL Server Logs and select View->SQL Server Log. When the Log File Viewer appears, press Filter, under Message contains text enter SSL och check the box Apply filter.

If the line above appears in your log, my guess is that your SQL-Server service account do not have the right to access the certificates keys.

And the solution?

First of all, you need to find out what account runs you SQL-Server service. It probably should be a domain account, but in my case (lab environment) i used NT Service\MSSQLSERVER.

Then, open up MMC and add the Certificate snap-in. (You probably know how, but otherwise it’s in the guide above on how to enable SSL). Locate your certificate, right-click and select All Tasks->Manage Private Keys. Probably,, your SQL-Server service account is missing in that list. If so, click add and locate your service account. If you, like me, are using NT Service\MSSQLSERVER, just select your local server as Location and paste NT Service\MSSQLSERVER into the textbox. Then click OK. In the checkboxes below the accounts, make sure to give the service account the read permission.

Now, go back to Sql Server Configuration Manager and try to start the service again. It should work now!