Showing posts with label tutorials. Show all posts
Showing posts with label tutorials. Show all posts

Wednesday, 12 December 2012

Everyone knows we all got into computing to make games



READ THIS:

http://news.quelsolaar.com/#post45

Awesome read from a one-man army that built an MMO in his spare time from scratch ON HIS OWN. The article attached discusses some of his tips from his personal blog. This guy is an absolute boss and as with most people that perform incredible feats of personal achievement happens to be a wise character.

Tuesday, 23 October 2012

Facebook Group for all self-teachers

There has been talk for quite a while discussing the need for a centralized group where everyone who wants to get involved in the process of teaching yourself computer science can meet and discuss progress, tips and tricks etc..

 So I took the liberty of setting up a quick Facebook group that serves that very function.




 Join up, post articles, suggestions, wisdom.

 Share the wealth.


o O o
o o O
OOO

Wednesday, 15 August 2012

Introduction to Computer Memory

 Got an interesting link set to me from a friend concerning Computer Memory, apparently this text is THE text for understanding computer memory physically and theoretically. Obviously with memory being one of the most integral parts to programming I feel this has to be jumped to the top of my reading list.






 As I am currently following the lecture series at the moment I will start updating what I am picking up from this text, from the first few pages I read already, just 'flicking through' I know it is definitely worth my while and will give me a great advantage in the future when I begin to practice assembly language and any other low-levels tinkering I may have planned.

:)

First On-line Lecture. (9,996.5)

Managed to get on my discipline a bit more today and watched the first lecture in the series I promised I would watch daily. If you don't know what I am talking about (click here).


 Okay so firstly the lecture are a little bit dated but have a very cool old-school feel to them, that makes you feel as if you were there near to the beginning of the birth of the modern-modern computer (I'm talking post windows 95). The first lecture concentrates on introducing you to Lisp, not in a traditional 'declarative' way (picked that word up from the lectures, Gates watch out..) whereby the lecturer basically runs through the various commands and how you link them up, rather, in this lecture the theme is understanding what's inside the each process that each operator calls.

 The lectures are filled with useful quotes that help to put computing into perspective for the programmer. For instance the lecturer makes very clear at the beginning that computing shouldn't be considered a science or even considered computing as it takes away from the processes involved and focuses heavily on the tools you are using. I feel this quote does have some weight to it as he elaborate on it throughout the duration of the lecture and basically leaves you understanding that computing is not really about the fancy programs you get to play with right now for instance, computing for the computer scientist is about engineering an art form. Making something that is already magical and beautiful and making it even more so.

 Anyway enough about the lecturers philosophical input about what he feels computing to be, what is there to learn from the first lecture in this series. Well, enough to realise that if I stick with this and complete this series I will understand computing and programming in a seriously deep way. From all the dabbling I have done before in programming I understood more about what was actually going on from this hour long introductory lecture than I have done in a whole year of faffing around.



 The main concept the Lecture introduced was this idea of  'abstraction' in that the way you can express something in programming has to be understood fully by you for you to be able to do it efficiently. The lecturer went on to explain what he meant by this by creating a squaring function from scratch using Lisp. The details of how to do this are not important as he shows you many methods of producing the same result and even a mini program that was designed to 'guess' the square root of any number.

 The key points that needed to be taken away is the basic structure of code.
 He gives this example and then elaborates on it as I will giving a running commentary.

(+  3  17.4  5).
Lisp uses a system known as prefix notation which means the operator is written to the left of the operands.
 A simple mathematical operation in lisp. The plus sign (+) is the operator the numbers to be added are the operands (3, 17.4 & 5) and the parentheses/brackets including the process inside is known as a combination.

He then explains the method of developing your own code or in this case a squaring function.

(DEFINE SQUARE (LAMBDA x (* x x)))

Now I'm not 100% on the definition of LAMBDA but I have made a note to re-edit this section for clarity, until then I will just explain the point the lecturer was making by showing us this operation.

The intial call 'DEFINE' requires us to create a symbol we want defining, in this case as we are squaring numbers the symbol was 'SQUARE'. The next stage of this definition required us to call a procedure that allowed us to define using an 'argument' what we wanted  our definition to stand for. This is where the term 'LAMBDA' comes in and not knowing this did stump me a little bit on what was going on but it is not impossible to understand the essence of what is going on which was the purpose of this lecture. So, with a procedure called with an argument named 'x' ( what this essentially means is that a value known as x will be entered and when it is entered something must happen to this value due to the call SQUARE being used), a result has to be 'returned' to give purpose to the new definition. The final section of the code '(* x x)' required x to be multiplied by itself (or squared as it is known) to complete the process.


:)


 Again as with all articles I will touch them up for you to make them perfect as possible when my understanding of the concepts matures. Thanks again for your paitence. Also if you can help clarify any of the information I am trying to re-teach people please leave me a comment and I will be more than happy to fix the areas where I have gone wrong, its the reason I'm here. Also I did about 1.5 hours of actual constructive work today hence why I have moved from 9,998 to 9,996.5. It seems this process is going to balance on my fight with my discipline as in my mind its filled all the time with the want to learn computing but there is a huge part of me that hides away from tackling it, who knows for what reason, probably fear of not understanding something and being a failure unto myself and shattering the image I hold of myself being able to tackle anything with enough effort, which truth being told would be a devastating blow, it is however my sincerest intention to reach my goal of hitting a Phd in 10 years. I'm just off to a slow start. Again thank you for your patience.



