Wednesday, March 26, 2014

Navigating Apple's App Approval Process


Getting an App approved for sale on the Google Play store is pretty damn simple; they have no review process. Simply make sure you have the right icons, build your APK, write up your store listing, and submit.

Apple, on the other hand, is not so easygoing. Of the 18 Binaries I've submitted to Apple, two have been approved. That's an approval rate of about 11%. Not good. Of those 16 rejections, 15 have been because of small technical mistakes (wrongly formatted icons, etc.). The other was due to a screenshot containing a "beta" tag, violating Apple's policy against beta stage apps.

To help everyone avoid this frustration, I've composed a short list of checks you should make before submitting. It will save you a headache, trust me.


  1. Screenshots - You need to have screenshots for every comparable device (by size). For example, apps that are iPad friendly require iPad screenshots. iPhone 4 and other devices with screens of the same proportions require their own screenshot. iPhone 5 and similar do as well. An easy way to get around this problem without taking screenshots on every device is to resize one screenshot. A free website to do just this is called http://pixlr.com. Just check your store listing and resize the images accordingly.                                                                                   
      2. Icon sizes - Apple requires a stupid amount of icon sizes to be packaged with your app. It's a complete waste of time to size each individually, so I just use a website that does it for me. It's called http://makeappicon.com. They will email you a ZIP file with all the sizes. Just unzip it and drag them over to your app package.

       3. Don't put tags in your app like: "beta" or "test version" - Even if such tags are in the screenshots, apple will not approve your app.

       4. Mismatch - Make sure your app matches your screenshots exactly. If it does't apple again won't approve it. 

       5. Copyright Violation - Okay, this one seems obvious. But in reality, it's a top reason for denial from the App store. For all you flappy bird cloners (including myself to some degree), Apple will nail you with this one. 
  • Don't include trademarks in your app. (Unless, of course, they are registered to you). 
  • Don't copy artwork or user-interfaces.
  • Pick a name unique enough that it won't be flagged. For example, Flappy Birdy will most likely be denied.
  • If Apple "believes" you are trying "deceive" users into thinking your app is one of another namesake, then they will deny you. Your job is to convince them otherwise.
Good luck on your journey to the app store. It will all be worth it once you get there. If you need any assistance or have any questions, feel free to contact me at techpulsesoftware@gmail.com. 


Processing Methodology: The Human Brain vs. The Computer



Have you ever wondered how humans and computers are related in terms of processing methodology? Will the computer ever be able to perform human tasks? Check out the article I wrote for answers to these, and many more questions.

Information Processing: The Human Brain vs The Computer


Information, whether entered into a computer or interpreted by the human brain, follows a single directional pattern: Input, processing, storage and output. The input is the stage in which information is pushed from a sensor to a processing unit. The information is then processed and stored locally, either through identification or connection. Once that processed information is called, an output occurs. Both computer processing units and the human brain process data inputs with “gateways.” In a computer, these gateways are transistors which act as on/off switches, regulating micro-electric pulses representing information. While computers are often considered to be more advanced than humans, computers and the human brain process information through strikingly similar hardware, however, differences are clearly present in processing reasoning and focus.

In the human brain the eighty six billion neurons control data flow. Neurotransmissions are initiated by nerve impulse, occurring through exocytosis. These neuro-electric transmissions create very small spikes in current differentiation. The magnitude of the change in current is a type of code, known as neural code. Neural code is the commanding framework of the human body, providing reliable data which can be interpreted and executed by the various human systems.

