Introduction to Makefiles

I often use Makefiles in some of my projects. I really like the flexibility it gives, and I often find myself writing a Makefile instead of a simple shell script to automatize tasks. So here's a little crash course. I'll obviously only cover the basics, but I hope this will give you a good idea on how you could improve your workflows using Makefiles. About Make Make was de...

Read the full story »

Better Dependency Properties in WPF

Bindings are an essential part of the WPF Model-View-ViewModel design pattern. They allow to react to changes in the view or model without any glue code. Also as a Mac developer using Cocoa Bindings, I usually feel right at home with WPF bindings. It allows very similar patterns when porting an app to Windows. However, bindings in WPF require a Dependency Property - that i...

Read the full story »

Preventing macOS root access

A huge security issue in macOS High Sierra has just been revealed on Twitter by Lemi Orhan Ergin: Dear @AppleSupport, we noticed a *HUGE* security issue at MacOS High Sierra. Anyone can login as "root" with empty password after clicking on login button several times. Are you aware of it @Apple? I've been able to confirm this on my machine. This issue occurs when you tr...

Read the full story »

x86-64 Machine Code Obfuscation

Obfuscation is quite a debated topic, when it comes to software development. There's obviously a tons of reason why you should not try to obfuscate your code. But sometimes, for some very specific part of your software, you may consider trying it. Now there's a lot of different ways to achieve this, and in my humble opinion there's no silver bullet when it come to obfuscation. ...

Read the full story »

Investigating a dead TouchBar

Today my TouchBar finally died... I own a second-generation MacBook Pro 15' with the TouchBar (mid-2017 model). As many, I can't say I'm a big fan of this TouchBar gadget. As a developer, spending most of my time coding, or doing stuff in the Terminal and in vim, I miss real function or escape keys. That being said, having TouchID on a Mac is awesome (T1 ftw), plus I usual...

Read the full story »

Better NSUserDefaults with Swift

After reading the excellent "Type-Safe User Default" article from Mike Ash, I thought it would be interesting to describe the solution I use in my projects, as the approach is quite different. I came up with this solution a long time ago, and the first implementation was originally written in Objective-C. The goal remains the same: add safety to Cocoa's NSUserDefaults. As a re...

Read the full story »

C++ PIMPL idiom & C++ automatic allocation

1 - Forewords The C++ PIMPL idiom is a technique used in C++ to provide a private implementation in classes. The basic idea is to hide all private members (fields and methods) from the public class definition (and public header). Such a technique provides several benefits: 1 - Compilation time Since all the private stuff is not in the public headers, modifying private m...

Read the full story »

C++ Automatic Allocation - Part 2

About This tutorial explains how to design C++ classes for automatic allocation. It is composed of several parts: C++ Automatic Allocation - Part 1 C++ Automatic Allocation - Part 2 (this tutorial) C++ PIMPL idiom & Automatic Allocation Table Of Contents Forewords String class interface String class implementation ...

Read the full story »

C++ Automatic Allocation - Part 1

About This tutorial explains how to design C++ classes for automatic allocation. It is composed of several parts: C++ Automatic Allocation - Part 1 (this tutorial) C++ Automatic Allocation - Part 2 C++ PIMPL idiom & Automatic Allocation Table Of Contents C++ allocation types Automatic allocation rules Copy constructor Ass...

Read the full story »

Hello (again)

More than a year passed since my last post, and since I announced that I was leaving my position as the lead developer of iMazing. Well, it did not last long, as I was in fact hired back in May 2015, at the exact same position. And obviously, I've been pretty busy since then, hence the lack of updates on this site. We've been mainly working on the second major update of iMazing...

Read the full story »

Goodbye iMazing

Last week was my last week as a software engineer at DigiDNA, publisher of iMazing (previously DiskAid). It has been four awesome years working with the folks at DigiDNA. Leaving such a job is always sad, but I decided it was time for me to move towards new experiences and challenges. iMazing is an iPhone and iPad management utility, available for Mac and Windows. It used ...

Read the full story »

Running OS X 10.10 Yosemite’s iTunes in LLDB

With each version of iTunes, Apple tries to prevent people reverse-engineering it, in order to protect some sensitive stuff, involving DRMs, device management, etc. Different levels of protection are used in the iTunes binary, as well as in some private frameworks. Machine code for sensitive procedures is heavily obfuscated, a few tricks are used to fool disassembly softwares and ...

