Importing a large SQL file in Microsoft SQL server 2008

Submitted by Jochus on Wed, 13/03/2013 - 23:17 | Posted in: Database
Posted in

  • Go to: Start -> Run -> Type cmd and press enter
  • Once the command line is on screen tell SQLCMD to import your database by doing something like this:
    sqlcmd -S [server instance name] -d [database name] -i [filename you want to import]
  • If you're not sure about the server instance name; simply open up SQL Server Management Studio and on the login screen take a note of the Server Name textbox as this is the value you need to use as the server instance name.
  • If you are trying to enter a lot of INSERT statements, don't forget to flush while inserting using the GO command (for example, after each 100 rows).

How to cleanup InnoDB storage

Submitted by Jochus on Mon, 11/03/2013 - 21:33 | Posted in: Database
Posted in

Problem

After deleting some tables/databases on my MySQL server, I noticed the ibdata1 file is never shrinking. After almost a year, my MySQL ibdata1 file became really too large.
More information on this issue: http://bugs.mysql.com/bug.php?id=1341.

Solution

  • Dump (e.g., with mysqldump) all databases into a .sql text file
    $ mysqldump -u root -p --all-databases > bigdump.sql
  • Drop all databases (except for mysql and information_schema)
  • Login to mysql and run 'SET GLOBAL innodb_fast_shutdown = 0;' (This will completely flush all remaining transactional changes from ib_logfile0 and ib_logfile1)
  • Shutdown MySQL
  • Add the following lines to /etc/my.cnf:
    innodb_file_per_table
    innodb_flush_method=O_DIRECT
    innodb_log_file_size=1G
    innodb_buffer_pool_size=4G
  • Delete ibdata* and ib_logfile*
  • Start MySQL
  • Import databases
    $ mysql -u root -p < bigdump.sql

How to get the data directory of MySQL

Submitted by Jochus on Thu, 07/03/2013 - 19:30 | Posted in: Database
Posted in


I manually installed MySQL on my Macbook Pro, but I didn't know where MySQL stores its data by default (it's not defined in /etc/my.cnf). You can ask this to MySQL using the following query:

SHOW VARIABLES LIKE 'datadir';

This will result in something like this:

+---------------+----------------------+
| Variable_name | VALUE                |
+---------------+----------------------+
| datadir       | /var/lib/mysql/DATA/ |
+---------------+----------------------+
1 ROW IN SET (0.00 sec)

How good is my wifi signal?

Submitted by Jochus on Wed, 06/03/2013 - 20:30 | Posted in: Mac
Posted in


While holding down the ⌥ key when clicking on the wifi icon, you can learn more about the strength of the current wifi connection.

RSSI

RSSI or Received Signal Strength Indication can go from 0 to -100. Generally the higher (closer to 0) the better, and the closer to -100 the worse. In telecommunications, RSSI is a measurement of the power present in a received radio signal (cf. Wikipedia).

Transmit Rate

The number to pay much more attention to is the Transmit Rate. This value is the rate of which information is processed by a transmission facility. The transmit rate will drop if you have too much noise or interference or if you are too far away from the base station.

For reference:

0   - No connection
6   - Half 802.11b
11  - 802.11b
54  - 802.11g
130 - 802.11n on 2.4 Ghz
300 - 802.11n on 5.0 Ghz

Toekomst van de elektronische factuur

Submitted by Jochus on Thu, 28/02/2013 - 23:01 | Posted in: Onea
Posted in


Nu ik bijna een jaar voor Onea werk, ben ik meer en meer into eInvoicing aan het geraken. Een van de vragen die ik me onlangs stelde, was welke gegevens er verplicht aanwezig moeten zijn op een factuur. Deze gegevens liggen namelijk vast volgens art. 5 van het koninklijk besluit. Dit besluit is hier online te raadplegen.