Computers also operate on a very simple language called machine language. Regardless of the complex nature of higher level codes (i.e. Java, C#, JavaScript) which nearly all modern programs are developed with, the brain of the computer, the CPU, processes information using machine language. Machine language is binary code comprised of millions of zeros and ones which represent open and closed gateways, or terminals. In relation to neurotransmissions, the arrangement of zeros and ones can be said to reflect “spikes” which are easily interpreted and executed.

While similar in hardware and basic execution, computers and brains become variable as detailed elements such as purpose are explored. The two primary differences between computers and the human brain are architecture, and processing methodology.

Processing methodology is where the basic principle of “gateways” begins to separate into two unique classifications: parallel processing and sequential processing, the latter being most common in computing. In parallel processing, received information is delegated to open ports for interpretation and execution. The brain has a unique configuration unlike most computers. Essentially, the brain has two main processors, as it has two hemispheres. Sensed information is processed in the pre-delegated hemisphere. The brain does not have a central CPU like controller, however it does have a hierarchy which appears to also be delegated between the two hemispheres. Most computers process information sequentially, meaning they processes information in a lateral direction. Sequential processing does not employ delegation to speed up processing. Ironically, however, the human brain can process information no faster than sixty bits per second. In comparison, a prototype laser data transfer system at Germany’s Karlsruhe Institute of Technology can transfer twenty-six terabytes of data per second, approximately 4.84 x 10^11 times more.

The processing power of modern computers is astonishing. Supercomputers can calculate strenuous mathematical functions in a matter of seconds, calculations that would take a college professor hours or even days. However, they are very limited in other respects. The Von Neumann architecture, standard in computer systems, is primarily focused on data processing. It is engineered for performing mundane tasks such as computation, analysis, and other logic based functions.

A perfect example to demonstrate the weakness of computer intelligence is speech recognition. A supercomputer can understand spoken words with about 99% accuracy. It only returns a false value for one out of every hundred words. Sounds reasonable, right? Well, put that in perspective: A child has well over ten times the accuracy of the supercomputer when it comes to speech recognition.

Computers are not designed to perform human functions, that’s our job. Computers were designed to assist mankind in performing complex calculations, predicting outcomes, tracking data, and performing mundane tasks. As society becomes more technologically dependant the gap between computers and humans is rapidly closing. Intense focus is being placed on the progression of computer-human interaction. Artificial intelligence is already being applied through advanced algorithms. Human like systems such as Google’s self driving car suggest that concise gap will soon be coming to a close.

However, for the time being, the Von Neumann architecture will remain standard, the data inputted into computers will remain one-dimensional, and the mathematicians at Stanford will still take days to find the ten billionth digit of Pi. In order for software and other aspects of artificial intelligence to progress to a practically implementable level where they emulate brain functions, the architecture of the modern computer must be refocused. In other words, society is trying to make a tank fly like a fighter jet. Sure they both have similar attributes, but their purposes are totally different. Instead of trying to force the tank to adapt, would it not be more efficient to design a new vehicle built to do just that? The answer is yes. So why doesn't the world take this approach with artificial intelligence? Well the answer is simple, it would involve recreating the computer from the ground up, and this isn’t going to happen anytime soon. So for the foreseeable future, humans will do human tasks, and computers will do computer tasks. The gap between may come closer, but it won’t close.



Monday, March 24, 2014

The Apps I've Made


I decided write a quick post with a list of apps I've published thus far using JavaScript.

Barnstormer - A simple game where the objective is to navigate a vintage plane through a series of obstacles in an effort to reach the barn at the end, and ultimately land the plane safely. 

Google Play (Some problems with certain versions of Android OS, currently being debugged): https://play.google.com/store/apps/details?id=com.telerik.barnstormer


iGenda - The simple task-list app seen in my previous post. I will soon show everyone how to code an app like this one.


Apple App Store: Coming Soon!

Social Freedom - A cool new approach to social networking. This app let's you post anything you want, anonymously, to a live wall where every user can see it. Try putting your snapchat or friends phone number and see who contacts you! 

Google Play: https://play.google.com/store/apps/details?id=com.telerik.freedom

Apple App Store: Coming Soon!

Coming Soon - Localize - The idea behind this app is to start a conversation, anonymously of course, with people around you. You can set a range from 2000 meters to 1000 km, in which you will be randomly paired with someone to chat with.

Preview: http://beacon.bugs3.com/


iGenda - An app made in less than an hour



*NOTE - Make sure you click the "plus" on the button otherwise it will not work.

So above is a simple to-do style app I created with an open source back end and a basic jQuery user-interface. Play around with it and, if you like it, get it on Google play at: https://play.google.com/store/apps/details?id=com.telerik.samplesqlite1. My next blogs will show you the methodologies and tools I used to create it. Throw me some feedback at techpulsesoftware@gmail.com. I would love any suggestions or requests for tutorials.

Learn the Basics of Coding

Now that you have some basic tools from the previous blog, it's time to start!

If you understand the basics of coding in JavaScript and html then you can skip this section!

If not, you need to learn a few simple things before proceeding. People learn coding in their own unique ways. To many, it seems like people who know how to code just simply "know" how to do it. This, obviously, is not true.

There are three basic ways to learn how to code: online, by book, or through a class. Let's look at each one:

1. Online: Presumably the most effective way to learn coding, online lessons are often free and let you learn at your own pace. I used http://www.codecademy.com/. It's free and very straightforward. Another alternative is https://www.codeschool.com/. I haven't used this site personally, but I've heard good things about it.

When using an online program, remember it is important to test your skills as you go. Get creative and try to make your own applets or webpages. You can use websites like jsfiddle.net to test your code. A good project to start with is a simple gpa calculator. It allows you to test your JavaScript skills and apply them in a useful project. (*Hint- If you want to create it using solely JavaScript and no html then use  "prompt("string");" to set the values of variables. Use "alert(variable of result)" to display the output of the awesome calculator you just created.)


2. By Book: This is the classic method for learning the art of programming. To some, it's the most natural way to learn how to code. For others (myself) it's a long process that does not pair well with a low attention span. If you are one of those people who believe they would benefit from book learning, go to your local book store and pick up some text on html, javascript, and css coding.

Even more so for book learners, it is important to practically apply the skills you have worked hard to acquire. Try the project I described above! If you need any assistance you can contact me at techpulsesoftware@gmail.com.


3. Through classroom instruction: Coding classes can be hit or miss. You will cover A LOT more than you need to know, but, in doing so, you will also have an advanced reputire of skills which will prove helpful as you wrestle with more complicated problems such as data structuring. For basic app development, however, I wouldn't recommend classroom instruction unless you are going to be developing some hardcore software.

In my next blog, I will show you a sample app I coded in about an hour using Telerik. The skills required for this app are minimal, so most of you should be able to relate your learning thus far with the project.


The Tools of a Hybrid App Developer

One of the best tools to use in cross-platform hybrid development is Telerik. It utilizes Apache Cordova as a plugin to bridge html/js/css to native platforms.Check it out at: http://www.telerik.com/. Other people have also found success with titanium: http://www.appcelerator.com/titanium/.

Of course, you could always go with a classic phone gap bridge.