Outputting formatted XML using PHP
|
|
For an interpreter it doesn’t matter how much whitespace there is in an XML document and often you find that machines strip it all out to reduce the amount of bandwidth used. Often at the receiving end you want to show the output in a log file or page and need it to be formatted so that it is easily readable by humans.
SSH Tunneling across multiple hosts in Linux
|
|
Sometimes you need to communicate with a server (or other device) that is not directly accessible from your own computer. If you can reach this server via another server this is not an issue and can be solved by setting up a SSH Tunnel across your network.
An example
Let’s start with a example:
- Computer A is where you are working.
- Server A is accessible by computer A.
- Server B has a administration web interface but its IP Address is completely shielded by a firewall; except for Server A.
Thus the only way to reach the web interface on Server B from Computer A would be through Server A.
The solution
You can solve this by setting up an SSH Tunnel which spans several server; the command for this is:
ssh -t -t -L[LOCAL_PORT]:localhost:[PORT_ON_A] [USER]@[SERVER_A] 'ssh -L[PORT_ON_A]:localhost:[PORT_ON_B] [USER]@[SERVER_B]'
Basically you are chaining a specific IP port to guide traffic from and to your PC.
The variables shown here represent:
- LOCAL_PORT, the port on you local PC where you want to connect to in order to communicate with SERVER_B
- PORT_ON_A, the port on SERVER_A which is used to transfer your data across to SERVER_B (may be any port number but make sure it does not collide with other tunnels / uses)
- USER, your account name / login name on SERVER_A and/or SERVER_B
- SERVER_A, the hostname or IP address of your first jump point
- PORT_ON_B, the destination port to which you want to connect; in our example we wanted to connect to a web interface (port 80) thus we use the value 80 here
- SERVER_B, the hostname or IP address of your intended destination
You might notice the use of a double -t argument in our command; this is not an error but is actually required in order to create the connection (without it your system might complain that it is unable to acquire a TTY; explaining the details of this would go beyond this blog posting)
Our example command
To complete this exercise I will show you the full command with which we could satisfy the requirement in our opening example:
ssh -t -t -L8081:localhost:10000 mvriel@a.server.example.com 'ssh -L10000:localhost:80 mvriel@b.server.example.com'
See that we used port 8081 as local port? We did that to prevent collisions with services on our local machine. Were you to use (for example) port 80 it might produce unwanted results such as your local apache (if you have one) being unreachable.
Now all we need to do to visit the website on Server B would be to enter the following URL in your browser:
http://localhost:8081
That’s all there is to it. If anything is not clear, just leave a comment.
Pre-commit hook in Git: Running PHPUnit
|
|
Pre-commit hooks in git are one of those things you hardly think about but can help you automate tasks and do last-minute checks. A good example of this is running unit tests before commits, to make sure nothing broke; or checking your files using PHP_CodeSniffer.
With [DocBlox][1] I use them to run my unit tests as I personally believe these should be ran (and fixed!) before any commit.
Multiple types of opening braces when matching pairs with the tokenizer/ext
|
|
Whilst I was testing DocBlox on the Solar Framework I found a bug in the part of the application where I match the curly brace pairs of structures (like classes, functions, methods, etc). Every time a variable was imported in a string using the {$var} notation my algorithm thought that the function/method had ended at the closing brace of that string.
To my surprise I found out that the issue was caused by the fact that the Tokenizer has three different tokens for recognizing an opening curly brace and only one for a closing curly brace.
Introducing: DocBlox
|
|
Ever since I discovered phpDocumentor I have been fascinated by the idea of automatic Documentation Generation. Especially for large projects where an in-depth understanding of the code is a requirement.
Unfortunately, the more I got to work with phpDocumentor the more issues surfaced with its performance, ease of use and above all: memory usage.
Over time I have encountered at least 1 project which could not be processed by phpDocumentor. This was unfortunate and thus I decided to try and contribute to the phpDocumentor project. After a pleasant introduction and solving a minor bug I attempted to solve, or at least decrease, the memory usage issues which were the main cause of my dissatisfaction.
Human readable memory usage in Linux per process
|
|
I like to tune my VPS to use as little memory as possible. Not because I really want to; but because I just don’t have the money to spend on a 2+ GB RAM VPS and I would like to run Jira.
In order to do this I keep a close eye on the processes running and how much memory each takes. (more…)
Updated the design of this blog
|
|
After less than 2 years I have finished my new WordPress template for this blog. The previous theme was clunky and lacked many of the features that WordPress has to offer. I hope to address these issues and enhance this site even more.
To be honest: the graphic design was finished about a year ago but the conversion process took quite some time (life got in the way multiple times).
phpStorm, a true delight to work with
|
|
During my career as a PHP developer (hobbyist and professional) I have tried a multitude of IDEs and tools to write code in. Every IDE I have found thus far did great things but had their downsides. It is with phpStorm that I can send at least some of those problems to the past
pman, a unix command line PHP Manual
|
|
Yesterday I read a blog post by Hannes Magnusson titled Unix Manual pages for PHP functions.
Unknowingly had Hannes done me a great favor by posting the exact instruction on installing pman, a commandline tool which acts as the unix man command. Every so often I am busy working and noticed how easy it would be to have such a Unix / Linux tool, unknowing that it already existed.
The year of change
|
|
I usually do not make new year’s resolutions, but this year is going to be different. This year will be the year of change!
In the past year I have done and experienced a lot of wonderful things but some things were left undone or have been given a lower priority than all the other great things.
To compensate I have made a TO-DO list of things that I want to change or improve this year and which I want to share with you.