Belangrijkste factuur gegevens:
  • Datum uitreiking van de factuur
  • Een opeenvolgend nummer dat wordt toegekend volgens één of meer reeksen
  • Het BTW-nummer van de leverancier of dienstverrichter
  • De naam of maatschappelijke benaming van de leverancier of dienstverrichter
  • Het adres van de administratieve of maatschappelijke zetel van de leverancier of dienstverrichter
  • De naam, het adres en het BTW-nummer van de cliënt
  • De datum waarop het belastbaar feit van de levering van de goederen of de dienstverrichting heeft plaatsgevonden of de datum van de incassering van de prijs of een deel ervan, voorzover die datum vastgesteld is en verschilt van de uitreikingsdatum van de factuur
  • De omschrijving van de goederen en of diensten alsmede hun eventuele hoeveelheid, dit dient de overheid toe te laten om het tarief van de verschuldigde belasting vast te stellen
  • De maatstaf van heffing, de eenheidsprijs, evenals eventuele betalingskortingen die niet begrepen zijn in de eenheidsprijs
  • De vermelding van de tarieven van de verschuldigde belasting en het totaalbedrag van de verschuldigde belasting uitgedrukt in de nationale munt van de lidstaat waar de goederen worden geleverd of de diensten worden verricht
  • Indien er een vrijstelling van BTW wordt aangevraagd, dient men duidelijk het artikel van de richtlijn ofwel het artikel uit de nationale wetgeving op te geven waarop men zich baseert om de vrijstelling te vragen of de belasting niet in rekening te brengen
Bevestiging, authenticiteit en integriteit

Verder legt de overheid ons 2 zaken op qua eInvoicing:

  • de cliënt dient akkoord te zijn met het ontvangen van een elektronische factuur
  • de authenticiteit van de herkomst en de integriteit van de inhoud van de elektronische factuur moet gegarandeerd zijn

Bij Onea hebben wij een product ontwikkeld dat aan deze voorwaarden voldoet. Ons product biedt nog een grote waaier aan mogelijkheden aan: central & legal archive, importing paper invoices & e-invoices, exporting invoices, expense handling & approving, straight through processing, workflow and matching.
Meer informatie is te vinden op http://www.onea.be/

Difference between NAS, SAN & DAS

Submitted by Jochus on Thu, 28/02/2013 - 08:02 | Posted in: Linux
Posted in


I'm always confused when people talk about NAS, SAN or DAS. I just found this interesting comment on serverfault.com:


First it is best to define the difference between a block device and filesystem. This is easier grasped if you are familiar with UNIX because it makes an objective distinction between the two things. Still the same applies to Windows.

  • A block device is a handle to the raw disk.
    • Such as /dev/sda for a disk or /dev/sda1 for a partition on that disk.
  • A filesystem is layered on top of the block device in order to store data. You can then mount this.
    • Such as mount /dev/sda1 /mnt/somepath.

With those terms in mind it's then easier to see the distinction between the following.

  • DAS is a block device from a disk which is physically [directly] attached to the host machine.
    • You must place a filesystem upon it before it can be used.
    • Technologies to do this include IDE, SCSI, SATA, etc.
  • SAN is a block device which is delivered over the network.
    • Like DAS you must still place a filesystem upon it before it can used.
    • Technologies to do this include FibreChannel, iSCSI, FoE, etc.
  • NAS is a filesystem delivered over the network.
    • It is ready to mount and use.
    • Technologies to do this include NFS, CIFS, AFS, etc.

Excel: automatic sheets wrapper (VBScript)

Submitted by Jochus on Tue, 26/02/2013 - 22:13 | Posted in: Windows
Posted in

I just found an old VBScript I wrote once for a friend who needed to merge different sheets from Excel into 1 big sheet. I can't remember all functional specifications, but the original XLS file was coming from a software package which was used to calculate sizes, measurements, ... in certain constructions of buildings. This software package was generating an XLS file with 50 sheets. But for statistical reasons, it would have been better to put it in 1 sheet. I just tested the script, and it's still working :-)


Option Explicit

' header
WScript.Echo "*******************************************"
WScript.Echo "* Automatic sheets merger *"
WScript.Echo "* *"
WScript.Echo "* Copyrighted: Jochen Hebrecht *"
WScript.Echo "*******************************************"

' configuration
Dim pagesize
pagesize = 700

' init: original XLS
Dim excel_orig, book_orig, sheet_orig
Set excel_orig=CreateObject("Excel.Application")

' init: new XLS
Dim book_new, excel_new, sheet_new
Set excel_new=CreateObject("Excel.Application")
set book_new=excel_new.Workbooks.add
set sheet_new=book_new.WorkSheets(1)

' get current dir
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

' start script
if ( WScript.Arguments.Count <> 2 ) Then
WScript.StdOut.writeline " Use: cscript automaticsheetmerger.vbs
"
Else
Dim fso, msg
Set fso = CreateObject("Scripting.FileSystemObject")
Dim filespec

' delete old output if needed
filespec = WshShell.CurrentDirectory & "\" & WScript.Arguments(1)
If (fso.FileExists(filespec)) Then
fso.DeleteFile(filespec)
End if

