Wednesday, September 17, 2014

How to uninstall Facebook Video Calling from Mac OS X

Have you ever installed Facebook Video Calling plugin in to your system? And does it not work at all?

You probably leaved it where it is and never used it anymore; but listen!
Facebook Video Calling installer places a scheduled task, FacebookUpdate, that is launched every 10800 seconds (3 hours), by the "tasks manager" used by Mac OS X: launchd.

It checks for Facebook Video Calling updates and probably sends informations about your system to Facebook servers (read Facebook is "Peeping" into Your System).

Why to waste CPU time (even if a very limited amount) and Internet bandwidth, to periodically check for updates and eventually download an update of a software that you will never use anymore?

The Facebook help page explanation is quite "simple": How do I uninstall the video calling plugin from my computer?.

But they don't tell you how to fully uninstall it and how to permanently remove the FacebookUpdate periodic task from your system.

Don't worry! I am here to help you. :-)

The first thing to do is to unload the job that periodically runs FacebookUpdate from the launchd agents.

To do so, open the Terminal application and type the following command.

launchctl -w ~/Library/LaunchAgents/com.facebook.videochat.your_user_name.plist

This will tell to permanently unload the job from the launchd list and the job will be never loaded anymore when you login in to your Mac.

Then type:

launchctl remove ~/Library/LaunchAgents/com.facebook.videochat.your_user_name.plist

This will permanently remove the plist configuration file from your file system.

If the FacebookUpdate application is running (not very probable) you can stop it using Activity Monitor application. Open it. From the "View" menu choose "All processes" and type "facebook" in the search text field. If the process is running, it will appear in the list. Select it and click the X button on the left of the tool bar to kill the process.

Now you can remove the files installed in the system. Go to ~/Library/Internet Plug-Ins and remove the FacebookVideoCalling.bundle alias by pressing COMMAND-BACKSPACE or dragging it to the trash.

Then go to ~/Library/Application Support/Facebook and remove the video folder.

Great! You have finally get rid of this annoying and useless application.

Saturday, August 23, 2014

How to build Assimp, the Open Asset Import Library, on Mac OS X

Assimp is an open source C++ library to import and export several 3D formats. According to the features page Assimp can import Collada, Blender 3D, 3ds Max 3DS, 3ds Max ASE, Wavefront Object and many other formats.

I wanted to build it on my Mac, to use it in a project of mine and I discovered that it is very easy.

First of all, you have to download the source code from the download page. For production software they recommend (of course) to download the release version packaged in a ZIP archive (at the current state of Assimp, the release version is 3.1.1). But, if you want to work with the bleeding edge code you can clone the Git repository.

The build system used by Assimp is Cmake. Therefore, download Cmake for Mac OS X from this link: Mac OSX 64/32-bit Universal (for Intel, Snow Leopard/10.6 or later), and install it.

When done, extract the archive of Assimp in a folder of your choice (I suggest to create a subfolder named Assimp in your ~/Documents folder).

You'll get a folder named assimp-3.1.1 (the version number depends on the current release).

Then open Cmake and insert the source code folder and the build products destination folder.

Click the "Configure" button. And choose "Xcode", from the popup menu in the modal window that appears, and select "Use default native compilers".

Configuration process should start. The "Configure" button updates its label with "Stop" and the progress bar should run.

At the end of the process Cmake will produce an output like this.

Now, you have to click the "Generate" button to automatically create an Xcode project.

At the end of the process you will get a Xcode project in the build destination folder.

Open the Xcode project and build sources as usual.



Done.

Friday, August 22, 2014

Three Web services to automate posts sharing towards several social networks

In the latest years, Social Networks and other related services (like blogs) spread all over the Web. I can list a large number that I frequently use: Facebook, Twitter, Google+, YouTube, Instagram, Pinterest, Vimeo, FeedBurner, Flicker, Tumblr, Foursquare, SoundCloud, Blogger, Wordpress, Issuu and many, many others.

Recently, I found myself needing a new utility for my projects. In fact, in middle 2013, I founded a live music event in my city: the Muzik! Zyklon. It took not long before I realized that I needed something to deliver news (and especially Muzik! Zyklon related news) towards several different social networks and services at the same time. If I had my own Web hosting service, I could develop some PHP code to achieve the wanted result. But it was not the case.

Though, at the current state of development, the major Social Networks (FacebookTwitter,  Google+,  Tumblr,  ...) have internal options to integrate each other. Twitter, for example, includes Twitter for Facebook to share contacts and automatically post twits to your Facebook timeline. And Facebook offers its own Twitter API based App to share Facebook posts to your Twitter timeline.

But, what if you want to share your Blogger posts towards your Facebook timeline or a Facebook page that you administer? So, I searched in the Web and found and tested three services that can work for you (if you have my same needs, of course).

The first one is IFTTTIFTTT means "If This Then This". Essentially IFTTT lets you create little recipes. Recipes are composed by an event (the first This) that happens on the source Social Network (that could be the publication of a post on Blogger) and an action (the second This) performed on the destination social network (for example, to publish a summary of the Blogger post on Facebook). IFTTT offers a visual User Interface to create your own recipes or you can pick up a recipe created by other IFTTT users.

One of the limits I found is that IFTTT handles only one Blogger blog per user. I have more then one blog and I would like to deliver my blogs posts on different Facebook pages.

