Fixes to Common Errors in Setting up Titanium Appcelerator

I plan to dump all solutions that work for me here. I’m working on a 32-bit, Windows 7.

Setting up a Galaxy Tab Emulator:
1. Download the zip file from Samsung Mobile
2. Unzip in your android-sdk\addons
3. Back in Appecelerator, Run -> Run Configurations.
It should be created automatically. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Error locating JDK: set $JAVA_HOME or put javac and jarsigner on your $PATH


Right click on Computer -> Properties – > Advanced System Settings – > Environment Variables

For Path:

Add (Do not replace the current value) the path of your jdk’s bin folder. For me, it was “C:\Program Files\Java\jdk1.7.0_03\bin”. Since it’s a variable, place a semicolon after the current and then paste the new path.  Mine looks like:

C:\oraclexe\app\oracle\product\10.2.0\server\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Program Files\Zend\ZendServer\bin;C:\Program Files\Zend\ZendServer\share\ZendFramework\bin;C:\Program Files\Java\jdk1.7.0_03\bin

Could not locate the Android SDK at a given path

Make sure you did the previous solution. Also check out this link for solutions that have worked on others using Linux and Mac.

Using Appcelerator: Building Menu++

Until recently, I didn’t know that I could code once, and run it on multiple mobile operating systems.. (well almost)

Enter Appcelerator. Appcelerator allows you to code (using JavaScript) once and deploy in all mobile platforms, with just minor tweaks for the UI — a huuuuuuge advantage than separately coding for iOS, Android, Symbian, etc.  Pretty cool, huh?

In one of my classes, we’re required to build a mobile app for a project using Appecelerator, and my team (Hi, Brygs and Stacy!)  will be building Menu++. Since it’s a pretty quick project due in about two weeks, it’s not going to be that complicated:  it’s a menu app for Android tablets. Users will come in a restaurant and browse a very, visually appealing interactive menu –and order from the tablet directly. We’re gonna be using the Appecelerator API for the control and view layers, and a PHP-based REST server for the model/back-end.

If you’re curious about Appcelerator, here’s a few links:

Zero to App, a series of videos to get you up and running!

Quick Start Guide, learn the fundamentals of the platform

Building Native Mobile Applications, a comprehensive video series to get you into the “rockstar mobile dev” status!

On Software Project Management, Part 4

All about CPM and PERT (These are my notes from class, so this post will be “raw” without much thought for grammar and punctuation.)

My oversimplification of this Lesson 03. (Computation of project times is in the lesson as well. Again, slides are courtesy of Professor Rolly Torio.)

CPM – Critical Path Method

  • Used for production management, where repetitive tasks can be determined and there is no need for much estimation.
  • Created by Du Pont for the chemical plants.
  • Focuses on the trade-off between time and cost.
  • Single estimates of derterministic activity times
PERT – Project Evaluation and Review Technqiues
  • Used more for project management, especially for intangible things such as research/development, where a lot of estimation time is involved.
  • Developed by US Navy for the Polaris missile program.
  • Focuses on getting the project done is as little time as possible.
  •  Multiple estimates of probabilistic activity times

Gantt Charts – provide easy graphical representations of when activiites will take place. BUT no details and no relationships between activities.

A Gantt Charts weaknesses may be address using
CPM + PERT (which overtime became one technique), the network technique.

Advantages
-Precedence relationships
-Useful for large projects
-More effecient

Network technique – shows the interdependence of activities through arrows.
Nodes (circle): EVENTS, where activities start or end, a task
Arrows: ACTIVITIES, effort required to perform work, completion of a task

All about the Times
Earliest Time – calendar time where an activity is completed, where all of its predecessor events are completed at their earliest times (best case).
Latest Time – latest calendar time an activity can occur without delaying subsequent events.

Slack Time = Latest START time – Earliest START Time
Positive Slack – amount of time an event can be delayed without   delaying entire project

Critical path:

  • sequence of events where there is NO slack
  • longest path through a network
  • minimum project completion time