' create new file
filespec = WshShell.CurrentDirectory & "\" & WScript.Arguments(0)
If (fso.FileExists(filespec)) Then
Set book_orig=excel_orig.Workbooks.Open(filespec)

Dim start, einde, left, first_hit
start = 1
einde = 1
left = 0
first_hit = 0

' loop sheets
For each sheet_orig in book_orig.Worksheets
Wscript.Echo "Reading: " & sheet_orig.Name

' copy data
sheet_orig.Activate
sheet_orig.UsedRange.Select
excel_orig.Selection.Copy

' measure size
Dim x_s, y_s
y_s = sheet_orig.UsedRange.Rows.Count
x_s = sheet_orig.UsedRange.Columns.Count

Dim current_size
current_size = 0
For each r in sheet_orig.UsedRange.Rows
current_size = current_size + r.RowHeight
Next
WScript.Echo "current_size: " & current_size

' paste
sheet_new.Activate

' if no more space, put pagebreak
if first_hit = 1 And current_size > left Then
sheet_new.HPageBreaks.Add(sheet_new.Rows(start))
end if

WScript.Echo "start:" & start
Wscript.Echo "Range: A" & start & ":" & ConvertColumnNumberToLetter(x_s) & (start + y_s - 1 )
sheet_new.Range("A" & start & ":" & ConvertColumnNumberToLetter(x_s) & (start + y_s - 1)).Select
sheet_new.Paste

' calculate new space left
Dim r, i, sum
i = 1
sum = 0
For each r in sheet_orig.UsedRange.Rows
sheet_new.UsedRange.Rows(i + start - 1).Rowheight = sheet_orig.UsedRange.Rows(i).RowHeight
sum = sum + sheet_orig.UsedRange.Rows(i).RowHeight
i = i + 1
Next

if current_size > left Then
left = sum mod pagesize
left = pagesize - left
else
left = left - sum
end if
WScript.Echo "left: " & left

' new start place
start = start + y_s + 1

WScript.Echo

first_hit = 1
Next

' save & close
book_new.saveas(WshShell.CurrentDirectory & "/" & WScript.Arguments(1))
book_new.close
excel_new.quit
book_orig.close
excel_orig.quit
Else
WScript.Echo " File: " & WScript.Arguments(0) & " does not exist!"
End If
End if

' converts the number of a column to the letter of the number
Function ConvertColumnNumberToLetter(ColumnNumber)
Dim IntegerResult, FractionalResult, Remainder, FirstLetter, SecondLetter
IntegerResult = ColumnNumber \ 26
FractionalResult = (ColumnNumber / 26) - IntegerResult
Remainder = ColumnNumber Mod 26
If IntegerResult = 0 Then
FirstLetter = ""
ElseIf IntegerResult = 1 And FractionalResult = 0 Then
FirstLetter = ""
ConvertColumnNumberToLetter = "Z"
Exit Function
ElseIf IntegerResult > 1 And FractionalResult = 0 Then
FirstLetter = Chr(64 + (IntegerResult - 1))
ConvertColumnNumberToLetter = FirstLetter & "Z"
Exit Function
Else
FirstLetter = Chr(64 + IntegerResult)
End If
SecondLetter = Chr(64 + Remainder)
ConvertColumnNumberToLetter = FirstLetter & SecondLetter
End Function

Defining autoplay CD/DVD options in Windows 7

Submitted by Jochus on Tue, 26/02/2013 - 21:42 | Posted in: Windows
Posted in


I recently had the following issue: when I inserted a CD in my laptop, a default application was started. But I didn't want this application to startup - I just wanted Windows to ask me what I was willing to do with it.
The following instructions help you to reset this setting:

  • Click the Start button to view the Start Menu and then choose the Control Panel option
  • Click Autoplay
  • A new screen appears where you can change the default action of any content CD/DVD to Ask me every time

Differences in wireless security

Submitted by Jochus on Mon, 25/02/2013 - 23:10 | Posted in: Linux
Posted in

I just found this old article I've written down once when I was looking for a good wireless security setup. This article was written in Dutch, but I didn't want it to get lost, so I added it to my blog.

Versleutelingsmethodes

WEP

Definitie

WEP staat voor Wired Equivalent Privacy en is een door de Institute of Electrical and Electronics Engineers 802.11 gespecificeerde methode om berichten die via een draadloze verbinding (Wi-Fi) worden verstuurd te versleutelen en maakt gebruik van de RC4-encryptie van RSA Security. De versleuteling vindt plaats tussen de twee NICs; de versleuteling geldt dus alleen voor zover de data "in de lucht hangt". Nadat de data ontvangen is, is het niet meer encrypted. Om gebruik te maken van WEP moeten de participerende NICs WEP aanzetten en een gelijke sleutel ingevoerd krijgen.

