Programmeren

Programmeren (4)

donderdag, 25 december 2014 00:11

Van CSV naar MT940

Geschreven door

 

Menig ZZP'er met een privérekening (of administrateur hiervan) zal er mee te maken hebben. Je voert je boekhouding in één van de vele online (of offline) boekhoudpakketten. Wat is nou handiger om dan je bankmutaties in te kunnen lezen en automatisch te laten afletteren?

Je boekhoudpakket accepteert veelal geen CSV bestanden en je bank biedt geen export voor MT940 bestanden.

De opties die dan resteren zijn of ouderwets handmatig de bankmutaties boeken (tijdrovend) of overgaan naar een zakelijke rekening (duur).

Om op dit probleem in te springen heb ik onder de handelsnaam CoenFin Software een programma (MT940 Creator) ontwikkeld om CSV bestanden om te zetten naar een MT940 bestand. Dit met een paar muisklikken binnen enkele seconden. Je selecteert een CSV bestand. Het programma herkent het CSV bestand. Vervolgens kies je het soort MT940 bestand wat je wil genereren en je MT940 bestand wordt gegenereerd.

mt940creator

 

Het programma bewaart het eindsaldo en periode van de laatste import zodat je gewaarschuwd wordt voor een overlap en je bij een volgende import geen nieuw saldo hoeft in te voeren. Thans worden o.a. de volgende CSV bestanden herkent (ING Bank, Rabobank, Triodus Bank, SNS, ASN, Regiobank, Leaseplanbank en Paypal).

Het programma is daarnaast onder andere getest met BizzCounter, Exact Online, Davilex Online en Domus.Het programma is hier te downloaden. Tot 5 mutatieregels (per conversie) is het programma gratis. Voor slechts € 25,- exclusief BTW koopt u een (eenmalige) licentie voor onbeperkt aantal regels.

Aanvullende CSV bankbestanden kunnen in overleg altijd worden toegevoegd aan het programma.

 

zondag, 05 januari 2014 16:42

(Dynamische) IP-Blocker voor Joomla

Geschreven door

 

Inleiding:

Sinds ik een blog op mijn website heb is het dataverkeer op mijn website verdrievoudigd. Dit kan grotendeels verklaard worden door meer bezoekers die interesse hebben in de blogs of andere delen van mijn website. Echter een aanzienlijk deel komt door spambots welke afkomen op blogs en gastenboeken.

Ik heb uiteraard Google Recaptcha ingesteld om te voorkomen dat de spambots de reacties onder mijn blogs volspammen met reclame. Dit werkt effectief. Echter de spambots blijven het toch proberen. Dit levert veel onnodige dataverkeer op. Analyse van de statistieken laat zien dat het merendeel van mijn dataverkeer uit China komt. Dit terwijl mijn site goeddeels in het Nederlands is geschreven:

ipblock02

 

Een nadere analyse van de IP adressen laat ook zien dat het verkeer met name bestaat uit adressen met een extensie 'dynamic.163data.com.cn', dus er wordt veel gebruikt gemaakt van dynamische IP-adressen door spammers:

ipblock01

 

Vraag:

Ik wil om het dataverkeer te reduceren dus de IP adressen blokkeren van vermoedelijke spammers en daarbij ook met nadruk van bepaalde domeinen zoals hierboven. De meest geëigende weg is gebruikt te maken van .htcaccess bestanden. Echter mijn hostprovider biedt niet de mogelijkheid om .htcacces bestanden te gebruiken.

De alternatieve oplossing is dan een plug-in te gebruiken voor Joomla, de CMS welke ik gebruik, om daarmee spammers te blokkeren. Ze kunnen hiermee nog wel theoretisch bestanden downloaden. Ze kunnen echter geen pagina's meer bezoeken, waardoor er geen plaatjes etc. meer mee-gedownload worden bij het opvragen van pagina's.

Een Joomla extensie (plug-in) moet aan de volgende eisen voldoen:

– Moet vaste IP adressen kunnen blokkeren

– Moet specifieke domeinen kunnen blokkeren zoals .163data.com.cn om dynamische IP spammers tegen te gaan

– Grote vrijheid

– Moet gratis en open-source zijn.

 

