The Olimex PIC-MAXI-WEB board features a Microchip PIC18F97J60 microcontroller. This article will shortly demonstrate how to write a program to the flash memory of the device so it can be executed. For this tutorial, you will need a Windows computer and a Microchip PICkit 3 programmer (or a clone of that specific device).
I’m a user and big fan of JetBrains’ IntelliJ IDEA IDE. Having tried and used several Java IDEs in the past, I personally think it’s the best out there. On top of that, every major update bring a couple of new amazing features.
Yesterday the 14.1 update of the IDE was released. As usual I rushed to download and install the new version, after a quick glance of the release notes. But as a first, I ran into a major issue.
I’m usually use my desktop or my laptop for programming, but a while ago I got myself a Microsoft Surface Pro 3, to carry around more easily. I also use this for programming. The Surface Pro 3 has a very high-resolution display, which makes whatever is displayed look nice and crisp. But if you use the native resolution, everything will also be very tiny. Microsoft has solved this issue by having Windows do DPI scaling of applications. This essentially simply scales them up to make everything readable to the user. Some applications support this and those that do provide a very nice upscaled crisp interface.
Up until now, IntelliJ has not supported high DPI displays, and as a result, the native OS would just scale it up, making text look slightly blurry, as well as other elements in the UI. To resolve this JetBrains has worked on adding support for these displays on all platforms into their IDE. This is where it got messy.
After installing the new version, and running it, I quickly noticed that there was something wrong. My code looked very crisp for sure, but it was incredibly tiny. Also icons on the toolbar had been shrunk down to a small size. To find the answer, I had to dig through some of JetBrains’ bugtracker issues and found a fix for the problem.
The problem is that (for some reason) the IDE does not detect that I’m running a high-DPI display. So solve this, you have to force it into the HiDPI mode. You can do this by editing the vmoptions files for the IDE, which are located in the same folder that holds the IDE’s binary files. For example “
C:\Program Files (x86)\JetBrains\IntelliJ IDEA 14.1\bin” on Windows 8.1 x64. Add the argument
-Dhidpi=true to the end file. Be warned though, there are vmoptions files for both 32-bit and 64-bit, make sure you change the right one, or change both to be sure.
It’s clear that there’s still a few issues for JetBrains to work out, even in HiDPI mode, the text in the tip of the day window is pretty small, but they are well on their way towards properly supporting these displays.
Let’s say you want to work on some code in a git repository. To do this, generally you will “fork” this repository, by cloning it into your own repository. On GitHub there’s a simple “fork” feature that takes care of this. After a while, you might have made some changes, but the original repository that was forked might also have new commits pushed to it. A question many new git users then face is: “How do I pull the upstream changes from the original repository into my own?”
WinMerge is a great free tool for merging conflicts when working with a version control system like Git or Subversion. To use it with Git(Hub) follow the following steps:
- Locate your .gitconfig file. If you’re using GitHub for Windows, you will certainly find it in your user folder.
- Add the following text at the bottom of the file:
1234[diff]tool = winmerge[mergetool "winmerge"]cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" \"$MERGED\"
If you’re still using a 32-bit version of Windows, Replace “Program Files (x86)” with “Program Files”.
- To merge a conflict, open a shell and browse to your repository’s root folder.
- Use the command
git mergetoolto merge the conflicts with WinMerge.
If WinMerge doesn’t open, Git might still be trying to use a different tool, try again with
git mergetool --tool=winmerge.
You don’t often come across a piece of Delphi code that uses the keyword “absolute”. A lot of Delphi programmers consider it to fall in that “stay away” category, like “goto”. The keyword, when used correctly can however be very convenient and improve the readability of your code.
The absolute keyword allows you to define a variable that points to the memory location of another variable. This is something you can achieve with pointers as well, but the absolute keyword allows you to do it very cleanly in a single line of code.
A while back I made a post about the PasteLock service I’ve developed and published. It took me quite a while to develop the service, mainly due to the fact that I am not a webdesigner, I’m a webdeveloper. As such, I usually open up Adobe Dreamweaver to develop anything that requires HTML and CSS work. Why Dreamwaver? You must be cringing if you think I need a WYSIWYG editor to create a website. This is not the case, but I like to see what I develop when I develop it.
Unlike before I decided not to go with Dreamweaver for once and try something new. I came across a web development suite that seemed to meet all of my requirements. WeBuilder 2014, still in beta at the time, had all of the tools I needed, like syntax highlighting, extensive code completion, a live browser preview and even support for PHP debugging. As I was immediately won over by the extensive feature list, I decided to give it a try.
If you’re working with PHP software, you’ll often need image processing software to support complex processing of images in PHP. Most commonly, you will be using the GD or Imagemagick libraries.
To install Imagemagick on Ubuntu for PHP:
apt-get install imagemagick php5-imagick --no-install-recommends
To install GD on Ubuntu for PHP:
apt-get install php5-GD --no-install-recommends
Some PHP software, such as MediaWiki, prefer for servers to have the “intl” PECL package to be installed. On Ubuntu you can insall it as a precompiled package from the official repositories:
sudo apt-get install php5-intl --no-install-recommends
If you start from a clean Ubuntu install and you want to build the package yourself, you might not have all of the dependencies installed. Run this command to make sure you have all of the prerequisites installed:
sudo apt-get install gcc linux-headers-$(uname -r) libicu-dev php5 php5-dev php-pear build-essential --no-install-recommends
To build the package itself:
sudo pecl install intl
You might also have to restart your webserver if you manually build the package. For Apache, run:
sudo service apache2 restart
For a while now I’ve been playing around with a couple of ideas for new projects in my head. I finally decided to go through with turning one of these ideas into reality. The result is PasteLock.
PasteLock is a pastebin style site where you can host pieces of text or code, so you can easily distribute it to your friend and colleagues. There are already many pastebin services out there, but I wanted to set out to create something special. This pastebin offers something different than most other pastebins, as it offers security.
When you create a paste, the title and paste content is encrypted in the database with a randomized encryption key which is never stored on the server. The encryption is powered by the AES-256 encryption algorithm. On top of the server-side encryption of the data, PasteLock also actively enforces a verified SSL connection to ensure that your connection to the site is secure and can’t be intercepted. In the event that the site were to switch to a stronger encryption algorithm, the data will also be automatically re-encrypted with the stronger algorithm when it is being accessed.
Syntax highlighting is of course available for about every programming language out there. The pastes that have been posted can easily be printed or downloaded from the site with the click of a button. For printing, the site provides a clean print-friendly format.
So go check it out at https://www.pastelock.com
In an application I’m working on, I need to convert a set of characters to a string, but I want it to be short, so I want to keep the ranges intact. Now, there may be a better way of doing this, but I had little luck finding a solution online, so I wrote this piece of code:
TCharSet = set of Char;
function CharSetToStr(const CharSet: TCharSet): string;
C, Prev: Char;
Result := '';
InRange := False;
Prev := #0;
for C in CharSet do
if not (Ord(Prev) + 1 = Ord(C)) then
if InRange then
InRange := False;
Result := Result + '''' + Prev + ''', ''' + C + '''';
end else if Result <> '' then
Result := Result + ', ''' + C + ''''
Result := Result + '''' + C + '''';
end else if not InRange then
InRange := True;
Result := Result + '..';
Prev := C;
if InRange then
Result := Result + '''' + Prev + '''';
Result := '[' + Result + ']';
If you input [‘a’..’z’, ‘A’..’Z’, ‘0’..’9′, ‘_’, ‘ ‘, ‘.’], it will print out the string: [‘ ‘, ‘.’, ‘0’..’9′, ‘A’..’Z’, ‘_’, ‘a’..’z’]
In case anyone knows a better way of doing this, let me know in the comments.