Read the full story »

Apple 1 Replica on Tumblr

A few updates on the Apple 1 Replica project, as things are getting serious... : ) I recently told my fellow fellow teammates at DigiDNA about my project. They found it awesome, and they kindly proposed me to sponsor it. So we decided to create a dedicated blog on Tumblr, to log everything related to it. My friend Vic and I will post there about the advancements of the project...

Read the full story »

Apple 1 Replica - Project Started

Ok, the project finally started, even with the loss of my MacBook Pro, whose motherboard died... I've began looking at the original schematics and documentation to identify all components, beginning with the power supply section. For most components, identification is relatively easy. But of course, most of them are not available anymore, so I try to find good alternatives in such...

Read the full story »

Apple 1 replica project

Ok, so here's the next insane project. ^^ As an Apple fan, since the nineties, I'm collecting old Apple hardware.. I've kept all my old and beloved machines, and purchased some others. The oldest I've got is an Apple //e.. This machine was available in 1983. Obviously, this takes a lot of space, and I'm currently trying to concentrate on rare stuff.. And as I'm n...

Read the full story »

Iconic - A Photographic Tribute

I received yesterday my copy of the «Iconic» book, by Jonathan Zufi. As the title says, it's a «photographic tribute to Apple Innovation».. The book consists of beautiful pictures of Apple's hardware, from the Apple 1 to the latest Macs and iPhones/iPads. It's really amazing... The book is just gorgeous, and it's just an amazing work. So just check it out, whethe...

Read the full story »

Vintage Computer Collection / Computer Nostalgia

I sometimes feel very nostalgic while using my computer. I find it amazing how things changed in a decade. I remember how some people laughed at me, when I was young, because I had a Macintosh and because I couldn’t run the latest PC games.... And I remember ignoring them, as I was already in love with those machines, trying to blindly hack Mac OS 7 with ResEdit (almost always...

Read the full story »

Coding Style Guide

I just finished writing the coding style guide for XS-Labs projects. It covers coding conventions for C, C++, Objective-C and x86 assembly. The project is available on GitHub, so feel free to comment or fork the project to adapt it to your needs...

Read the full story »

Code optimisations - Optimising memset()

In my free time, I'm writing an operating system called XEOS. As the system is written mainly in C, I'm also writing a C99 standard library. The last days, I wrote optimised versions of some C99 string functions, like strlen(), strchr() or memset(). This set of functions is usually used intensively in any C program or library. So obviously, the more optimised they are, the...

Read the full story »

Manual on GitHub

Back in the days, I released a Mac AppStore application called «Manual». It was a simple GUI front-end for the UNIX manual pages. Marty Turner contacted me on Twitter, because he wanted to know if the app was still available somewhere. As it wasn't available anymore, he kindly proposed to maintain it. So I put the whole project on GitHub (https://github.com/macmade/Manu...

Read the full story »

Strategies to support the new iOS7 UI

Now that Apple has revealed iOS 7, there's no doubt that iOS developers around the world have a huge work ahead, to support the new user interface. Every iOS major version has many changes in the SDK. New concepts, new classes/frameworks to deal with, obsolete features, etc. So there's usually always some work to do in order to fully support a new iOS major version. Till...

Read the full story »

New filesystem security on iOS 7

A few things caught my attention while analysing the new iOS 7 beta... Usually, when an iOS beta comes out, the first thing I do is to analyse the filesystem, to check for new stuff, like applications, frameworks, system services, changes in the filesystem layout, etc. Back in the days, I developed a tiny iOS app to display the content of the iOS filesystem. It used to be on t...

Read the full story »

WWDC 2013 - So what's new?

Well, a bunch of things... Ok, there's no new iOS device... But I just don't care. I personally don't need a 16-core phone, with a 1Gb pixels camera. Do you (except for telling others you've got the biggest phone)? First of all, the new OSX Maverick looks awesome, and not only because the Finder now has tabs, or because the leather interface of iCal is history. It looks ...

Read the full story »

XS-Labs