Beschikbare extensies:

De keuze op de Joomla extensies site is echter beperkt als het gaat om IP blockers. Er is een keuze uit 6 plug-ins, waarvan 2 commercieel. De meeste plug-ins zijn vooral gefocust op het blokkeren van bepaalde landen en/of regio's. Andere plug-ins kunnen alleen IP adressen blokkeren. Ik heb niet direct de behoefte aan het blokkeren van landen. Ik wil een bepaalde vrijheid hebben in het blokkeren van bepaalde IP adressen. Als ik ze verdacht vindt dan wil ik vaste IP adressen kunnen blokkeren of bepaalde specifieke domeinen om dynamische IP adressen aan te kunnen pakken.

 

Maatwerk:

Ik heb uiteindelijk gekozen voor TorIpBlock. Dit is een simpele extensie waarmee vaste IP adressen kunnen worden geblokkeerd. Deze extensie heb ik een beetje aangepast zodat ik ook bepaalde domeinen kan blokkeren.

De uiteindelijke PHP code welke de IP adressen blokkeert bevindt zich in de map [Joomla hoofmap]/plugins/system/toripblock/. Hierin bevindt zicht het document 'toripblock.php'. Dit bestand heb ik lokaal middels kladblok aangepast. Na de regel '$ip = $_SERVER['REMOTE_ADDR'];' heb ik de volgende stukje code toegevoegd:

// toevoeging CM

$hostnaam = gethostbyaddr($ip); //reverse DNS lookup

// kopieer voor iedere hostnaam welke u wilt blokkeren

if (strpos($hostnaam, '163data.com.cn') !== false) {

$ip = '1.1.1.1';

}

//einde toevoeging

Het document zou er dus zo uit moeten komen te zien:

ipblock03

 

Wat houdt deze code in?:

Met “gethostbyaddr($ip)” voer ik een zogenoemde reverse DNS uit. Omdat spammers met variabele IP adressen lastig te blokkeren zijn op basis van alleen het IP adres, moet hier een list worden bedacht. Een deel van deze IP adressen lopen via een enkele provider. Indien we de hostnaam kunnen achterhalen (lukt niet altijd) dan kunnen daarmee een bepaalde provider blokkeren. Met de reverse DNS wordt het IP adres naar de naam van de provider. Dit levert namen op zoals '197.217.159.27.broad.pt.fj.dynamic.163data.com.cn'.

Vervolgens voer ik een test uit om na te gaan of een bepaalde tekst, kenmerkend voor een te blokkeren domeinnaam voorkomt in de hiervoor opgevraagd domeinnaam, in bovenstaande geval '.163data.com.cn''. In dat geval zet ik het IP adres op '1.1.1.1'. Dit IP adres heb ik eerder al via het admin gedeelte van de plug-in ingesteld. Deze test kan gekopieerd worden om zo aanvullende hostnamen te blokkeren.

 

Toekomst:

Ik heb nu redelijk hardcoded de optie om hostnamen te blokkeren toegevoegd. Verder aanpassing van de plug-in zou het mogelijk moeten maken om hostnamen toe te voegen via de backend van de Joomla en niet via aanpassing van het PHP bestand.

 

 

 

 

maandag, 23 december 2013 16:30

Niet werkende debugger VB.net

Geschreven door

Bij een vanuit Visual Basic 6 geconverteerde project liep ik tegen het probleem op dat de debugger niet naar behoren werkte. Er kunnen breakpoints aangemaakt worden. Echter deze worden niet geraakt door de Visual Basis 2010 Express editie. Hierdoor kun je de facto niet debuggen wat natuurlijk niet handig is bij het ontwikkelen van programma's.

Op internet gezocht naar oplossingen. Deze waren niet altijd eenduidig of helder opgeschreven. Uiteindelijk met wat try and error de oplossing hiervoor gevonden:

Stap 1)

debugvb02

Zet de settings op Expert Settings.

 

Stap 2)

Nu verschijnt het 'Build' menu.

debugvb01

Kies de 'Configuration Manager...'


Stap 3)

debugvb03

Zet 'Active solution configuration' op 'Debug' en haal het vinkje weg bij 'Build'. De debugger zou weer moeten werken :-)

 

 

 

