Hull University Minecraft Map

I used geocraft to generate a Minecraft map of the University of Hull, and now I am sharing it with you. You can see a short video of the map below.

The map is available as OpenStreetMap data only, or with the DEFRA (Department for Environment, Food & Rural Affairs) lidar data from, (I think) 2015, so the multi-story car-park is not included for example.

The original project is broken as the lidar data did not get included, but it was possible to fix it using the suggested changes by RobinWhitfield here in this issue.

The original licencing for this map is CC-BY-SA for the pure OpenStreetMap map and the other is the open government licence. You may use these maps as you wish within these constraints.

If you plan on running these maps on a server, you may want to turn off leaf decay as some of the trees are all leaves and do not have a wood block to prevent them from decaying, as seen in the video.

I am not associated with Hull University, they’re good guys.

What does it take to get Fiber to the Home?

Fiber optic internet is the newest form of residential cable that is run either to your local distribution cabinet or to your house. Because the maximum bandwidth that can be put down a fiber cable it enables greater speeds along greater distances thanks to its physical properties (light).

A fiber optic cable can in some cases be used at 10Gbit/s but for residential its more likely 1Gbit/s or less.

Many ISPs will allow you to take advantage of fiber optic but limit the speeds for a reduction in price.

How Long Does it Take to Install Fiber?

Fiber optic cable will require physical replacement of the cable itself, if the ISP is installing fiber to your home they will need to set up and plan which route they will take to your property.

In most cases, they will be able to attach the new cable to the old media and pull it through to your property, but if they hit snags or can’t do that, it can take much longer.

A best-case scenario can be 10 minutes, a worst-case can be up to three months, especially if you have ordered fiber where it was not originally offered or you paid extra for installation. A typical installation can be 2 to 4 hours.

Will They Dig Up my Garden?

If you have ordered Fiber to the Home, they may require access to your property to install the Fiber, which may mean routing your cable from the street to a jack in your home.

If they need to install a brand new cable they will indeed need to bury the cable and will therefore, do some digging.

Is Fiber the Fastest Home Medium?

Yes, for residential installations fiber is the fastest. There also exists DOCSIS 3 and 3.1 which is also capable of 1Gbit/s speeds however it is not used as much.

If you do get fiber installed at your home, it may be a good idea to ensure you aren’t bottle-necking your connection by ensuring your router, any switches you have or the computer you are using is capable of the speeds you expect, and wherever possible use an Ethernet cable.

Check all API variables are included in a REST API for PHP.

I recently have been working on a weather recording project and as part of this endeavour wanted to check that all of the variables I have posted to my API were set, it can be rather a lot of work to have to specify each if (!isset($_GET[])) parameter so I decided to use a function that can take any number of arguments using a ‘variadic’ function in PHP.

// Returns true if all variables are set, else returns false.
function getVariablesSet(string ...$getlinks) {
      foreach ( $getlinks as $link ) {
        if (!isset($_GET[$link]))
        {
            return false;
        }
    }
    return true;
}

Now, when I want to use a new api ‘command’, I can simply do the following,

$browser_response = new stdClass();
$browser_response->message = "Command not specified.";

if ($_GET['command'] == "new-temperature")
    {
        if (getVariablesSet("datetime","temperature","humidity"))
        {
            $browser_response->message = "All GET variables set.";
        }
        else
        {
            $browser_response->message = "All GET variables not set.";
        }
    }

echo json_encode($browser_response);

This way, so long as we have specified the command and the variables required we can enter the scope, otherwise, we can kick them out until their query is formatted correctly. Having lots of variables may become problematic so you may want to use POST or even break them out into subsections to give users a better understanding of their error. I should add this only works for PHP 5.6 and above.

In any capacity, Good Luck. Aidan.

Oversimplified Remote Desktop for Microsoft Windows

If you would like to set up windows for remote desktop or would like to use remote desktop then this is the guide for you.

Microsoft Windows remote desktop requires you to have remote desktop enabled on the target machine (the machine who’s desktop you would like to use).

How to Enable Remote Desktop

  1. Press the Windows Key and I (I as in India) at the same time.
  2. Click on the System Icon.
  3. On the left panel, scroll down and select “Remote Desktop”.
  4. Enable Remote Destkop by sliding the slider to enabled.

How to Connect to a Computer Remotely

