Tag Archives: Technology

5 WWDC ’16 Announcements Every Software Development Company Needs to Know

By Coleman Miller – iOS Developer at Santex

wwdc16

Apple made a lot of announcements last month in its annual World Wide Developer Conference, and introduced the latest versions of its operating systems and developer tools. Here is a breakdown of the most important announcements that will affect software development companies moving forward.

1. SiriKit

In my opinion, this is the most sought-after functionality developers and clients alike have requested over the years. Well, its finally here. Apple is providing a public API so third parties can develop iOS extensions that trigger in response to Siri. The only drawback is that it is limited to the following categories:

  • Audio or video calling
  • Messaging
  • Payments
  • Searching photos
  • Workouts
  • Ride booking

In addition to these new features, its worth mentioning that Siri already supports automotive control features with CarPlay, and HomeKit has allowed allowed Home Automation with Siri since iOS 8. This new API is going to help usher in a wave of innovation and new categories of mobile apps we haven’t seen before. It will also greatly improve the UX of existing apps like Uber and WhatsApp.

2. Swift 3

Although this should be #1 on this list, I believe Swift will bring more changes to software industry in the long term, but short term, Swift 3.0 is a huge improvement from 2.3. One of the biggest breaking changes is Apple adding “Swift Overlays” to its frameworks (some of which were originally written in Objective-C in the 90s) to make Swift a first-class citizen for iOS development. Another breaking change that will affect every single iOS app (with any Swift code), is the move by Apple to forgo classes in favor of structs and value types in its Foundation framework. This is more than a simple API change, it’s in fact, a huge paradigm change for current Apple Developers and programmers coming from other languages like Java, C#, and JavaScript. C developers should feel at home though. Unlike last year, Apple is letting developers chose between Swift 3.0 and Swift 2.3 for publishing apps to the App Store, so developers can take their time migrating to the new version of Swift.

3. Home App

When HomeKit was announced in iOS 8, it took a while for companies to make their existing IoT products HomeKit-compatible. Fast forward 2 years, and now HomeKit is a first-class citizen of iOS, even shipping a beautiful `Home.app` on your home screen. HomeKit’s goal is the unification of IoT and Home Automation products by adopting an Apple-defined protocol so they can easily talk to each other. This allows you to control the lights in your house via Siri, and setup home automation rules (Apple calls them “Scenes”) similar to what IFTTT does with apps. While Apple has accomplished this goal protocol-wise (by providing both HTTP and Bluetooth variations of its HomeKit Accessory Protocol to encompass all manner of devices), besides the Siri integration, Apple provided no user interface for HomeKit, and on the app side, that experience was fragmented. With the new Home app, centralized home automation is easier than ever, and you won’t need to download the specific third-party apps for each HomeKit accessory you purchase. This should boost HomeKit’s popularity and demand with hardware developers.

4. WatchOS GPU-accelerated Games

WatchOS is in a special category of iOS development due to the lack of native APIs like OpenGL and UIKit. While most attribute the App Store’s success to the proliferation of mobile games, that innovation and boom would have not been possible had the iPhone only allowed Web apps like Steve Jobs originally planned. Due to the issue of battery life, the Apple Watch provides a very limited API for native apps, in fact, its more limited then making an average website. One way Apple wants to lure developers to its WatchOS platform is by allowing them to make OpenGL accelerated 2D and 3D games with its SpriteKit and SceneKit frameworks. Since this is what many developers have asked for since day one, it will promote a boom of WatchOS games, like we see on the iOS and tvOS platforms. One drawback is the fact that those platforms can use OpenGL and natively port their code from Android, to iOS. WatchOS game developers will have to rewrite their rendering code for Apple’s platform.

5. Message and Map Extensions

With the introduction of iOS extensions in iOS 8, Apple has allowed third party apps to embed a part of their app in Apple’s stock apps (e.g. Contacts, Photos) and other third party apps. Now in iOS 10, developer’s can write extensions for the Message and Map stock apps. This will allow users to use apps like Uber and Yelp in the stock `Maps.app` without having to switch between contexts. The Message extensions allow all manner of custom content in the stock iOS messaging app, again, allowing for a new category of mobile apps.