zondag, 15 september 2013 11:48

E-mail notificatie K2 Joomla blog op reactie

Geschreven door

Sinds kort maak ik gebruik van de K2 extentie voor Joomla. K2 is vooral handig voor het maken van een blog op je website. Een blog maakt het mogelijk om (korte) artikelen te publiceren en ruimte te bieden aan lezers om reacties achter te laten. Daar ik niet fulltime mijn site bekijk is het handig als ik een e-mail ontvang als er een nieuwe reactie geplaatst wordt. Helaas voorziet K2 hier niet standaard in. Wat googlen leert dat er wel enkele betaalde extenties zijn voor K2 die dit kunnen ondervangen. Echter als echte Nederlander ga ik niet teveel betalen voor een simpele functionaliteit die je ook makkelijk zelf kan implementeren.

Een zoektocht op internet bracht me eerst op deze site. Het doorvoeren van deze wijzigingen leverde in mijn geval echter geen e-mails op. De reden hiervoor is dat 'joomla hack' uitgaat van het feit dat reacties voorafgaande aan publicatie dienen te worden goedgekeurd. Ik ga bij mijn site uit van controle achteraf. Dus mensen mogen reacties plaatsen. Als er spam of opmerkingen bij zitten die het daglicht niet kunnen verdragen dan haal ik die achteraf van mijn site. 

Dus hoe moeten we er dan wel voor zorgen dat er een e-mail notificatie komt als iemand op je K2 Blog een reactie heeft achtergelaten? Hiervoor moeten we een stukje PHP code gaan toevoegen aan het item.php bestand wat onderdeel is van de K2 installatie.

Het item.php bestand vindt je onder het mapje 'components' in je Joomla installatie. Vervolgens ga je daar naar het mapje 'com_k2' en vervolgens naar het mapje 'models'. Ofwel in het kort: /components/com_k2/models/item.php.

In het item.php bestand (bewerken met teksteditor of php editor) zoek je naar ' function comment()'. Vervolgens scroll je langzaam naar beneden totdat je een regel tegenkomt met de tekst 'K2_COMMENT_ADDED_REFRESHING_PAGE'. Voor deze regel plaats je de volgende regels code:

 

$mainframe = &JFactory::getApplication();
$mail = &JFactory::getMailer();
$senderEmail = $mainframe->getCfg('mailfrom');
$senderName = $mainframe->getCfg('fromname');

$mail->setSender(array($senderEmail, $senderName));
$mail->setSubject('K2 Blog commentaar ontvangen');
$mail->IsHTML(true);
$body = " <strong>".JText::_('K2_NAME')."</strong>: ".nl2br($row->userName)." <br/> <strong> E-mail: </strong>: ".nl2br($row->commentEmail)." <br/> <strong>".JText::_('K2_COMMENT')."</strong>: ".nl2br($row->commentText)." <br/> "; $mail->setBody($body);
$mail->ClearAddresses();
$mail->AddAddress($params->get('commentsReportRecipient',
$mainframe->getCfg('mailfrom')));
$mail->Send();


      

Na het doorvoeren van deze aanvulling en het opslaan van item.php (en het eventueel opnieuw uploaden van dit bestand) zouden er na iedere geplaatste reactie een e-mail verzonden moeten worden naar het mail adres van de administrator.

Ik merk wel op dat bij iedere update van het K2 component bovenstaande handeling opnieuw uitgevoerd moet worden omdat dan waarschijnlijk er weer een nieuwe versie van item.php is.

 

Nog een korte uitleg van de bovenstaande code:

- Met '&JFactory::getmailer()' wordt de Joomla standaard email component aangeroepen.

- $senderEmail, $senderName halen e-mailadres en naam(site) op uit het Joomla configuratiebestand.

- Met $mail, $body wordt gecommuniceerd met Joomla mailer. In dit geval wordt de mail door de administrator verzonden naar hem-/haar-zelf.

- $body bevat de daadwerkelijke inhoud van de het de e-mail. $row wordt door K2 gebruikt om te communiceren met de database. Hieruit vissen we de door de reageerder ingevulde mailadres en naam.

- JText is een Joomla vertaalfunctie.