If you followed the steps above you may also want to make a note of the PC name to connect from your remote devices, or you can do the following.

On The Target Machine

  1. Press the Windows Key and R at the same time.
  2. In the run box, type ‘cmd’ and press enter to open Command Prompt.
  3. In Command Prompt type ‘ipconfig’ and press enter.
  4. Take note of the IPv4 Address, this is the address you will use to connect to your target machine later. On Home networks its usually 192.168.1.x where x is your target machine’s IP address. Write down your IPv4 address, you’ll need it to connect later.
  5. Now type ‘hostname’ and press enter, this will produce your hostname, which in some circumstances you may also use to connect however It depends on your network setup.

On The Machine You Plan to Connect From

  1. Press the Windows Key and type ‘RDP’ and then open ‘Remote Desktop Connection’.
  2. In the Computer box, enter the IP address you collected earlier.
  3. In the Username box, enter the hostname followed by a backslash and then your username.

Soon after you should be prompted to enter your password. If your username or password combination is incorrect you may have entered the information incorrectly. For example my computer has the IP address 192.168.1.16 and the username would be ‘AIDAN-DT\Aidan’ because my hostname is ‘AIDAN-DT’ and my username is ‘Aidan’

If all goes well you should now be able to access your remote computer.

Troubleshooting Tips

Use the following paragraph to troubleshoot your setup.

Remote Desktop can’t connect to the remote computer for one of these reasons:

If you see this error as written above make sure to follow the instructions listed, such as making sure remote access is enabled, the computer is turned on and is connected to the internet. If that still doesn’t work it may be because of the following,

  1. Make sure the IP address you fetched at the beggining is correct, if the IP address is incorrect you may not be trying to connect to the target machine and you may be trying to connect to another device on your network or nothing at all, making sure your IP address is correct is important.
  2. Make sure that you are on the same network as the remote machine, if you are trying to connect from outside your home you first need to port forward and instead of using your home IP address are instead using your public IP address.
  3. Make sure that you aren’t restricted by a firewall. If you are on a home connection connecting to another computer then this shouldn’t be a problem, but if this is a corporate network you may have firewall restrictions preventing you from contacting other clients on the network, such as client isolation.

Remote Desktop cannot be enabled

You cannot enable remote desktop on Windows 10 Home, you need to upgrade to Windows 10 Pro.

Remote Desktop works for a day or so and then the Remote Machine’s IP address changes

This is because by default DHCP leases on a private network typically are only assigned for a day, after which they are ‘released’ which means new devices on the network can take their place. This is so that small networks with many devices like a home network, don’t run out of IP space.

The solution to this is to assign a static IP address for the target computer so that it’s IP address will not change. The compromise is that now that IP address can only be used by that machine and if you change it from what it is currently leased under, you will need to wait for the client to ask for a new one or force it to release its IP address early.

Remote Desktop doesn’t work outside my Network

There are many factors that can cause this behaviour.

  1. Make sure that you are using your Public IP address, your public IP address is the one given to you by your internet service provider, you cannot change it without asking them in most cases. It will not be in the 192.168.0.0 or 10.0.0.0 subnet range, if you are attempting to connect to a remote machine using 192.168 or 10.0 IP addresses you are doing it wrong.
  2. Make sure you have port forwarded Remote Desktop ports to your target machine. Port Forwarding on a home network typically takes place through your router’s configuration panel which can usually be accessed through a sticker on the back of the router or through an app, you will need to forward the port 3389 with both TCP and UDP enabled. In your router the port should be forwarded to the LAN address (192.168 or 10.0) of your target machine.

My Home Network – Part 2

Hello again, this is the second in a series of my home network posts. In this edition, we’re going to be flashing another router with OpenWrt. You can read part one here.

I decided it was time to leave all the old hardware behind and move to brand new stuff. I was having problems with the ZYXEL VMG8924-B10A as the main router, it kept cutting out and was causing short minute outages that ultimately I think was due to the system running out of ram and botnets trying to break into the thing. So I decided it was time to jump ship and move to something a little bit more enterprise. At the same time, I decided now would also be a good time to leave the Netgear WNR3500L V2 to one side. Despite it serving us good for many years, its routing features won’t be necessary for the upgrade as I want to have a good crack at managed switching.

The new network

The new network is composed with the following,

  • A Ubiquiti EdgeRouter X
  • A Netgear ProSafe GS108T
  • A new to me MR33