About the AuthorColeman Miller is an experienced iOS Developer at Santex,  passionate about his work.  Coleman is continuously learning and training to investigate new technologies.

What Thread, Main Thread? Part II

By Martín Zangl – Android Developer at Santex

mobile-phones-1

If we are to understand some basic, common behaviors for approaching a simple solution using threads, we know that at some point we have to manage communication and execution order. For that, Android provides us with a bunch of concurrency and communication frameworks that are designed, implemented, and integrated in accordance with many patterns that you can find in POSA books.

Android provides differents tools according to concurrency patterns:

We can resolve many problems with one or more of the following:

  • Using handlers and other threads
  • Asynctasks
  • Loaders
  • IntentServices

Custom Handlers and Threads

As previously stated, there is only one Looper per Thread, but we can also have different handlers post messages and process them.

For example, we could define two threads with two handlers to send messages to each other.

threads1.png

For one instance, what if one of that threads is the Main Thread, we could send update messages to UI widgets and notify something happens in the other thread. Remember that if we are just using a simple pattern like observer pattern and notifying every change directly to the UI won’t work because we are trying to change the state of view object from a thread other than the main thread. In that case we could post the result or intermediate results on the handler registered to the main thread. In other words, we have an Activity, we declare a new Handler, that handler would be associated to the Main Thread – that is, the main looper – so every time we send a message from another thread, the handler will post the message in the message queue, then the looper will process that message sending it to the registered handler. Then we can update some UI widgets.

This is a pretty clean solution, but it becomes very difficult to handle the UI widgets’ lifecycle. That is to say a configuration change happens or the user changes the context often.

The worst scenario is when a configuration change happens, because in that case a new instance of the activity will be created. It would be even worse if we had references for any particular view on those messages; in that case the reference cannot be garbage collected and we’d just be leaking memory.

More in detail, every time that a configuration change happens two new messages are posted to the looper queue, one is CONFIGURATION_CHANGE and the other is RELAUNCH_ACTIVITY and this is what happens after that message is processed:

  1. calls onSaveInstanceState(), onPause(), onDestroy() on the old activity instance.
  2. create a new activity instance.
  3. calls onCreate() and onResume() on that new activity instance.

In the case that we send messages from other threads to the main thread, we have be careful. We cannot predict in which activity instance we are posting those messages.

We could do some speculation and think if any message posted before the orientation change would be handled before onPause() the leaving activity, and if any message posted a after the orientation change will be handled after onResume() he incoming activity.

 What can we do?

Fix the architecture instead of messing it up with handler.post().

Do not hold view or context references.

Remove all messages or callbacks in the activity onPause()

And the last one if you want to get fired use hanlder.postAtFrontQueue() to make sure a message posted before onPause() will be handled before onPause().

Next post we’ll talk about Asynctask, IntentService and Loaders.

About the Author – Martín Zangl is an experienced Android Developer at Santex,  passionate about his work.  Martín is continuously learning and training to investigate new technologies.

Source:
https://corner.squareup.com/2013/12/android-main-thread-2.html
https://www.youtube.com/watch?v=S1Y1Zt3lfeQ&list=PLZ9NgFYEMxp4KSJPUyaQCj7x--NQ6kvcX&index=32

 

What Thread, Main Thread? Part I

By Martín Zangl – Android Developer at Santex

mobile-learning

Public Static Void Main

As we know, every single Java app starts with call to method public static void main(). This is true for Java desktop, JEE servlets, and Android applications.

When Android boots, it uses a simple process called ZygoteInit. Zygote (Wikipedia) is a cell that can divide asexually by mitosis to produce identical offspring. This is a VM Dalvik process that loads the most common classes of the Android SDK on a thread, and then waits. When starting a new Android application, the Android system forks the ZygoteInit process. The thread in the child fork stops waiting and calls ActivityThread.main()

Here is what it’s essentially doing:

public class ActivityThread {

public static void main(String... args) {

Looper.prepare();

Looper.setMainLooper(Looper.myLooper());

Looper.loop();
}
}

Looper? What is a Looper?

