You are currently browsing the tag archive for the ‘linkedin’ tag.

Apple finally unveiled its new products, in the first presentation in a while that introduced more than one new product. I could spend lines and lines talking about the new iPhone 6 and iPhone 6 Plus and about the new Apple Watch, but other people has already done that. You might want to check out these:

Every time Apple releases new products I post the links to some live blogs in my blog. It used to be because I was very active on my blog, talking about new products and stuff and whatnot. Then I realized that it would bring a ton of visits to my blog. In 2012, with the release of the iPhone 5, I got 25k visits in one day. So now I always post links to the live blogs to see if I get the same result… even though I am way less active on my blog now. It worked very well until Apple started broadcasting the events over streaming. Or maybe that was not the reason. Anyhow, posting links to the live blogs gets me now about 100 hits, which is not much more than the daily average. Why am I explaining this? No idea.

As a result of the decline in hits when posting links to live blogs of Apple events, and in an effort to investigate how Google’s crawling and indexing works, I am going to include in this post the following sentences just for fun and experimentation: Instructions to root the iPhone 6. How to root an iPhone 6. iPhone 6 for free. iPhone 7 design leaked. Where to buy an iPhone 8. Water proof iPad.

You never know, maybe now I get tons of hits from people trying to root the iPhone 6 or people who want to find out where to buy an iPhone 8. For the latter I would ask Marty McFly. By the way, this reminds me of that Chaplin movie where you can see a lady using what looks like a cellphone in some footage from early last century. I had a post about it a long time ago.

Anyhow, the main reason why I started writing this post was to highlight the fact that Barcelona was, once again (recall the special mention, with video included, of the launch of Barcelona’s Apple store during the presentation of the iPhone 5), featured in an Apple presentation. In yesterday’s case, with a “mention” of the cool W Hotel in Barcelona.


Looking forward to what Apple will release on September 9th? Experts argue that a new iPhone will be unveiled. And perhaps also the highly anticipated iWatch. Follow live the event from either of these live blogs:

Also, Apple will be broadcasting the event via streaming. You can access it here: Apple live video



First of all, the reason why I have been missing in action for a couple of months on my blog has been that I have been rather busy (but “good” busy) with work. Lots of exciting things happened recently, including reaching two of my main milestones for this year. I am still busy, but I will try to be back here every now and then to share stuff that I find interesting.

Having said that, if you know me well, you know that these days I am doing crazy schedules and working many hours so I can also watch as many World Cup games as possible. I will not reach my great achievements from the World Cups of 2010 and 2006, when I saw every single game of each tournament (yes, you read it right, every single one), but I am doing a decent job. By the way, if you happen to have a lot of free time (I had just finished my undergrad in 2006 and I was on a lazy + learning German + travel hiatus, and I was a grad student in 2010), I challenge you to watch every single game of a World Cup. It’s an amazing experience. But not easy. As an example, I saw the Portugal-France semifinal in a ferry with poor satellite reception going from Athens to Paros. And I saw the final in some random restaurant in the less populated side of Siros.

Anyhow, I just wanted to share some thoughts about the World Cup so far:

  • Spain: I knew we were in a bad shape and there was 0 chances we would mean. But still, what Spain did was lame. The way they surrendered after the Netherlands’ second goal was very sad. I guess Spain always sucks in World Cups and now we just had the last 6 years as an exception. The exception that confirms the rule. I was back home in Barcelona for the games against the Netherlands and Chile, so it hurt even more.
  • USA: I like this team a lot, and I am not saying it because the US is my second (actually, now officially permanent) home. I like how they play, very talented young players. And I really like this Dempsey guy. Back in my grad student years, me and my Spanish friends we always played in the intramurals against the US kids. Playing futsal 5on5 we always kicked ass… but when it was 11on11, those guys had so much stamina and energy that we always lost! And I see that in the World Cup too. It’s very interesing how over the last few World Cups the US has scored a large number of goals towards the end of the game, when the rival is tired (a game every 3 days ain’t easy!). Having said that, sometimes one sees that the US does not have that much experience in soccer. For example, no team has used a “polo-type neck” for the jersey since the early 90s. They need a jersey redesign asap! Also, they did not win against Portugal for 2 reasons: 1) that guy whose dad is the former national couch had a terrible game and made an awesome pass to CR96 Ronaldo, and 2) the US has to master the ancient skill of wasting time.
  • Argentina: Playing bad, but with a stellar Messi. I hope they win the World Cup just so there are no more counter arguments (i.e. he never won a World Cup, unlike Maradona and Pele). The world needs to finally agree that Messi is, BY FAR, the greatest player of all times.
  • Germany: My favorite team (aside from Spain) for the last few World Cups. Playing very good. Although I really want Messi to win a World Cup, I hope for a Germany-Brazil final.
  • Ghana: Such a good team. The way they play is just amazing, and although I always cheer for Germany, I was quite annoyed when Klose scored the 2-2. However, kudos for Klose, top scorer of a World Cup tied with Ronaldo (the good one).