I wanted to do away with having two routers on the network, it wasn’t neccisary and caused some of the upstairs equipment to be inaccessible from downstairs, the new configuration would mean that all management would be done through the EdgeRouter X which would be much cleaner and hopefully faster.

The ProSafe GS108T was a garage find, I wasn’t using it for anything and I hadn’t really implemented proper VLAN tagging before so I thought now was a better time than ever to get into it.

Network Topology
My new home network diagram, ignore the fact its all Ubiquiti gear, its the iconography I had loaded at the time. And I couldn’t quickly find icons for Netgear.

I also received a new to me MR33 complete with Meraki OS. Unfortunately their licencing of their hardware is not something that aligns with my principals on hardware so before we accept any software agreements I thought it best to do as always and flash OpenWRT to the thing and say goodbye to Meraki. Flashing OpenWRT onto it was no easy feat but I made sure the thing never saw access to the internet and eventually I was in.

[aidan@aidan-ld mr33]$ ssh root@192.168.1.1


BusyBox v1.28.3 () built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 18.06.1, r7258-5eb055306f
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:~# 
root@OpenWrt:~# exit
Connection to 192.168.1.1 closed.
[aidan@aidan-ld mr33]$ 

A couple of configuration changes later and we’ve got a dumb ap ready for deployment.

I really wanted to play with subnets this time, before we had two but this time I thought go hard or go home, so in total there are five subnets on my home network now, that’s enough IP space on the 192 network for 1200 devices. I’ve refrained from using the 10.0.0.0/16 network class simply because I use some VPNs with the same IP space so I thought best to just keep it simple. I have to say the Ubiquiti EdgeRouter X was a little bit new to me but I like the interface, PoE was a particularly nice touch.

For the Netgear switch the plan is to take a trunked VLAN ethernet cable and have the VLAN20 on the first 7 ports and leave the remaining 8th port for the MR18. Setting it up was quite easy using the online wizard however the visualisation thingy was clearly older than useful because it seemed to use some java applet that chrome did not like.

A Little Conclusion

I like what I’ve got set up now and will probably leave it for some time. The ZYXEL VMG8924-B10A is destined for the bin but the Netgear WNR3500L V2 I’ll keep for now, it can do VLANs and probably would have worked fine, I just wanted to use a managed switch.

The new network is great. I have a printer which its driver doesn’t seem to like cross-lan communication because every time I print something, it prints fine but the software client continually reports that the communication with the printer failed. I put that down to poor software testing I guess. Wouldn’t be the first time someone had printer woes.

EdgeRouter X Dashboard with VLANS
EdgeRouter Dashboard
SubnetPurpose
192.168.1.0/24Downstairs Wired (eth1)
192.168.2.0/24Upstairs Wired (eth2.20)
192.168.3.0/24Downstairs Wireless AP Clients (eth3)
192.168.4.0/24Upstairs Wireless AP Clients (eth2.40)
192.168.5.0/244th port on router, only a printer attached.(eth4)
Subnets (eth0 is WAN)

Thats all folks. Aidan.

Making a Web Scraper to Download Images off the Internet

One afternoon I read on a popular website that http://prnt.sc/ uses sequential 6 character codes to host user images on their website, this made me wonder what was on there.

The next day I made a small bot to scrape the website and collect all images through a range and then the bot could run multiple times to collect more images if necessary. I left the bot running for a couple of hours and here’s what I managed to find, I’m sure I cannot re-host the images but the range I scraped through was gmmlaq for 1,287 images before the bot was IP banned through Cloudflare, fair enough. I took the time to view each image individually.

Here’s What I Saw

  • A drivers licence and matching passport which was expired.
  • A WordPress username and password combination for a web-host reseller which I did not test.
  • Many Many out of context conversations, half of which were in Cyrillic.
  • A teacher seemingly contacting students and recording the fact they did not pick up through skype.
  • Ominous pictures of a tree posted multiple times.
  • Screenshots of video games, mainly Minecraft, Runescape, Team fortress 2 and League of Legends.
  • A lot of backend-databases of usernames and email addresses for customers and users, in fact, they are a large proportion of the screenshots.
  • A lot of SEO spam.
  • A conversation between two users through skype debating over banning an influencer from their platform for fake referrals.
  • About 2 lewd photos.
  • A few hotel confirmations.
  • Whole credit card information including CVV and 16 digit number.
  • A spamvertising campaign CMS platform.
  • A gambling backend database disabling access to games for specific users.
  • One 4×4 pixel image and One 1×47 pixel image.