Here we can find a particular concurrency pattern called Thread-Specific Storage. This pattern allows multiple threads to use one “logical global” access point to retrieve an object that is local to a thread, without incurring locking overhead on each object access.

articulo

When a Android application starts, it creates a Looper object. A Looper object contains a static ThreadLocal object, a Message Queue, and the Thread reference that created it. In other words, a Looper implements a Thread-specific event loop. Using a Looper is a good way to process messages serially on one Thread.

Looper.prepare(); This operation associates the looper with the current thread and storage it in a static ThreadLocal.
Looper.loops(); will process each message in the queue, and block when the queue is empty.

As previously said, each looper is associated with one thread. To retrieve the Looper associated to the current thread you can use the method Looper.myLooper().

An example of using a Looper with a Thread:

class HandlerThread extends Thread {
Looper looper;
public void run() {
Looper.prepare();
looper = Looper.myLooper();
Looper.loop();
}
}

Handlers is the natural companion to a looper. Looper has a Message queue and Handlers put messages or runnable objects in place and process each of them, i.e. it allows them to send messages to a looper message queue from any thread and handle messages dequeued on the thread associated to that looper.

You can associate many handlers to one looper. The looper delivers the message to one specific handler.

A default Handler constructor associates it with current the thread and its looper. We could define the other Looper if we want in order to post messages to the Message queue of whatever Looper we want.

The looper instanced in the void main method is called Main Looper, part of the Main Thread. This particular thread is in charge of dispatching events to the UI widgets that include the drawing events. All components (other Activities, Services, Broadcast Receivers and Content Providers) that run in the same process are instanced in the Main Thread.

When an application performs intensive work in response to user interactions, this single thread model can yield poor performance. If everything is happening in the Main Thread it will block the whole UI, so no events can be dispatched, including drawing events. That is when a ANR (Application Not Responding) dialog appears. In that case, we just put all the long background operations in another thread, but other problems arise in paradise – only the main thread can process UI widgets. So, we need to somehow handle communication between threads.

Next post we’ll talk about:
Using custom handlers and other threads
Asynctasks
Loaders
IntentServices

About the Author  – Martín Zangl is an experienced Android Developer at Santex,  passionate about his work.  Martín is continuously learning and training to investigate new technologies.

Source:
https://corner.squareup.com/2013/10/android-main-thread-1.html
http://developer.android.com/reference/android/os/Looper.html
http://developer.android.com/guide/components/processes-and-threads.html

Expectations of an American businessman– How to sell in the US Market

by Doug Lewis

Who am I?

I am an American businessman with over 30 years of experience selling and buying products in Asia, Australia, Europe and the U.S and Canada.  I have worked for technology companies in software and processing and in economic development in International Trade and entrepreneurism.

Where do I come from?

I’ve lived most of my life in the middle of the US but I have traveled throughout the US and in many other countries and I’ve lived in Japan and Sweden.  I understand quite a bit about international business but not a lot about doing business in South America and not a lot about Argentina.

Why is it worth selling to me?

Because I’m really not trying to sell to you.  I work for Santex.  Over 90% of our revenue comes from the US market.  I have nothing to sell you. I say this because unfortunately too many times the first connections between businesses who want to sell are people who are trying to sell to each other.  They are the people in international sales for each company or sometimes even the CEOs themselves. They just shouldn’t try to sell to each other.

So let’s suspend reality for a moment and assume in this case that I am buying from you.

MapaUSblog

I’m buying and I’m buying services in an economy where services are close to 80% of the economy.  That economy is 17 trillion dollars according to the Worldbank.  Trillion is 1 with 12 zeros behind it.  That means people pay 13.6 Trillion dollars per year for services in the US.  I’m buying for many reasons but here are a couple of them.  I am buying because after dealing with the rest of the world for a long time, I’m concerned about places and countries closer to home. I’m concerned that bigger countries than the US will have even more influence that will affect the future of my kids and their kids.

And because I’m really tired of dealing with 12 to 15 hour time differences with Asia.  It always means that someone is working in the middle of the night.  I want to find sources closer to home but I am also accountable to my stakeholders and customers to get a good price or provide a good value for them.  Price is a factor especially if I can get it somewhere else easily.

