Jeroen Benschhttps://bensch.be
All of bensch.be's stories.enTicketTouch is a horrible applicationhttps://bensch.be/tickettouch-horrible-application
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>In the Summer of 2016 <a href="http://www.delijn.be">De Lijn</a> announced a new way of paying for your ride on their busses and trams in Flanders, Belgium. They proposed <a href="http://www.tickettouch.be/">TicketTouch</a> as an easier and cheaper way of buying tickets.</p>
<p>The application leaves a lot to be desired however. Here are some of my complaints.</p>
<p><strong>Why isn’t the application native iOS?</strong></p>
<p>This is the first and foremost question. As soon as you launch the app, it feels cheap and "off". TicketTouch is a very simple application with hardly any UI or graphical elements. The application would be easy to create as a native iOS application and feel much more responsive and at home on people’s phones. I think most of the problems would also be solved by making it native iOS.</p>
<p><strong>Allow for passwords to be pasted.</strong></p>
<p>This is a user-hostile “feature”. There is no security gained whatsoever from having password fields that don’t accept pasting passwords. I thought this was established for quite a while now. What it leads to is to users using simple passwords that they can remember by heart because they have to type them in. Users of password-generating applications such as 1Password who care about their security are baffled by this kind of thing. The password here is maybe especially important as it is the PayPal password that is being used. PayPal, obviously, is used for financial transactions.</p>
<p><strong>PayPal only? Why not add other payment methods?</strong></p>
<p>Why force users to create a PayPal account to which they will then link their credit card? What is the business model here? Was some deal made with PayPal to have them as exclusive payment partner? I can't believe De Lijn accepts this as their interface with the customer. It makes users jump through extra hoops. De Lijn should offer more payment methods. Let people choose whether to pay with credit card or PayPal.</p>
<p><strong>The support section of the app can’t be exited.</strong></p>
<p>This is a glaring bug. When a user enters the Settings section of the app and selects Help/FAQ he is lead to a web view of <a href="https://www.tickettouch.be/faq">https://www.tickettouch.be/faq</a>. This would be fine if it weren’t so that you can’t get back to the using the app from there. The only way to go back is to quit the app and open it again.<br />
There are other inconsistencies. When choosing Introduction in Settings a Start button has to be tapped in order to go back. Tapping T&amp;C or Travelling T&amp;C has a user tap an ‘X’ to go back. None of these send you back to the Settings section but rather to the main screen of the app.</p>
<p><strong>Buying a ticket cannot fail.</strong></p>
<p>The best gets saved for last. I’ve had a case where I chose “Purchase 60 minutes M-Ticket” and I didn’t get a ticket. It showed the off-center “Purchasing” for a while and then showed the main screen again with no ticket purchased. I tried again by tapping “Purchase 60 minutes M-Ticket” and then it worked. A minute later I get two PayPal emails charging me for 1 ticket each. This is a major usability problem. We are talking about customers being charged for tickets they are not receiving. You can see the screenshots I took and compare the time of the tickets. 2 mails from PayPal, 1 valid ticket.</p>
<div style="float: left; margin-right: 20px"><img src="/sites/default/files/TicketTouch.png" width="300" height="534" alt="TicketTouch UI" /></div>
<p><img src="/sites/default/files/Paypal%20mail.png" width="300" height="534" alt="Paypal mail" /></p>
<p>TicketTouch needs a lesson in how they should make a user-friendly application. When a customer made the intention to purchase a ticket he _has_ a valid ticket. Instantly. He tapped “Buy”, he cannot in any way be faulted for any software bugs that happen after that.</p>
<p>What happens now is that the user does not have a ticket until the long processing of the purchase has completed. In urban areas with spotty reception or on moving trams and busses this can prove difficult. But this should not be the user’s problem.</p>
<p>What should happen is that the user has a valid ticket as soon as he hits “Buy”. There are 2 ways to do this:</p>
<ul><li> Either TicketTouch figures out a way to make payments go faster. I don’t know what they’re doing now but in areas with perfect reception making a payment takes 20 seconds. There is a whole lot of computing that can be done and traffic that can be sent over the network in 20 seconds.</li>
<li>Or TicketTouch delivers a valid ticket and then has the backend figure out the payment if it takes too long to give the user instant feedback. If the payment comes back OK then nothing needs to be done. If an error occurs during the payment the user should be notified and the valid ticket will be invalidated.</li>
</ul><p>When a timeout occurs in the TicketTouch backend or when communicating with the customer’s phone this can't be an error that invalidates the ticket. That is not the customer’s problem. In case of a timeout, keep trying. If in the end TicketTouch can't get the payment to complete due to timeouts or bugs, that's a free ticket for the customer. It will save TicketTouch and De Lijn a lot more effort missing out on these tickets than it costs in support and time dealing with false payments that go through.</p>
<p>Hopefully the customers of De Lijn will get a better mobile experience soon. They deserve it. An app like this is simple enough and the complexity is very low. It should be top notch if De Lijn wants to keep its customers happy, and paying.</p>
</div></div></div>Thu, 29 Dec 2016 20:57:43 +0000Jeroen46 at https://bensch.beHow To Export Fields & Display Suite View Modeshttps://bensch.be/how-export-fields-display-suite-view-modes
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>One thing that's often forgotten when I see tutorials about exporting view modes the variable that ties it all together, the field bundle settings for a content type.</p>
<p>This has cost me hours to figure out, after which I forgot it and it cost me hours again, frustratingly trying to figure out why, with seemingly everything exported well, the content types would just not have the view modes that I configured in Drupal's UI.</p>
<p>I don't like to work with Features. Features are fine until they're not. Features generate conflicts and remain in an overridden state after a while. I don't like it. Features are a black box, but the black box does not "just work". Raise your hand if you've heard this before when working on a Drupal project in a team:</p>
<p>"Hey, I reverted the features but it remains overridden."<br />
-- "Ahh yes, I don't know why. It's fine though."</p>
<p>So often everybody assumes it's fine but basically nobody has a clue anymore about what's going on with that feature in a website.</p>
<p>That's why with the last project I did I said, no features. We do everything in code. Which, admittedly, is a bit crazy too. You burn more time, and thus money, on the project putting all the field bases, field instances, Display Suite field info and Display Suite view layouts into code.</p>
<p>Panels and views on the other hand are easier when working in code. Adjust anything in a panel or view, export it. Copy and paste the whole thing into the panel or view's code file and you're good to go. Way faster than working with features.</p>
<p><strong>Exporting fields</strong><br />
To export fields you can use Features, install the module and create a feature containing your content types' field bases and field instances. Of course you need to create your content type first which goes like this:</p>
<p><code>$my_content_type = array(<br />
'type' =&gt; 'my_content_type',<br />
'name' =&gt; $t('My content type'),<br />
'base' =&gt; 'node_content',<br />
'title_label' =&gt; $t('Title'),<br />
'description' =&gt; $t('My content type for my website.'),<br />
'custom' =&gt; TRUE,<br />
);</code></p>
<p> $content_type = node_type_set_defaults($my_content_type);<br />
node_add_body_field($content_type, $t('Body'));<br />
node_type_save($content_type);<br /></p>
<p><strong>Exporting field bases</strong><br />
You take the field_base.inc file and copy paste each field base piece of code into a field_create_field() method in your own module's install file. I created a MY_MODULE.field_info.inc file because field bases are shared across content types. You can re-use them.</p>
<p><strong>Exporting field instances</strong><br />
For the field instances I created a MY_MODULE.MY_CONTENT_TYPE.inc for each content type and, at first, copy/pasted each field instance bit of code into a field_create_instance() method in content type's file. Field instances are not shared and it's nice to keep them separate. Beware that when you modify the body field in a content type you don't field_create_instance but field_update_instance for that.</p>
<p>Because you don't do everything right the first time around and you'll be adding or shuffling fields throughout the development of the project I got tired of copy/pasting each section, seeing which field I've already done, afraid of having missed one. The output of MY_FEATURE.field_instance.inc is almost exactly what has to be copy pasted into MY_MODULE.MY_CONTENT_TYPE.inc so I've created a little sed command file that roughly whips *.field_instance.inc into shape.</p>
<p>If you put these lines in a separate file and then call: sed -f command_file MY_FEATURE.field_instance.inc you can almost copy and paste the whole output into your own file.</p>
<p><code>s/\$field_instances\['.*'\] = /field_create_instance(/<br />
s/\/\/.*//<br />
s/^\([ ]*\));/\1));/<br />
s/^[ ]*return.*//<br /></code></p>
<p><strong>Exporting Display Suite view modules</strong><br />
To export view modes I use Bulk Export, which comes with Ctools. Just enable the module and you'll get a new item in the Structure menu of your Drupal website. Select which Display Suite view modes you'd like to export and it'll present you with code that you can copy paste into your code.</p>
<p>However, the field bundle settings, a variable that gets saved whenever you "add" a view mode to a content type does not get exported when exporting Display Suite view modes through Bulk Export. Nor does it get exported through Features, not unless you have an extra "Strongarm" module installed at least.</p>
<p>In Kristof De Jaeger (<a href="http://www.twitter.com/swentel">@swentel</a>)'s YouTube <a href="https://www.youtube.com/watch?v=Gr3gsrOzUBU">video</a> about exporting Display Suite view modes he also makes no mention of this. All he does there after having configured and exported his view modes is truncating the various ds_* tables in Drupal's database, but he forgets about the field_bundle_settings_* It "works" in his demo because he doesn't start from a clean database. But if you'd take the code and deploy it on a new website, that field_bundle_settings_* variable would be missing and the view mode would not be connected to the content type.</p>
<p>You can solve that nasty time-wasting problem by putting this piece of code into your install file for each view mode. In this case it's for the full view mode.</p>
<p><code>// Update view mode full mode for some content types<br />
$bundles_full_view = array('my_content_type', my_content_type_2);<br />
foreach ($bundles_full_view as $bundle) {<br />
$settings = variable_get('field_bundle_settings_node__' . $bundle, array());<br />
$settings['view_modes']['full']['custom_settings'] = TRUE;<br />
variable_set('field_bundle_settings_node__' . $bundle, $settings);<br />
}</code></p>
<p>This adds a field_bundle_settings_node_* variable for each content type you want to use the "full view" Display Suite view mode for.</p>
<p>Install a module with _that_ variable defined in it on a clean database and everything _will_ work out of the box.</p>
<p>To recap, when you want to</p>
<ul><li>export content types</li>
<li>export their fields and the fields' label settings</li>
<li>export the view modes used by the content type</li>
<li>export the Display Suite field settings</li>
</ul><p>you have to</p>
<ul><li>Add the content type through node_type_save()</li>
<li>Add each field base with field_create_field()</li>
<li>Add each field instance on the content type with field_create_instance(). This also contains the label settings (hidden, above, inline) and in which view mode they appear.</li>
<li>Add the field_bundle_settings variable with a variable_set() to tell Drupal which view modes a content type uses.</li>
<li>Export Display Suite settings and add the layouts and field info hooks to your code to tell Drupal about the layout in each view mode and the field attributes and extras that got added, if any.</li>
</ul></div></div></div>Sat, 05 Sep 2015 15:39:49 +0000Jeroen44 at https://bensch.bePhpStorm And Git SSH Keyshttps://bensch.be/phpstorm-and-git-ssh-keys
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>PhpStorm has amazing git integration. Pulling (cmd+t) and committing (cmd+k) work like a charm and are visualised well. During a commit you can even select a file and hit cmd+d to see a last-minute diff of the changes you're about to commit. In that window you can still fix any mistakes that were about to be committed.</p>
<p>I set up a project recently that required a public SSH key to be on the server in order for me to gain access to the git repository. But when performing a git pull PhpStorm told me this:</p>
<p>Fetch failed: fatal: Could not read from remote repository.<br />
Update canceled</p>
<p>No more information than that.<br />
Now, `git pull` on the command line worked like a charm and debugging the SSH connection with `ssh -vvv my.git.host` obviously didn't show any problems.</p>
<p>The problem stems from the fact that PhpStorm uses the default public key to connect to a git repository and it expects it to be named "id_rsa".</p>
<p>I have multiple projects set up on different git hosts and it always seemed to take the right key. What happened to be the case though was that my ~/.ssh/config file always happened to have the hostname of git host as its "Host" entry.</p>
<p>This time I had set it up so that "Host" was named something else and "HostName" had the actual fully qualified domain name.</p>
<p>Of course when PhpStorm pulls or pushes to the git repository it checks the config file of the project's .git folder and that will have the actual hostname in there. It _does_ check for an entry in your ~/.ssh/config file but in my case it did not find a "Host" entry with the name it was looking for. When PhpStorm does not find a matching entry in ~/.ssh/config it will default to using the key with name id_rsa.</p>
<p>I did not have an ida_rsa &amp; id_rsa.pub key pair in ~/.ssh so PhpStorm failed to connect to the git repository.</p>
<p>The two things you can do to fix this are:</p>
<p>1) copy the public and private key-pair you'd like PhpStorm to use to id_rsa.pub and id_rsa respectively</p>
<p>or </p>
<p>2) Rename the "Host" entry in ~/.ssh/config to actually match the domain in the project's .git/config file</p>
</div></div></div>Wed, 18 Mar 2015 08:55:35 +0000Jeroen43 at https://bensch.beGripes About Open Source Softwarehttps://bensch.be/gripes-about-open-source-software
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>Naturally, I think, when a product gets chosen to solve a certain problem there is a certain naivety with people that nudges them into thinking that the product they’re going to rely on actually works as they expect it to work. It isn’t until after you’ve spent time studying and using it, when the initial shine comes off and the true product starts to show itself, that you know if it was the right choice.</p>
<p>Another factor that heavily influences the choice made is the cost of the product. Open Source Software is often free, and that is great. That is to say, it’s free up front, you have no idea about the Total Cost of Ownership down the line. It may not cost you cash to obtain the product, but it might still cost you time, and thus money, trying to understand how to use it. To the decision-maker however, free is a very powerful argument.</p>
<p>And then there’s a third big influence when you’re choosing a product, whether it be as a company to be used by your developers or by yourself as a developer, and that is the idea that Open Source Software is malleable. You can modify it to fit your needs. Even if it doesn’t completely solve your problem out of the box, it can be made into something that does.</p>
<p>The first factor is not a jab at Open Source Software as such. Closed software can be terrible as well but I’m willing to argue that with OSS it’s more of a crapshoot. Closed software is usually paid for, there’s a business model involving money. The company distributing the software needs money to survive. If they sell bad software they will cease to exist. So unless the product you are about to buy is really new, you can be fairly certain that it works well enough. With OSS this is much more of a gamble because there is way more choice. When choosing a product, or framework, or even Operating System you don’t know whether it will work, whether you’ll find and get support, whether the product will get abandoned or if something new shows up and steals the show. Imagine how a company must feel if they trained all their developers in Angular only to be outdone by Polymer a year after.</p>
<p>The second reason, the cost, looks good on paper because there’s a nice 0 in the “Total Amount” column. Projects get sold on the premise that cheap solutions stay cheap, but that is not guaranteed. Especially not when the developers have never used or integrated that software package. No trustworthy estimate can be made and there is a chance that the project starts slipping and goes over budget. The further the project advances the harder it becomes to drop the problematic free software because of the billed man-hours invested in it trying to make it work.</p>
<p>Third, there is the idea that when you have the code, you can change it. But when software gets chosen in the hope that it solves a problem for your customer, you can safely assume that you do not want to get involved in the development of this product. You do not want to help improve the software. You want to get in and out. The company chose it for certain reasons, one of those was cost. You don’t generally want to skim the profit your company makes by fixing bugs in a product that isn’t your company’s. I’d even say you can’t, without asking.</p>
<p>And then the call comes in. The client has a problem. They try their best to come up with a vague problem description and off you go. You start debugging. You dive into the product you hardly know anything about. Though as a developer you have knowledge of two incredibly simple but powerful tricks. You know how to print text and how to tail a file.</p>
<p>This brings me to the biggest gripe of Open Source Software. The incredible amount of time wasted on Open Source Software by amateurs, enthusiasts and developers that don’t know the software, but they know how to error_log and System.out.println and printf. Trying to work their way through code, hunting for that one bug that’s making the thing they want to work not work the way they want it to. And then, after hours of hunting they find the problem and they go on freenode to ask for help about the next step.</p>
<p>There, in that project’s IRC channel on freenode, they’re then told to write a bug report with a reproducible and if possible a publicly accessible test-scenario. They’ll spend another hour or so gathering their thoughts, writing it up in a forum they first had to create a new account for only to have their bug sporadically looked at and either forgotten or, if they are lucky, fixed in a release months, if not years, from now.</p>
<p>The sheer inefficiency in much of the Open Source community is mind-boggling. I think it’s beautiful that so many amateurs put in so much of their free time into helping out. But it is sad that all that time is spent so inefficiently compared to what a full-time developer that knows the product can do. A developer with the right debugging tools to cut through the product with much more ease than someone who spends a day looking at code he’ll never look at again.</p>
<p>That last bit isn’t even true. When in the future that client calls again with another problem you’ll be back at square one:</p>
<p><code>error_log(“Do we get here?”);</code></p>
</div></div></div>Tue, 24 Feb 2015 22:32:48 +0000Jeroen42 at https://bensch.beLink Exposed Filter-Block To Panel Page In Drupalhttps://bensch.be/link-exposed-filter-block-panel-page-drupal
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>Creating a search page in Drupal is easy, exposing a filter in a block is easy too. The exposed filter-block knows where to submit the query to because it knows about the path of the search page.</p>
<p>But if you don't want to create a search page, just a Views content pane and insert that in a panel page, the exposed filter-block does not know where to go to as a Views content pane does not have a path. The trick here is to set the "Link display" to "Custom URL" in the Views content pane's "Advanced-&gt;Other" settings and fill out the path of the panel page that holds the Views content pane.</p>
<p>For instance, if you've made a panel page with "search" as the path and it contains your Views content pane for search-results... then set the "Link display" for that Views content pane to "Custom URL" and "search". Now the exposed filter will link to the search panel page.</p>
<p>If all else fails you can also try to set "Use Panel Path" to "Yes'".</p>
</div></div></div>Mon, 18 Nov 2013 09:31:45 +0000Jeroen41 at https://bensch.beRemotely Administering Your Grandparents' Computerhttps://bensch.be/administering-your-grandparents-computer
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>When I got my granddad an iMac I knew I was going to have to administer it remotely.</p>
<p>OS X makes this easily configurable, and I will go through the steps of setting up your parents' or grandparents' Mac.</p>
<p>First of all, set up the new computer like you normally would if it were your own. Choose a username for yourself in the setup, not the one for whom the computer will be for. The account for your parent or grandparent will be added later.</p>
<p><i>The first account created during setup of the computer has administrator rights. If you are doing this on a computer that has already been set up for your relatives then you will have to add a new user account and make sure it can administer the computer. Modify the already existing account and uncheck the "Administer this computer" checkbox so they cannot administer the computer anymore. Effectively making your new user account the sole administrator of the computer.</i></p>
<p>When the initial OS X setup has completed and you are logged in with your own account, make sure to go to System Preferences-&gt;iCloud and check that "Back to my Mac" is turned on and functioning properly. The other iCloud functionality can be turned off. All you want is to be able to reach your parents' Mac over the Internet when they turn it on.<br /><img src="/sites/default/files/Back%20To%20My%20Mac.png" width="782" height="584" alt="" /><br />
You can verify whether it is working if you see the newly setup computer in the "Shared" section of Finder on your own computer. The screenshot below shows "Jozef's iMac" in Finder.<br /><img src="/sites/default/files/iMac%20van%20Jozef.png" width="884" height="552" alt="" /><br />
If you do not see the computer in Finder then check System Preferences-&gt;iCloud again. It could be that Back to my Mac gives a little warning about it not being able to connect to the Internet. A setting might have to be changed on your parents' wireless router. The router needs NAT or UPnP enabled.</p>
<p>Once this works go to System Preferences-&gt;Users &amp; Groups and add a user account for your parent. Make it so that "Allow user to administer this computer" is not checked. You will be the administrator, not them.</p>
<p>When they have their own account you are done. You can go home and every time your relative turns on the computer you will see it appear in your Finder's Shared section.</p>
<p>Now here's the genius. Back to my Mac doesn't just allow you to administer a Mac remotely, it also lets you help your parents or grandparents use their computer. When clicking "Share Screen..." to connect to the remote Mac you will be presented with the option to log in as the administrator without interrupting their session... but also to share their screen in case you need to assist them.<br /><img src="/sites/default/files/Screen%20Sharing.png" width="548" height="460" alt="" /><br />
This makes it such a safe bet buying relatives a Mac if you have one yourself already. The software to administer it and help them if they need assistance is built right in, it's beautifully integrated and easy to understand.</p>
<p>I think it is one of the unsung advantages of Apple's OS X eco-system.</p>
</div></div></div>Sun, 16 Jun 2013 11:30:38 +0000Jeroen40 at https://bensch.beDrupal 7, Multilingual, Panels and Node IDshttps://bensch.be/drupal-7-multilingual-panels-and-node-ids
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>When working with Panels in Drupal 7 it is possible to add an existing node to a panel. The relevant part of the UI looks like this:</p>
<p><img src="/sites/default/files/Nids.png" width="803" height="123" alt="" /></p>
<p>Its help text says you can just type the node ID straight away, or use URL arguments to identify them. This works as long as the website isn't multilingual. As soon as it's multilingual though the ID entered in this field doesn't have to be node ID but the translation node ID, or tnid, of the node that has to be displayed in the panel.</p>
<p>The help-text in that case is wrong.</p>
<p>You'd expect you'd be able to add the node ID and Drupal would get the tnid of the node when it needs to display it, but it doesn't. It just assumes it is the tnid and shows the node in the correct language with that tnid.</p>
</div></div></div>Sun, 02 Jun 2013 12:03:17 +0000Jeroen39 at https://bensch.beAbout BNP Paribas's Horrid Easy Banking apphttps://bensch.be/bnp-paribas-easy-banking-app
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>A while ago I wrote about the BNP Paribas Easy Banking app for iPhone and how it has <a href="/fortis-fail">different password input validation</a> than the input field on their website for Belgian customers.</p>
<p>After using the app I thought I should write about it some more. I care very much for details in a product, especially if I know the producer of the app has the means to put in the effort of taking care of every little thing. BNP Paribas is a bank, they surely have a lot of money. The problem is of course that they're a bank. That means they move at glacial speeds when it comes to technology. This has always been common knowledge but it's not just a myth, it's true as I know someone who works there as a developer.</p>
<p>BNP Paribas is a French bank, that implies their English is abysmal. This too, is common knowledge. Here's one example.</p>
<p></p><center><img src="/sites/default/files/01%20Easybanking.png" width="320" height="568" alt="" /></center><br />
"This is your first time connexion"? Are they serious? Things like that irk me. But we're not done yet, here's the next screenshot.
<p></p><center><img src="/sites/default/files/02%20Easybanking.png" width="320" height="568" alt="" /></center><br />
"Please send once an empty texte message..." That is so French (they even spelled "text" in French) it's hiliarous. The whole explanation does not make much sense either. Also, there are arrows on the bottom that don't do anything. There is no previous or next page. You could argue that they're greyed out and that they'll become active as soon as there is a page to switch back to. I've looked through the app and found a section where there's more navigation possible. When on the home-screen, you can try and tap on the hard-to-hit "Troubles signing in?" text which does not look like a link or a button at all. When tapping it you end up at the professionally named "faq logon" section where UI atrocities like this take place.
<p></p><center><img src="/sites/default/files/03%20Easybanking.png" width="320" height="568" alt="" /></center><br />
I can't find a fitting description here. Do the BNP Paribas developers even know what they're doing? Is there anyone in charge of UX? I think it's safe to say that, seeing as we're discussing a bank here, there is no-one in charge of design and UX. The page has a back button, awkwardly placed underneat the "Close" button... and the arrow-keys on the bottom are still showing and still greyed out. I haven't found a place where they have a purpose. It's a sad state of affairs and these are just three examples, there are more.<br /><br />Have you noticed how, in the screenshots, the app is not optimized for iPhone 5? I happen to have one, and I'm sure a lot of their best clients carry do too. The iPhone 5's been out for almost half a year now, it wouldn't be a bad idea to cater to their clientele.<br /><br />BNP Paribas Belgium, if you happen to read this...
<ul><li>Please, have your app proofread by someone who's a better English speaker.</li>
<li>Don't prompt us about our apps being in Dutch because our "contract" is in Dutch and then show an English user interface. If you want to do it right you have us set the language in the app.</li>
<li>Upon starting the app we do not need a seven second animation of the BNP Paribas logo. We just want to get stuff done.</li>
<li>Optimize the Easybanking app for the iPhone 5. You make yourself look bad not doing it.</li>
</ul></div></div></div>Sat, 16 Feb 2013 21:18:54 +0000Jeroen38 at https://bensch.beGetting Granddad A Machttps://bensch.be/getting-granddad-a-mac
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>A Sunday not too long ago I visited my granddad for his 89th birthday and he asked me to take a look at his computer again. Some ISP settings had changed and his Outlook Express e-mail client didn't fetch or send e-mail anymore. The lady at the support centre directed him to their webmail client, but that's just not as good.</p>
<p>My granddad had a very old Windows XP desktop tower with a small 15" display, doing no more than 1024x768, a 1GHz CPU and 384MB RAM. It took minutes to boot and sometimes minutes to open Internet Explorer windows. It was also very noisy. I've been wanting to get him a new computer for the past 3 years but he always told me it wasn't necessary. He found his computer good enough for what he needed to do with it. Personally I attribute his resistance to a new computer as fear for something new. He is 89 years old now and was 86 when I first talked to him about a new computer. People don't like change after a certain age. Young people find it incredible, but old people just do not easily learn anything new anymore.</p>
<p>Of course, the computer I had planned on buying him was a Mac. One might argue that getting someone a Mac, coming from Windows XP, would be too big of a change but think about it... How much different is going from Windows XP to Windows 7, or nowadays Windows 8? I dare to say the learning curve is just as big (with Windows 8 even more so) than going from XP to OS X 10.8.</p>
<p>For some reason I couldn't figure out how to get his e-mail client to fetch e-mail again. Innerly I got frustrated that everything took ages to accomplish and made the decision of getting him a new computer. I didn't tell him I was going to, he'd argue, again, it wasn't necessary. Sometimes you just have to tell people what to do and what to use because they don't know any better.</p>
<p>The next day after work I got him the cheapest iMac and called him up. I said: "Granddad, don't be upset, I just got you a new computer. I know in the past you told me not to get one but I think it's necessary. A computer should be fast, easy to understand, not need a whole desk just for itself and be noiseless. What time do you go to bed?"</p>
<p>It was 18:30 when I rang him up and he told me he usually didn't go to sleep before eleven so I said: "Good. I'll be there in an hour."</p>
<p>Unboxing the iMac was an experience, he expected a traditional desktop PC and was amazed:</p>
<p>"So we don't need this (big) keyboard an mouse anymore?" — "No."<br />
"And this tower down here?" — "Nope."<br />
"And these speakers?" — "Neither."<br />
"The monitor can go as well?" — "Yep."</p>
<p>All those cables, gone. The keyboard was wired, his mouse was wired, the monitor had 2 wires, power and data, his speakers had wires to the back of the desktop tower, he had a USB hub because his old computer only had 2 ports, the tower had a power-cable as well and then there was the ethernet cable for Internet access. His Internet router was a wireless one but the computer didn't have a Wi-Fi card in it.</p>
<p>After unpacking I plugged in the one cable that comes with an iMac and turned on the computer. It frees up all those messy cables and in fact the whole computer table could go away. The iMac is so small it can just sit on his proper wooden "bureau" and take up no space other than the foot on which it stands.</p>
<p>After running through the install I set up Mail and iCloud for him and logged him into the iTunes Store and Mac App Store. I made it so that scrollbars always showed. In the past I always thought that Apple made the wrong choice of leaving us the choice to turn on scrollbars. It turns out they were right leaving the option, elderly don't quite grasp the disappearing scrollbars and lack the knack of knowing that there might be more content, even if a scrollbar isn't showing. I also removed unnecessary apps like System Preferences and Launchpad.</p>
<p>That evening I taught him three apps, which I placed next to Finder on the Dock: Safari, Mail and Contacts. (I'd install Pages and Numbers later) He was thrilled to find out there was no right-click, saying: "Oh, that is so much easier."</p>
<p>The next day I got an e-mail from him, telling me what he had done that day, checking the header of the mail I saw:</p>
<p>Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))</p>
<p>My 89 year old granddad had turned on his new iMac, opened Mail, composed a new e-mail and sent it. Success.</p>
</div></div></div>Sun, 03 Feb 2013 20:43:49 +0000Jeroen34 at https://bensch.beThe Solr Wildcard Problem And Multiterm Solutionhttps://bensch.be/the-solr-wildcard-problem-and-multiterm-solution
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>A while ago I ran into a problem with Solr and wildcard searches. Turns out it's more of a little known fact than a problem, Solr treats wildcards a bit different than how one would expect.</p>
<p>Normally, when a user enters a search-term we will append '*' to it so it will find words starting with the term that is being searched for. Common sense dictates that when someone searches for "train*", the set of results will also contain the word "train" itself. But "train" is not part of the results. When looking for "train*" Solr will return "trainer", "training", "trains" but it won't return results with the word "train" in it.</p>
<p>In case you want documents matching the exact word as well you will have to change your Solr statement. Instead of searching for "word*" you'll have to look for "word OR word*", only then documents matching "word" will turn up in the result-set.</p>
<p>After discussing it with <a href="http://twitter.com/nick_vh">Nick Veenhof</a>, it turns out that, as of Solr 3.6 there's been a new type of analyser introduced that addresses this shortcoming (although it seems to be more of a side-effect). The <a href="http://wiki.apache.org/solr/MultitermQueryAnalysis">multiterm analyser</a> type. Copy the query analyzer section of the text fieldType and change the type to "multiterm". What multiterm addresses is that when you look for "train*" it will run the query as if you've been searching for "train", "trains", "training", "trainer". You might be inclined to think that that's the same as searching for anything that starts with "train", but that is not the case. Without specifying the multiterm analyser the wildcard searches are not analysed at all and thus can't be used for stemming, or downcasing or accent mapping...</p>
<p>Specifying the new multiterm analyser will also "expand" the wildcard search to the actual word, in our case "train", which is what we were looking for.</p>
<p>In case you're using Drupal to interface with Solr there's an <a href="http://drupal.org/node/1879762">issue</a> filed about this along with a simple example explaining the difference between a non-analysed wildcard search and a multiterm search.</p>
</div></div></div>Sun, 20 Jan 2013 21:27:42 +0000Jeroen33 at https://bensch.be