I want to write more, but I’ll leave it here for now. Back to work now! I have been here since 7 today. It will be a long day. But it’s all good, fun stuff at work. Projects going great. And, in parallel, a really fun World Cup. What else can one wish for?


I was reading last night about Blackphone, one of the most interesting things presented at the recent Mobile World Congress in Barcelona. This new handset is being developed by a Spanish startup (Geeksphone) in partnership with the US-based security firm Silent Circle. The whole system appears to be based on a security-enhanced version of Android known as PrivatOS.

This phone is clearly a very interesting idea and a product to consider, specially because it is the first time someone does an actual step towards ensuring privacy of communications for smartphone users. However, I would like to have more details on how everything work. Blackphone claims that it can do encrypted voice calls, but something tells me that this is probably only possible among Blackphones and you cannot have an encrypted call with a “normal” phone. Moreover, this is not something new, as there are apps out there that allow to do the same things on, for example, an Android phone. The only privacy concern with those is whether the server running the app in the background gets to “see” the messages or not. And the same question applies to the Blackphone. I am assuming that, if the crypto is well done, everything stays within the phones involved in the “secret call”. But, again, having more tech details would be helpful.

On top of secured calls and messages, which can already be done with several well known apps (for example RedPhone), Blackphone has other interesting features, such as a fine-grained control of the permissions each app gets. On top of that, Blackphone does very simple things automatically, such as configuring WiFi in a way that it is not trying to connect to any hotspots it senses (avoiding potential Man-in-the-Middle attacks). It also seems to offer a way to remotely wipe the device without requiring a centralized service (like the Find My Phone feature from iCloud). I wonder how they do this, though, and how they address the wipe command from an arbitrary place in the Internet (i.e. my home computer) to the Blackphone without a server somewhere in between that keeps an open connection with the phone.

All in all, a very interesting phone, yours for 629$.


Lately I am trying to post here every time I find out something useful that I did not really know how to do. This is something I had to Google yesterday and is very useful. In my case, the problem arises when using OPNET. If you are an OPNET user, you know that results can either be visualized with the OPNET tool (very useful for rapid visualization and check of results, but not good to make nice plots) or export the results to an Excel spreadsheet.

Sometimes you have a plot with literally tens of thousands of data points and you would like to down-sample it. OPNET has an option in the results panel that allegedly down-samples the plot, but it takes forever and ever to run and the outcome is never what I need. So what I do is the following. Say that you have your data in two columns:


We are going to add a third column with the following operation: “MOD(ROW(A1),N)”. Change N by the down-sampling you want. For example, if N=20, we will be eventually using 1 data point from every 20.


Now we copy [D,1] on the entire column D. This will result in column D being populated as follows: 1, 2, …, N-1, 1, 2, …, N-1, 1, 2, …


Now we select column D clicking on top of it and we go to “Data – Filter”. A little arrow appears on top of the column. Clicking on it we can filter the values of the spreadsheet based on column D. Select only the value “1” and click OK. I usually do it selecting “1” so I always keep my very first sample. The result is a “new” spreadsheet (note that the actual spreadsheet did not change and all the data is still saved in the file, only what is visualized changes) with only one data point out of every N. You can go ahead and plot it normally as you always do with Excel.