What Did we Learn?

  • Stuff like this, particularly URLs should not be sequential.
  • A lot of users on the platform see the randomness of the URL as sufficient security however, its undermined by the fact the website can be scraped sequentially.
  • They did eventually ban the bot after 1,287 images, which is probably closer to 1,500 images before testing however Cloudflare seems to be the one preventing access, so it may be a service they offer.
  • A lot of users on the platform are web developers and use every trick in the book to boost their numbers.
  • A lot of users are Eastern European and American.

How I Made the Scraper

I made this bot using Python 3.7 however it may work on older versions. The URL is base 26 encoded to match the alphabet, incremented and then converted back to a string for scraping. Images are saved with their counterpart names. I do not condone running the scraper yourself.

import requests
import configparser
import string
from bs4 import BeautifulSoup
from functools import reduce

# Scraper for https://prnt.sc/


# Headers from a chrome web browser used to circumvent bot detection.
headers = {
    "ACCEPT" : "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "ACCEPT-LANGUAGE": "en-US,en;q=0.9",
    "DEVICE-MEMORY": "8",
    "DOWNLINK": "10",
    "DPR": "1",
    "ECT": "4g",
    "HOST": "prnt.sc",
    "REFERER": "https://www.google.com/",
    "RTT": "50",
    "SEC-FETCH-DEST": "document",
    "SEC-FETCH-MODE": "navigate",
    "SEC-FETCH-SITE": "cross-site",
    "SEC-FETCH-USER": "?1",
    "UPGRADE-INSECURE-REQUESTS": "1",
    "USER-AGENT": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
    "VIEWPORT-WIDTH": "1920",
}

# https://stackoverflow.com/a/48984697/2697955
def divmod_excel(n):
    a, b = divmod(n, 26)
    if b == 0:
        return a - 1, b + 26
    return a, b


# Converts our '89346963' -> 'gmmlaq'
# https://stackoverflow.com/a/48984697/2697955
def to_excel(num):
    chars = []
    while num > 0:
        num, d = divmod_excel(num)
        chars.append(string.ascii_lowercase[d - 1])
    return ''.join(reversed(chars))

# Converts our 'gmmlaq' -> '89346963'
# https://stackoverflow.com/a/48984697/2697955
def from_excel(chars):
    return reduce(lambda r, x: r * 26 + x + 1, map(string.ascii_lowercase.index, chars), 0)

# Load config or start a new one.
# Image start is random
def get_config():
    try:
        config = configparser.ConfigParser()
        with open('config.cfg') as f:
            config.read_file(f)
        return config
    except:
        config = configparser.ConfigParser()
        config['Screenshots'] = {'imagestart': 'gmmlaq', 'url': 'https://prnt.sc/', 'iterations': '20'}
        with open('config.cfg', 'w') as configfile:
            config.write(configfile)
        return config

# Save image from url.
def get_image_and_save(website_url, image_url):
    try:
        html_content = requests.get(website_url + image_url, headers=headers).content
        soup = BeautifulSoup(html_content, "lxml")
        #with open('image_name.html', 'wb') as handler:
             #handler.write(html_content)
        ourimageurl = soup.find(id='screenshot-image')['src']
        #print(ourimageurl)
        image = requests.get(ourimageurl).content
        with open(image_url + '.png', 'wb') as handler:
             handler.write(image)
    except:
        print (image_url + " was removed probably.")

def increment_image(image_url):
    return to_excel(from_excel(image_url) + 1)

config = get_config()
print ("Starting at '" + config["Screenshots"]["imagestart"] + "'.")

website_url = config["Screenshots"]["url"]
current_image_url = config["Screenshots"]["imagestart"]
for x in range(0, int(config["Screenshots"]["iterations"])):
    print("Currently downloading image " + current_image_url)
    get_image_and_save(website_url, current_image_url)
    current_image_url = increment_image(current_image_url)

# Set new config code to current location for next run.
config.set('Screenshots', 'imagestart', current_image_url)
with open('config.cfg', 'w') as configfile:
    config.write(configfile)

The bot requires Python, configparser and BeautifulSoup4. The scraper cannot handle numbers in the URL so please remove them and replace them with letters before picking a starting point, this was an oversight on my part.