That's it! Following my decision to close all eosgarden activities, here's the new home for my personal OpenSource projects: www.xs-labs.com As said previously, I'll now focus only on the development of the XEOS Operating System, and related projects. Enjoy!

Read the full story »

Spring cleaning

Ok folks, that’s it… A few days ago, I decided to close all my software development activities on my main site, eosgarden.com. It was a tough decision to make, as it implies the discontinuation of all previously published software. But I really needed to stop focusing on the past, and on software I originally developed years ago. Simply some fresh air, in order to focus on...

Read the full story »

Codeine - Diagnostics & Code completion

Since I announced Codeine, I mainly worked on live code diagnostics and code completion. Live diagnostics are now working well. I modified Codeine's console area to provide live diagnostics, as well as the output console. The whole stuff now looks like this: On the right, you can select the output console, or the code diagnostics (here with a well formed code). ...

Read the full story »

Announcing Codeine

I'm very pleased to announce the next software I'm working on: Codeine. Codeine is a full-featured code editor, runner and debugger for OS X, supporting C, C++ and Objective-C. It uses Clang/LLVM as compiler/linker toolchain, as well as for syntax highlighting, live diagnostics and code-completion. I always dreamed creating such an editor - now it's finally here and running (we...

Read the full story »

Apple vs the World (again)

