Winner's Excogitations

A chronicle of the thoughts, learning experiences, ideas and actions of a tech junkie, .NET, JS and Mobile dev, aspiring entrepreneur, devout Christian and travel enthusiast.

Have you made God your crutch?
7 years ago · 3 minutes read

Over the last few months, I began noticing a problem that had always been around but had escaped my attention probably because I was amongst those creating and perpetuating the problem. Listening to an Andy Mineo song recently can’t remember which exactly right now, finally gave words to the problem which I had hitherto been unable to articulate. The words he (Andy) used can be distilled into this statement, “Majority of Christians have taken to making God a crutch”.

The Merriam-Webster dictionary defines a crutch as “something that a person uses too much for help or support”. I don’t want to be misunderstood so let me emphatically state that I am all for total reliance on God, Jesus Christ himself said that without me you can do nothing. The issue I am calling attention to via this article is about a human tendency to laziness and shirking of responsibility, we have even taken this attitude into our relationship with God. In other words, we have taken to foisting responsibilities on God that are entirely ours.

Let me give a few examples of this:

  1. Prayer: I heard someone praying using the words, “Lord, pray for your child”. To say the least, I was infuriated. It is God’s purview to answer prayer and it is ours to ask. But asking has gotten so “hard” that we have also told God to ask himself for our needs. Now we are too lazy to even bother asking God for what we need that we just tell God to ask himself.

  2. Money (Finances): Since the riches of Christ have been promised to believers, we think we can fold our arms and wait for God to take the result of a hardworking unbelievers’efforts, and deliver them straight to our doorsteps. Or we believe that without any fiscal responsibility on our part, its Gods duty to prevent our resources running out.

  3. Health: I was going home from work one day and I heard the advert for a particular health product whose job apparently was to rid our body of the poisonous substances we ingest under the guise of food. What immediately occurred to me was, instead of giving people drugs to remove the “poisons” why don’t you tell them not to eat the wrong food in the first place! Then on second thought I realized that we rather eat the poison and then take drugs that may expunge them. We do the same with God, we eat whatever junk we desire and then saddle God with the task of keeping us healthy. We avoid exercise like the plague and then ask God with tears to give us six-pack abs.

  4. Politics: We lament our the pitiable state of our country and spend hours praying for a turn around for the country, yet we fail to heed the call of God to go into the political system that needs a touch of godly values and principles.

These are just a few examples of ideological cancer that betides us, a cancer which says that “if God is to do something, then he’ll do it whether or not we do our part”. I read Isaiah 26 verse 12 which says “… all that we have accomplished, you have done for us.” and this set me thinking, if the Israelites were the ones who accomplished the things, then how was it God who did it? This may seem like a weird statement, but I think it is the correct Christian outlook. For everything God will do, there are parts we must play and if we don’t do ours, don’t expect God to do his.

Have a great day.

 

My Perfect Devices 2016
7 years ago · 1 minute read

I by chance was going through my note store in Google Keep and noticed a note I had created on February 28th this year. It is basically a list of the features that I would desire in a flagship of mine incorporating the latest technology of the year. It was inspired by one I had written in 2014 (which I would post). I hope to do this every year. So this is my take for the year 2016! Take a look and let me know your perfect device in the comments.

The Phone 📱

5.3 inch Super AMOLED display
1920×1080
Quad-core Cortex-A57 @2.4GHz
PowerVR G6400 @600MHz
3GB ram
64GB internal memory
Support for up to 128GB
13MP ultra pixel rear camera
Dual tone, dual led flash
Phase detection autofocus
5MP wide angle front camera 🎥
4000mAh Li-ion battery
Anodized aluminum body
Gorilla glass 4 protected screen with oleophobic coating
Nexus imprint fingerprint sensor
Dual front-facing speakers with Dolby audio

The Tablet 💊

8.9 inch IPS LCD display
2048×1536
Dual-core Cortex-A72 @2.2GHz and dual-core Cortex-A53 @1.5GHz
PowerVR G6630 @450Mhz
2GB ram
128GB internal memory
Support for up to 128GB
4MP ultra pixel rear camera 🎥
Led flash
2MP wide angle front camera 🎥
10000mAh li-ion battery 🔋
Anodized aluminum body
Gorilla glass 3
Nexus imprint fingerprint sensor
Dual front facing speakers 🔊 with Dolby audio

The Laptop 💻

Intel Core i7-6700K
16GB DDR4 2600MHz RAM
64GB PCIe SSD cache
512GB SATA SSD
Nvidia GT980m GPU
5MP wide angle camera 🎥
17.3″ Anti glare screen
2560×1440
Full size backlit keyboard
JBL – 4 speakers and 1 subwoofer
Dolby Digital audio
Aluminum body
150WHr battery 🔋
802.11 b/g/n/ac dual band wifi
Bluetooth 4.0 with A2DP, EDR
2 USB 3.1, 1 reversible USB 3.1 and 1 powered USB 3.1 port

