RSS Feed!

About me

I am a business intelligence developer working at Bizware since August 2015. In this blog I will present code samples, primarilly in tsql but also findings in all other parts of the Microsoft BI-stack.


Disclaimer: All code should be considered as "as-is", i.e. badly tested and not working until extensive testing have been made by anyone reading the code. :)


Happy coding!

Archive for the ‘Uncategorized’ Category

Documentabler – A stand alone t-sql mini light-weight source code storage system

Sunday, April 1st, 2012

Hi!

I’ve never been especially fond of source code systems. There’s no doubt that it is a tricky art of developing a suitable source code storage solution for many different reasons (which I won’t rant about here, you could probably google it easily). I’ve been in touch with three major ones, namely tortoise svn, sourcesafe 2005/2008 and TFS.

Now, being a business intelligence developer in t-sql, there are certain problems regarding development in test environments (test databases that is) when it comes to versioning. If you develop something with other collegues it is very easy to not be in synch with each other. If there are 2 persons developing on the same sql instance, then it’s quite easy to understand what the other one is up to. But add 1 more, and problems start to arise. If you’re not in the same location (e.g. if your collegues are home sick), things get even more messier. When that person comes back and sees that his entire work for the past week has been overwritten and hasn’t been checked in, this could mean that hours dissapears and coding efficency goes down. So what are you supposed to do with half finished code? If you check it in, someone might think the code is fine. If you put it on your laptop, you might forget about it.

I’ve been thinking about this off and on, and this weekend I started coding. My idea is that some great stuff must be stored at the server, right? The ones called INFORMATION_SCHEMA and sys-schema? How about doing a mini source code system for the server with information from these schemas? I started building a prototype, using some interesting tables found in INFORMATION_SCHEMA and sys. Since every database needs a name, I thought of documentabler, document-a-table-abler. A pun. Yes, a bit cheesy, but metadata_dw sounded boring.

After a few hours this weekend, I was done. So lets look at some features. These are tables:


dbo.dt_index
dbo.dt_object
dbo.dt_table
dbo.dt_view

They store metadata about databases. Index stores table indexes, object stores SPs, UDFs and views. Table stores columns in tables and columns in views, dt_view is kind of redundant although good to have if you want to separate tables and views.

These in turn are populated by these SPs:

spUpdate_dt_index
spUpdate_dt_object
spUpdate_dt_table
spUpdate_dt_view

And it is here where the magic happens. When providing these SPs with a parameter with a database name in it, the stored procedure fetches data into the documentabler database. I’v tried to streamline all the tables so they include this information:


[isLatest]
[versionNr]
[latestVersionNr]
isIndexActive/isObjectActive/isViewActive/isColumnActive
[RowContent]
[validFrom]
[validTo]

Creating a data warehouse for other databases! Yes, the solution is a SCD2-only data warehouse, meaning that every change is recorded to this database! What this means is that, if you create a sql server agent job which includes this

use documentabler
go
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

spUpdate_dt_index 'documentabler'
spUpdate_dt_object 'documentabler'
spUpdate_dt_table 'documentabler'
spUpdate_dt_view 'documentabler'

and then run it regularly, you will get everything that is happening on a meta-metadata-level recorded. If you by mistake didn’t save your work, you might find it in there! Through the [validFrom] and [validTo] columns, you could go back in time and see what database changes has been made! So this could be the documentation, if there only was a commenting field…

And there is. the extended property! This is an metadata property that could be set on db level, table level and column level. However, the interface for this is quite tricky in ssms, especially for columns. To solve this, one needs to have a nice way of inserting and updating these fields. Do you have excel? Great! This is for you:


USE [documentabler]
GO

