Tomasz Gebarowski

SwiftySettings

For the last two weeks I’ve been busy doing my side project, a library helping building in-app settings for iPad and iPhone apps.

By providing a declarative DSL, SwiftySettings allows to define your own settings, integrate with storage interface and automatically generate native Settings app like user interface.

Protocol extensions and reuseIdentifier in UITableView

Inspired by protocol extensions in Swift 2 and reflection mechanism, I implemented a simple UITableView extension allowing to forget about reuseIdentifiers when registering and dequeuing UITableViewCells.

Swift Behaviors

Recently I’ve published a set of small uncoupled Swift objects (Behaviors) which may provide various functionality to your apps. The whole concept of Behaviors is inspired by objc.io #13 article by Krzysztof Zabłocki. I ported the idea to Swift and extended it a bit to allow modifying UIViews (for animations, transitions etc)

Ubuntu 11.4 installation from USB on MacBook Air

Installing Ubuntu on a MacBook Air which has no CD drive is a tricky task. First of all it is impossible to boot from the USB stick created in Ubuntu, secondly even if you manage to boot from it, the installer will fail as it tries to read from /cdrom anyway.

Some time ago I found the following thread which described step by step procedure of generating bootable USB stick, recognized as CD drive. In order to make it working, you have to download and extract the mkhybridiso.tar.gz (from the above page) and remaster your Ubuntu ISO with the following command:

GList iterate and remove pattern

Recently I’ve came across a problem, when I had to iterate through a GList and remove its elements depending on some condition. This is the solution I came up with:

/* Set the iterator to the beginning of our list */
GList *node_itr = priv->_list;
while (node_itr != NULL)
{
   GObject *obj = (GObject *)node_itr->data;
   /* Store next element's pointer before removing it */
   GList *next = g_list_next(node_itr);
   /* Some dummy removal condition */
   if (my_gobject_marked_for_removal(obj))
   {
      g_object_unref(obj);
      priv->_list = g_list_delete_link(priv->_list, node_itr);
   }
   node_itr = next;
}