Feature entry

All the internet is buzzing – Google has launched yesterday the official Facebook competitor – Google Plus. Even though one already existed – argh, Orkut, that wasn’t a big of a competition for Facebook. But Google+ (Plus) looks like it is. It’s biggest promise as far as I can tell is fixing the weird privacy [...]

Google+ – will this be the end of Facebook?

DrupalCamp Bucharest 2011

I might have mentioned in a tweet or two about Optaros being present at DrupalCamp Bucharest 2011 in early May. I had a presentation there about using Drupal + Page Syndication module to create a content marketing platform. Well, here’s the presentation:

OView CMS presentation from DrupalCamp Bucharest from Chris Fuller on Vimeo

Please do ignore the babbling at the beginning, it’s just my first presentation. I would also recommend you to watch Drupal and Solr at DrupalCamp Bucharest (http://vimeo.com/24866800), a very interesting presentation by Paul Grigoruta about, of course, as the title says, drupal and solr.

Dark day for AWS

I really don’t want to be in the shoes of the guys over at AWS NOC – this is not a good day for them. Some of the Amazon Web Services hosted in the US-EAST zone are affected (as of the time this article has been written) due to an issue related to EBS re-mirroring. We have experienced a similar issue on Saturday, when connection to an RDS instance kept timing out – we then concluded that it was caused by a network issue inside AWS. That only lasted for about 15 minutes, but it could have been a warning sign of a bigger problem arising. I’m sorry to say, but it was. Here’s what Amazon declared at 8:54 AM PDT:

We’d like to provide additional color on what were working on right now (please note that we always know more and understand issues better after we fully recover and dive deep into the post mortem). A networking event early this morning triggered a large amount of re-mirroring of EBS volumes in US-EAST-1. This re-mirroring created a shortage of capacity in one of the US-EAST-1 Availability Zones, which impacted new EBS volume creation as well as the pace with which we could re-mirror and recover affected EBS volumes. Additionally, one of our internal control planes for EBS has become inundated such that it’s difficult to create new EBS volumes and EBS backed instances. We are working as quickly as possible to add capacity to that one Availability Zone to speed up the re-mirroring, and working to restore the control plane issue. We’re starting to see progress on these efforts, but are not there yet. We will continue to provide updates when we have them.

(http://status.aws.amazon.com/)

This issue has affected the RDS service and EBS volumes. Among the victims of this outage we count Foursquare, Reddit or Quora. Even some of the RDS instances I get to manage have been affected – luckily no critical production deployments. As of 11:09 AM PDT, Amazon still cannot give an ETA on when all services will be fully recovered – hopefully no critical data will be lost.

This outage gives a grim wake-up call on the risks associated with using cloud computing – even Amazon can have a serious problem. Don’t get me wrong, I think cloud computing is great – scalability, high-availability, monitoring, business model to pay for what you actually use -, and Amazon has been doing a great job, but it now becomes clear that even a cloud (or at least part of it) can become a single point of failure. For the past 2 years since I’ve started using AWS I’ve experienced weird and annoying problems with the reliability of the AWS services – ELB’s going MIA, EC2 instances gone dead, but this is by far the worst.

We’ll probably see some good things coming out of this story though, such as complete overhaul of the strategies behind deploying applications in the cloud – distributing services across different availability zones, and why not, across different clouds, backing everything up with private clouds.

If you have any comments or experiences you would like to share, just post a comment below, as I am very curios to see what strategies you used to mitigate this issue?

I’m back

Finally I managed to migrate my site to a new server. Thanks to Andru!

jQuery Mobile alpha released

jQuery team released the much-awaited mobile development framework. Built on the rock-solid jQuery and jQuery UI framework, this framework provides a lightweight, progressive enhanced, flexible and themeable foundation for mobile development. Browsing through the features we find that this framework is compatible with all major mobile platforms and browsers, such as: iOS, Android, Blackberry, Palm WebOS, Nokia/Symbian, Windows Mobile, bada, MeeGo, and also provides baseline support for other devices understanding HTML. It’s also very lightweight – just 9k (compressed) and minimal image dependencies, ensuring speed and low data transfer. Progressive enhancement is one of the key features of this framework, bringing core functionality to all mobile, tablet and desktop platforms. It also supports HTML5 data-role attributes, it is accessible and themeable through ThemeRoller, to provide easy to build, highly-branded experience. Read More »

Solr, Tomcat6 and Ubuntu issue

If you run into issues when starting solr on Ubuntu 9.04 and the symptoms are as follows:

Oct 6, 2010 11:33:31 AM org.apache.solr.core.SolrResourceLoader 
INFO: Solr home set to '/opt/solr/example/'
Oct 6, 2010 11:33:31 AM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Oct 6, 2010 11:33:31 AM org.apache.catalina.core.StandardContext start
SEVERE: Context [/solr-example] startup failed due to previous errors

or

SEVERE: Exception starting filter SolrRequestFilter
org.apache.solr.common.SolrException: java.security.AccessControlException: access denied (java.io.FilePermission /opt/solr/example/./lib read)
        at org.apache.solr.servlet.SolrDispatchFilter.(SolrDispatchFilter.java:68)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
        at java.lang.Class.newInstance0(Class.java:372)
        at java.lang.Class.newInstance(Class.java:325)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:255)
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
        at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:108)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4359)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
        at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:123)
        at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:145)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:769)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:634)
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:560)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:495)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1269)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:300)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
        at java.lang.Thread.run(Thread.java:636)
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission /opt/solr/example/./lib read)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:342)
        at java.security.AccessController.checkPermission(AccessController.java:553)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
        at java.io.File.canRead(File.java:706)
        at org.apache.solr.core.SolrResourceLoader.replaceClassLoader(SolrResourceLoader.java:159)
        at org.apache.solr.core.SolrResourceLoader.addToClassLoader(SolrResourceLoader.java:130)
        at org.apache.solr.core.SolrResourceLoader.(SolrResourceLoader.java:99)
        at org.apache.solr.core.SolrResourceLoader.(SolrResourceLoader.java:197)
        at org.apache.solr.core.Config.(Config.java:93)
        at org.apache.solr.servlet.SolrDispatchFilter.(SolrDispatchFilter.java:65)
        ... 28 more

