I am very enthusiastic about machine learning and the potential it has solve tough problems. Considering the fact that the amount of data we produce digitally is growing geometrically as online activity och number of people connected to the internet keeps on increasing. We have to make something good out of that massive information we generate.
That is where machine learning come in. Machines are faster and can handle and processing large amounts of data better than us humans. Here are some of the things machiné learning can achieve today. It can identify images, write music and even stories give an image, It can write rap lyrics. It can predict the stock market better that any human, generate choreography based on the music and so on and forth. We are just scratching the surface in AI.
Due to my interest in this subject, i started watching some videos about machine learning and focused my attention on deep learning which uses neural networks . Most of the implemention is in the Python language so i started learning python because most of the libraries and tutorials i see online are all written in python and is it an expressive language. If i want to be part of or become a data scientist and learn faster, I need to start writing some python code which i personally think it will be fun.
One technique i machine learning is using Neural networks based on how we think our brain takes in and processes information . Neural networks are incredibly powerful The good news is some of the maths subjects I learned in University like calculus, linear algebra and statistics all come together to produce this powerful technique of doing machine learning .I had to brush my skills with the, matrices, derivatives, gradient descent, sigmoid functions ,probabilities and back propagation . It sets a good base to understand what going underneath these python libraries . One can just focus on the building the models and choosing the techniques to handle the data.
Becoming a data scientist is more of brushing some of your maths skills in statistics, linear algebra and calculus . You must be capable to clean, understand and model data and to write code that turns that data to something useful. There are a lot of resources out there. I will start with small datasets about my life and then later handle complex datasets as I get better in this way of problem solving. I think I am in for a treat. It will be fun and a challenge to use and play with data to so some good for humanity.
It is time to train some datasets and solve some real tough problems
Happy machine learning !
Ngala Talla
Software as a passion and a job
My diary for writing my views about different aspects in life and what I learn in programming and software development.
Tuesday, May 30, 2017
Friday, August 16, 2013
Becoming an employable programmer
Here is my take on this issue of becoming an employable programmer.
- Learn and understand data structures and algorithms (searching , stacks,queues , shortest path , sorting etc)
- Do not read books like pragmatic programming or books on how programming should be done. They just make you feel bad and give you low self esteem.
- Learn your own way and make mistakes at the beginning but since you want to learn and improve, your programs will become better and smarter.
- Learn one language very well so that you can write excellent code that solves problems.
- Understand one database scripting language and how database works
- Know how the Internet works and it commonly used terms
- You do not need to learn new language besides the one you are learning.Learn a new language when you really and truly understand one programming language .
- Learn javascript ,Css and Html
- Build some real works stuff that solves a problem . Choose a framework and your tools to use.
- Master the framework inner workings
- Practice , learn , read lots of code in projects that you think are really interesting . When you are is interested, the learning and understanding process is easier.
- Learn how to sell your skills and value you can create to an employer.
- Have a blog to monitor your progress and tell the world what you are good in and learning.
- Choose some top software developers and read their blogs and have a role model in the programming world
- Have a beer and watch programming or tech videos.
- Good self esteem and be humble
- Develop good communication skills
- Have a side project with clear goals
- Have fun with friends or family
- Learn touch typing.
- Have a side activity that makes you feel good and enjoy the the present moment.
- Give your self reward for a job well done.
Saturday, September 29, 2012
How to implement a simple IoC Container.
I have decided to take a topic related to software development and dig deeper and write about it on weekends. It will be my weekly learning and knowledge sharing. I have myside projects but its always cool and rewarding to understand how something really works. I do not only want to be a framework user but also a Framework contributor. This can only happen if you deep deeper most of the tools of software and language you use. For this week I want to see how easy is it to implement a simple IoC container that can be used in a project.
What is an IoC container ?
IoC stands for Inversion of Control and represents a design pattern used in software development. Wikipedia describes it as " a style of software construction where reusable code controls the execution of problem-specific code. It carries the strong connotation that the reusable code and the problem-specific code are developed independently, which often results in a single integrated application. Inversion of control as a design guideline serves the following purposes:
What problem does it try to solve?
Coupling and dependencies between objects .We let some other objects inject the object when we need it hence we are inverting the control of the process .Passing interfaces into classes and not real objects makes it easy to maintain, add and extend functions of a feature in an application.
What are the basic prerequisites of building one?
Before looking at the code you should understand some concepts like Interfaces, Generics and Delegates in C#. The goal is not build something that I will actually use for production code but just to see and learn the core and basic aspects of an IOC container. Here is the code of the whole project.
If you really want to use an IoC Container in any .Net project, you do not need to implement your own. There are much better options out there. Even if you think of implementing your own, I do not think you can implement any feature or features that they do not already have. They are even more mature and free to use in your projects. Here is a list I composed for some popular ones. I use Ninject in my personal projects because it is mature and easily configured. Choose your own based on your needs.
What is an IoC container ?
IoC stands for Inversion of Control and represents a design pattern used in software development. Wikipedia describes it as " a style of software construction where reusable code controls the execution of problem-specific code. It carries the strong connotation that the reusable code and the problem-specific code are developed independently, which often results in a single integrated application. Inversion of control as a design guideline serves the following purposes:
- There is a decoupling of the execution of a certain task from implementation.
- Every module can focus on what it is designed for.
- Modules make no assumptions about what other systems do but rely on their contracts.
- Replacing modules has no side effect on other modules. "
What problem does it try to solve?
Coupling and dependencies between objects .We let some other objects inject the object when we need it hence we are inverting the control of the process .Passing interfaces into classes and not real objects makes it easy to maintain, add and extend functions of a feature in an application.
What are the basic prerequisites of building one?
- You need a container class.
- In the container class you need a delegate ( A function on the fly!)
- You need a dictionary data structure since you need to look up for keys before sending out objects
- Create a function to register the interfaces
- Create another function to resolve the interfaces
- Use the Container and do something with it.
Before looking at the code you should understand some concepts like Interfaces, Generics and Delegates in C#. The goal is not build something that I will actually use for production code but just to see and learn the core and basic aspects of an IOC container. Here is the code of the whole project.
/*IOC Container main class */ public class MyIocContainer { public delegate object CreateInstance(MyIocContainer container); public DictionaryFactory; public MyIocContainer() { this.Factory = new Dictionary (); } public void RegisterInterface (CreateInstance ci) { if (ci == null) throw new ArgumentNullException("ci"); if (Factory.ContainsKey(typeof(T))) throw new ArgumentException("Type already registered"); Factory.Add(typeof(T), ci); } public T Resolve () { if (!Factory.ContainsKey(typeof(T))) throw new ArgumentException("Type not registered"); // retrieve the object from the dictionary var creator = Factory[typeof(T)]; // call the delegate returning the object created return (T)creator(this); } } // Create some interfaces to use public interface IDownloader { void GetWebSiteContents(string url); } public interface IExtractHtmlTags { void ExtractHtmlTags(string pWebsiteHtmlP); } // Create some classes to use the interfaces public class WebSiteDownLoader : IDownloader { public void GetWebSiteContents(string url) { //Some code using the webclient class Console.WriteLine("Call using the IoC container to load a website"); } } public class ExtractHtmlTag : IExtractHtmlTags { public void ExtractHtmlTags(string websiteDataStream) { // Some code here using Regex class<.*?> Console.WriteLine("Call using the IoC container to extract html tags"); } } // Usage class for the interfaces to perform task. public class WebSiteTagRemover { private readonly IExtractHtmlTags _extractHtml; private readonly IDownloader _getWebSite; public WebSiteTagRemover(IExtractHtmlTags eTag, IDownloader loader) { _extractHtml = eTag; _getWebSite = loader; } public void PrintResults() { _getWebSite.GetWebSiteContents("http://ngalatalla.blogspot.se/"); _extractHtml.ExtractHtmlTags("website html "); } } /*Finally execute and use the container Hooray!! */ internal class Program { private static void Main(string[] args) { //Initiate the container var container = new MyIocContainer(); //Register some interfaces to be used container.RegisterInterface (x => new WebSiteDownLoader()); container.RegisterInterface (x => new ExtractHtmlTag()); //Resolve the interfaces and get the objects mapped to them var getContents = container.Resolve (); var extract = container.Resolve (); //Do stuff with the interfaces var webTagRemover = new WebSiteTagRemover(extract, getContents); webTagRemover.PrintResults(); } }
Results---
If you really want to use an IoC Container in any .Net project, you do not need to implement your own. There are much better options out there. Even if you think of implementing your own, I do not think you can implement any feature or features that they do not already have. They are even more mature and free to use in your projects. Here is a list I composed for some popular ones. I use Ninject in my personal projects because it is mature and easily configured. Choose your own based on your needs.
- Ninject: http://ninject.org/
- Windsor Container: http://www.castleproject.org/container/index.html
- Autofac: http://code.google.com/p/autofac/
- Unity: http://unity.codeplex.com/
Happy programming !
Thursday, April 26, 2012
It is time for Javascript . Are you ready to embrace it?
JavaScript is becoming more and more indispensable for any web developer to know. I have heard lost of bad and good stuff about JavaScript but I ask my self if they are not the programmers who write such bad JavaScript code are unpredictable or the differences in the JavaScript engines on various browsers makes us think the language is the problem .I have not really done much JavaScript development in my short and exciting career but I think JavaScript works!! and you can see the power on every client( mobile phones, tablets etc) connected to the web and needs a good experience. Some known JavaScript APIs are Jquery that make it very easy to navigate the Dom , NodeJs for server and client development in JavaScript and finally I should not forget to mention Knockout Js which give you a clean way to write clean JavaScript code binned to your model using the MVVM pattern.
I bought my first JavaScript book Eloquent javascript after reading the online version of the book and I think it worth the money. It shows you how to think and code generally and in JavaScript. I am still reading and try to do solve the assignments in the book before looking at the answers. Its really exciting to play with JavaScript learning about closures and the dynamic and functional nature of the language. I mostly write lots of C# and Jquery code at work but to understand Jquery well , one has to understand JavaScript because that's the source and the beginning.
I have been interested to learn Html5 and I found it rather amazing how easily you can make an animation process with just a few lines of code. I think Html5 is awesome and is good some browsers now accept it. I hope this stays and combining Html5 , Javascript with SignalR that provides a duplex connection to the server one can do some amazing things in real time. May be i should just write a program to prove this.
I think every web developer can bear with me that there is so much going on in the web and is difficult to keep the pace with technologies coming and going. I think the key is know a lot of them but be a master in some of them you love. No matter what is going on the web there is only one language that can do all the magic and that is JavaScript. So maybe its time for you to learn it to. As a developer, learning new stuff, reading and knowing new technologies should be part of your life style.
Thursday, March 22, 2012
Awesome stuff with C#5 and ASP.NET MVC 4
I have been having a good time watching these videos of one of my my favorite writers and developers Steven Sanderson . These videos are all about the new Asp.net 4 with Upshot, Knockout, WebApi and how they come together to make building Single page applications (SPA) faster and cleaner. The second video is about C#5 asynchronous operations and how this can be applied to web applications. The code to perform asynchronous calls to the database have been made less chunky and less complicated .Finally one also learns how asynchronous call work underneath and how duplex connection to the server are made and handled by SignalR. You can read this article Asynchronous scalable web applications with realtime persistent long running connections with SignalR.
I hope to put the stuff I leanrt from these videos in my next application, Finally it seems as if there is no running away from JavaScript as a modern software developer who love web applications. Its time to embrace it and have in your bag of tools. This could be a whole post on its own.
Here are the links to the videos.
Goodluck and happy learning
Wednesday, January 11, 2012
Personal development, passion and goals
I should be proud
of my achievements last year because
- I had my degree in Computer Science,
- Got a good job ,
- Had my second child Eric
- And bought a house.
I
had goals for last year and I got more than I could have ever
thought of .All this was possible because of hard work and good
planning , being realistic and having a wonderful and supportive wife
and daughter .
Since the
beginning of December we have been preparing and packing all our
stuff into boxes that we shall take along with us to our new
home.Yesterday as I was packing, I came across lots of my notes and
code I wrote when I was studying back in the university. Some
of the code was good and I was impressed when l looked
at it and some where really crap and I could not even understand what
it does.I ask my self if i really wrote this. I had really had a good
laugh at my self. Anyway that was then. I will say I am a better
coder now compared to then. I had a lot of passion and still do but I had to pass my
courses so passing my courses was more important than passion and I think its just logical. . I had some nice and though times and really enjoyed some
programming courses like Compilier thoery , data structures and
algorithims , Computer architecture, C and C++ programming ,web
development with .Net and discrete mathematics.
Today I get paid
for writing code, and solving complex problems and I consider a pass
when my technical boss is happy about it, the customer get his or
her problem solved , the code is understandable, clear and concise
for the human being to read and understand.
This year I intend
to blog more and learn more stuff , deepen my knowledge in some
advanced stuff deploy an application to the web or build an app .
Learn some real time programming.When will I do this ? My
spare time that I can really own for my self. I love and really
enjoy what I do and hope you also do. If you do not, then its time
for you to be real to yourself and deepen your knowledge in what you
love to do and have passion for. Its never to late to learn and
everything is possible.
Thursday, November 10, 2011
Using recursion to do permutations
Solving problems using recursion.
I have always had problems in understanding deep and complex recusion eventhough they all follow a common pattern that is There is always a base case to stop the recursion and making a recursive call on some smaller part of the solution, I decided to set my bar high . Here are the things i set to use recursion to understand complex recursive calls .
Let start with the case that allows you to select all possible combinations of all members a set. I learnt that this recursive pattern in very important to understand because the is a common pattern used in solving the problems that I mentioned above and many others like searching and solving word puzzles
Permutation
I define permutations as all the ways to arrange a set of items for example if you permute the word {cat} you get {cat, tac, act, atc, tca, cta}. Permutations are mathematical and if you want a deeper understanding of this then go to Permutation. in Wikepidia and read more
In the program below the program does permutation recursively . I am writing this because I feel I have started getting the power of recursion and how to solve problems with them. The truth is i understood the classical recursive examples in the university like Fibonacci ,factorials and the towers of Hanoi but when it came to complex recursive example like the one below. I got a headache in thinking recursively.
Here are the tough questions to answer when writing a program that does permutations.
Happy programming !
I have always had problems in understanding deep and complex recusion eventhough they all follow a common pattern that is There is always a base case to stop the recursion and making a recursive call on some smaller part of the solution, I decided to set my bar high . Here are the things i set to use recursion to understand complex recursive calls .
- Solving Sudoku using Backtracking
- The Chess Knight - Queen classic
- Permutations
- More problems as I come across.
Let start with the case that allows you to select all possible combinations of all members a set. I learnt that this recursive pattern in very important to understand because the is a common pattern used in solving the problems that I mentioned above and many others like searching and solving word puzzles
Permutation
I define permutations as all the ways to arrange a set of items for example if you permute the word {cat} you get {cat, tac, act, atc, tca, cta}. Permutations are mathematical and if you want a deeper understanding of this then go to Permutation. in Wikepidia and read more
In the program below the program does permutation recursively . I am writing this because I feel I have started getting the power of recursion and how to solve problems with them. The truth is i understood the classical recursive examples in the university like Fibonacci ,factorials and the towers of Hanoi but when it came to complex recursive example like the one below. I got a headache in thinking recursively.
Here are the tough questions to answer when writing a program that does permutations.
- How do you just pick one element on the set and know which one to attach next?
- How do you avoid doubles and repeating each elements?
- How do you separate them?
- How do you know that all the possible combinations of the set have been made?
Here is the program written in C# that does permutations .
class Program { static void Main(string[] args) { Permutate("ABCD"); } public static void RecPermute(string permutateHolder , string itemToPermutate) { if (itemToPermutate== string.Empty) { Console.WriteLine(permutateHolder); } else { for (int i = 0; i < itemToPermutate.Length; i++) { // Get the rest of the items remaining in the set var remaining = itemToPermutate.Substring(0, i) + itemToPermutate.Substring(i+1); //Take each element from the item and do a recursive call on them RecPermute(permutateHolder + itemToPermutate[i], remaining); } } } // Wrapper for permutate function public static void Permutate(string item) { RecPermute("", item); } }Here is part of the recursive tree of the program Permutate("ABCD").It show permutations for all elements beginning with the letter A.The other elements of the set follow the same pattern.
Happy programming !
Subscribe to:
Posts (Atom)
Machine learning is the future
I am very enthusiastic about machine learning and the potential it has solve tough problems. Considering the fact that the amount of data we...
-
The quiz application I have build works just like that of W3Schools I got the inspiration from here and I wanted to understand more on a...
-
I was very interested the quiz that is in w3schools I decided to try to create one in Asp.net.I use a database and Viewstates to manage the...
-
I have decided to take a topic related to software development and dig deeper and write about it on weekends. It will be my weekly learning ...