I am sure there are ways to do this easier and more efficiently. If you know any, please write a comment and let me know.

Street Dogs Savin Hill album was playing while I wrote this. Great music to start the day.

Through one of my colleagues I learned yesterday about the infamous iOS SSL bug that resulted in iOS devices accepting any certificates whether they were correct or incorrect. This could allow an attacker or man in the middle to eavesdrop or intercept traffic theoretically secured through, for example, https.

I am not going to write today about what the bug does and the potential impact. I will, however, highlight the fact that this bug seems to have gone unnoticed since iOS 6 in 2012, which is quite scary. If you are interested in the bug and more details on the media burst it has created, you can read about it here, here or here.

I want to focus specifically on what the bug was. This bug that has terrifying consequences is just a basic and simple human mistake, probably originated at a classic copy-paste of code. Let’s look at the code, which I found here and is, in turn, from the Apple’s published open source code (which, obviously, is already fixed).

static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,uint8_t *signature, UInt16 signatureLen)
    OSStatus        err;

    if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
        goto fail;

    if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
        goto fail;
        goto fail;

    if ((err =, &hashOut)) != 0)
        goto fail;

    return err;

Essentially, after the second check, the line of code that goes to fail is repeated. Therefore, the third and last check for the hash is never executed and this subroutine always goes to fail. As you can see, this is not the fanciest bug ever. On the contrary, it is most likely a classic copy-paste human error.

I have always been very particular when coding in C and Java and I ALWAYS use {} for condition statements. So, although this

if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
    goto fail;

is exactly the same as this