Benefits of CPM/PERT:

  • useful in all stages
  • mathematically simple
  • gives time: path and slack
  • project documentation
  • monitors cost

Limitations:

  • clearly defined/independent activities
  • specified precedence of relationships
  • too much emphasis on critical paths

On Software Project Management, Part 3

I have an exam tomorrow about risk management, so I thought I might as well post my notes about it. (So this post will be “raw” without much thought for grammar and punctuation.) These are my notes on this Lecture – Lesson 02, courtesy of Professor Rolly Torio.

First, a recap:

Software Project Management – concerned with making sure that software is delivered within schedule, within budget, and within the requirements specified by the organization.

Necessary because:
Software dev is constantly facing budget and schedule changes
Product is intangible , flexible
Most are one-off projects
Not standardized, recognized with same status as other engineering disciplines (although software does share the many similarities with other complex systems)

PM’s deal most with planning, scheduling, and estimating.

Management Activities include:
Proposal writing
Project planning and scheduling
Project monitoring and review
Report writing and presentation
Personnel selection and evaluation

On Project Staffing
Main problems include: lack of budget to hire great people, or lack of great people.
Can be remedied by training.

Project Planning
Most time consuming
Iteratitive, should be regular updated as more info comes in
Focuses on schedule and budget

Types of Project Plans (QVCSM)
Quality
Validation
Config Management
Staff Development
Maintenance

The Project Plan includes
1. resources available
2. work breakdown
3. schedule

Project Plan Structure
Introduction
Project Organization
Risk analysis
Hardware and software requirements
Work breakdown
Project Schedule
Monitoring and reporting mechanisms

Milestones: end points(most visible with waterfall)
Delivarables: project results

Steps in Requirements Engineering + their corresponding deliverables (FRPDR)
Feasibility Study -> Feasibility Report
Requirements Analysis -> User Requirements
Prototype Dev – > Evaluation Report
Design -> Architectural Design
Requirements Specification ->System Requirements

Tips on Project Schedule
1. Use tools to eliminate time wasted for waiting for processes that do not need to be waited on. Some tasks can be done concurrently. Minimize dependencies to avoid delays.
2. Split project into tasks (1-2 weeks length) that you can easily estimate for time and resources needed.
3. Estimating is hard, but improves with experience.
4. Productivity is not based on how many people are on your team. In fact, adding someone new will make a project later (mongolian horde).
5. Always have a contingency plan.
6. Involves graphs: activities, durations, and staff

Activity Path vs. Bar Charts
Activity paths show dependencies and the critical path.
Bar charts show time against a calendar.

Risk Management
-consists of identifying risks and plans to minimize/avoid/deal with their effects.

“A risk is a probablity that some adverse circumstance will occur.”
Risks affect the schedule, resources, quality, performance, and the business making/buying the software.

Types of Software Risks

The Risk Management Process (IAPM)

Risk Identification: project, product, or business?
Ex. Technology, people, organizational, requirements, and estimation risks

Risk Analysis: assess likelihood and their effects
Probability: very low, low, medium, etc.
Effects: catastrophic, tolerable, insignificant, etc.

Risk Planning: create plans to avoid/minimize
1. Avoidance strategies: how to avoid altogether
2. Minimization strategies: reduce impact
3. Contingency plans: how to move forward/deal with the risk

Risk Monitoring: should be done throughout the project
Regularly  check if probability and/or effects are changing.

Basics of Automata Theory (Or Oh The Choices We Make)

4/20/2012: Whoah! The powerpoints here are outdated and/or not all here!
Will upload the rest of the resources from the class ASAP

 

This semester, I took a Theory of Computation class. I never thought I would have so much fun in a CS class. Our professor is hilarious when it comes to explaining things…and he usually relates his examples to relationships. I especially love how he connected Nondeterministic Finite Automata to having alternate universes. A college senior having the pre-grad freakout, the thought of having alternate paths for all the choices that you want to make is just bliss. And if you picked the wrong path? No worries…you have alternate universes where, hopefully, you will reach a happy ending, or even just a final state.

