Wine Secretary reviews

Many winos have now jumped on the smartphone bandwagon, and are looking for wine apps.

I’ve put a lot of work into creating Wine Secretary, aka WS – Wine and Cellar, so of course in my completely biased opinion, I think it’s a great choice if you have an Android device!

But I guess I’m not completely crazy, since many of the more than 100 000 people using WS agree with me.

Many thanks to those from all over the world, who have taken the time review the app.

In English

In German

In Dutch

In Spanish

In Japanese (I have no idea what they are saying, I hope it’s nice!)

In French

Wine Secretary – Wine and Cellar: An Android App for Wine Lovers, by Wine Lovers

My love affair with wine started when I arrived in France many years ago, and has only grown stronger with time! Over the last few years, my latest passion has become developing great mobile Apps for the Android platform. Apps that are fast, beautiful, fun and easy to use. In other words, make everything happen so that the user can have a great experience.

So what could be more normal than to combine my passions for Wine and for mobile Android Apps? Especially since, in my opinion, the existing Android wine apps are really pretty bad! That is how my Wine Secretary was born. Of course I’m biased, but I think my baby is pretty cute!

Wine Secretary Feature Graphic

Wine Secretary – Wine and Cellar version 1.3.0 is a major milestone in my quest to make the best Android wine app. If you love wine, and have an Android phone, download Wine Secretary for free, you won’t be disappointed!

This is what the App looks like once you’ve installed it:

With Wine Secretary you can always remember the good wines you have tasted. And access over 4 million wines from the Android smartphone in your pocket, finding great wines and adding them to your collection can be done in seconds.

FEATURES for v1.3.0

  • Search in a 4 million wine database
  • Wine details (vintage, varietals, region, style)
  • Photograph front and back wine labels (or import photos you already have)
  • local database of 1000+ wine regions and 70+ varietals (Internet connection not necessary)
  • Instantly find your wine notes by wine style (red, white, etc.)
  • ONLINE or OFFLINE use (unlike many wine apps)
  • Easily add new wines, wine regions and varietals; even if they aren’t already in the App

Download Wine Secretary Tasting Notes now, it’s great and it’s free, so you have nothing to lose by giving it a try.

Second place at Paris Android Dev Camp 2012

Our team, called the Épicuriens, had a great time at the Paris Android Dev Camp 2012. And we were even happier because we finished 2nd out of 11 teams, and ended up winning Android tablets for each team member!

The Paris event was part of the Global Android Dev Camp, which took place in in 88 different cities on the same weekend. Every continent was represented except Antartica!

Each team had less than 48 hours to create a complete Android App, and in Paris we had an extra requirement that the App be based on an Open Data Set.

Our Épicuriens team was made up of 3 Android hackers/developers

And one interaction designer

Since all the team members like wine (in France who doesn’t), we decided to use the Appelation Origine Controlée data set published by the French government. Believe it or not, out of 36 000 towns in France 22 000 belong to AOCs! We did restrict our App to only the wine AOCs, which did bring the number down a bit.

At the end of the weekend using our “AOC France” App, users could easily find wine producers in the different wine French wine producing areas. proto map navigation, location based notifications, an augmented reality view, and even a good old drill down list navigation.

Here are some screenshots from our App.

The whole event was very well organized thanks to the Paris Android User Group. They even shot a few videos of us during the weekend.

Going to JavaCampParis7

As a newcomer to Paris, one of the things I love about living here is that there are so many opportunities to meet fellow Geeks!

When I heard about Java Camp Paris 7 on Twitter I knew I had to attend. Since it was going to be my first Bar Camp, I didn’t really know what to expect. Somehow I had gotten the idea that each participant would give a lightning talk on a subject he was interested in, but that was not the case. I was a bit relieved since the talk I had prepared on Using Computer Vision techniques to improve Mobile UX wasn’t really ready for prime time!

The evening went very smoothly, because Luc Bizeul and Philippe Antoine did a first class job of organizing it. We started out with everyone introducing themselves by saying 3 themes they were interested in. After that we quickly chose the 12 or so themes. Finally we split up into small theme based discussion groups.

First I participated in the Android group which was very eclectic, ranging from one of the foremost Android experts in France (Cyril Mottier), to Geeks who were complete beginners in Android. The session was very lively and a good mix of beginner and intermediate level discussion.

After that I attended the “New Browser Wars” session, where we talked about how HTML/CSS is evolving through coopetion between the major browsers. In this group I mostly listened to the experts who knew way more than I ever will about vendor specific attributes and properties ( -moz-border-radius, -webkit-border-radius, etc.). During the discussion someone mentioned a great resource for HTML5 andCSS browser compatibility charts. Just learning about that made it well worth my while to attend.

All in all, it turned out to be a friendly, informal meeting with fellow Geeks. My only regret was that I couldn’t attend all the sessions I was interested in.

Seeing the Google Paris offices first hand was just the icing on the cake

Compiling log4cpp 1.0 with gcc 4.3 or 4.4

In gcc 4.3 some bugs were fixed, unfortunately they can cause compile errors with code that would compile with older versions.

In particular this is the case with log4cpp 1.0 which fails with the following message: BasicLayout.cpp:37:5: error: ‘auto_ptr’ in namespace ‘std’ does not name a type