Bron: http://nl.wikipedia.org/wiki/WEP

Werking
  • Van de te verzenden data wordt een CRC32-checksum berekend. Deze checksum wordt achter de data geplakt.
  • Het nieuwe geheel (Data + CRC32(Data)) wordt de 'plaintext' genoemd. ('Plain', omdat dit stuk nog niet gecodeerd is en dus gewoon leesbaar.)
  • De keystream wordt als volgt berekend: keystream = RC4(IV, sleutel).
    • IV = initiële vectoren. Dit zijn een aantal willekeurige getallen die mogen, maar NIET moeten (volgens de IEEE WEP-specificaties), veranderen bij elk nieuw verzonden pakket.
    • sleutel = een afgesproken 'wachtwoord' dat gebruikt wordt, en door beide NIC's op voorhand gekend is.
  • Het pakket wordt samengesteld: Eerst worden de keystream en plaintext tezamen ge-XOR'd, en vervolgens wordt de IV voor het pakketje geplakt. Dan wordt het pakket verzonden.

Kort samengevat:

:pakket = IV + XOR(data + crc32(data), RC4(IV, sleutel))

Bron: http://nl.wikipedia.org/wiki/WEP

Persoonlijke mening

WEP is totaal niet veilig en kan in minder dan een seconde gekraakt worden. Dit komt vooral door de statische sleutel die in het algoritme gebruikt wordt. Bij deze raad ik dan WEP ook aan niemand aan.

WPA

Definitie

Wi-Fi Protected Access (WPA) is een systeem om veilige draadloos draadloze netwerken (Wi-Fi) op te zetten en is ontwikkeld nadat onderzoekers een aantal zwakke plekken in WEP (Wired Equivalent Privacy) hadden gevonden. WPA is gebaseerd op een deel van de 802.11i-standaard van IEEE en bedoeld als tussenoplossing voor de problemen met WEP terwijl de nieuwe draadloze veiligheidsstandaard (802.11i) werd ontwikkeld. Certificatie van producten met WPA is begonnen in april 2003; de volledige 802.11i werd geratificeerd in juni 2004.

Werking

WPA kent 2 manieren van configureren: personal en enterprise. Enterprise vereist een authenticatieserver en wordt meer gebruikt in bedrijven. Personal kan je thuis gebruiken.

WPA lost eigenlijk het probleem van de WEP hoofding (de initialisatie vectoren IV) op en voorziet een betere beveiliging door gebruik te maken van het MIC (Messsage Integrity Check). Deze laatste maakt gebruik van het TKIP protocol (Temporal Key Integrity Protocol). Concreet wil dit zeggen dat WPA de sleutel automatisch aanpast (''rekeying'' genoemd). Dit proces gebeurt na een periode van X tijd of na X aantal pakketten verzonden te hebben = the rekey interval.

WPA maakt gebruikt van een passphrase, of ook wel de geheime code genomed die zowel moet ingevoerd worden op je router als op je computer. Vervolgens neemt TKIP het proces over en past dit de sleutel automatisch aan.

WPA is niet geklasseerd als een standaard, maar is eigenlijk een oplossing tussen WEP en WPA2 (zie verder)

Persoonlijke mening

Stuk veiliger dan WEP en zeker aan te raden!

WPA2

Definitie

WPA2 is de nieuwste beveiligings methode in de Wifi wereld. De ondersteuning is nog matig en WPA voldoet zeker nog aan de veiligheidsnorm voor de thuisgebruikers.

WPA2 is er net als WPA in 2 varianten, de Enterprice en de Personal.

De Personal variant werkt ook met een in te vullen wachtwoord zoals bij WPA, en de Enterprice variant werkt via een aparte authenticatie server.

WPA2 maakt gebruik van AES (Advanced Encyption Standard) een commercieël en overheids ondersteunde data pakket beveiliging.

Werking

AES is de nieuwe methode voor de bescherming van persoonlijke gegevens bij draadloze transmissies die wordt gespecificeerd in de IEEE 802.11i-standaard. AES-CCMP biedt een krachtigere coderingsmethode dan TKIP. Kies AES-CCMP als methode voor de gegevenscodering als een sterke bescherming van gegevens voor u van belang is.