iOS 6 is now close to release. Today, Apple made iOS 6 beta 4 available to registered developers. From a developer's perspective, there's quite a lot of changes. New APIs, new frameworks, changes in the default UI behavior, better iCloud support (let's say so), etc. As usual you may say. It's not really the same from a user's perspective, except a few and discreet UI chang...

Read the full story »

Apple kills the FileSystem App

A few month ago, I decided to update my `FileSystem` iPhone app, available on the AppStore since a few years now. The purpose of the App was to let you access (read-only) the complete iOS filesystem, displaying every directory, file, file contents, etc. Just like a Finder on OS X. When I started iOS development back then, being an experienced Cocoa developer, I suffered ...

Read the full story »

Mac OS X Mountain Lion - Screens

Installation Setup - Apple ID (1 of 2) Setup -Apple ID (2 of 2) Setup -iCloud Setup - Find My Mac Setup - Done Desktop Reminders Messages Notes Preferences - Notifications GameCenter X11 Preferences - Security ...

Read the full story »

Mixing C++ with C/Objective-C

When working on a software project, you may sometimes have to mix programming languages. It may be because you need to use some specific libraries, because of code portability needs, whatever. When coding a Mac OS X (or iOS) application, you are usually going to use Objective-C as main language. It's not mandatory, as you can use the old Carbon API, or stuff like QT (C++), but i...

Read the full story »

Warning flags for Clang

Below is the complete list of the warning flags I use with Clang, the C frontend for LLVM. I personally use those flags for all my production code, for C, C++ and Objective-C development. Basically, all warning flags are activated. I had to look at the Clang source code to find all of them. I also created a header file which automatically sets those flags, when compiling sourc...

Read the full story »

WebStart 1.3.0

Version 1.3.0 of WebStart has just been released. Root directories for websites can now be chosen individually, making it easier to organize your files on your hard disk. The update is available free of charge from the integrated updater. A full installer is also available to download. Version 1.3.0 also includes a 14 days trial period. So just give it a try, I'm su...

Read the full story »

Little apps on the Mac AppStore

I just published two little apps on the Mac AppStore. Both were successfully validated, and are available for purchase. The first one, named «AutoPurge» is a UI agent, placed in the menu bar, that automatically frees unused memory based on a specific user-defined time interval. It's useful for Macs with low memory capabilities, or for users that use a lot of huge programs, l...

Read the full story »

Unix manual pages

I just released a little commercial application on the Mac AppStore. It's a GUI front-end for the UNIX manual pages. It automatically searches your computer for all available manuals, and displays them in a nice way, ordered by sections. The following features are available: Live search for specific manual pages Search and highlight in manual contents Printing supp...

Read the full story »

WebStart 1.2.0 released

Today, I officially released version 1.2.0 of WebStart. This release fixes an annoying bug, introduced since Mac OS X 10.7.2. The virtual hosts were not accessible anymore from a web browser. It also adds support for PHP 5.4.0 (release candidate). Now, four version of PHP are available. Next releases will include custom locations for virtual hosts, as well as a 14 days t...

Read the full story »

Xcode - Build number from SVN

All programs come with a version number, generally composed of a number for the major version, another one for the minor version, and a last one for the maintenance version. It may be also useful to add another number, called the «build» version, identifying more precisely the software's version. Such a number is often represented in a hexadecimal. You may have for instance:...

Read the full story »

iCloud - Migration from MobileMe

Some screenshots presenting the migration process from a MobileMe account to an iCloud account.

Read the full story »

C - const and static keywords

Ok, once and for all, I'll try to clarify to meaning of the 'const' and 'static' keywords in C (it applies to Objective-C and C++ too). I'm just tired of questions about this on StackOverflow. Objective-C programmers usually don't think about C code while coding. I personally think this is a big mistake (it can sometimes apply to C++ programmers too). Objective-C is just a l...

Read the full story »

Book selection

The Essentials of Computer Organization And Architecture Linda Null, Julia Lobur Thoroughly Revised And Updated, The Essentials Of Computer Organization And Architecture, Second Edition Is A Comprehensive Resource That Addresses All Of The Necessary Organization And Architecture Topics Yet Is Concise Enough To Move Through In A Single Semester. The Text Covers Such Topics As Digi...

Read the full story »

New job

I've been hired by DigiDNA, a swiss software company, based in Geneva. DigiDNA currently develops software for Mac  OS X, iOS (iPhone & iPad) and Windows. Here's the current product line: DiskAid DiskAid is a tool for PC and Mac which enables the use of iPhone, iPad or iPod Touch as an external mass storage device. DiskAid gives access to the device’s file system, trans...

Read the full story »

GDB - Assembly debugging

Here's a little GDB trick, if you want to debug your program using assembly output. From a GDB session, type: display /i $pc break main The first line will tell GCC to output the assembly code. The second one will create a breakpoint on the main function. You can of course choose another symbol for the breakpoint. Once done, you can run your program: run In our exa...

Read the full story »

C - Function call stack on Windows

For the XSFoundation project, I've coded an integrated debugger, that signals memory faults. On Mac OS X or Unix-like system, I can use the backtrace() function, from execinfo.h to retrieve a function call stack, when necessary. This way, when a fault occurs, the debugger can show you where the fault occurred. As XSFoundation is a portable library, I had to do the same thing...

Read the full story »

The next big thing - XSFoundation

Long time since I haven't posted here. I'm currently coding eosgarden's next big thing. A project called XSFoundation. It consist of a portable C library. By portable, I mean it can run on POSIX compliant systems, such as Mac OS X, Linux, Unix, as well as Windows. A few time ago, I started an insane project: coding an operating system. The base for this OS, named XEOS (x86...

Read the full story »

Face detection on iPhone

I've just released a example iPhone app that uses OpenCV to do face recognition. The OpenCV port for iOS is available on GitHub, as well as the example app. Enjoy!

Read the full story »

Migration to GitHub

I've just migrated all eosgarden's OpenSource projects from GoogleCode to GitHub. I must say I still prefer SVN over GIT, as a version control system. That said, that's maybe because I got a strong experience with SVN, and not with GIT. For now, the cool thing about GIT is the local commits. You don't need an internet connection to commit your files. For the other features, we...

Read the full story »

CPU 64bits check

I had to make a little Mac OS X application that check if the processor has a 64Bits instruction set or not. I made that for WebStart, as it only run on 64Bits machines, so users can test their own processor before downloading and buying the software. It's not a great deal, since there are __x86_64__ and __i386__ macros, but in case you need such an app, it's available on GitHub, re...

Read the full story »

WebStart - OS X Lion

I just tested WebStart on Mac OS X 10.7 Lion, and it's working like a charm... Enjoy!

Read the full story »

WebStart - What's new?

I'm currently working on the next release of WebStart. I plan to integrate support for the DynDNS service. That's a feature of MAMP pro, and I was asked for such a feature. It will be for version 1.1, free upgrade for those with a 1.0 license code. Next steps will be support for the Trac SCM. I plan to add a GUI over the Trac installation script, so you'll be able to create Tra...

Read the full story »

OSX fat binaries

Just a little reminder (also to myself)... Mac OS X support a lot of different processor architectures. From PPC to Intel, including ARM (for iOS), all of these with 32 or 64 bits instruction sets. When compiling a C file with GCC under Mac OS X, only the current CPU architecture will be compiled by default. For instance: gcc -Wall -o test test.c Will produce an ...

Read the full story »

Finder wallpaper

I guess I just coded enough for this night... So here's a little wallpaper, for the Mac addicts around here. Remembers me the good old time of Mac OS 8.5, on my iMac G3! Enjoy...

Read the full story »

About selling software

As a programmer, I do love developing freeware, or OpenSource software. But sometimes, it's just not an option. When you passed just too many days and nights coding, you'll certainly think about selling your software. The question is how? Selling a software implies creating a web-shop, with credit-card support, having a good serial number system, and maybe an online activa...

Read the full story »

Mac OS X Lion - Server side

Server Stats Web Server Address Book Alerts Groups Hardware iCal Mail PodCast Profiles Sharing Time Machine Users VPN Wiki

Read the full story »

Mac OS X Lion - Screens

Finder - All My Files Finder -Applications Finder -AirDrop Preferences - Internet Accounts Preferences -Disk Encryption AddressBook iCal iCal DashBoard Mail LaunchPad Expose  

Read the full story »

Interview with Apple

The interview is done! Two hours, with a SpringBoard Apps manager, and a GameKit manager, writing C code on a sheet of paper. Linked lists, hash tables, big O notation, search algorithms, bitwise operations... Everything on paper. It's kinda hard! And I have to say I felt stupid some times... But they said I did well. So I'll have to wait for an answer. Whatever h...

Read the full story »

MWC Barcelona

Tomorrow morning, I'll flight to Barcelona. I'll be there till sunday. I don't know if I'll be able to attend the Mobile World Congress, but I'll try eventually. On Friday, I've got a meeting with Apple. Job interview with 3 iOS engineers managers, plus a recruiter. Cross your fingers! California is just past the sea... ; )