Don’t do anything against their terms of service, Aidan.

Scraping Canvas (LMS)

Because my time at university is ending I thought it best to archive the canvas pages available to me for later reference should I not be able to access canvas later if they change platforms or disable my account. I should probably add this is for archival purposes and I will not be able to share the data I was able to collect. Thankfully I was able to get the whole thing going in a few minutes and downloading took a lot longer.

The first snippet I got from here, didn’t complete the first time, it seemed some image was causing issues so I moved to another gist, at this rate we could be done in half an hour 😊.

Unfortunately it also borked out on a similar place,

FileNotFoundError

I think it is because there’s something missing or I don’t have access to it. But the real problem is that its downloading content for a course I didn’t care about because I was enrolled in it but it’s full of junk I’m not interested in, so we can remove it by using the second scrapers code and specifying the course id’s which I had to manually go through, there was about 15 of them but it didn’t take too long. Which gave me the full command.

F:\Downloads\canvas>python canvas.py https://canvas.hull.ac.uk/ 4738~DUI9Nha9weSuemu1M2qsmhljoBcQtR0zghXTs3QA7ECHDHQkpsgBQ9RllbaEwySf output 52497,56148,56149,52493,54499,54452,54456,53441,52496,22257,22274,22276,22277,22278,22279,22280,50664,50656,22275,50652

The access token you can see above should be expired by now. You can do it yourself by downloading the same file and installing python3, pathvalidate and pycanvas. You need to generate a security token from /profile/settings and you can get the course id by clicking on the course like this /courses/56149. When you generate a new token you should receive an email about it.

Canvas online with our starred modules displated.

I decided to make a small adaptation to catch the FileNotFoundError and went off to the races. It took over an hour so I decided it was best to leave it running overnight, when I returned in the morning I had 116 errors (failed downloads) and the rest is the course content!

Our Canvas Modules saved to Windows File Explorer.

Unfortunately I don’t seem to have the submissions for each of these courses so I needed to manually download them aswell and then our archive was completed.

Thanks for reading.

How to remove ‘Google’ from the Gboard Spacebar

A recent update to the Google Keyboard Gboard has added the word ‘Google’ to the keyboard spacebar at the bottom. I personally didn’t like this addition to the app and at present, I cannot find a way to disable it in the latest version.

There is however a solution to this problem, you can roll back your Gboard app to stock and not update it again. Beware that it will reset your keyboard settings in doing so (such as the theme).

To do this,

  1. Open the Play Store app.
  2. Swipe in from the left and choose ‘Settings’.
  3. Select ‘Auto-update apps’ and choose ‘Don’t auto-update apps’.
  4. Select Done.
  5. Go back to the Play Store main page.
  6. Search for ‘Gboard’ and select ‘Gboard – the Google Keyboard’.
  7. Then select ‘Uninstall’ to roll it back to stock.
  8. Viola. You shouldn’t have ‘Google’ on your spacebar anymore.

Unless you have a custom ROM your app should go back to the factory version that came with the phone. If for some reason that uninstalls the keyboard completely for you, you may wish to download an older build from a respectable location. I can confirm that the version I am currently using is 8.3.6.250752527-release-arm64-v8a26830614 and it’s not present for my OnePlus3 but I imagine the releases are hardly innovative as keyboards tend to go.

That should be all you need to remove the word ‘Google’ from your android keyboard spacebar, you could also install another keyboard if you particularly wanted to.

Early High-Level Programming Languages

In the 1950s and 1960s, there was innovation in the field of computer programming and design. Computers were becoming commercially available and starting to gain widespread interest. In 1951 to Univac 1 was the first commercially available computer for example.

FORTRAN

In 1957 came about FORTRAN. FORTRAN was considered one of the first high-level programs to really gain popularity. Its design was suited for high performance when programmed and could perform code optimization to improve the performance of programmers’ instructions. It was ‘Formula Translating’ and its success saw it spread to other computers early on.

Fortran was built for number crunching and computing. Its implementations were widespread and its general-purpose capabilities saw use in many scientific fields of research. Fortran was produced over a series of years under different versions with compatibility for previous versions in many cases. It was by modern-day standards considered low level but no doubt was formulative for other modern-day languages, it included features like code comments, input-output handling and one of the first do loops. FORTRAN has many versions and is still used today.