The Von Neumann Model


The man you see before you is  John von Neumann, an early computing pioneer. From what I've read so far I can establish that this guy is a pretty big cheese and is credited with the general model that computers are constructed by today. I plan to do a outline history of computing soon with all the major players and their contributions so if you were expecting an interesting article on all of von Neumann's contributions you will have to wait till I write that as this article is actually just an introduction to his 'model'.


John von Neumann

As far as writing about Neumann's life goes my knowledge of him is pretty slim at this moment in time, I will however, in the future plan to do an in-depth piece on him, for now however I am more concerned about his contribution to computer science and what that contribution means to me and you.

 Essentially von Neumann established a model that computers should follow that was logical and effective in its design. This 5 part model describes the form your computer takes underneath all of its hardware and shiny cases.

 Neumann states;

 There are Five major components within the computer system:

 The first is an Input Device
              - This element sends data and information to the system. This information and data is then stored in the next component.

 The Memory Unit
              - The instructions and data are then processed by the next component.

The Aritmetic Logic Unit (ALU)
             - The operation carried out within the ALU are carefully guided by the next component.

The Control Unit
             - To which the results of the ALU and Control Unit's work is sent to the final component.

The Output Unit.
             -Which would be your monitor or your printer.


 This simplified breakdown of what a computer is made up of makes its a bit easier to grasp harder concepts in computer architecture as it allows you to picture in your heads the basic outline of the computers structure. This however is an unfinished model and if we were to add a bit of extra detail to make it a little more complete and a little bit more accurate to today's computing systems we would have to mention the System Bus Model.

  As mentioned previously in another article (here) a bus is basically a method to quickly transport data from one component to another. The system bus model essentially partitions a computer into three sub-units:
 CPU / MEMORY / I/O
These three sub units are the five units established in the von Neumann model only grouped by their purpose.  This refinement of the von Neumann model combines the ALU and Control Unit into one functional unit - CPU. This model also combines the Input and Output units into a single I/O unit.

 The system bus links all these components on a shared pathway made up of:
The Data Bus - Carries the information being transmitted
The Address Bus - Identifies where the information is being sent
The Control Bus - Describes aspects of how information is being send and in what manner

:)


-As I have mentioned previously I will update older articles as my understanding of the concepts within develops so if you find this a rather breif introduction to von Neumann and the basic form of the computer, do not worry I am learning all the time and will update when I have found anything considerable to add. If you have anything else you believe to be worthwhile drop us a comment and I'll add it in. Thanks.

Tuesday, 14 August 2012

Time to tick off those hours

I've decided that trying to tackle all of computer science in one go with no real structure for someone like me is incredibly futile so I am going to structure my learning around completing a series of online lectures. Obviously biting off more than I can chew left me escaping my responsibilities in a bubble of gaming and procrastination, so I am going to ease myself into a good cycle by forcing myself to watch just one lecture a day from a selected series. As I get more confident with myself I am going to up the pace, but for now I can manage just one video a day.

 As I have stated previously I am going to be starting with computer architecture and pad out the theoretical learning with practical experience in Assembly language. I have a layman's understanding of computer architecture but I would still consider myself a complete newbie to this topic area. With everything being essentially new I am going to take this slow and do one lecture then make sure I fully get it, summarise what I know into an interesting post, then tackle the next lecture.


 The Lecture series I am going to follow is an old one from 1996 but is recommended as a great introduction to computer architecture. It follows the book 'Structure and Interpretation of Computer Programs' - (The full book can be found here, for free). The sites description of the lectures is as follows;