**The Desktop **

An Intel I7 5960X 8 core processor @4GHz
32GB of DDR4 2133MHz quad channel ram
AMD Radeon GPU (8GB HBC VRAM, 5362 shaders 1018MHz)
256GB PCIe SSD
512GB Sata III 6.0Gbps ssd
2x 2TB 7200rpm hdd
Dual band 802.11 a/b/g/n/ac wifi
Bluetooth 4.0 with A2DP and EDR
2 x 30″ 2560 x 1440 AMOLED displays

 

GIT - For The Absolute Beginner (Part 1)
7 years ago · 4 minutes read

bolorundurowb_com/production/article/hbyf3ey0vezmpnhotx2h

I know you’re eager to dive into the nitty-gritty of git and get your hands dirty with some shell commands, me too. But before we get into the meat of the work, it would be meet (pun intended) for us to understand what version control is, and how exactly git fits into the concept. With a generation that is fixated on the ‘what’s’ and ‘how’s’ of life, it’ll be nice to find out the ‘whys’ once in a while. So let’s get to it.

Version Control – What is it?

Version control “is the management of changes to documents, computer programs, large web sites, and other collections of information. Changes are usually identified by a number or letter code, termed the ‘revision number’, ‘revision level’, or simply ‘revision’” according to Wikipedia. What this means in everyday terms is that version control is a way to keep track of changes made to files, usually code files. Let’s just say it gives us the power to make multi-file undos and redos.

Git – Why?

Git is an of a version control system. It was developed by Linus Torvalds of Linux fame. He began development on it in April of 2005 and had version 0.99 out by the 11th of July the same year. Since then the Linux kernel tree has been managed by git. Git is free software distributed under the GNU GPLv2 license.

Git commands, what they mean and how they are used

S/No Git Command Meaning Usage
1 Init This command is what converts your ordinary file system folder into a git repository. The repo created is just a local working repository git init
2 Clone This is used to pull the contents of a remote repository and create a local working copy of the same repository git clone e.g git clone https://github.com/mono/monotorrent.git
3 Add This command is used to indicate to git that you wish to track a certain file and its contents. git add e.g git add filename.cs
4a Remove This command is used to instruct git to stop tracking a certain file and its contents git rm e.g git rm filename.cs
4b Remove (Recursive) This command is used to instruct git to stop tracking a certain folder, its sub-folders and files within. git rm -r e.g. git rm -r foldername/
5a Commit This command is used to instruct git to mark all changes made up until that point as a milestone. A message is usually added so you can tell exactly what was accomplished at that point. git commit -m e.g. git commit -m "Finished fixing bug #121"
5b Commit (Quick) This command is a variation of the original commit command; I refer to this as a quick commit because all modified tracked files do not need to be added manually using the ‘add’ command. git commit -a -m e.g. git commit -a -m “Finished fixing bug #121”
6 Pull This command gets all current pushed commits from the tracked remote repository and merges them with your local working repository git pull origin e.g. git pull origin master
7 Push This command sends all commits in your local working repository to a specified branch in a tracked remote repository git push origin e.g. git push origin version3
8 Branch This command can be used in two ways depending on whether an optional branch name is specified. If no branch name is specified, the command shows all branches in the local working repository. If a branch name is specified, the command creates a branch with the specified name. I. git branch II. git branch e.g. git branch wingtips
9 Checkout This command takes you to the HEAD in the specified branch git checkout e.g. git checkout version3
10 Status This command gives you a rundown of all files in the local working repository. It tells whether a file has been modified or is even tracked at all. git status
11 Log This command gives a list of all commits made to the local working repository git log
12 Remote This command is used to connect a local working repository to a remote repo and track it. git remote add origin e.g. git remote add origin https://github.com/user/repo.git
13 Merge This command is used to well… merge two branches of a repository together. Note that you have to first check out the branch that you want to merge into. git checkout master then git merge version3
14 Reset This command is used to take your code back to a previous point. This point may be a tag, a commit id or a branch git reset –hard <tag/branch-name/commit-d> e.g. git reset –hard f36ebh
15 Rebase This command is commonly used to well… merge two branches of a repository together. Note that you have to first checkout the branch that you want to merge into. git checkout master then git merge version3
What makes a good software architect?
7 years ago · 3 minutes read

It’s been a while I posted an excerpt from Quora. This one really resonated with me and I felt I should share. It was written as a response by Gary Wisnieski.

