Finding shortest path using Dijkstra’s algorithm and weighed directed graph

One of the first known uses of shortest path algorithms in technology was in telephony in the 1950’s. The problem was in finding alternate routing in case shortest route became blocked. In today’s world shortest path algorithms are used in plethora of applications. You can find them when calculating driving directions, airline travel routing, network communications, linguistics, social networks – they all use graphs to represent relationships between object.

In this particular post, I wanted to implement a weighed directed graph data structure. Because of its properties, weighed digraph is commonly used in mapping applications. I will use this graph in conjunction with the well-known Dijkstra’s algorithm to find shortest path between two points on a map. In order to do this, I will map intersection points on a small section of city map, then calculate shortest distance between those sets of points using our algorithm. Finally, I will use Google Maps driving directions on the same point sets to validate our experiment.

Continue reading “Finding shortest path using Dijkstra’s algorithm and weighed directed graph” »

Basic Data Structures and Their Properties

Knowledge of data structures is fundamental for any software engineer.
Why data structures are so important? The goal of data structures is to organize and store information in an efficient manner. But there is no one perfect data structure that can/should be used everywhere. You have to pick the right tool for the job. While you can use a hammer to drive both nails and screws into a piece of wood, using a screw driver for latter would most likely be a better choice. In this post I wanted to focus on most basic data structures and their properties. In later articles I will go over implementation of those basic data structures.
Continue reading “Basic Data Structures and Their Properties” »

Passing function signature as argument to another function in Scala.

How to pass function signature as argument to another function in Scala? Well, I was looking for this answer myself recently and even though I found couple good examples in the wild I figured it won’t hurt putting together another one.

Let’s say we want to code simple calculator that only does operations on 2 numbers. We want to define rules we can easily plug in to our calculator and as long as the rules require only 2 numbers to perform the operation on, our calculator will happily use it. This may not be the best way of designing a calculator but for the sake of brevity I think it is good enough ;)

object main {
    object basicRules {
        def add(x: Double, y: Double) = x + y
        
        def multiply(x: Double, y: Double) = x * y
        
        def divide(x: Double, y: Double) = x / y
    }
    
    object advancedRules {
        /**
         * assumed x belongs to R
         * assumed y belongs to N
         * x,y must be > 0 otherwise result = -1
         */
        def power(x: Double, y: Double) = {
            var result = if (x > 0 && y > 0) x else -1
            for (i  Double) = f(x, y)
    }

    val calculator = new Calculator
    
    calculator.calculate(5, 5.1, basicRules.multiply)
    // > res0: Double = 25.5
    
    calculator.calculate(2, 3, advancedRules.power)
    // > res1: Double = 8.0
}

How to use IPython notebook with Dropbox

Recently I fell in love with IPython notebook. I installed it on my PC, laptop and my station at work. Very quickly I realized that sometimes I need to access notebook files from work pc at home and vice versa. Since all notebook files are saved locally you have to copy it over to another machine in order to access it.
One way to fix the problem is to setup IPython notebook on remote server and that way all your notebooks are in one place. Another way is to tell your local notebook to look into remote location for files.
Since Dropbox integrates well with Linux by mounting its resource into filesystem it is and ideal service for this purpose. It may be possible to use Google Drive as well but as far as I know it is a little bit more involved.
Continue reading “How to use IPython notebook with Dropbox” »

How to export MySQL database or single table into a file and load it back in

Recently I was working on optimising our internal application at work that is heavily MySQL driven. I was focusing on reworking SQL statements and making sure we are utilizing indexes properly. Modyfing and toying around with tables on live server is less than ideal so I needed a way to reliably and quickly move the data elsewhere so I can steadily experiment and fine tune sql statements and tables. Instead of using available phpmyadmin export options I decided to work directly with mysql which gives you more controll.
Continue reading “How to export MySQL database or single table into a file and load it back in” »

Editing your website files live in Linux/Ubuntu without FTP client

Whenever I work on small web projects I tend to edit files live to speed up the process. I used to use Filezilla FTP client for this purpose although every time you’re saving the file, Filezilla asks you if you want to overwrite the file. This becomes a little bit annoying over time.
On another note, If you’re developing on Windows I suggest you look at WinSCP free FTP client that will let you edit file live and won’t bug you every time you’re saving it.
Continue reading “Editing your website files live in Linux/Ubuntu without FTP client” »

Web Project: Zywiec USA

Zywiec USA

Zywiec USA

Client: Amtec Intl of NY
www.zywiecusa.com

Project description:
While working for Amtec in the advertising department, my manager asked me if I could create a website for them. The objective was to create a clean and slick website for Polish Beer fans. The website was to contain information about beers from Zywiec Brewery, user registration and a listing with upcoming events related to the product. The website also has a simple and custom-made Content Management System (CMS) to provide administration over registered users and gives the possibility to send HTML formatted e-mails.

Used Technologies:
XHTML, CSS, XML, Flash, jQuery, PHP, MySQL

Web Project: Orent Design

Orent Design

Orent Design

Client: Orent
www.orentdesign.com

Project description:
Orent is a design and renovation company located in NY. Initially they hired me to take photos and make panoramas of some of the apartments they worked on. Soon after, they asked me if I could work on the website too. Wojtek and Adam, the brains of the firm are both amazing guys. The first time we met, they already knew what they were looking for. The idea was to bring a very clean and bright web design to focus more on their accomplishments in the portfolio section of the site.

Used Technologies:
XHTML, CSS, jQuery, PHP