Just a word about competition.  If you are in software development services like I am, Your competition is not in this room.  Your competition isn’t in Cordoba.  It really isn’t even on this continent.  It is any place on the planet.  Because the software code can be developed wherever any one has a portable computer and can delivered when and wherever it’s needed.  Competing on price alone will leave you starving.  You need to deliver value to your customer.

If I’m going to buy from you then you are probably asking “what do I expect from you?”

I expect solid and simple communication the way that I want it.  Please don’t take me on a walk through the forest.  I don’t want to sift through information to try to find what you are trying to tell me.  I really don’t know what I’m looking for.  Get yourself organized.  Group your products into categories and name them.  In other words, I need your information presented in a context and it needs to be complete.

Don’t expect me to ask questions about something that I don’t know.  You know your product and you need to be able to communicate with me in my language. So I need your help.

I do expect you to have any material that you present be in standard American English.  I don’t expect you to speak perfect English but I need to be able to understand you.  If you need a translator then you need to provide it.  I don’t think you want one of my employees who studied Spanish in school and drank rum or tequila drinks on a beach in the Caribbean to be your translator.

As an American, I expect information to flow freely to me.  When you hold something back or I find out something later that I thought I should have known. I feel one of two ways, I am suspicious of your motives or I think you don’t know what you’re doing.

I’ve done business in around 40 countries but I really don’t know much about Argentina and so you will need to explain a little bit about your country and I want to learn.  I know there are the positives of doing business with you and I want you to get that point across but there is one factor that is more important than anything else.  I only deal with honest people. It makes my buying decisions much easier.  You just won’t get another chance if you don’t deliver what you promise.

I’ve heard about the government and the economy but I’m a business man.  I’m willing to buy a good product for a fair price.

I will do my research on you before we meet so I will expect to find you on LinkedIn with a profile in proper English.  I will expect some information on your website.  If you only have a Spanish website, I’ll let the browser do the translation but you never know what I will get that way.  I can tell you that in Hong Kong, Singapore and many other countries I will not only have websites in English but a lot of information for me.

I know enough about international business and dealing with business people around the globe to know that cultures are different.  I know that things like jokes and stories don’t always translate well so I personally avoid them.  I don’t like to confuse matters by being misunderstood by a joke and I certainly don’t want to explain a joke fearing that I mistaken the lack of laughing for misunderstanding the punch line.

Time is important to me.  I like to use it well and expect others to do so too.  I have a lot of people who make demands on my time.  Face to face meetings are so productive that I don’t want to have them be wasted.  I like a meeting agenda ahead of a meeting and I will come prepared and I expect that you will too.  I like to concentrate face to face meetings at places where I have meetings anyway.  International trade shows and conferences when I attend are places I can do this.

By the way, sometimes the easiest and most relaxed time to meet with me is at breakfast and it’s best before 8. I can take time with you not distracted by others in my com palm texting or calling me.  On occasion, I’ll have a business dinner but I coach my kids sports teams and have family activities after 6 so evenings are scheduled for me and I like to be in bed by 10.  Golf is good for those who play well but I don’t play.

Are you believable?

Will you really do what you say you will?  How would I know?  That’s why I expect that you have customer references. You are certified in quality standards and you belong to US and International industry and Professional groups.  It doesn’t matter where you are in the world; you only have one chance to make a good impression.  I may be dressed casual but I’m always impressed by someone who is dressed to sell.

How much do you really know about the US?

Do you know that there are at least 4 geographic markets in the US?  There are two that most people know and they still put them together.  There is the West Coast or Left Coast as we call it.  It’s fast paced but casual.  High tech but also Hollywood.  It’s where everyone from around the world takes their idea and their movie script to sell it.  Competition is fierce. Making a splash is nothing unusual.  It’s on a big ocean and people do it every day.  Money flows in and out easily until there isn’t anymore and then it crashes.