make sure you read this: http://osdir.com/ml/solr-user.lucene.apache.org/2009-11/msg01071.html. It looks like an issue with the package installation of tomcat6. Basically, all you need to do is
“set “TOMCAT6_SECURITY=no” in “/etc/default/tomcat6″

That I hope will help others, as I spent 4 hours debugging this.

Curăţenie în toată ţara. Într-o singură zi!

Sustin aceasta idee, sper ca macar pentru curatenie sa incercam sa ne mobilizam!
Let’s Do It, Romania!

WPML supports WordPress 3.0 nav menu

Thanks to the great effort of the WPML team, the plugin now supports translating the WordPress 3.0 nav menus: http://wpml.org/?p=5064. The 1.8.0 RC 1 version of the WPML plugin (adds multilingual support to WordPress) adds translation support for WordPress’ built-in navigation menu system.

Adding All-In-One SEO to custom content types in WordPress

WordPress version 3.0 adds multiple improvements and new features to this popular blogging platform, one of the most important being custom content types. I’ve made use extensively of the new feature when developing the new optaros.com website, but soon we realized that we needed to integrate our custom types with the AIO SEO plugin. This plugin, with more than 5,000,000 downloads, does an awesome job on setting custom titles, keywords or description per post, in order to improve your SEO. In the current version (1.6.11), it has no support for attaching the editing form to a custom type, but integrating that looks pretty easy. Here’s how:

// here we create our base custom content type
function create_my_type() {
  register_post_type( 'my_type',
		array(
			'labels' => array(
				'name' => __( 'My Types' ),
				'singular_name' => __( 'My Type' )
			),
			'public' => true,
		)
	);
}
// here we add metaboxes for custom input fields, if we need any
function my_type_admin_init() {
  // we check if the aiosp_meta function exists, and the AIO SEO plugin is active

  if (function_exists('aiosp_meta') && is_plugin_active('all-in-one-seo-pack/all_in_one_seo_pack.php')) {
    add_meta_box('aiosp',__('All in One SEO Pack', 'all_in_one_seo_pack'),'aiosp_meta','my_type');
  }

}

add_action('admin_init', 'my_type_admin_init');

Et voila, you now have the AIO SEO editing box working on your custom type. Your template should be ok printing the post meta tags added by this form if it correctly implements the wp_head() function. Of course, you need to make sure you have defined properly defined your new custom content type, and here you can read a great tutorial on how to do that.

Icons search engines: iconfinder.net vs. findicons.com

Designers everywhere are trying to spice up their designs and communicate to end-users better using icons, and while there are many high quality, free for commercial use icons, finding them could be very difficult. I remember the times when I was browsing through dozens of blogs and websites trying to find icons, and when I did, quickly save them to disk. Well, keeping track of all my icons turned out to be more difficult than I expected as the number of collections increased. But, a few months ago, I stumbled upon an interesting icon search engine – iconfinder.net. Well, it’s not a fully fledged, google-like search engine, it’s more of a icon repository, were iconsets are uploaded and tagged, so that it’s easier to find. A couple of weeks ago, a new icon search engine has been released, findicons.com, with similar capabilities as the one mentioned before. In this post I’ll try and compare them side-by-side; I’ll be reviewing search features, save-as features, API, tagging, and ease of use.

Iconfinder.net

Let me start with iconfinder, since this one was the first to emerge. It was quite a pleasant surprise for me when I discovered Iconfinder. Search capabilities include searching by name/tag, finding specific iconsets, or even icons inside an iconset. Refining search results is done by using a slider to select the size range (from 0 to 128 px) and a license filter. You can even apply white, transparent or black as background color to the icons, so you can check, before downloading, if the icon you found might match your design. It even shows related searches, based on the tags assigned to the icon. You can contribute to the search results by adding or deleting assigned tags. Submitting icons is easy as well – through a webform, intended for webdesigners, or a bookmarklet, so you can share any website that has nice icons. The REST API is useful, especially for designing you custom search tool – there was also a Firefox search engine add-on for Iconfinder.net, but unfortunately I can’t find it anymore. The API produces results in both XML and JSON format. There are currently 156,469 icons available in 484 icon sets, and the number increases every day.

Findicons.com

Findicons has more or less the same features as Iconfinder. What adds extra, compared to the previous one, is the user space capability. The most important feature a user account brings you is the ability to add icons to favorites, a feature that I really miss when using Iconfinder.net. Also, comparing search filters, on findicons.com you can filter icons by colors, style (3d, glassy or hand drawn) or license, and sort the results by relevancy. Also, a powerful feature is the Convert icon, which support bmp, eps, gif, jpeg, psd, svg, tga or tiff formats, adding to the existing ico, icns and png formats, though saving the icon in png format could easily be the most used. The icon details page allows you to quickly save the icon in other available sizes, edit tags and even suggests similar icons. The API is not yet launched (at the time of this post being written), but the team behind this project announces this feature as “under construction” (currently in testing).

Conclusions

Overall, the two projects are powerful tools for the designers, containing a huge library of icons, easily browseable and searchable. I would loved more to see Findicons.com presenting a more different layout – it looks too much like an IconFinder clone, but the advanced search filters and user account make it a valuable resource. If you haven’t already started using any of these tools, I recommend you do.