if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0){
    goto fail;

using the latter would have avoided this bug. So, long story short, the conclusion is: always use {}. And a related corollary, vi and vim for Unix are cool and you look very cool and smart using them, but always use an IDE when coding. They are very smart and helpful. An IDE would have highlighted in bright annoying yellow the third hash check and labeled it as “dead code“. If you are a Unix user, I recommend Eclipse.

It took me a while to figure this out. I have an app that I coded and it runs a service in the background. Given a specific event, I want to show an alert on the screen. How to do it?

All the ways I tried would work nicely, but the alert would only pop up when I opened the activity that started the service in the background. My goal was to have a “global alert” that will show up on the screen right then and there, no matter what the user is doing or what activity is controlling the screen. And, if the screen is locked, the alert should be displayed as soon as the user unlocks the phone.

Here is how you do it:

  • First create a new class (activity). We will call it displayAlert:
public class displayAlert extends Activity {

    private boolean doDisplayAlert;

    private static final boolean D = true;
    private static final String TAG = "tagYouUseForYourApp";

    public void onCreate(Bundle savedInstanceState) {

        if(D) Log.i(TAG, "+++ ALERT starting alert class. +++");
        if(D) Log.i(TAG, "+++ ALERT getting Intent. +++");

        //Get intent and boolean "proceed" field within.
        Bundle bundle = getIntent().getExtras();
        displayAlert = bundle.getBoolean("proceed");

        if(D) Log.i(TAG, "+++ ALERT got Intent. +++");

        if(displayAlert == true){

             if(D) Log.i(TAG, "+++ ALERT do display alert. +++");

             // custom dialog
             AlertDialog.Builder dialog = new AlertDialog.Builder(this);
             dialog.setTitle("Write here whatever you want to display in the alert message as title.");
             dialog.setMessage("Text content of the alert message.");

             dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int whichButton) {
                      //Do something when the user clicks OK to close the alert (optional)


             dialog.setNegativeButton("Ignore", new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int which) {
                     //Do something if the user chooses to ignore the alert (optional)



             if(D) Log.i(TAG, "+++ ALERT do not display alert. +++");

             //Do something in the case the service does not want you to display an alert.
             //Actually, you can use this code to display two types of alert depending on the
             //value of the boolean that the service passes to this class ("proceed")


  • Now, in the code of your service you will have something running. If you want to display the alert, you use the following code:
if(D) Log.i(TAG, "+++ SERVICE starting displayAlert activity to show an alert. +++");
Intent showAlert = new Intent(applicationContext,displayAlert.class);
showAlert.putExtra("proceed", true);
if(D) Log.i(TAG, "+++ SERVICE displayAlert activity went well. +++");
  • Note that this code needs the context of the parent application (applicationContext). What I do is to pass the context when I create and start the service.
  • Remember to define the class in the manifest file (add this code within the <application>. There should be first your main activity, then the service and then you can add the displayAlert activity)
android:label="@string/AlertActivityName" >
  • That’s it!

I hope this is useful.

Pennywise is on shuffle on Spotify at the moment. Have a good one!

Google just published another very interesting analysis and visualization of one of its data sets. In this case, they have processed data from their Google Play store. Based on the number of downloads and popularity, they have visualized on a time axis the “relevance” and “popularity” of each music genre as time progressed, putting together what they call Google’s Music Timeline.

I really love this kind of projects at Google. At first sight, you might think it is useless. But I think it is extremely interesting and very useful. Moreover, I love it allows you to “zoom in” to see the timeline of the sub-genres within a given genre. For example, I gave it a try with Metal. The result shows many interesting trends… including the raise and fall of Hair Metal. The good old times of good rock!


The analysis also shows examples of the most relevant albums of each music style as time progressed. Here is were I realized that this analysis is based on a quite incomplete data base. For example, I saw no mention of any Metallica album. Not even when zooming into Metal. There are no AC/DC albums to be found either.

All in all, very interesting given the data set it has been derived from. And definitively a yummy candy for us music lovers!


There are AC/DC albums! But the system does not consider them among the most influential ones. Things would have been differently if I had worked on that project! 🙂

By the way, another very interesting application is to search for one of your favorite bands and see how their popularity grew or decrease or fluctuated. I am attaching the example with one of the greatest punk rock bands ever (NOFX) (how is it possible they are declining?!?!) and probably the best electronic music band ever that was not rightfully recognized until they released a poppy album last year (Daft Punk) (yes, that catchy song by Kanye West had a catchy part that was actually by Daft Punk and many did not know until last year).



Check this IEEE ComSoc tutorial on Advances in Coordinated Multi-Cell Multi-User MIMO Systems. Free of charge for a limited time.

Advances in Coordinated Multi-Cell Multi-User MIMO Systems


I read this morning some very interesting news about Twister, a new decentralized and anonymous Twitter-like social network. It was created by Miguel Freitas, an engineer based in Rio De Janeiro, this new micro-blogging application can’t be shut down by, for example, some nation state or large corporation. Also, Twister is designed in such a way that other users cannot know whether you are online, what your IP address is, or who you follow.

As a bitcoin “aficionado”, I find particularly interesting that the magic behind Twister is this popular alternative currency. It is another great example of the great range of potential applications that bitcoins unfold.

You can read more about this story at Wired Magazine:

Twister is surprisingly easy to use for an application that’s so new, that isn’t controlled by a central authority, and that places so much emphasis on security. Other decentralized alternatives to Twitter and Facebook — such as, Identica and Diaspora — require that you either operate your own dedicated server or trust someone else to run a server for you. Twister works more like peer-to-peer file sharing software: Launch the app, and it connects with other users. There’s no need for a central server.

It manages this trick through the bitcoin protocol, though not the network that actually drives the digital currency. Basically, the protocol handles user registration and logins. Just as machines — called miners — verify transactions over the bitcoin network to ensure no one double-spends bitcoins and everyone spends only their own coins, a network of Twister computers verifies that user names aren’t registered twice, and that posts attached to a particular user name are really coming from that user.

Posts are handled through the BitTorrent protocol. This lets the system distribute a large number of posts through the network quickly and efficiently, and it lets users receive near-instant notifications about new posts and messages — all without the need for central servers.

About me:

Born in Barcelona, moved to Los Angeles at age 24, ended in NYC, where I enjoy life, tweet about music and work as a geek in security for wireless networks.
All the opinions expressed in this blog are my own and are not related to my employer.
About me:

Blog Stats

  • 147,509 hits

Twitter feed

Enter your email address to follow this blog and receive notifications of new posts by email.