ALGOL

ALGOL was developed around the same time as Fortran, it was designed for more ‘Algorithmic’ purpose. ALGOL 58 was considered a prototype version named IAL (International Algebraic Language) and was soon superseded by ALGOL 60. It was designed to be more human-readable and could be used to design algorithms and unlike Fortran, it was not designed to be hardware-specific to be the fastest but relied on the best implementations they thought were suitable. Although not as popular as Fortran, many modern languages have features present in ALGOL first, such as IF ELSE statements and dynamic arrays defined at run time.

Stored Program Computers

A Stored Program Architecture such as Von Neumann Architecture stores programs in computer memory and if not using an interpreted or JIT programming language the memory and data for programs can be treated the same. This methodology made programming in previous generations a lot easier as it meant the computer could be programmed using punch tape or cards.

The first ‘Fully’ stored programming computer was the Manchester Mark 1 which was first operational in April 1949.

https://en.wikipedia.org/wiki/Manchester_Mark_1
However there is some dispute as to the true ‘first’ stored program computer.
https://en.wikipedia.org/wiki/Stored-program_computer

Before the use of punch cards or tape, computers could be programmed in a similar method using wires. This meant a lot of re-wiring and ‘patching’ was difficult on complex systems as the wires would encompass whole rows of machinery and in some cases could take many miles to complete a program.

In Addition to the ‘Von Neumann’ architecture, there is also the ‘Harvard’ architecture which keeps data and program (memory) registers independent.

Programming Order of Succession

  • Early computers were not re-programmable. They were hard-wired.
  • Then punch tape and punch cards were developed to feed into computer memory to be computed.
  • Then programs started to use machine code, although complex for a human to develop they were one of the first innovations that allowed for easy computer programming and rapid development.
  • After machine code, a new symbolic form of machine code was created whereby complex hardware instructions could be reduced to line by line instructions. Hence the first machine code compiler was created in order to turn assembly code into machine code.

Machine Code

Machine code could be considered a modern-day programmers’ lowest level of access to a computer’s processor. Machine code provides basic instructions that are logical or mathematical to store, move or load instructions. It is possible on modern hardware to virtualize machine code and some modern programming languages like Java can compile programs into byte code where the initial program can be computed on many platforms.

Assembly

Due to the complexity of Machine Code, the need for a language that was human-readable (and later developed into high-level programming languages) birthed Assembly, an easy to use (comparably) way to program the computer in a methodology and symbolic sense designed for human readability. Instead of numeric OPCODES, the new syntax allowed for easily identifiable instructions (MOVL, JMP, ADDL). Embedded software and real-time systems may still use machine code as its primary source code today.

Interpreted Languages

As high-level languages and capslock languages were adapted, interpreted languages were developed (the 1950s onward) by using the computer to virtualize itself and process instructions as a ‘virtual machine’ (in the literal sense) that could aide the use in porting the language to other computers as the language syntax could be a defined standard and the compiler could compile the program to many forms of machine code for different models and modes of computer. Interpreted Languages have the added benefit of allowing the programmer to debug their program at a more granular level where programs could be inspected line by line before translation (compilation and then execution).

Byte code such as Java byte code can be interpreted or compiled just in time (JIT) whereas the program is running, it is also translating the byte code into machine code. However, this additional workload has a performance toll on the program.

High Level Programming Languages

High-level programming languages reduce the learning curve and frustration that comes with debugging a program as the syntax and grammar of the language are much easier to understand for the reader because it is based on a more natural approach to human interpretation. However, the benefits can cause programs to be compiled in a way that does not optimize performance or utilize capacity fully because the language could be interpreted in a way that the programmer did not intend or was not aware of.

However, the development of High Level Programming languages allowed for much more rapid development than its predecessors which meant performance hits to compiled machine code programs did not exceed the increased development performance (The programmers were able to do their job easier, which made the programs better) in the 1950s.

Example Early High Level Programming Languages

  • FORTRAN (Formula Translation)
  • COBOL (Common Business Oriented Langauge)
  • ALGOL (Algorithmic Language)
  • LISP (List Processing)
  • BASIC (Beginners All Purpose Instruction Code)

Sometimes called the Capslock Programming Languages.

Programming Languages could be classified by their approach to programming paradigms such as statements or methods, functions or object-oriented. Most modern-day programming languages are fit for general purpose.