The second one is ZapierZapier recipes are called zaps composed by a trigger and an action. It works almost the same way of IFTTT though Zapier is not fully free. It allows up to 100 tasks per month with a free account. Though Zapier seems to support a lot of services (called apps; IFTTT calls them channels) while IFTTT supports 124 services.



The third and latest service is dlvr.itdlvr.it provides routes, instead of recipes or apps; source and destination instead of trigger and action. Like Zapier it has a free plan and upgrade plans. The most interesting feature of dlvr.it is the queue ability. dlvr.it permits you to add interesting news you picked up from the Web to a queue and will publish them to your networks when people is online to gain visibility. This feature could be very useful especially for independent projects, open source projects, organizations, agencies or companies who need to be visible.

My conclusions are that in the latest years several external services covered the lacks of the major social networking platforms offering a wide range of services to permit the final user to perform many tasks.

My only concern is that solutions are scattered around the Web and entropy is constantly increasing. :-P

Tuesday, January 15, 2013

Open source software that do not compile out of the box

This is the first of a long list of open source software that I decided to review.

The point is: how many open source softwares compile out of the box, without changing any setting in the Xcode project?

The examined case is GitX. GitX is the only Mac OS X native open source frontend for Git.
I tried the experimental branch from brotherbard fork.

If I try pressing Run button or Archive, the software does not compile, and Xcode displays a sheet view with the following error message.

The run destination My Mac 64-bit is not valid for Running the scheme 'GitX'.

The scheme 'GitX' contains no buildables that can be built for the SDKs supported by the run destination My Mac 64-bit. Make sure your targets all specify SDKs that are supported by this version of Xcode.


I will find a solution, soon or later, but, until that, the software does not work. But situations like this are very far from Apple vision and philosophy, for a Mac User (or developer) like me. Software should work/compile, out of the box.

Stay tuned.

Saturday, December 15, 2012

Testing with Blogger layouts

It is long time that I do not post any new article on this blog. The reason is that I had a lot of duties in the past year or two, that moved my attention away from all my blogs.

At the current time I have collected a lot of experience with Objective-C and especially Cocoa and Cocoa Touch. And I have also collected a lot of test software and code and also some little application. Therefore I have a bunch of material that I will soon use to post many articles about Cocoa programming.

I am also playing with this blog layout, CSS and HTML. I would like to provide nice graphics and layout. So, sorry if it often changes... Almost like a mutant. :-D

Stay tuned. I will be back soon.

Monday, September 7, 2009

8. XML parsing

While Cocoa has a NSXML class for tree based parsing of XML documents; Cocoa Touch, on iPhone, has only the event driven counterpart NSXMLParser. Therefore there are only two possible solution for XML parsing on iPhone: using NSXMLParser or libxml2.

I am going to discuss the first one: NSXMLParser.


Event driven XML parsing using NSXMLParser



To parse a XML document with NSXMLParser we need to:

  1. To get the URL of the XML file.

  2. To initialize a NSXMLParser instance using the URL.

  3. To start the parser.

  4. To implement some of the methods declared by the NSXMLParserDelegateEventAdditions category of the NSObject class.

  5. To set the instance of the class, that implements NSXMLParserDelegateEventAdditions category, as the delegate of the NSXMLParser instance.



Two of the methods, that every program will probably implement, are written in the following code.

- (void) parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{

}

- (void) parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{

}


NSXMLParser is a SAX like parser. Therefore it is not aware of the XML hierarchy. It simply parse all the XML elements as a plain sequence. To get a tree hierarchy, that matches XML document hieararchy, using the NSXMLParser we have to provide our own code.

To create an object hierarchy that matches XML one, first of all, we have to implement a class that supports a tree graph based hierarchy. A tipical example is a node based architecture.

@interface MyNode : NSObject {
@public
NSString * _name;
MyNode * _parent;
NSMutableArray * _children;
}
@end


For this class we should also declare and define some accessor methods (I don't like properties of Objective-C 2.0) like the methods to access the _name field and the _parent field.
Therefore we can declare the needed methods.

@interface MyNode : NSObject {
@public
NSString * _name;
MyNode * _parent;
NSMutableArray * _children;
}
- (NSString *) name;
- (void) setName:(NSString *)name;
- (MyNode *) parent;
- (void) setParent:(MyNode *)parent;
@end


And then define them.

@implementation
#pragma mark ACCESSORS
/* _name */
- (NSString *) name {
return _name;
}

- (void) setName:(NSString *)name {
if (_name != name) {
[_name release];
_name = [name retain];
}
} /* END _name */

/* _parent */
- (MyNode *) parent {
return _parent;
}

- (void) setParent:(MyNode *)parent {
if (_parent != parent) {
[_parent release];
_parent = [parent retain];
}
} /* END _parent */


To implement the accessor methods for _children field is a little different process. But Xcode has some macros to help us. Select the entire line of code that contains the _children field declaration like the following figure.



Then choose the item "Place Accessor Decls on Clipboard" from the "Code" submenu of the "User Scripts" menu.



Then, place the cursor in an empty line, between the end of setParent: method declaration and the @end macro, and paste (COMMAND+V).

Select once more the _children field declaration...



... and choose the item "Place Accessor Defs on Clipboard", this time.
Then go to the implementation source file (MyNode.m), place the cursor in an empty line between the end of the setParent: method definition and the @end macro, and paste (COMMAND+V).

Xcode will create all the KVC compliant accessor methods of the _children instance variable for you.

So, the class MyNode is essentially implemented.

7. Long time absence

I am sorry for my long absence. I will restart to write about Cocoa, as soon as possible.