This is an old portfolio maintained just for historical purposes.
Here you can find a list of the projects I’ve worked on in the past and those I’m working on right now. This page is regularly updated to show my current projects. Last updated: 19 December 2016.
Here are some quick links if you don’t feel like browsing through the full list of projects.
Following is a full list of my projects, sorted by category. You can click on any of the following category titles to skip directly to that category:
Here are some of my projects related to physics. Note that these often intersect with electronics and programming categories, so you might also want to check those categories.
Physics Training website
This is a website I’ve made about physics problems. I occasionally upload there a new physics problem together with my solution. This is a great way for me to learn physics, solve interesting problems, and learn about technologies such as LaTeX (in which I typeset the formulas), MySQL (the problems are stored in a MySQL database), jQuery and PHP. It can also hopefully help others trying to solve these problems or just help them to improve their physics problem solving skills in general. Links: Physics.Training
Accuracy of Distance Sensors (Extended Essay)
While working on my Extended Essay in Physics, I researched how different factors affect the accuracy of various distance sensors. I used 3 ultrasonic and 2 infrared sensors to make this moving platform, and tried to find how their accuracy depends on factors like distance from an object, the angle to an object, the object’s color and its material. The sensors took readings every few milliseconds and transferred them through an Arduino to my Processing program, which saved the data and displayed them on a graph. I found this whole experience very exciting and enjoyable since I haven’t done any “real” research before.Links: Extended Essay [PDF]
In the center is a chaotic circuit on a prototype board, which I made according to the website chuacircuits.com. Using the same schematic, I also made a PCB (printed circuit board) version on the left. If voltages across specific components are plotted on an oscilloscope, the chaotic pattern on the right emerges (it’s called Lorenz attractor), which is fascinating because the circuit behaves like a chaotic system. I also learned a lot from making the PCB in EagleCad and soldering the components.
METAR Data Collector
By modifying the code from http://htmlparsing.com/php.html, I made a PHP program which uses CURL to periodically check for and download weather reports in the METAR format for Bratislava. I set up a CRON task on my Linux VPS to run this PHP script every hour, which connects to the website of the Slovak Hydrometeorological Institute and adds the current METAR reports into a file. I made another PHP script to parse this report and extract from it the temperature and pressure, which I plotted in Excel over a period of about 1 month. And although I didn’t find a correlation between temperature and pressure, at least I’ve shown that the mean temperature increases over time (from January to March).
IV Characteristics of LEDs with Different Colors
For the IB Group 4 Project (a science project with free topic), I had an idea to determine how does the volt-ampere characteristic of an LED change with its color. I performed the experiment with two of my classmates, where one of us was always changing the voltage across the LED and another was recording the corresponding current through the LED into an Excel spreadsheet. Then, the voltage-current pairs for LED of each color (wavelength) were plotted on a graph to form different IV characteristics. As expected, we came to a conclusion that with decreasing wavelength of the LED, the LED draws more current at a given voltage.
Right now I don’t have many projects related directly to mathematics, but you can find many math-related projects under the programming category.
Regular Polygons Produced by Complex Numbers
As part of my Math IA, I decided to do an investigation into how complex numbers can be used to produce regular polygons with various properties. After completing the whole investigation, I came up with the following equation whose solutions for form the vertices of a regular -gon with edge length , “naturally” rotated, translated so that its bottom edge starts at origin, and further rotated by some angle in degrees and further translated by a given amount of units to the right and another amount of units upwards. During the process, I also learned to work with Wolfram Mathematica® where I tested the equations, and with Inkscape, a vector graphics editor.
Here are some of my programming projects developed in Java, PHP, C++, C, PHP, HTML, CSS, MySQL, and more.
Simple Tea Timer Android App [Java]
An Android application which I made and published (see https://play.google.com/store/apps/details?id=com.marianlonga.simpleteatimer). Since I already had some background in Java, I decided it might be cool to learn to program Android applications. So, I decided to make this app as a practical way to learn various Android concepts. The app has 3 presets for timing the infusion of green, black and herbal tea, and an option to select custom time. The progress bar and timer show the remaining time. I even got positive reviews from some random people who installed the app!
Sudoku Solver [PHP]
This is a program I made in PHP for solving Sudoku (see http://marianlonga.com/sudoku/). The program works in such way that it first writes down possible numbers for all empty fields. Then it uses strategies inspired by human solvers to solve the puzzle. For example, the program goes row after row, and if it finds that a certain number can only fit into one field in that row, it fills the number in. The same process is then repeated for individual columns and squares.
Addition Snake Game [Java]
This is a math game I made in Java for a Computer Science project. It’s a classical Snake game, but modified so that children can use it to learn addition in a fun way. The snake may only collect the food with a number which is the sum of the 2 numbers on top of the screen. After eating foods, problems with different sums appear, the snake gets longer and faster, the foods rearrange, and the score increases. When asked, the kids said they like it. Also, I learned a great deal of Java along the way.
Using OpenCV to Track Objects [C++]
While looking for a way in which to implement robotic vision, I found a great tutorial by Kyle Hounslow on using OpenCV (computer vision library) for tracking objects in real time. And although my program is largely a modification of his code, I learned a lot about how object tracking works: first an image captured from a webcam is converted from RGB to HSV format, on which filters for hue, saturation and value are applied to filter objects of specific color. Then, the so-called dilation filter was used to reduce noise and on this image, the position of the object was calculated as the center of mass of the filtered region.
Program for Drawing Fractals [Java]
Once on a Computer Science lesson, we were supposed to write a code for drawing fractals using the Imagine Logo program. However, this program wasn’t available for my platform, and so I decided to make a similar program myself using Java. It’s based on an object Turtle, which can move forward a given distance, rotate by a given angle, change the pen’s color, put the pen up/down to draw using visible or invisible color, “teleport” to a given location (x,y) and set the angle to a specific one. Using these functions, I’ve drawn fractals such as Koch’s snowflake, Sierpinski triangle and tree fractals.
Online Photo Portfolio [HTML/CSS/PHP/MySQL]
I noticed that the photo gallery on my website was quite disorganized, and since most of the galleries offered online were either paid or didn’t have the features I wanted, I decided to make myself a new one instead. So, as part of my Computer Science IA, I made myself a photo gallery in PHP, MySQL, HTML and CSS, where I can upload my photos and visitors can sort and view them according to various criteria. For example, the photos can be sorted by date, quality and title, and the visitors can choose only to display photos from a certain date and time range, by a certain subject (e.g. animals), quality (1-5 stars), shutter speed, aperture, ISO and color. After clicking on a photo, the photo is enlarged. See http://marianlonga.com/online_photo_portfolio.
Pong Game [Java]
This is a Pong game I made in Java, where the player moves the paddle up and down by the position of their mouse and tries to hit the ball so that it will touch the red space behind the opponent’s paddle, by which the player scores a goal. The opponent is a computer, which I programmed to follow the trajectory of the ball in the vertical direction, but with a certain maximum speed, so that the computer won’t be able to catch every ball and thus will be beatable by a human.
My LCD Library [C]
Since I couldn’t find a good LCD library for my project on the Internet, I decided to make my own instead, and learned a great deal more than if I had just used a ready-made one. The library is written in C and interfaces the communication between a PIC microcontroller and an LCD display. The library has functions for displaying characters, strings of text and numbers, and also functions for turning the display on/off, setting cursor position, cursor blinking, and many more. I’ve open-sourced the project by uploading it to GitHub where other people can download and use it (see http://github.com/marianlonga/LCD‐library).
Here are some websites that I’ve worked on recently. Note that these projects don’t include just making the website, but also stuff such as working with the linux command prompt, setting up a server and working with databases.
My Previous Website
One of my projects was my previous website. I’ve made this website completely from scratch, starting with just a VPS with a Debian Linux distribution, where I set up Apache, MySQL, PHP and WordPress. This is where I write about my projects from electronics, programming and other things, and where I have my Sudoku solver, Android app and the best of my photos. Besides being a place for documenting my projects, it can (hopefully) also help others trying to do the same thing as I did.
BratMUN 2014 Website
This is the website of the Bratislava Model United Nations 2014 conference (http://bratmun.sk), which some of my classmates and I helped to organize (my position was Head of IT). I created this website from scratch together with one of my friends ‐ he worked mostly on the vector graphics, while I did mostly coding and also some design. This was a great experience for me to improve my WordPress, PHP and design skills. I was also responsible for the registration system and online voting system, where I’ve learned a lot about MySQL and AJAX.
This is a web application I made during the IChack 2016 competition (Imperial College’s hackathon) for organising guitar songs, for which I won the Best Newcomer Prize. To add a song, you first login through Facebook and then just paste a URL to a website containing the chords for a guitar song. The website is then parsed and relevant data such as artist, title and content of the song are extracted from it and saved to a database. You can then view and delete your added songs and download all of them as a songbook in PDF format for printing. The chords are also highlighted, making it easier to play on a guitar. In the process, I learned to work with the Facebook API, how to parse HTML using DOM in PHP, and improved my REGEX knowledge. [added 19/12/2016]Links: http://mysongbook.io
IB Website Administration
I am administering our school’s IB website, where I’ve for example updated the documents in the admissions section to the current year’s documents, uploaded the photos from the BratMUN 2013 conference organized by our school, updated the current list of teachers and students, and with a friend updated the photo slideshow to show the photos from current events at school (the photos were very outdated before). Also, I’m (hopefully) planning to remake the whole website with a friend during the summer holidays.
NGINX Web Server using Raspberry Pi
One summer, I decided to make my own webserver out of a Raspberry Pi using a tutorial from http://arstechnica.com/gadgets/2012/11/how-to-set-up-a-safe-and-secure-web-server/. And although it was very time consuming and sometimes frustrating, it was really a great learning experience, and I eventually installed a Debian Linux on which I set up an NGINX webserver, PHP, MariaDB (similar to MySQL), firewall, and almost connected it to the Internet. So, although I didn’t quite make the Pi available from the internet (because of impracticality and problems with my ISP), I learned a lot about how various technologies work during the process.
Here are some of my projects from electronics. Many of them are also related to programming.
Arduino-Based 4-Wheeled Robot
This is a 4‐wheeled robot I made, utilizing Arduino, Motor Shield, 12V battery, 4 (hidden) DC motors, and an ultrasonic distance sensor. I programmed the robot to move forwards, until it detects a wall using its ultrasonic sensor, at which point it would rotate and continue going forward until it stops before another wall, and so on. Having very little experience in electronics before, I’ve learned a lot of new things on this project, many essential for my further electronics projects.
PIC18F452 Makes LED Blink
This was one of my first projects with low‐level electronics. I used PIC18F452 microcontroller (MCU) instead of Arduino, and programmed it to blink an LED in approximately 1‐second intervals. The move to low‐level MCUs was quite difficult for me, because of their extra “hassle”, such as need for a voltage regulator, an oscillator, a few capacitors, etc. However, I’m glad I did it since on a lower level I have higher control of the MCU and can learn more. Anyway, it was a great starting point for PIC projects.
7-Segment LED Display Counts from 0 to 9
Continuing my PIC projects, I used a 7‐segment LED display (those used in elevators) and a PIC18F452 microcontroller to display numbers from 0 to 9 in a loop, each for ~1 second, thus making a simple stopwatch. Each of the LED segments is controlled by a different pin of the PIC, and so by changing the voltage on different pins, different combinations of segments light up. I have created a program with functions for displaying numbers from 0 to 9 by applying voltage to different pins.
Potentiometer Controls LED Display
In order for the line following robot to have a sensor of line, analog‐to‐digital conversion (ADC) must be used to convert the signal from sensor to digital value that the microcontroller understands. This project was a test of ADC, where before connecting a real sensor to the PIC, I used a potentiometer. Based at the angle at which the shaft of the potentiometer is rotated, different voltage (from 0V to 5V) is dissipated on it, which is converted by the PIC to a 0‐9 range shown on the display.
Infrared Sensor of Distance/Color
Here I’ve made a “home‐made” IR sensor of distance or color by putting in parallel an infrared LED and a photodiode. The IR beam emitted from the IR LED spreads, bounces off an object and then returns back to the photodiode, which changes its resistance and thus the voltage dissipated on it. This voltage is measured by the PIC and using ADC, it is transformed into a range 0 ‐ 9 shown on the LED display. This can not only be used as a sensor of distance, bit also as a sensor of color, since objects of different colors absorb different amounts of IR light.
Digital Clock on an LCD Display
I have interfaced the LCD display with PIC and used my LCD library to create a digital clock. Although not perfect, the time is set when the PIC is programmed and increases in intervals very similar to 1 second (for which I have used PIC timers). This project combined the interface of LCD and PIC, my LCD library, and PIC timers, which are the things I’d just learned about. It can also easily be adapted to become a stopwatch or a timer, which may be quite practical.
Fading an LED using PWM
I decided to learn PWM (pulse width modulation), which is a technique used in robots for controlling the speed of their motors. I use it here to fade an LED on and off smoothly, as it happens in some modern lamps. Since an LED is very sensitive to changes in voltage, it is impractical to control its brightness by changing it. Instead, a 5V pulse of some width is repeatedly applied to the LED in very fast intervals, creating an effect that the LED is brighter or dimmer depending on the pulse’s width.
Digital Gates using Transistors
Here I’ve created the logic gates AND, OR and NOT just out of transistors. Although I know that I can just buy ready‐made integrated circuits with these gates built in, this is much more fun since I understand how they are made. Similar gates are the building blocks of basics computers, which is very exciting (this is their very simplified version, of course). Eventually, I’m hoping to create a simple binary adding machine by combining these gates together to larger circuits.
This was a nice little project which I made during the summer to keep me cool. I’ve used a regular 5V fan with +5V, GND and SIG wires, and a USB cable which I cut to gain access to its +5V and GND lines. By connecting both +5V lines together and both GND lines together, the fan becomes powered from the USB. And since it’s rated at 1W, the current it needs is 200mA, which a computer’s USB port can handle. It’s also great for use in cars having a USB‐to‐car adapter.
Recently I became interested in filmmaking and I have produced a few videos which are on my YouTube channel. The videos include “53 Things to do in Hong Kong” where I describe the places I visited in HK, “Taiwan Trip 2016” which is a kind-of vlog about my week trip to Taiwan, and “London at Night” which is a night tour of London’s famous tourist places. The newer videos were filmed using Sony RX100 mkIII and processed using Final Cut Pro X. [added 18/12/2016]
You can download my art portfolio here.