Read the full story »

WebStart light

Today, I decided to create a light and free version of WebStart. It will only include Apache 2, MySQL 5.1, and PHP 5.3. Only one virtual host will be available by default (but you can still tweak the configuration files). No log file viewing, no configuration editing, no OpenLDAP, no easy website creation and management, no SCM... But it will be free. : )

Read the full story »

WebStart installer is ready

Today, I ended the development of the WebStart custom installer. I've just tested the application on a fresh Mac OS X installation, and everything is working like a charm, out of the box. Now, I just need to finish writing the documentation, for the application and on the website, take a decision for the pricing, and it will be over... I probably won't have time to finish ever...

Read the full story »

WebStart announced!

Today, I decided to announce WebStart, eosgarden's major product. No release date has been fixed, but I'm very close to the end of the development. The main purpose of WebStart is to provide you with a workable web and database server. Therefore, it includes the Apache 2 HTTP server (with the PHP scripting language), the MySQL database server, and the OpenLDAP directory service....

Read the full story »

A look at the ARM architecture

I must say I'm a big fan of the x86 architecture, and Intel processors, especially when writing assembly code. The instruction set on that type of processors is nice, there's not too much registers... In one word: SISC. At the opposite, I always felt completely stupid with RISC processors. From the PPC architecture, with all that vectorial and floating point registers, to the ARM ar...

Read the full story »

WebStart

Here’s a little preview of what’s coming next… WebStart is an webserver control application, including full-featured Apache, MySQL, OpenLDAP servers, as well as a complete development environment for OS X. The application was originally developed on Mac OS X 10.4, so I’m going to update it for 10.6, with XCode 4. It might tight some time for the update, but I’m decided t...

Read the full story »

About compiler optimizations

I came into some interesting stuff some time ago, while trying to detect performance issues in some ANSI-C software. Sometimes, while coding, it may be difficult to decide whether to use a recursive function or a loop, and if so, what kind of loop. The best example, is the factorial computation. That example is typically used to teach recursive function. I always felt somethin...

Read the full story »

XCode Build Settings

For the curious, here are the build settings I use and recommend, when using XCode for Mac and iOS applications. Most of them activates the highest possible error reporting level. At first sight, it may seem it's hard to code with those settings, but it really saves you a lot of time debugging your app. Most of the problems usually encountered in application development, using O...