Then there’s the East Coast.  It’s traditional.  Money has been there a long time and they want to keep it that way.  They don’t give it up easily.  They are skeptical of everyone, even people they grew up with.  You can imagine how important it is to be credible.  There are more people squeezed into the land between Philadelphia and Boston than there are in Argentina.  That distance is 100 kilometers less than from Cordoba to Buenos Aires. And know your baseball teams.  Don’t wear that baseball cap you bought at Yankee stadium in Boston.

Moving along to the South.  They haven’t had money since the 1800’s.  There are pockets of wealth like Atlanta, Miami and Dallas.  Overall, it’s conservative but it’s changing.  People are moving in but people are still paid less and the infrastructure isn’t as good as other parts of the country.  People don’t part with money easily and especially not for products that don’t look like they are from home.  It’s the headquarters of Walmart, where  the company slogan is “Always the low price. Always.”

And then there’s the Midwest.  In the Midwest, there are two natural resources.  One is land and the other is people.  Both are becoming more scarce and therefore more valuable.  The land of 12 states is one fourth the size of Argentina and there 67 million people.  The largest city is Chicago.  It’s a world class city that considers itself in a league with Buenos Aires.  One hundred dollars will buy what 160 dollars buys in New York City.  The second largest city is 2 million people.  It’s Indianapolis and is a lot like Cordoba.

Energy production– wind, biofuels and oil and natural gas is the new industry in the Midwest.  Agriculture is changing from old to new to feed the world and manufacturing is finding its way in a new global market.  And what about the money?  The money is here.  It’s stable.  Midwesterners like to pay cash and they like to own what they buy, not borrow to pay for it.  They have experience taping into the east and west coast and once you are partners, they will take you with them.  You may just want to take a look.

So what’s the place where people are the wealthiest?  It’s in the Midwest.  It’s in fact Des Moines Iowa.

Here’s a video that makes that point.

So things are not always as they seem.  Sometimes unlikely places have more potential than at first glance.

For more information check out Doug Lewis’ presentation on Slideshare.

Doug Lewis is a Manager of Inside Sales and Business Development for Santex.  Throughout his career, Doug has developed high value sales and business relationships for companies seeking international markets.   Prior to joining Santex in 2012, Doug was with the Iowa Department of Economic Development  where he worked in the Innovation and Commercialization Division in entrepreneurial development. He was program Manager for the Iowa Demonstration fund which helps companies commercialize innovative products in three targeted industry sectors– Advanced Manufacturing, BioScience and Information Technology. Over 100 companies received close to $12 million in state funding to launch new, innovative products.

 

 

Santex at the Nexus Nearshore Conference

By The Santex Editorial Team

In recent years, Latin America’s software and services industry has made significant progress, establishing itself as world class outsourcing destination. The region has taken on the challenge of responding to the increasing demand for technology and services of the information age and the knowledge economy.
Continue reading

Translate CMS/Block pages in Magento with the inline translator

By Miguel Balparda

Even though Magento has a native inline translator, it doesn’t work for CMS pages and static blocks. For different languages, Magento has the option to create one CMS page or static block for each different language and assign it to the correct store view.

This issue came up when developing a new Magento clothing eCommerce Platform, specifically when we needed to make the site available in multiple languages.

Continue reading

LinC: a simple screen grabber tool for Linux

By Maximiliano Sbrocca

I currently work on a project that uses Techsmith Jing as a Corporate Tool. Jing is used to create videos for demos and to reproduce bugs on tracking tools among other things. However, Jing has one big problem: it can only be run on MAC and Windows systems. For that reason, creating a video for a demo was a tough task for co-workers with Linux stations.

After some research, I realized that Techsmith had never planned the Linux migration of Jing. After exploring different tools with the same features that Jing offers in the market, I could see that none of them fulfilled my expectations. I suggested to one of my coworkers, “What if we create a Jing Linux version using Python?” He agreed and we picked up the challenge and started the development process of LinC.

Continue reading

Software Outsourcing: Case Study Argentina

By Gonzalo Fernandez

According to Tholons, both, the city of Buenos Aires and Córdoba rank among the best outsourcing destinations in the World.  Unquestionably, Argentina’s software industry is smaller than the other IT industries in the globe like India’s, Ireland’s or the Philippines’, however, many Argentinean and South Americans cities are regarded as world class service centers.

Continue reading