Anways, here’s our material (so far) for your viewing pleasure. Thanks to Professor Mitch Andaya of iACADEMY for these slides.

THEOCOM 01: Introduction to Finite Automata

THEOCOM 02: Designing Finite Automata + Exercises

THEOCOM 03: Nondeterministic Finite Automata

THEOCOM 04: Equivalence of DFAs and NFAs

THEOCOM 05: Regular Expressions on Languages, Closure Properties

THEOCOM 06: Regular Expressions

{Image source: Kate Spade NY}

Non-techie Things I Learned from Being a Software Engineering Student

  1. The way to success is a lattice, not a ladder. Software engineering is hard. Computer science is hard. Heck, college is hard. To be able to succeed, you’re going to have to ask help sometimes, and you’re gonna have to be willing to share what you know. The saying what goes around comes around can never be more true here. In fact, the very concept of the Internet industry is the sharing of information to everyone. Help others, and they will help you back. Don’t be afraid to share your notes, to tutor a friend… you never know, he might be a JavaScript unit testing ninja!
  2. Fake it ’til you make it.  In my classes, I think the ratio of men to women hovers around 18:4. Observing my classmates, it never ceases to amaze me how a guy can speak up in front of the class, acting like he knows his stuff, and yet…he doesn’t really makes sense. BUT because he carries himself a certain way, his idea suddenly doesn’t seem so dumb, and it actually sparks an interesting discussion (or clarifies a hazy topic). On the other hand, I notice girls (myself included) tend to second guess themselves before they start to talk, or they start their sentences with, “I’m not sure, but…” We have to stop this! Think about it. How can someone believe you or take you seriously if you don’t even take yourself seriously?
  3. You become what you think you are. In my assembly programming class, I didn’t do so well in the beginning. Attending class made my tummy churn. As we did exercises, I joked around with my friends saying that I am really not good at this. Fortunately, one of my dear friends corrected me. She said, “Frances, don’t say that, or you’re brain might believe you.” Now, this girl was a genius, so I reasoned she might be right. Okay, I thought, how can it hurt? So I forced myself to believe I was an assembly black-belter; pretty soon, my brain believed it too. Then I found myself actually wanting to read tutorials, actually excited to go to class. I ended up getting an A.
  4. One rotten apple can spoil the whole bunch. One lazy team member will make everyone else feel lazy too. A team member that doesn’t really know what to do brings the productivity of the whole team down. You’ll have to give him extra help, fix the bad code he typed up, redo his algorithms when you could be moving on to greener pastures. (But then again, since we are in school, keep #1 in mind — just not when your are creating a system for a project. Personally, though, as long as the person is actually doing his 200%, then I’m willing to help; everyone has to start somewhere. However, if he is just slacking off, he can do that by throwing paper airplanes and not messing up my code.)
  5. You don’t know everything, but everything can be learned. I read somewhere that you become a software engineer the day you realize you really don’t know a thing about making software. If you know Java, someone out there knows how to do recursion in C in their sleep. On the upside, with the Internet and the helpful nature of most programmers, everything can be learned — just not overnight.
  6. All you have to do is take one step at a time. Thinking of everything your program has to do is always overwhelming. That is why I love object-oriented-programming. I “just” have to write little pieces of code that do their own thing and then another, and pretty soon, I’m actually getting somewhere. This is true for life too. Setting a huge, massive goal will zap your motivation in the buds. It will make you feel like you’re pushing against a boulder with all your strength, and it doesn’t even budge. But breakdown what you need to do in small steps, and you will actually find the willpower to do it (albeit, one step at a time). After all, it’s just one small thing right?
  7. Always prepare for the worst, but hope for the best. You never know what life will through at you, or if your hard drive will crash, so its always good to be prepared for the worst. The worst case for preparing for the worst, is the worst not happening, which is actually not bad. We cannot say the reverse is true.
  8. Sometimes, the best thing to do is to take a break. Rockstar developers know that when they are stuck in a problem, it is good to take a break, clear up the mind, etc. to get a fresh perspective on things they might have been missing previously. Again, this can be applied to life too. If you feel like you’re in a rut, you might have been overworking. Taking a break will refresh your energy and make you more productive in the long run. On a grander scheme, I am even a firm believer in travel as a means to treat depression. In a new country, your problems do not seem relevant anymore….all of a sudden, they do not matter! It’s a great way to realize that hey, you will probably live through whatever it is you were so worried about.
  9. It’s going to be tough, but it’s going to be worth it. People ask me what I love about being a programmer the most. Every time, I say I love the feeling of triumph when you’ve finally figured out that one last thing, or that feeling when you’ve finally tracked down the bug, or when your function finally works. The same can be said for any aspect of life that we have to work hard for, whether it is a college degree, a new job, even a marathon. We push ourselves constantly because we know our goal is worth it, our goal will make our circumstance better. We push ourselves because…well, reaching a goal is euphoria.

Perception in Relation to Software Engineering

Overview

 

In a psychology class, we were asked to do do a project on perception as it relates to our major. Well, that is a rather vague request; thus, I decided to narrow down things by first answering the question, “What is perception?

Perception – process by which organisms interpret and organize sensation to produce a meaningful experience of the world.

Then that leads us to another question on what sensation is.

Sensation – a process  wherein sense organs receive stimulation and relay the messages to the brain.

A Rebuttal

Contrary to what the rest of the world thinks, software engineers actually make software based on objects modeled from the real world. If we face it, the real world is what actually uses these software, so it only makes sense that real world processes are mimiced and automated in software created by –surprise surprise! — programmers. In some ways, we actually create another world where objects live and interact among each other in their own realm. For example, look at an attendance system. Isn’t that automating/imitating a real world process? Thus, we actually make systems based on how we perceive the real world. How we see it, hear it, feel it. But that discussion deserves its own post in itself..so instead, I will elaborate on a more specific way wherein a principle of perception affects what we do as programmers – the Law of Similarity.

The Law of Similarity

According to this Gestalt Law of Perception, items that are similar or alike tend to be grouped together. Programmer Peeps, sounds familiar? Doesn’t it sound like INHERITANCE? A common start in finding if inheritance is possible is by…

Inheritance

But wait! What is inheritance again?

Inheritance: Object-oriented programming allows classes to inherit commonly used state and behavior from other classes. Inheritance lets us group together similar attributes and functionality in a more general class, whether it be abstract or not.We can even lump those up into an interface so that all other classes, which are more specific, will just inherit the general functionality of the more general or parent(super)class. Therefore, from our example above, this is what programmers do. The classes in this UML-like diagram will look like; all the similar functionality are grouped in the parent classAnimal and all the other species inherit from it.

Another Example

Look at the example below. Stop and think. Don’t books, CD’s, and travel guides all have a price? Don’t all products have an name and a description? This is a perfect example of inheritance. Instead of repeating the same code over and over, we group the similar things together, such as id, name, description, and price, and put them in a more general class. That way, the more specific classes can inherit from them, instead of res re-specifying them in their own respective classes.

Conclusion

Thus, we have related a principle of perception to the course of Software Engineering. Just because we deal with high technology, codes, programs, and software doesn’t mean that we do not participate in the real world around us.

Definitions and Images:
Sensation and Perception : Rizalee Rowan D.
Head First Java


Gearing up for Developing in Visual Studio with LINQ, Microsoft SQL Server

Special thanks to the creators of the following PowerPoints, my great friends (and even greater programmin’ chickas)  Aela Garong and KC Arabit. :) Check out their blogs too! Kc (kcarabit.wordpress.com) … Aela…(mugSHARE.me)

They had this great idea to print screen the steps as they set up their “stuff.” Great for future reference. Told ya that they ARE awesome.

1. Setting up the server.

2. LINQ Tutorial.