Read the full story »

FileSystem for iPhone

I'm about to release an iPhone app I created a (very) long time ago. It allows to browse through the whole iPhone file system, displaying files and directories, with infos and previews. I doubt such an app will be validated by the AppStore team, but who knows. I had to re-create the project with the new XCode 4, because it was created for iOS 2. Now it's also ready for a f...

Read the full story »

Next freeware: Siege GUI

I'm now working on eosgarden's next freeware: a GUI over the siege webserver load testing and benchmarking tool. Informations about siege can be found here: http://www.joedog.org/ Don't know yet when this will be released, but stay tuned... : )

Read the full story »

Minor updates

Some minor updates to the eosgarden's freeware line. PropEdit has been updated to version 1.0.1: Download page ConsoleGrowl has been updated to version 1.2.2: Download page No new feature. Those new releases contains only minor bugfixes.

Read the full story »

Release: ProcessRenicer

Version 1.0 of ProcessRenicer has been released! You can download it from the eosgarden's website for now, but the app has been submitted to MacUpdate and to the Mac AppStore as well. Enjoy!

Read the full story »

Laws of simplicity

I recently read this amazing book by John Maeda, about simplicity. I highly recommend it to anyone, developers and designers. John Maeda is at the exact frontier of both worlds, touching excellence... He presents what simplicity really is, or sould be, with ten laws to achieve it. The ten laws are: Reduce The simplest way to achieve simplicity is through thoughtfu...

Read the full story »

NSLog in ANSI-C

In Objective-C, NSLog is great to debug software. Similar functions can be used in C, with Mac OS X, by using the ASL - Apple System Log - library. ASL consists of routines providing an interface to the Apple System Log facility, which is intended to be a replacement for the SysLog API. It allows client applications to create flexible, structured messages and send them to the sy...

Read the full story »

XEOS: memory allocator & LLVM

Today I've written the first lines of code for the XEOS memory allocator. For now, I won't implement the malloc() set of functions in the C library, because I haven't implemented the brk and mmap system calls. Doing this would surely be fun, but right now I need to code some other kernel stuff. So I decided to write a specific allocator for the Xeos kernel. This way, it will h...

Read the full story »

VPS switch

A few days ago, I received a mail from the swiss hosting company I usually work with. They told me the eosgarden's website used too much resources on the shared server. O_o The traffic has indeed increased. About 300% more, based on Google analytics stats. A few apps on MacUpdate, a few tweets about the apps, and badaboum... The server crashed. So they told me (rudely) I h...

Read the full story »

Job opportunity at Apple

Just woke up with a great news today! I've been contacted by a recruiter from Apple, asking me to send my resume. Maybe California is not so far away after all! It would be a great experience, both at the technical and human level. Hope to be able to give more news on the next weeks... By the way, the temperature is 19°c in Cupertino. Here, in Switzerland, it's -2°...

Read the full story »

Looking for a job

I've now officially quitted my job as a mobile & web CTO. So I'm now looking for a new job, in Mac & iOS development, C / C++ development. If you're interested, here's a link to my full resume. Simply send me an email to get in touch!

Read the full story »

Process Renicer

Here's a little preview of eosgarden's next freeware: ProcessRenicer. Basically, it shows up the active processes, and adds the possibility to change to process nice value. For those who don't know what the nice value is, here's the description from Wikipedia: The name "nice" comes from the fact that the program's purpose is to modify a process niceness value. The true priorit...

Read the full story »

C - Reverse string search

I just noticed that there is no strrstr() function in the standard C library. I needed that for a project, using ANSI-C. So I wrote it. Here's the code, maybe it can be helpfull for someone else... : char * strrstr( char * s1, char * s2 ); char * strrstr( char * s1, char * s2 ) { char * ss1; char * sss1; char * sss2; if( *( s2 ) == '\0' ) { retu...

Read the full story »

Hello world: introducing eosgarden's blog

Welcome to noxeos, the new eosgarden's blog! I'll write down here stuff related to the eosgarden's activities, software development and releases, miscellaneous code related stuff, Mac & iOS development tips, etc. For the curious, the name noxeos comes from the latin word for night (nox) and the greek word for dawn (eos). I choosed it so it can represent the reverse face of...

Read the full story »