- 'These twenty video lectures by Hal Abelson and Gerald Jay Sussman are a complete presentation of the course, given in July 1986 for Hewlett-Packard employees, and professionally produced by Hewlett-Packard Television. '





http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/



Thursday, 9 August 2012

Gentoomen - Giant book torrent

I did mention I needed to build up some relevant literature to start building up my knowledge base, so I found out about this 36G torrent that holds an impossibly massive libary on just computer science texts that cover every relevant subject imaginable. It truly is epic. I mean I have had it on download all day today, total of about 12 hours and it still has seven left and I have a average download speed of 1.1M, I appreciate that isn't massive but its not bad.






As far as general progress on my quest is going it is still very early days and I am currently finishing the How Computers Work book, so expect a full review shortly plus some extra recap notes and something a little more in-depth and technical. 

A little list (9,998)

Okay, So about 2 'official' hours in, hence the 9,998. Still feeling good about doing this.

 I'm currently coming to the end of the How Computers Work book by Ron White so decided to create a little list of a few terms that have always confused me when messing with my pc.

 As I haven't ever really got into the nitty gritty of my computer before a lot of these terms are internet based as thats where I've had the most problems and run-ins with requests asking for things I didn't even realise my computer had.

(Also if any of these are wrong or just explained incorrectly do let me know and I'll do my best to fix them, enjoy)

 Firstly something so important to the performance of your pc.

 RAM

 *n.b there is RAM and ROM (RAM is writeable ROM is not, I'll explain later)
 So yes RAM, Random Access Memory, RAM is a collection of microchips which the computer uses to store data and programs whilst it uses them. Writing is the process by which the computer stores data on RAM (Reading out of interest is when the computer transfers data or software code from RAM). The bigger the RAM capacity the better.



A picture of a ram, not a picture of ram

Clock speed and 'Overclocking'

 Having browsed YouTube numerous time I occasionally stumble across random videos of some computer guy over clocking his Pc and showing various results, none of which I at the time appreciated. Essentially what 'over clockers' are doing is increasing the computer speed by 'hacking' its clock. The computer's clock is a microchip that regulates the timing and the speed of all computer functions. How it does this is by passing an alternating current through a Quartz crystal which responds with its own natural resonance (vibration), creating in turn another alternating current that is then sent through the computer allowing a processes to occur to the quartz rythm. Where it gets cool is that these crystals oscillate at a frequency measured in Mhz (my physics knowledge is very sub-par at the moment) which I had to find out means a million times a second. Now if you look at your computer's specs you will find you have a processer with a speed above 300Mhz sometime into the Ghz range, which means your processer can work with a speed of up to what ever frequency you have. Again, the higher the number the better.



Bus

 I've found with computing the really complicated things that seem to be named really badly, are actually named really well sometimes quite comically by the people that created them, you just have to understand what they do. (reminds me, I'll do a post on getting to know computing jargon soon as its a very jargon heavy subject) Once such computing component is the Bus. There are buses everywhere in your computer, they are what they sound like a passengers vehicle only the passengers in this instance are bits of data not people. Essentially Buses are the circuitry and chips that manage the transfer of data from one device to another. The USB (Universal Serial BUS) drive you use is a bus, well it has a bus on it that connects whatever memory device attached to it to the computers hardware you just plugged it into.




DSL

 Considering you are most probably connected via DSL right now or definitely have been in the past this one is one of those things you come across everyday without having any idea what it is. Luckily, its not complicated at all its more of a business acronym than a computing one. Digital Subscriber Line, what this means is that the 'line' you are using to connect to the internet right now is part of a digital circuit between your residency and a telephone company's central office allowing you access to high speed data transportation via exsisting twisted copper telephone lines. (technology has moved on a little bit since DSL but its still very relevant to most of us, including me)


A Port

Similar again to a Bus, (in that its a metaphor) meaning any place in the computer where data is transferred, generally, a place where one device usually represented by a cable or wire is physically connected to another device. Imagine boats in a port, they bring something when they dock. There are two types of port, a Serial Port and a Parallel Port, the serial port only allows one bit of information to be sent at a time because only one wire of path is used for data, whereas parallel ports allow for several bits of data usually at least 8 bits simultaneously.


TCP/IP

 I must of seen this acronym a million time and never payed it any attention, not realising that the only way I'm actually connected to the net right now is through TCP/IP. Transmission Control Protocol/Internet Protocol; it is actually a collection of methods used to connect servers on the internet and to exchange data. TCP/IP is a universal standard for connecting to the net.

IP address

This goes hand in hand with TCP/IP, your IP address is an identifier for a computing dvice on a TCP/IP network. Networks using the TCP/IP route messages based on the IP address of the destination. The format of an IP address is a 32bit numeric address written as four number separated by periods. The numbers are between 0 and 255.
 Looking something like this.

XXX.XXX.XXX.XXX

 There are a million and one ways to find your own IP address out, (click here) to let a website tell you yours.





Rasterizer

 Something I've always wondered about but again never bothered to find out, little bit unrelated to the general theme but interesting nonetheless. A Rasterizer is the software used in games that translate 3D geometry of 3D objects into a two dimensional bitmap that can be displayed on your 2-D screen.




Friday, 29 June 2012

Bucky tutorials

I'm to be starting an OU degree soon in computer science until then I am tutoring myself through Bucky Robert's site:

http://thenewboston.org/


 For those of you that do not know who Bucky Roberts is, he is a YouTube educator that runs you through the basics of pretty much every language out there as well as some other tutorials on random stuff like how to make a go-kart from scratch and how to survive in the wild. The guy is extremely engaging and really simplifies the basic of computer programming, a real must for someone whos finding the languages of the coding world a little to alien.

 To help keep the learning of Computer Science interesting I decided to adopt a cool side hobby in 'game design'. Being naively unaware of how much work and complicated computer practice goes into game design I went in search of a little help and stumbled upon another great YouTube educator 'BergZerg'.

BergZerg's YouTube channel 'BurgZergarcade' hosts a unity RPG Game tutorial which runs you step by step through the creation of a full RPG game. Its very basic in terms of visuals so don't be expecting to whip out the next WoW (as you'll soon find out how ridiculous an idea that is) but in terms of being introduce to the demands of game design it is amazing.

His actual site has the original videos and a few more on different topics so worth a quick nosey if you like his work.

^I find the combination of these two tutorials especially the newboston C# tutorials and the bergzerg game design tutorials, really allows you to understand the applications of the simple codes you learn and how they work in a wide variety of scenarios. If you are interested in game design regardless of age or experience I really recommend checking these both out. 

Thursday, 5 January 2012

Creating the foundations

I want to become a certified Computing Master.

I want to become a certified Computing Master because I am currently a very underachieving, undisciplined, average Joe that has a decent enough mind to understand everything I apply that mind to but consistently wastes his potential and has no shortage of people telling him he is doing so. I decided I need to break my pointless cyclical lifestyle and have made the choice to do something that will make me or break me as a human.(Well maybe not break me physically but you get the idea; something that if I don't reach it I will be a serious failure to myself). So I had a look around the world I live in and picked one of the hardest yet useful skills available to me and decided as both a personal/spiritual quest to accomplish something that right now would seem impossible; 'earning a Phd in Computer Science within the next decade'. Whilst in ten years this may not seem like an impossible challenge, for me, being a lazy normal guy that never was considered anything special academically, this is a big mountain to climb.

I feel I have the motivation, in that I have been feeling pumped to do this for at least a year (an example of how bad my discipline is, thinking something and wanting something for a whole year without ever properly acting on it) I have decided now to kick myself into gear and start doing it.

Obviously I am aware of time and realise that to achieve something like this I need to put every spare hour under the sun to productive use if I am to be anywhere near my goal within the time limit set. I need a big plan, like a check-list of everything developed so far in the field so that I don't just 'get a Phd.' but really contribute something incredibly useful for the human race as a whole.

To be a certified Computing Master.




So I am going to develop this blog as a progress blog, documenting where I am at, where I am going and to summarize all the knowledge gained so far on my journey. Also I want it to be another example to people that extraordinary people are just normal people that never gave up.

 I like that last line, think I might get it tattoed on my face.