Persoonlijke mening

WPA2 geniet mijn persoonlijke voorkeur wegens de sterke codering van AES. Toch echter 1 minpunt: een standaard Windows XP installatie kan niet omgaan met WPA2 en heeft nood aan deze update: http://www.microsoft.com/downloads/details.aspx?familyid=662BB74D-E7C1-…

Toegangsmethodes

MAC filtering

Definitie en werking

MAC adressen filteren is een beveiligingsmethode die vaak in combinatie met encryptie gebruikt wordt. Een MAC adres (ook wel 'hardware adres' of 'fysiek adres' genoemd) is een ingebakken adres dat uniek is voor elk netwerkapparaat. Het MAC adres is een hexadecimale code van twaalf tekens, bijvoorbeeld 00-C0-26-A9-42-F7. Deze code kan gebruikt worden om toegang tot het netwerk toe te zeggen of juist te blokkeren. In feite is het erg gemakkelijk.

Persoonlijke mening

In mijn ogen deftige beveiligingstechniek, alhoewel deze terug mooi kan omzeild worden door MAC-spoofing. MAC-spoofing? Dat is een techniek waar je toch die hexadecimale code kan aanpassen en je voordoen als iemand anders ...

Configuring wireless networks with WPA2 security on old Ubuntu installations

Submitted by Jochus on Sun, 24/02/2013 - 10:32 | Posted in: Linux
Posted in

I just found this old article I've written down once to configure wireless networks with WPA2 security on old Ubuntu installations. As of today, WPA2 is supported out-of-the-box by the latest versions of Ubuntu. This article was written in Dutch, but I didn't want it to get lost, so I added it to my blog.
  • Installeer wpa-supplicant
  • $ sudo aptitude install wpasupplicant

  • Controleer dat je draadloze netwerkkaart goed ondersteund wordt. Door onderstaande commando's uit te voeren, zou je netwerkkaart moeten herkend zijn. Bij errors => verder zoeken om draadloze netwerkkaart te configureren
  • $ iwconfig && iwlist scan

  • Ga naar /etc/network/interfaces en pas de code voor jouw draadloze netwerkinterface aan:
  • auto eth1
    iface eth1 inet dhcp
    wpa-driver wext
    wpa-ssid <YOUR_SSID_HERE>
    wpa-ap-scan 1
    wpa-proto RSN
    wpa-pairwise CCMP
    wpa-group CCMP
    wpa-key-mgmt WPA-PSK
    wpa-psk <YOUR_KEY_HERE>

auto eth1

  • Jouw netwerkkaart (kan ook wlan0, rausb0, ra0, ... zijn)

iface eth1 inet dhcp

  • Een IP-adres wordt geleverd door de DHCP-server

wpa-driver

  • Dit is de WPA-driver voor jouw kaart. wext is een generische driver die toepasbaar is als je met ndiswrapper werkt. Laat dit standaard staan. Je kan ook andere drivers selecteren

* hostap = Host AP driver (Intersil Prism2/2.5/3)
* atmel = ATMEL AT76C5XXx (USB, PCMCIA)
* wext = Linux wireless extensions (generic)
* madwifi = Atheros
* wired = wpa_supplicant wired Ethernet driver

wpa-ssid

  • Jouw network SSID (zonder quotes!)

wpa-ap-scan

* 1 = Broadcast van ESSID
* 2 = Verborgen broadcast van ESSID

wpa-proto

* WPA = WPA
* RSN = WPA2

wpa-pairwise & wpa-group

* TKIP = TKIP encryptiealgoritme als onderdeel van de WPA standaard
* CCMP = AES encryptiealgoritme als onderdeel van de WPA2 standaard

wpa-key-mgmt

* WPA-PSK = Authenticatie van voorafgesproken sleutel (zie verder!!!)
* WPA-EAP = Authenticatie via een 'enterprise authentication server'

  • Nu moeten we nog onze WPA key omzetten naar een hash waarde zodat deze niet letterlijk blijft staan in onze config file
  • $ wpa_passphrase <your_essid> <your_ascii_key>

  • Dit levert zoiets als
  • network={
       ssid="test"
       #psk="12345678"
       psk=fe727aa8b64ac9b3f54c72432da14faed933ea511ecab15bbc6c52e7522f709a
    }

  • De hex_key waarde die je naast psk vindt, moet je onder wpa-psk zetten van het /etc/network/interfaces bestand
  • Herstart je netwerk
  • $ sudo /etc/init.d/networking restart