/****** Object: View [dbo].[v_exportExtendedPropertiesToExcel] Script Date: 04/01/2012 17:26:35 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [dbo].[v_exportExtendedPropertiesToExcel]
as

SELECT TOP 1000000
[dbName]
,[schemaName]
,[tableName]
,[columnName]
,isnull(columnExtendedProperty, '') as OldColumnExtendedProperty
,'' as NewColumnExtendedProperty
,'=CONCATENATE("execute [documentabler].[dbo].[sp_updateExtendedProperty] ''' + [dbName] + ''', ''' + [schemaName] + ''', ''' + [tableName] + ''', ''' + [columnName] + ''',''" & F' +cast(1 + ROW_NUMBER() OVER (ORDER BY dbName, schemaName, tableName, columnName) as nvarchar(10))+ '&"''")' as SQLScript
FROM [documentabler].[dbo].[dt_table]
WHERE isLatest = 1
ORDER BY dbName, schemaName, tableName, columnName
GO

This view produces an excel-ready template, when inserted to excel shows all current extended properties, but also creates a script back to t-sql, making it user friendly to update and insert extended properties. And yes, the extended properties is also SCD2. :)

So this finalizes the first post about documentabler, use the link or surf to projekt->documentabler in the top row. This is free to use, however if you found it awesome, please contribute some money to the ones that needs it the most, to a charity organization of your choice.

Disclaimer: I take no responsibility for any bugs or mishaps you might encounter using this. Everyone should study the code carefully and use it wisely and not use this as a substitute for a real source code system.

Best wishes,
Robin

Some general updates

Sunday, April 1st, 2012

Hello!

Since my last post my employment status has changed. I’ve been having a great time at Avanade but from november last year (2011) I am employed at the online casino/bet company Betsson as a business intelligence developer. Since I’m so lazy with my updates on this blog, I’ve got something really special for you coming up in the next post.

Since I also got some english speaking collegues who might be interested in the stuff I write and do I decided to write in my left-handed english. I hope you’ll find some stuff interesting.

//Robin

Ny inriktning

Saturday, April 16th, 2011

Hej!

Från och med nu kommer denna blogg att byta inriktning, från att ha generellt handlat om webbutveckling kommer jag i fortsättningen skriva om Business Intelligence, och särskilt Microsofts Business Intelligence, dvs SQL Server, OLAP-kuber, Data Warehouses med mera. Detta kommer sig av den enkla anledningen att jag sedan förra sommaren jobbar med just det, på Avanade.

Jag kommer nog mest att posta lite allmänna funderingar, tips och trix kring buggar och felaktigheter jag har mött i min vardag som BI-konsult.

/R

MISSILE-modellens stöd vid kodandet av supportbetyg.se

Thursday, November 12th, 2009

Nu när jag har släppt en BETA-version av supportbetyg.se kan jag sammanfatta hur MISSILE-modellen hjälpte mig i byggfasen.

Lessons learned – Checklistan

Checklistan av MISSILE (som du kan läsa mer om här) var den del som jag hade mest nytta av, då jag nu är i lanseringsfasen av sajten.

Fråga 1: Kan det finnas något behov av webbtjänsten?

Denna fråga var antagligen något som dök upp i mitt huvud under mitten av sommaren, jag hade stora problem med avstängning av ett bredbandsabonemang och öppnandet av ett nytt av ett annat bolag. Jag var frustrerad och sur över den inkompetens som båda företagens supporter innehade. När jag snackade med vänner så hade de haft liknande erfarenheter, och jag kände att jag skulle vilja få utlopp och “skriva av mig”, så jag vände mig såklart till internet.

Det finns, grovt räknat, två webbsajter som tillhandahåller liknande tjänster kring recensioner och ytterligare tjänster som har recensionstjänst som ett tillval utöver sin kärnprodukt. Däremot fanns det ingen sajt som specifikt visade på hur ett företags support rankades gentemot andra liknande företag. Det fanns ingen statistik över detta heller.

Idén om en webbtjänst som tillhandahöll statistik, var enkel att använda och recensera, drömdes ihop.

Fråga 2: Hur snabbt kan du utveckla din idé, från behov till en lansering av prototypen?

Som tidigare sagts startade idén i huvudet på mig i mitten av sommaren. Jag kom igång ganska snabbt med att försöka förstå mig på cakePhP, men detta ramverk var alldeles för stort att lära sig, även om jag gillade MVC-mönstret skarpt. Jag kom igång på riktigt med kodningen i början av augusti och var klar till början av november, dvs ca 3 månader. Tiden som jag la ner på byggfasen var ca 200 timmar eller 5 veckors arbetstid. Detta gjordes såklart vid sidan om stuider och arbete.

Fråga 3: Kan du använda någon sorts ramverk eller färdigskrivna bibliotek för att snabba upp utvecklingsprocessen?

Genom det teoretiska stödet i MISSILE förordnade vi ramverk och färdigskrivna bibliotek för att snabba upp utvecklingsprocessen. Efter en del letande bestämde jag mig för att testa att bygga webbappen i cakePhP, men kom snabbt på att detta inte passade mig. Så jag utvecklade mitt egna ramverk byggt på ModelViewController-mönstret. Detta var ofta ganska frustrerande att bygga upp och förstå, men nu när allt är färdigt är jag glad att jag byggde det.

Ett annat bibliotek som jag använde var jQuery. Jag hade väldigt liten erfarenhet av jQuery sen innan, men det visade sig att det var ett mycket enkelt system för att få fram bra effekter. Något jag gillar är att man kan nästla olika selectors så att events kan ske, även om jag inte har gjort det så mycket på supportbetyg.se

Fråga 4: Hur kan webbtjänsten integreras med andra webbtjänster?

Supportbetyg.se kan inte integreras med andra webbtjänster just för tillfället. Detta för att för få använder tjänsten just nu. Denna fråga går just nu i antagoni mot affärsvärdes-principen, som jag skriver lite mer om nedan.

Fråga 5: Vilken sorts publik webbtjänst tänker du lansera?

Denna publika webbtjänst riktar sig till alla som någon gång kommit i kontakt med en supportavdelning hos ett stort företag i Sverige. Den är inget tekniskt underverk och kan därför inte marknadsföras selektivt.

Fråga 6: Skapar aktiviteten i utvecklingsprojektet affärsvärde?

Denna fråga är mycket intressant, och antagligen den viktigaste. Något som jag märkte när jag kodade var avvägningen om vad som behövs och vad som inte behövs, dvs vad ger kunden värde?

Frågan fick en annan form under utvecklingstiden: Kan jag skippa att koda detta utan att sajtens kvalité minskar?

Bland annat har jag inte lagt ner någon stor del av tiden på att validera koden. Hur många användare tittar på om sajten är validerad, den siffran lär vara under 1%, så så länge kvalitén på sidan är god så brydde jag mig inte om att validera.

IE6-testning och IE6-optimering. Ungefär 20% av alla webbläsare är IE6, men 80% är det inte, IE6 kommer att fasas ut mer och mer under nästa år och det känns onödigt att anpassa sajten och använda tid till detta.

Integration med facebook connect. Detta var en idé jag hade, att folk skulle logga in med sina facebook-konton istället för att skriva anonymt. Problemet, eller rättare sagt verkligheten, är att folk är mycket lata. Om alla användare måste logga in för att skriva kommentarer och recensioner kommer sajten inte organiskt att växa lika snabbt.

Dessa frågor har hjälpt mig oerhört till att snabba upp bygget och fokusera på det som är viktigt. Nästa steg blir att lansera sajten, vilket är mycket svårare än själva byggandet.

A newbie guide to understanding the basics about .htaccess and mod_rewrite

Sunday, November 8th, 2009

Hi!

This will be my first post in english at my blog! Yay!

Anyways, after stumble accross the net for some good guides and info about .htaccess and mod_rewrite I finally found some good sorces for info.

So what is mod_rewrite and .htaccess?

mod_rewrite is a configuration you can do in your httpd.conf file, the configuration tells the server what to activate and deactivate. If you enable mod_rewrite, you could set a lot of configuration options when it comes to how the client “reads” your domain. In 99% of the cases of the default settings, this is on. If your server is local, it will be off.

To turn it on, you need to find mod_rewrite and sometimes you need to find it twice in httpd.conf, it all depends what kind of settings you have.

How to enable it

A tip is to use the search function in wordpad or some other text editor to find the correct line of code. In wordpad, notepad or open office – use CTRL + F in httpd.conf.

When you find it, it looks like this:

#LoadModule rewrite_module modules/mod_rewrite.so

Throw away the #, and restart your server.

If you’ve done this, create a file named “servertest.php” and write and scroll down to mod_rewrite (CTRL+F). Did you find it? If not, go through these guides:

Hey, what about .HTACCESS?

Yes! When mod_rewrite enabled, you could extend the list of funny stuff you can do in .htaccess! This file is sacred, for many reasons it’s your magic wizard book.

This file makes the rules recursive, i.e. if you put it in your root-folder, every folder under it will get the rules you write in .HTACCES in your rootfile (i.e. www.yourdomain.com/)

In .HTACCESS you could specify a lot of stuff to happen for the client:

  • You could disable the user to gain access to some/all of your files.
  • You could write smart URLs.
  • You could specify how a file should be viewed (MIME-type etc.)

And a lot of more fun, go to one of the following guides to know more about your specific need!

High-rated guides for newbies:

I’d like to recommend this guide to understand how to write smart urls. The guide is thorough and in-depth how you could use it. It also shows you how to use flags, a primer to the hard-to-understand regular expressions and lists server variables you can use.

This guide is also an excelent tutorial on security issues, if you want to disable script-kiddies, bots and other intruders. I highly recommend it.

I’m lazy, fix it for me directly!

If you just want smart urls, there are two ways to fix it:
By a generator,
Or by specify it by a pHp-class (1) and (2)

Other resources:

The official apache guide, although it was too technical for me with quite bad examples

This is a fairly good guide, it brings up some decent examples, but aren’t as thorough as the previously mentioned guides.

Twitter och tinyURL

Monday, August 17th, 2009

Twitter, bloggy och tumblr. Alla dessa mikrobloggar. Folk säger att detta är det framtida sättet att marknadsföra sig och sina produkter på. På ett sätt så förstår jag det, marknadsförare behöver ständigt korta ner sina budskap och då passar spärren på 140 tecken utmärkt..

Men för oss som vill ha mer då? Kan man inte uttrycka sig kärnfullt men djupt på sin egna blogg för de som är intresserade?

Jag förstår inte meningen med Twitter. Och jag förstår heller inte varför man måste svara på frågan “What are you doing right now?” var 20:e minut. Och jag förstår definitivt inte varför man behöver följa någon annans mikroblogg minut efter minut, vad finns det att tala om när de i så fall möts?

Jag vill att detta ska vara en fluga, men jag är verkligen övertygad om att detta sätt att hålla sig väl med “sociala medier” kommer att stanna. Konceptet med snabbare återkoppling på vad man säger har expanderats i storlek och styrka sen internet föddes och kommer säkerligen att fortsätta.

David Walsh tar upp två intressanta artiklar (här och här) om betalningsmöjligheter kring Twitter och tinyURL, som även återspeglar hans egen skepsis till den ena (Vad händer om tinyURL köps upp av ett p*rrföretag) men inte till den tjänst han själv använder (vad händer om twitter tar 5 dollar/månad för varje användare).

Twitters uppbyggnad är skrämmande enkel egentligen, och vem som helst som kan bygga en blogg kan säkerligen bygga upp en mikroblogg. Men så länge det inte finns reklam på sidan kommer inte kosingen in. Likt mycket annat används twitter i stor utsträckning för att det är gratis, och kostar det för användaren så väljer användaren något annat alternativ.

TinyURL, som gör om längre och förståeliga länkar till mindre oförsteliga länkar, används ofta i samma veva i twittrandet för att få plats med mer info. Länken till denna bloggpost ligger på ca 55 tecken, då blir det 85  tecken kvar, räcker det inte? Precis som Walsh menar så finns det en osäkerhet kring finansieringen kring mini-länkar och makten att styra länkarna godtyckligt. Skulle ett företag köpa upp TinyURL skulle de kunna lägga in annonser lite varstans eller redirecta direkt till en utvald sida.

Allting inom webben går så fort, snart kommer väl en speech-recognition så att folk inte ens behöver använda sig av fingrarna, lite som i boken 1984. Just sayin’.

.htaccess, mod_rewrite och cakePhP

Sunday, June 28th, 2009

Jag blir tokig!

Det är helt otroligt vad det ska krävas att få cakePhP att visas rätt! Det finns ingen hejd på problemen och den dokumentation som finns är ytterst bristfällig, särskilt vid användandet av Ubuntu! mod_rewrite hit, .htaccess dit, det är ett enda virrvarr. Tydligen, efter ca en halv veckas felsökning kommit fram till att Ubuntu inte använder sig av konfigfilen httpd.conf utan apache2.conf. Nybörjare? Javisst, men det här är helt sjukt omständigt.

Jag tror jag skapar mitt egna ramverk istället, det här funkar inte!

Vad får en att bli nätverkstekniker? Självplågeri?

Förhoppningsvis får jag tag på någon som kan detta, men nu är det sol som gäller, vädret är fint och huvudet är fult av onda kodrader. Dags att fylla lungorna med frisk somrig luft och släppa detta!

En kul blogg som jag spanat in på sistonde – failblog:

fail owned pwned pictures
Mer på: Fail Blog

Samt:

fail owned pwned pictures
Mer på: Fail Blog

Pontén och companys korståg fortsätter

Thursday, June 25th, 2009

Ja, vad ska man säga? På svd läser jag följande:

Experter: Lagen tillämpas som det är tänkt

Det handlar om IPRED och om Ephones utlämning av personuppgifter. Jag ställer mig ytterst frågande till HUR detta gick till, då ftp-servern var lösenordsskyddat. Om ftp-servern var lösenordsskyddad behöver man ett lösenord, genom detta är det endast vänner som kan ta sig in på servern. Hur kom APB in om inte olagligt i så fall? Betyder detta att vem som helst kan gå in på ett nätverk i hoppet på att finna “smaskiga detaljer”, endast genom en misstanke? Är det rätt att hota någon att avslöja sitt egna lösenord för att få sin vilja igenom? Om detta inte är maffia så vad är det i så fall?

Detta stinker, det stinker eftersom nämndemän och domare i tingsrätten inte fattar (eller har blivit hotade?) hur allvarligt fel METODEN är att insamla data kring det som ligger på ftp-servern. Ett rättsövergrepp som tyvärr antagligen kommer att upprepas i framtiden.