First, it’s important to differentiate software architecture from simply best practices. A good software engineer may be excellent at coding, excellent and detailed in their approach, and have a great deal of insight into the problem, but still, may not be a good architect.

At a minimum, a good architect should have the following skills:

  • An architect is excellent at problem decomposition. Problem decomposition is the skill necessary to see a problem at virtually any level and break it down into the steps and pieces necessary to implement it. A good software architect can take a statement like “Our Air Traffic Control systems are inadequate and we need a better design” and knows the questions to ask to begin to decompose the problem into achievable components, to decompose those component goals into achievable sub-projects, and decompose those sub-projects into achievable programming tasks. A good architect can do these things at any level or scale from envisioning a billion line software project to understanding the best way to implement an algorithm to cope with unreliable links. The scale is irrelevant because the process is always the same.

  • An architect understands interfaces. Interfaces, whether in the form of protocols, function libraries, class interfaces, or schemas are the primary tool needed to manage the complexity of projects when there are independent contractors and implementers. By knowing the process of defining crisp, unambiguous interfaces that are logically complete, an architect can empower many people to build pieces of systems that connect easily to achieve a larger goal.

  • An architect understands that complexity is the enemy, and has a mastery of the programming tools and paradigms necessary to reduce complexity in all components, to reduce the complexity of interfaces, and assure minimal or no redundancy of implementation of function. They can quickly recognize algorithms and implementations which are too specific or too generic, and guide those developing to create components which perform just the right function. Often, the tools of managing complexity are things such as data hiding, object-oriented programming, self-validating systems, and comprehensive testing plans for standard interfaces. But, a good architect is not dogmatic about tools and technologies because they have a comprehensive academic understanding of the underpinnings and reasons why data hiding works, and why certain languages support good design principles and others do not.

  • An architect is a good communicator, a good and prolific writer, and documentor, and is good at speaking the language of programming as well as the common language of those who are stakeholders in the system’s design. Along with good communication, a good architect can give concrete reasons for programming practices rather than opinions, and offers insight to their team rather than argument. They strongly favor and seek out the user’s opinion of suitability to that of their own or the programmers involved in the project.

  • A good architect is a good leader and is excellent at gaining the respect of all the technical people they work with. Usually, this means that they have a high level of skill, have worked in multiple languages, and have been an architect before, or have demonstrated their ability to create systems designs which have remained flexible in the face of change.

Many definitions include an array of buzzwords, emphasizing methodologies like data-driven design, agile programming, specific languages, platforms, and toolkits. These things are current labels for various techniques whose basis needs to be well understood, not accepted because they are currently in vogue. So, in many ways, the chief skills of an architect are experience, intelligence, willingness to work hard and take a hands-on role, good intuition, and the ability to break down problems using logic so that as industry buzzwords come and go, their designs remain useful and relevant.

My definition above intentionally does not include project management, scheduling, and management skills. The architect’s role is to create good systems, not to solve team problems or budgets. In fact, it is best if those with budgets and team issues are simply stakeholders who help define one of the constraints the architect must deal with, just as if it were part of their design problem.

Is Microsoft serious about Windows Phone?
7 years ago · 1 minute read

Been a while since I really posted my musings about certain issues, so here is one.

bolorundurowb_com/production/article/sukggi6eoia8h3sphfeg

In the mobile operating space, there are two major players, with Googles Android operating system taking about 76.6% of the market share and Apple's iOS taking almost all the rest. Microsoft hopes to become a major player and to me, up till this present moment, aren’t doing anything to achieve that objective.

If I were in charge of Windows Phone proliferation at Microsoft, here is what I would do:

  1. Make windows phone OS free, not necessarily open, but it would be usable by any manufacturer without paying licensing fees. (Microsoft has already done this).

  2. In order to become a serious mobile space player, you have to draw people who are just switching to a smartphone for the first time, (this removes the issue of unavailability of some apps on their platform). They would achieve this by making their devices dirt cheap like entry-level android phones. (1) above sets them on the road to achieving (2).

  3. To get (2) you have to observe what happens in the developing countries market space, and what obtains there. For now, Mediatek is the company manufacturing the chipset for the masses, it would be in Microsofts’ best interests to align themselves with Mediatek.

  4. Microsoft has to play to strength, in that its operating system works smoothly on even the most meagre of hardware because of its minimalist design principles.

  5. As soon as Microsoft succeeds in capturing a sizable share of the lower end market, an app surge would follow, because developers would want users to have their apps.

  6. When the lower end is captured, then flagships using the latest silicon should be offered on every manufacturer and cellular carrier, this would endear them to the premium users and the higher profit end of the market.

This is just my two cents worth of advice to Microsoft. Have a nice weekend.