Luckily the fix is very simple; all that is required to get a clean compile is add an #include <memory> in src/BasicLayout.cpp.

Android BootReceiver not working

Running application code after an Android device has finished booting is pretty straightforward. And there are already a few good tutorials available.

But, all the tutorials that have not been updated after the release of Android 2.2 (API 8), don’t mention that for it to work the App must be installed on internal storage.

This restriction on using internal storage only is documented, and a good overview is also available on stackoverflow

Migration to new Linux machine

This post will cover the steps required on desktop Linux to migrate to a new hardware configuration.

It is assumed that all user data is in the ~/ directory (i.e. user’s home directory).

Migration Steps

  1. Install, configure, test OS on New machine.
  2. Install, configure, test applications on New machine.
  3. Stop updating files on Old machine and backup user’s home directory to external hard-drive. It is probably best to do this at night since the backup can take quite a while.

    • tar cpf /media/external-drive/home-dir-backup.tar ~/

    gzip compression can be used if necessary

    • tar cpzf /media/external-drive/home-dir-backup.tgz ~/
  4. On New machine restore user’s home directory from external harddrive
    • tar -xpf /media/external-drive/home-dir-backup.tar -C ~/
  5. Perform final configuration on New machine now that user data has been migrated.

Create a PDF file for each Excel Worksheet

Sometimes it’s nececessary to generate a separate PDF file for each worksheet within an Excel workbook. This can be a big waste of time; especially if there are many sheets and/or you have to regenerate the PDFs every time the content changes!

If you are using Microsoft Office 2007 or later, the following VBA macro automates the process. The Fname variable can be used to customize the PDF file names that are generated.

Option Explicit

Sub createPDFfiles()
    Dim ws As Worksheet
    Dim Fname As String
    For Each ws In ActiveWorkbook.Worksheets
        On Error Resume Next 'Continue if an error occurs

        ' Name PDF files based on the worksheet Index (e.g Annex 1.1.1, Annex 1.1.2, etc.)
        Fname = "Annex 1.1." & ws.Index & "_result"

        ' If you want to name the PDF files differently just change the Fname variable above to
        ' whatever you like. For example if you changed Fname to:
        '
        '  Fname =  “C:\myFolder\pdfs\” & ActiveWorkbook.Name & "-" & ws.Name
        '
        '  The files would be stored in C:\myFolder\pdfs, and named using the
        ' spreadsheet file name and the worksheet name.
        ' 
        ' WARNING: Using worksheet names may cause errors if the  names contain characters that Windows
        ' does not accept in file names. See below for a list of characters that you need to avoid.
        '
        ws.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=Fname, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False
    Next ws
End Sub

The following characters are not allowed in Windows file names, they will cause the macro to fail if you use them:

< (less than)
> (greater than)
: (colon)
” (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)

WordPress Markdown

Markdown is a wonderful simple and lightweight markup language. The basic idea is that it looks just like normal text. I actually find Markdown’s relative non WYSIWIGness to be an advantage because it allows concentrating more on communicating ideas than getting distracted by too many visual bells and whistles.

Thanks to Michel Fortin‘s excellent PHP Markdown WordPress plugin you can use Markdown for posts in your WordPress blog.

If you’re sick of using WYSIWIG editors, then I’m sure it’s worth trying Markdown.

Website Configuration Checklist

This is a short checklist to get a new website up and running ASAP. It is intended for people who know what they’re doing and just want a checklist to remember the steps involved and to avoid a trap when configuring forwarding for Google Apps email addresses.

Pre-requisites

  • A Linux server with Apache2 installed
  • Root access to configure and restart Apache

Results

  • DNS configured for mydomain.com and www.mydomain.com
  • Email accounts configured
  • Apache ready to serve requests for mydomain.com and www.mydomain.com

Steps

  1. Register domain name mydomain.com
  2. Configure DNS A records for www.mydomain.com and mydomain.com
  3. Configure an Apache virtual host to serve www.mydomain.com

    su
    cp /etc/apache2/sites-available/www.existingdomain.com 
        /etc/apache2/sites-available/www.mydomain.com
    make necessary changes in /etc/apache2/sites-available/www.mydomain.com
    a2ensite www.mydomain.com
    mkdir /var/www/www.mydomain.com
    chown user:group /var/www/www.mydomain.com
    /etc/init.d/apache2 restart
    
  4. Create redirect from mydomain.com to www.mydomain.com

    su
    cd /etc/apache2/sites-enabled/
    create ../sites-available/mydomain.com containing  
        RewriteEngine ON  
        RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
    cd /etc/apache2/sites-enabled;ln -s ../sites-available/mydomain.com 
        ./YYY-mydomain.com
    /etc/init.d/apache2 restart
    
  5. Configure Google Apps for mydomain.com, which is just one click @ name.com 1.Create Google Apps admin account
  6. Configure email addresses for mydomain.com
    1. Configure Admin account forwarding
      1. Log in to Gmail using the account which will be forwarded.
      2. Configure forwarding address in Settings/Forwarding.
      3. Enable forwarding address
      4. Test forwarding address from a non Gmail account!
    2. Repeat process for other accounts if necessary, using email nicknames to avoid creating extra accounts.
  7. Get started creating some content in /var/www/www.mydomain.com!