I’m sure you have heard about Apple position on creating a backdoor for the FBI, that could potentially create a precedent on how similar cases can be handle in the future if they do it. And while reading about the topic, there is people oppose to it and there other that are ok with it, some people even use the argument “I have got nothing to hide”.
Straight to the point, I found an amazing document that dismantle such argument, asking questions like, what are the boundaries of its usage? what is the underlying meaning of it? what are the flaws? and most importantly, what is privacy and how actions/comment like these affect it.
I know, right? This used to frustrate me a lot, but hey! its not the end of the world.
Prior this entry, there has been some attempts on the team I work with to come up with guidelines or rules to use in our development process. Rules tend to force and condition a specific behavior, and even when the team has agreed to use them, its difficult due such guidelines - the common ones - ask for a change on how developers write their code, at the end, its a give and take that not every team member might be happy with.
On the other hand, an etiquette describes a code of behavior in a specific social context. If we land this in our professional environment, it is expected from a senior developer to have similar habits and standards to maintain an order that will be beneficial in the development process. As I previously mentioned, an etiquette does not force a behavior as oppose to a rule (so developers can still choose not to follow them), but it sets expectations level for everyone in the team.
Straight to the business, these are the etiquettes I think every development team should use - there might be more, and i will add them once they come to my mind:
Have you heard about the principle “Don’t Repeat Yourself” (DRY)? It states that specific components should only occur once in your system. Having this in mind, if you are in the need to add a new component AKA method, class, etc, consider the following steps/questions:
Is there something similar already to what I want to add?
If Yes, then - does it do what I need?
If No, then - can I update it?
And we can continue with more questions like this. The goal is to avoid having repeated components that might be doing the same. Remember duplication in code is a bad practice.
Commenting your code can be a good tool to avoid things like “When I wrote this, only God and I understood what I was doing. Now, God only knows”.
If the method you are implementing has or will have a big bunch of code, consider breaking the logic into steps, if those steps require some kind of assumption, do not hesitate to add it as a comment (it might be an assumption for you but not for others).
The goal is not to comment every single line of code but to comment a series of steps that achieve a particular objective.
This will help other developers to understand why things were done like that, and in the event of adding new code, information like that will be helpful to define where to inject it.
Lastly on this point,
Comment anything that is unusual on a normal flow, for example, if you want to avoid calling the super implementation of a selector, be sure to add the comment.
If a method is purposely left empty, add the comment.
If you find something subject to be improved (or moved, deleted, etc), or when you added or saw a hacky fix that needs immediate refactor, add a //TODO:
Usage of proper naming conventions is considered a good practice. We prefer “Camel Case” naming convention (capitalizes the first character of each word except the first word).
Name your variables keeping in mind the purpose they will be used. If your need to store the width value of a specific view, avoid using names such as “x” and consider “searchBarWidth” instead, if this becomes problematic the use of “width” does the job too.
Most developer prefer the usage of a prefix that describes the class name. For example:
Name your methods keeping in mind the main objective to be achieved within them.
As an example, if you need to create an action where the first object from the list needs to be selected, do something like this:
Another example can be, if you need to create a method to dismiss the current view controller, you can do:
For methods with multiple parameters, consider the following example. If you need an action where we need to add a payment to a receipt, you can do:
Avoid adding the word “and” in the parameter names.
For completion blocks, words likes “onComplete”, “onSuccess”, “onFailure”, “doAfter” are acceptable.
For UnitTesting methods, always start with the word “test”.
Giving Feedback on Pull Request
This can be considered a difficult task since there is the need to draw a line on things that needs to be changes for approval and things that are acceptable but don’t block the approval.
Consider the usage of the following phrases when writing your feedback:
“Must Fix”: Meaning no approval until its changed.
“Suggestion”: Approval is not compromised but its under developer discretion to change the code.
What scenarios will make us use the previous phrases? For that, ask yourself the next questions:
Does it achieve the goal?
If Yes, then most likely you will be just adding suggestions.
If No, then a must fix should be requested.
Does this approach increase the project technical debt?
Don’t hesitate to express that something needs to be changed due reusability is not achieved as it should be.
Is there any database change?
Be careful with this one, and most likely you will request a must fix.
Does this code brake existing unit tests?
If so, its an easy answer, you should request a myst fix.
Writing Unit Test
Think of unit test as a safety net you add to the logic you just implemented in a given task. If there is new code injected in the same area where the unit test are working, you can know if the behavior has change prior any manual testing.
It is a good practice to have the following things in mind while writing unit tests:
They should be defined before any code change is made, if you do the opposite, most likely you will have to go back a touch the code to make the test pass.
Gherkin language (Given, When, Then, etc) is useful to describe what you are testing.
Test should be testing small independent bunch of code.
More than one assertion is acceptable if they are related. If not, only one per test.
Technical Debts & Refactoring
In every codebase you might find code that meets the following criteria:
Is out of date and requires immediate change, but if you proceed, it might and most likely affect other areas.
Due a time constraint you decided to implement a patch knowing you need to come back later.
There is a better or newer way of doing something.
When doing such discovery, raise the voice and have a technical debt created for you for future implementation (you should reach the lead developer for this), don’t do the change if you are unsure of the impact it might cause.
Letting other people know about the discovery can have additional benefits such as:
Doing the change right away due there was no severe impact on it.
Understanding why it was done that way (specially when no comments were added).
Small General Etiquettes
The following ones are project specific or language specific.
Line Length: 120 (not strict limit).
Use default spacing (4 spaces).
The usage of constructor or initializer methods is well received.
Any new string added to the project should use NSLocalizedString macro.
When submitting Pull Request, remove commented code and discard any changes that is unrelated to your fix/implementation (specially with storyboards).
The usage of pragmas to organize code is well received.
Working in a team might be not be an easy task, specially for people like me obsessed with order. As you can see, these etiquettes do not ask developers to change how they use spaces in methods declarations, semicolons in conditionals, block the usage of ternary operator, etc. But they do ask for a common behavior when working in a team, to keep things as objective as possible. And again, in a professional environment, habits like this should already exists on the individual, specially in those ones with a lot of experience.
I’ve been hearing a lot of comments about Donald Trump’s immigration plan - about how he would actually give back the jobs “we” (I highlight this since I think we are the least problem this country has in my opinion) foreign workers are taking from Americans - and after reading his proposal here are my comments.
Putting aside all the hard comments about Mexico, he proposes: raising fees for VISAS, increasing wages for workers with H1Bs, penalties for cities that refuse to hire Americans first, increasing penalties for people who overstay after their permit is expired, even mandatory return for people who has committed any criminal activity.
Now, Im not a politician, but if you ask me if this is crazy, I would say no. Additionally, are the Americans ready for this? Thats is a different topic I wont even comment. Actually, there is one thing I agree from his proposal, he says “A nation that does not serve its own citizens is not a nation.”, and that is completely true and it was the most shocking part from the text. In fact, It is not about his reform what I really want to talk about - It is about why people leave their countries.
People decide to leave their countries for several reasons, among them you can find: to reunite with family, because of a conflict such as the Syrian Civil War (where people can’t go back due the danger in their hometown or the fear of being killed), and because they are looking for better opportunities. The last one is the one that made me leave my country.
And this is where I agree with the above, I believe a nation should provide their citizens an environment where all opportunities are equals and accessible to everyone, a place where the empowerment elevator is not broken, and not allowing specific type of business or people to use it to their advantage, a place where salaries are competitive enough that makes citizens think they do not need to go other places for stability, security and personal fulfillment.
Sorrowfully, I think Mexico as a nation is not doing a great job to achieve the goal. And I said as a nation due Im not blaming only the current and past governments, but the citizens too (citizens like me that decided to leave), citizens that does not get involve on who/how they are governed. And I think too, this is not exclusive to Mexico, other foreigns in their attempt to achieve the American Dream are ready to give it all.
So, when I read & hear comments regarding Trump’s immigration plan, I can only think, I would do the same for my country, I would create the right place to achieve what I mentioned above (and you might say now - Javier, It’s just politics - or - Your are becoming a gringo - plus - you should not say anything). But the reality is that since I pay taxes, I have the right to express my opinion and even complaint if I want.
Now, where is all this coming from? Well, those who have the luck and misfortune (yes, as ambivalent it can sound) to live outside their country, tend to love it more, and that is my case.
He escuchado muchos comentarios acerca del plan de Donald Trump - sobre cómo el podría devolver los empleos que nosotros los inmigrantes hemos arrebatado de los americanos - y después de leer su propuesta, he aquí mis comentarios.
Dejando aún lado los comentarios fuertes sobre México, se propone subir las cuotas para obtención de VISAS, incrementar salarios para los portadores de H1B (no entiendo como esto podría ser beneficioso pero bueno), penalizar a ciudades que se rehusen a contratar a americanos primero, incrementar las penalizaciones para las personas que se queden aún después de que si permiso halla expirado, además de deportar a personas criminales, entre otras.
No soy político, pero si me preguntas si esta reforma parece una locura, yo diría que no lo es. Adicionalmente, están los americanos preparados para asumir este cambio - este es un tema que no me atrevería a tocar ahora. De hecho, hay una sola cosa con la cual si coincido con su reforma migratoria, y es “Un nación que no sirve/provee a sus ciudadanos, no es una nación”, y es completamente cierto. En realidad, no es acerca de la reforma de Trump el tema del que quiero hablar pero el por qué las personas deciden dejar su país.
La gente decide migrar a otros países por varias razones, entre ellas, por que se quieren reunir con su familia, por que existe un conflicto como la [Guerra Civil de Syria] (https://en.wikipedia.org/wiki/European_migrant_crisis) (donde los refugiados no pueden regresar a su país por el temor a morir), y otros por que están en busca de oportunidades (razón por la cual decidí salir).
Y aquí es donde estoy de acuerdo con Trump, creo que una nación debiera proveer a sus ciudadanos el ambiente ideal donde las oportunidades sean iguales y accesibles apara todos, un lugar donde el elevador del poder no este descompuesto, permitiendo así, que industrias especificas o personas lo usen a su favor, un lugar donde los salarios sean lo suficiente competitivos para que las personas no tengan la necesidad de ir a otros lugares a buscar estabilidad, seguridad y satisfacción personal.
Con pena, creo que México como nación no esta dando la talla en esta materia, y enfatizo “nación” por que no solo culpo a los pasados y actuales gobernantes, pero también a los ciudadanos (como yo que han decidido irse), a ciudadanos que no se involucran por saber quién, cómo los están gobernando. Y pienso también que esto no es exclusivo de México, otros nacionales en su intento de lograr el sueño americano, están dispuestos a darlo todo.
Entonces, cuando leo y escucho comentarios acerca de la reforma de Trump, solo puedo pensar que, you también haría lo mismo por mi país, para crear el lugar adecuado para lograr el objetivo antes descrito (y aquí es cuando algunos dirán - Javier, es política, todo es mentira - o - Callate gringo - además de - tu eres el menos indicado para hablar). Pero la realidad es que desde que pago impuestos, tengo el derecho de expresar mi opinión e inclusive quejarme si quiero.
Por ultimo, de dónde viene todo esto? Bueno, aquellos que tienen la dicha y el infortunio de vivir fuera de su país, tienden a amarlo y apreciarlo de más, y ese es mi caso.
There has been a long time since I haven’t touch this place, and now I feel inspired, so here I got with a topic that believe it or not, it is important to me.
Like it or not, HIV (AIDS) is deeply related to the gay community, where more than 50,000 new cases are registered in the US and around 2,000 - 5,000 in Mexico every year, most of these cases are diagnosed in men that have sex with other men (MSM).
Now, the million dollar question is, how is this related to me? Well, first, Im gay, second, I have people that I appreciate and love that have been diagnosed with HIV and third, Im afraid, very afraid. Im a catastrophic thinking guy - I remember once I stopped going to the movies due I believe that way, I would avoid a crossfire - I know its stupid but, thats me - so I tend to think in the worst case scenario in every situation.
But Im upset too, upset of watching such numbers increase, upset of the disease itself since It found its niche in the most popular transmission way which is sex, upset of other gay men (not generally speaking) taking the topic so slightly, upset of me not being able to release such topic.
Not only Im upset, but Im grateful too, grateful of being surrounded of people that cares about me, grateful to the people who has listened to me complaining and releasing my anxiety about the topic, even once one said “I felt like swords crossing my heart when you talk about that”, grateful of being lucky so far, grateful of being afraid and upset because it helps me being alert.
If the HIV topic causes all these emotions to me, so, why talk about it now and not before? Well, I recently watched one interview to this awesome lady (Tina Roth Eisenberg) and one of the things I got from her is that “If something is bothering you, you either do something or let it go”. And since the second option has not work for me - for a long time now - and no therapist seems to please me either - Im very hard with people by the way - well, Im here writing about it, exposing my vulnerability, daring to talk about it, daring for the first time.
Will this help me? I have no idea, but certainly its better than running away. Its time to take the bull by the horns. I need to take action and I have decided to get involve in the topic, instead of just turning around and ignore it. Im checking my options, what, where, how, when are the questions now. The reality is that HIV exists and its here and we have to deal with it regardless if you want to prevent it or live with it.
While in the #WWDC2015, meeting new developers, recruters, media is imperative, reason why, you will be finding yourself sharing business cards.
I met one developer, who had an unusual way to share his card, and that way was using Passbook, I inmediately asked him to share how he did it and in my time in the conferences, beside putting attention to them, I was working on my own digital card.
Unfortunately, I found myself checking other sources to complete the task, so I decided to compile the information and share it here.
First and most importantly, you will need an apple developer account (this should be no issue anymore due on #WWDC2015, it was announced that there will be no cost to get one). Go a head a create one, then come back.
Passbook technology works around a file which its format is .pkpass, when either the mail or mobile safari detects this file, it will render the pass correctly, once you click on it, it will handle the rest for you (presenting the view to add it into the pass library).
Creating .pkpass file
Before doing anything, lets create a new directory to put all the things we will be creating.
Having said the above. The following image describes the skeleton of the pass.
As you may already saw, we can localize passes creating the appropiated directory structure, but that is something we wont do now. There are 2 files missing on that image, they are the manifest.json file and the actual signature file (which we will create soon).
Now, how is this translated to the actual pass? The following image describes that.
The actual content information resides inside the .json file.
Remember I mentioned you need an Apple Developer Account, the .json file requires “passTypeIdentifier” & “teamIdentifier”. You can get the second one under Account Information area in the developer portal. The first one will be the next thing to do.
Feel free to play with the values on the .json file, you can change it entirely with the ones you have in mind. Now lest put this on hold and create all the boring stuff we need from the dev portal.
Head to the Developer Portal
Go to Certificates, Identifiers & Profiles in the dev center and click on Pass Type IDs, now add a new one - you should see something like this.
For this example be sure to use the following format “pass.com.yourdomain.appname” as the website mentions. Go a head an register the pass. Once created, go back to the pass.json file and update the “passTypeIdentifier” value with the one you just added.
Click on the recently created ID and you will have the option to edit. Then you will create the certificate to be used. In order to do that, follow the instructions from the dev center. Once you are done, download the certificate and add it into the passbook folder we created at the beginning and do not forget to add it into the keychain too.
Going back to the Pass directory
Early, I did mention we needed to create a manifest.json file, the purpose of this file is to describe what is inside the pass package. Below you will find and example of it.
Create the file and put it next to the pass.json file. Its obvious you have to do the same with the rest of the files/assets.
IMPORTANT: If you happen to update either the assets or the pass.json file. You need to update the manifest.son file. Do not forget about this.
The other file we need to create is the actual signature. Why do we need a signature? Ask Apple!
In order to do it, we will need the certificate we created before on the dev center. Open KeyChain Access, find the certificate you created following the format “pass.com.yourdomain.appname” and export it as a .p12 file - for this example, I named it pass.p12 - (you will be prompted to add a password - we will use it in a few seconds).
Next, go back to Terminal app and type the following command:
We are almost done, we need one more certificate, this time its WWDR certificate, head to KeyChain Access and look for “Apple Worldwide Developer Relations Certification Authority” and export it as a .pem file - for this example I choose the name WWDR.pem - finally, we have all needed to create the signature file. Head back to the Terminal App and type the following command:
This will create a signature file. From here, we just need to zip the files, but lets make sure we have everything, the following image describe what should be on the package.
Simply, select all those files and compress them, replace the .zip file extension to be .pkpass and you will have your pass ready to share.
Sharing your Business Card Pass
There are 2 ways to share your pass, for the sake of this example we will use the email approach. As I mentioned at the beginning, iOS will handle everything if you use Mail or Mobile Safari.
Simply, send you an email to your self or any other people attaching the .pkpass file and if successfull, the apps will render the pass properly. You should see something like this.
Now, you can go even further and use the barcode message to be the URL were people can download the pass when they scanned, you will be resposible to create the endpoint and endup with something like this.
WWDC 2015 has just finished and there were a lot of new experiences I got from the event, such as the keynote, the lunch sessions, the after parties, etc, but one among them is with no doubt the so called “Line” experience. For those who does not know what the Line is, its basically, arriving early to get the best seats you can for the keynote presentation.
At the beginning, I was hesitant do it, and I was always avoiding the topic with my friend and coworker Nader. But we reached a moment were we needed to decide if we should do the line or not. In order to make such decision, we stopped in the Moscone center at Sunday at 18:00. The first thing we saw was a bunch of unknown people already doing it (around 25, most of them very young guys).
At that moment we knew those guys were not playing, the worst thing its that we were not prepared to do such task. Then we meet Kevin (the CEO of https://en.neurs.com/ - check the website), we ten head to Target City (just next to the Moscone Center), in there we packed some beach chairs, water bottles, some monster beverages and blankets - yes, the night was going to be cold - and went back.
Even doing the line, I was completely thinking - “Im very old for this” - followed by - “I feel embarrassed doing this” - but I would not deny very deeply inside me I was still an Apple fanboy who was willing to commit and get the best seat possible.
Time was passing and unknown people became known people, like Jupiter - who is from Toronto and had the scholarship to attend the event, working on a watch kit app -, Douglas - very serious guy, working on an app to add parental control for kids -, several guys from Australia which I do not remember their names - I apologize for this -, Daniel Di from Italy - who gave me his business card as a pass in Passbook -, among other guys, but the one who really impressed me was Clint Wilde, who is just 18 years old and already has his app feature on the app store “Splash Canyons” on the game category, at that age I was doing something completely different, I could not resist and felt jealous about the fact.
Several people walking at the middle of the night started to: “Why are you doing this?” - one guy said - “What is this line for?” - other people in their cars were asking - We even got food for free, rumors are that the Apple was delivering the food to the people on the line, but im not sure about this.
Undoubtedly, something inside me was emerging, and that was the joy of pursuing what you want, following your plan, completing the idea you have, overcoming the obstacles your project might have. Something I lost years ago, I started surrender to first big obstacle my next billionaire idea had. I stopped researching deep enough to find a solution. I always say its not about the idea itself but the execution of it. I guess I need to follow such statement and just not reproduce it like a copy machine.
While these conversations were happening, the line was getting bigger, from 1 block length to 2, 3 & 4 blocks, by 05:00 I stopped putting attention to it. I saw community, people from the same country were creating their own group, people from Germany, Brazil, Australia, Italy, Argentina were the accents and languages I did recognize. Sadly, at that time, I did not see any group from Mexico (not until the Bash were I found Mexican people).
By 07:00 - 07:30, Moscone Center opened their gates and as you might imagine, this is were the game started, people ignored the line and started to walk or running. We then were directed to a new line making several stops to reach the 3rd floor, while this was happening, new people was in the first at the front, but I continued to see familiar faces. We wait and saw how the press had special treatment to reach the Presidio (An area inside Moscone where the Keynote is). I did not like this treatment, I felt like cattle, I felt disappointed, used and most importantly, I needed to go to the bathroom but I was unable to do it. Apple did not hesitate to start taking video and pictures, they wanted the best picture, capture the excitement, but we were tired, exhausted, we just wanted to get to the holy grail.
We finally reach the Presidio, even when we were told not to run, people did it, like if they were running for their lives, chased by zombies. People who we just met, changed behaviors like in a jungle, but instead of survive, we wanted the best seats. We did it, we got the seats in the middle column, 4th row. We were happy, we knew something was coming and we get what we wanted.
Recién pillé el Fitbit Charge HR, el cual es un brazalete que continuamente mide tus latidos cardiacos y aun conserva otras funciones como el podometro, la habilidad de medir tu calidad de sueño, cronometrar ejercicio, entre otras.
La pregunta del millón de dolares es: Por qué gaste $150.00 en este aparato? Quiero motivarme cuando hago ejercicio - pensé - Quiero tener retroalimentación en tiempo real - añadí.
La realidad es que:
Ya tengo el número real de calorías que quemo al día. Al principio la app de Fitbit (sin tener el brazalete) - usando mi edad, peso y género - calculaba un estimado de 1,835 calorías diarias. Cómo puedo bajar de peso si al menos ingiero arriba de 2,000 calorías - pensé - pero después de usar el Fitbit, el número real fue 3,300 - 3,600 calorías (haciendo o no ejercicio).
Siempre he odiado usar la caminadora, escaladora y bicicleta por al menos 30 minutos, acabar agotado y no saber que hice. Con el Fitbit, tengo un estimado real de las calorías que gaste en el ejercicio.
Puedo ver de acuerdo a mi ritmo cardiaco (durante el ejercicio), si debo incrementar / decrementar la intensidad para mantenerme en la zona de cardio (nunca he podido mantenerme en la zona de quema grasa, puesto que tendría que casi caminar). Ahora puedo aguantar jornadas más larga corriendo.
Al ir a la cama, es muy conveniente no tener que hacer nada más que dormir - a comparación de otras apps existentes en el iPhone - para poder medir la calidad del sueño.
Algo no tan bueno es que debo recargar la batería al menos una vez al día, cosa que es diferente en la pagina oficial donde se menciona que durá al menos 5 días. Igual, se debe entender que durante el ejercicio las pulsaciones son tomadas cada minutos y durante el día cada 5 minutos.
Para mi infortunio, solo tengo 3 personas en mi red que usan Fitbit, así que la motivación por esa parte es casi nula.
Es tedioso tener que registrar lo que comes (igual el agua que tomas) en la app. Aunque al hacerlo tienes un estimado gráfico de cuanto entra y sale (hablando en calorías).
Me agrada ver los gráficos generados por la app y el sitio web, sobre mi progreso, inclusive puedo ver en que zonas estuve durante mi ejercicio (pesas o correr). Aunque me gustaría poder exportar esos datos a Health app de Apple.
En todo caso, al final de día lo que importa es que, usando o no el brazalete, hagas ejercicio y conozcas más de tu cuerpo y si te motivas con aditamentos como el Fitbit que mejor.