tag:blogger.com,1999:blog-206317142024-03-13T08:13:42.009+01:00IT conservationsMy thoughts on IT, the internet, mobile, open source etc.Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.comBlogger917125tag:blogger.com,1999:blog-20631714.post-31917998380168741702023-12-29T13:18:00.001+01:002023-12-29T13:18:03.399+01:00Jackson vs. Android package optimization<p> For some weird reason (including a 20MB text file to be precise) I wanted to turn on </p><span style="font-family: courier;">shrinkResources true<br />minifyEnabled true</span><div><br /></div>in my Android app.<div>I did the compression alright, but the app stopped working.</div><div>I got weird Exceptions like </div><div>Cannot construct instance of `g1.k` (no Creators, like default ...)</div><div><br /></div><div>Well that pointed me to obfuscation, because I definitely don't have classes and members like that.</div><div><br /></div><div>Jackson relies on reflection to find your class properties and getter/setter functions, so you should not obfuscate them. Duuuh.</div><div><br /></div><div>They way to turn that off is in the <span style="font-family: courier;">proguard-rules.pro</span> file.</div><div><br /></div><span style="font-family: courier;">-keepattributes *Annotation*,EnclosingMethod,Signature<br />-keepnames class com.fasterxml.jackson.** { *; }<br />-dontwarn com.fasterxml.jackson.databind.**<br />-keep public class at.roman.traininfo.data.** {<br /> *;<br />}</span><div><br /></div><div>The last part keeps the whole package where all my entity classes are.</div><div><br /></div><div><br /></div>Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-52677555463594237832023-04-16T14:22:00.002+02:002023-04-16T14:22:43.389+02:00NULL values again <p>Today I learned that you essentially cannot concatenate (<span style="font-family: courier;">concat, ||</span>) nullable columns properly in DB2/SQL.</p><p>To be honest, I should have know this of course.</p><p>I have a table that records money spent, with a date, text, account and a physical location, e.g. a town, district, ... indicating where the money was spent.</p><p>It is nullable because not all transactions need to have a place recorded.</p><p>For some statistical analysis I wanted to create one column with text and account and the location simply concatenated into one, like<span style="font-family: courier;"> account||' '||text||' '||location</span>.</p><p>Turns out, then the location is NULL the whole string will turn NULL</p><p>Which reminded me - painfully, after about 30min - that NULL is not a value. You cannot do anything with NULL.</p><p>So you have to cast it away to a default value, e.g. with <span style="font-family: courier;">coalesce(location,'dummylocation')</span>.</p><p><br /></p><p>Sigh.</p>Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-24909208169219056062022-12-28T18:34:00.002+01:002022-12-28T18:34:46.342+01:00OxygenOS 13 missing per-app language<p>A couple of weeks ago I got the Android 13 / OxygenOS 13 update for my OnePlus 9, looking forward to the per-app language feature from Android 13.</p><p>Reason for that is, that I just like to run my devixes in English, but some local (i.e. Austrian or German) apps just have terrible translations, or I am just not in an "English context", i.e. when Banking or doing my taxes.</p><p>Some apps of course can set the language within the app, but some just take the system settings.</p><p>Android 13 allows to override this (with a tiny little help of the app, it only has to declare in the manifest which languages it actually has translations for).</p><p></p><p>But it appears OxygenOS13 failed to implement exactly that feature.</p><p><a href="https://www.reddit.com/r/oneplus/comments/zfgoy5/just_updated_my_op9_pro_to_oxygenos_13_but_cant/" target="_blank"><img alt="" src="data:image/png;base64,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4EchGZYmzycBEiABEiABEiCBPEJA4xyTLa5ffCWFZLJkeT0JkAAJkAAJkAAJFFACFJIFtOFZbRIgARIgARIgARJIlgCFZLIEeT0JkAAJkAAJkAAJ5EECbrd32O2BUOWMEZJ+gaDxAjzzYJuxyCRAAiRAAiRAAiSQEQTwueqXXn1N1qz5TUqVOkKuanNF6M9QZ4SQ1I0y/ajG2wgzI1qChSABEiABEiABEiCBAkggI4QkuLv3ltS24J6RBbBXssokQAIkQAIkQAJ5gkDGCMk8QYuFJAESIAESIAESIAESiBGgkGRnIAESIAESIAESIAESiESAQjISNl5EAiRAAiRAAiRAAiRAIck+QAIkQAIkQAIkQAIkEIkAhWQkbLyIBEiABEiABEiABEiAQpJ9gARIgARIgARIgARIIBIBCslI2HgRCZAACZAACZAACZAAhST7QGgCZ555pixbtlyefvppufTSS0JfnxMX5IUy5gQH3oMESCB1BMqUKWsyy+SxL3W1jZ/T3Llz5fzzG8rRRx8lX331VVK3HThwkPTt21f+++8/k8+qVSsF+V94YRMpWrSofP/9d1K4cOGk7uG+OBVzxEMPPSxDhgxJCYOUVi6HM6OQtICPG/emdOnSxbMJOnbsKD179sjh5snM26XiAUx3zfJCGW0GGEAHDRokw4YNlw0bNphDxYoVk8aNG0v37t2kdOnS2ZDppObFslSpUnLXXXdK69atsxzetm2bPPjgQzJu3DjZvHmzOVahQgXp1auXnHfeueluljyXf5R2yXOVDFHgqDzeeuttI74WL14s+CQbREGlSpXk/vvvkxo1agQqwbp166ROnbNj/TaegMF97rvvPvniiy+NOClUqJAcf/zxSfdzCsn/b6pUCclly5bJmWeelaUPQEj269fPEZf9zO8fffShVK5cOVA/CXpSKuYICsndtCkkM0hILliwQC677HLn7eZoeffdd4I+Dzl+XioewGbNmjtWzWXyxhtjjJBJdUpFGVNdJr/8MEE2bnyBrF692vMUTLrjxo2V008/PcvxeEJST3z00UfkqquuMn8mug9eoiBa81K69dbb5LPPPpOHH35YmjS5MKVFT8TLr11SWogMyiwqjxtvvEnef/9935q0bXulPPbYY3FrCjFYv34DI0TxgoWXID8h+cEHE+Wmm24ygtUr9ep1r9x8882RyKZb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sWOH1KpVS5555hkpUaKEOY43x0ceeUTWrFkjhQoVknr16smwYcOkcOHC5jgGnFdffVV69uwZuyfKANdtkBRvMkU5n3rqKZk1a1asrJj8a9eubeqANHv2bOMynjNnjvkbdfnyyy9NvWDlHDp0qJx99tnmGFwG4AHxgPKjLpjU7fTaa69J7969zTma1P0CwQHLFY6BI1yHmncijraocL+Ng8Hq1auldOnShq2+bY8ZMybWDjgOS5a2KyYqtBNYe7kvUcarr75apk+fbuqK895++21p2LBhTIytW7fOTNgzZswwbV+1alUZPny4KQdSkHJpHrgP+kfjxo1l4MCBsf6hDMO2Jfqwun0vu+wyUw9N9evXN+0Ppqg7jmk9L774YiMIvRKskGi/mTP/r70zgfdqWv//o8ml4VQapAgldKVBiJs0aUBCFw1Ik/GKl/Ear5/pmq/hyjyUKSXc4laISoYIqW5/RZFUGtCoOf/9WfV8W2edPX6/Z/ievp91X163c87ea6/1Xs9a67OfZ621p6W46nWwM/CEHYFXYdTdT7h37drV2O/NN99cQEj6Td62IATrM888U7799ltTbHg44V1t27ZtgeriPtQHz1m+fLnpC4hioH00ffjhhya8iL9jrIBNwcai+sAtt9xixhLcAw/r+eefn8oTz0W7XXPNNfK///0vFV4P6zt24Vu0aGHKown2CS808r377rvl8ccf9x1n3HEkTl/3sxG02XnnnSejRo0y5Ucd3fEsrJ1+++03wxH9yR0/9OdM7Dmsv0XZR9w2QDntOmIsgd22b9/e12513kF0KagfjhkzRq688kozdh5wwAFyzjnnyK233hoY2g4bm8LsUxmna0fu2BynblFjM+aoAQMGmDkUCREQ2HGjRo18+60uSYFNz507NzXX6ZhsL4cJsvOg+vsOjDnwSwpJq5GjPEr4O4x62LBhcvTRRxsB+Oyzz0rDhg2NYII4HDhwoPz6668yduxYkzOE18yZM83AqYJj6dKlqb9/8sknsm3bNjnqqKNMR4Cn7rrrrjMDgQ441apVk6FDhxoPD8QP1hZCzNWvXz/SRMOE5KJFi4ywxeBUt25ds17u2muvNZPYnDlzTN7oSOhYWp+nnnrKiAuEolH///znP/LFF18Y8YAlAW+99ZYpJzooRBnq4ya/t108G+zgVQJb1BPiedKkSaaeURyj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vkbbd9995aGHHjIhbb81kuedd540atTICEmEwe+9914jKO1ki00ISQhTiEZNuO/+++83v5s9e7Z07tzZ13DGjx9vPJdMJEACJEACJEACJJANBCgkC1lIYn3l9OnTMxaSWB+pnlHNrHbt2ibUzUQCJEACJEACJEAC2UCAQtIRknb4WL2D6gmM8khOmzZNTjvtNJkyZYrUr1/f5OwX2g7zSCK0jVA4Qt267jIbDIVlIAESIAESIAESIAGXAIWkJSSx2eaoo44yu6mRsIMbSTe5RAlJXNu1a1epXLly6GabMCGJPLDZZsKECfLSSy9J8+bN5eeffzY7uBFGh9DE72644QYZMGAALZoESIAESIAESIAESowAhaQlJLFOsVevXuY4H79jeeIIyfXr18sFF1wgkydPNkf34GgfCEL7+J8oIYln33LLLTJy5EhBfghnQ6A++uijKSEJ0fu3v/2txAyHDyYBEiABEiABEiABCklLSGLXtrvZhiZCAiRAAiRAAiRAAiTgT4BCkkKSfYMESIAESIAESIAE0iJAIUkhmZbh8CYSIAESIAESIAESoJCkkGQvIAESIAESIAESIIG0CFBIpoWNN5EACZAACZAACZAACVBI0gZIgARIgARIgARIgATSIkAhmRY23kQCJEACJEACJEACJEAhSRsgARIgARIgARIgARJIiwCFZFrYeBMJkAAJkAAJkAAJkACFJG2ABEiABEiABEiABEggLQIUkmlh400kQAIkQAIkQAIkQAIUkrQBEiABEiABEiABEiCBtAhQSKaFjTeRAAmQAAmQAAmQAAlQSNIGSIAESIAESIAESIAE0iJAIZkWNt5EAiRAAiRAAiRAAiRAIUkbIAESIAESIAESIAESSIsAhWRa2HgTCZAACZAACZAACZAAhSRtgARIgARIgARIgARIIC0CFJIR2L6a/rVMnvKRtGn9F2nerGlakAv7pk2bNsu6dWt9s61WrVqhPm7r1q2yevXq2HmWKVNW8vKqxL6eF5IACZAACZAACZReAhSSIW0399vv5M3RY6RqXp6sXLVKTj2lmzQ6qGGJtvbixUvkxVeGy7Zt23zLUbVqVblw0ICMywgB+fqbo2Xe/PmJ8ypbtqy0a9tGWrZokfhe3kACJEACJEACJFB6CFBIBrTVwp9+kldeHSnNmh4unTp2kHfemyDTv54hvc46Q/at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HVnOE5HGd+ndW7vDblJ+5+bkjEExAxIgARIgARIgARIggfwESlRIoijrF4r8OnV7eFuT7uSeMutDb+3jr8YruXXbVu/P27+2rd7Jn39dZERm1yO7S9VKed6xP9vXRlY/WmSP7V/bYyIBEiABEiABEiABEigiAiUuJFNi8rPtnkkIShxS/vOvS2XSjHe9723XlE2bN5hvZ2Pnr66nhIBc5YnM3zeuk8P2byZHHXKkrN+8VWq0Kit7UkQWkbkwWxIgARIgARIgARLYSSArhCSKgzD3yumeh3L5Vtlj9zLy5dzp8u2iOVKtUnVZtnKJVN4zzxOYFczxQGajjed5XO+FttesX+OdPVldunXpJlWbeQeQM5xN+yYBEiABEiABEiCBYiGQNUJSa7v2uz9k0wKRDz76UJavWiZ/qrCHLFq+QOrWrG8u0W9sQ0xu2rxRylfZTVq2P0wO+0vDYgHGh5AACZAACZAACZAACWwnkHVCUhtm6bxf5fvZi2T5wpXmm801K9Y150X+qWIFqVKjotTar7rs3bC61GtUi21JAiRAAiRAAiRAAiRQAgSyVkiWAAs+kgRIgARIgARIgARIIAEBCskEsHgpCZAACZAACZAACZDATgIUkrQGEiABEiABEiABEiCBtAhQSKaFjTeRAAmQAAmQAAmQAAlQSNIGSIAESIAESIAESIAE0iJAIZkWNt5EAiRAAiRAAiRAAiRAIUkbIAESIAESIAESIAESSIsAhWRa2HgTCZAACZAACZAACZBAqRCSv65cbVqqetUqbLFiJPD666/LZZddJgsXLizGp2b+qNJa7sxrzhxIgARIgARIoHgJUEju4H3ooYfK2rVrzU9//etf5V//+pds3rxZTjjhBJk4cWKqVW699VaZP3++PP/888XbUiXwtNIiyP7yl7/IRx99lCJUVOWeM2eOXHTRRab9t271vgm/xx5y8sknyx133GH+baeXXnpJ7rrrLlm5cqX59d577y2XX3659OnTJ991d955p7Gl9evXS9myZeXAAw+UJ554Qg466KDUdfj7LbfcIg888ICcfvrpvpawYsUKadOmjRx11FE5YZsl0B34SBIgARIgAR8CFJIWFAiSk046Sa6//nrz23Hjxsltt92WT6Tcc889xkP3yCOP7PIGVVSCrDDBLViwQFq3bp3Pa1oU5R4zZoxceumlcv7558sF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" /></a> <br /></p><p>Bummer.<br /></p>Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-83441278902477153872022-08-28T14:50:00.001+02:002022-08-28T14:50:05.096+02:00First UFO sightings<p>So, Max finally did it. He found the HW to read our old floppy disks and <a href="http://www.it-conservations.com/2022/08/fun-ahead.html">got our 1985/86 software</a> back and onto proper modern media ;) </p><p>And then we both separately tried to get a good old DOS to run. My attempt was in a virtualbox on my PC... Tricky to get the program/files into that DOS box because you can't mount a folder from the host then (DOS doesnt have vbox extensions), nor do you have networking on it... so I had to dreate a disk image file, put the files on that, and mount it as disk 0 ("A:") to the DOS vm. And this worked.</p><p>Ladies and Gentlemen ... I give you... </p><h1 style="clear: both; text-align: center;">UFOS</h1><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifhFgn3ktBBOHoNrp7qu_qT2opRczsGEN5MqUfQVK7OJox0VvIgC321FVHQg2kZL4Vlkq_1SJdJF71qIZzLajA_t-5b1bRdLempaHXsljsjYmAPc6kov_f-Wn7NjCLqfF35QipAjXtRtq4YhTeh1XYB6E2xzL9ERZu4tHc-pPNZmjndxBDmw/s749/signal-2022-08-22-17-59-16-019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="509" data-original-width="749" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifhFgn3ktBBOHoNrp7qu_qT2opRczsGEN5MqUfQVK7OJox0VvIgC321FVHQg2kZL4Vlkq_1SJdJF71qIZzLajA_t-5b1bRdLempaHXsljsjYmAPc6kov_f-Wn7NjCLqfF35QipAjXtRtq4YhTeh1XYB6E2xzL9ERZu4tHc-pPNZmjndxBDmw/s320/signal-2022-08-22-17-59-16-019.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><p style="clear: both; text-align: left;">Please don't ask me what UFOS stood for... the U was most surely "Unterricht" (=education), but I can't remember wha tthe F would be for. I guess I need to try and find that in the sources.</p><p style="clear: both; text-align: left;">Speaking of which, we did some wonderful stuff - and remember that was two 17y/o kids in high school working on 4.77MHz PCs with just 2 floppy disk drives, natively in <a href="https://en.wikipedia.org/wiki/X86_assembly_language" target="_blank">x86 Assembler</a> (Macro Assembler if that makes a difference to you, it doesn't to me, because I always considered the "marco" part a primitive pre-processor, not a different language) .</p><p style="clear: both; text-align: left;">Core architecture was the base module (a .com file), that would load the various modules from disk when needed, and supply a bunch of common functions (a core library, if you will) as a service interrupt. So when a module wanted to do some windowing/output stuff it would - as was common practice under DOS - load a function code into the AH register (the AH part of the accu, ok) and call INT F0h, like you would do for a DOS or BIOS function.</p><p style="clear: both; text-align: left;">The rest seems to be pretty awful, not only because of the lack of documentation.</p><p style="clear: both; text-align: left;">The above-mentioned interrupt handler, utilized a jump table, i.e. use the function code in AH as an index into an array of function addresses to call those functions (pretty cool for 17y/o, right?) but I didn't check any boundaries... I probably thought I wouldn't need to, because only us two boys would ever call this interrupt... pretty stupid. (And when I say I, I'm pretty sure that <i>I</i> wrote <i>this</i> piece of code at that time, and looking at the source, it look remarkably like my code)</p><p></p>Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com1tag:blogger.com,1999:blog-20631714.post-36023178779622475302022-08-15T20:48:00.005+02:002022-08-15T20:54:30.379+02:00Fun ahead<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA1DQ-ix8uEv8dKLJU-9YrL-U33XGikO3KYLudriIczxsQlexvtjPy7YPGnxDRp55ecQeCcQUMOk0hGRqoO77-ya3kedzIGSKdpfa0LDSyFSFHWdachKMCJiu3SZfEheH9E0jGjeKfkf03e7Gn8N6bhPml9CBWXcmzvaVMInHIXfBPSccK1Q/s2440/signal-2022-07-31-17-08-49-147.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1640" data-original-width="2440" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA1DQ-ix8uEv8dKLJU-9YrL-U33XGikO3KYLudriIczxsQlexvtjPy7YPGnxDRp55ecQeCcQUMOk0hGRqoO77-ya3kedzIGSKdpfa0LDSyFSFHWdachKMCJiu3SZfEheH9E0jGjeKfkf03e7Gn8N6bhPml9CBWXcmzvaVMInHIXfBPSccK1Q/s320/signal-2022-07-31-17-08-49-147.png" width="320" /></a></div>Not a lot happening here tech-wise these days.<p></p><p>Except: an upcoming "archaeological" adventure.</p><p>Max, my longest and dearest friend found a bunch of disks (yes, those: 5.25" and 3.5") from way back when. We were in high school together when the first PCs came out and started to get used in school administration. Obviously, there was a lack of software for exactly this back then. We had good ties to our school administrator (who happened to be our geometry teacher as well), and since the two of us made up about 50% of the school geeks (there were two others and of course all four of us where friends) he sometimes allowed us to use his "official" computer, an Olivetti (_that_ long ago), and also the only one sporting a 10MB (!!) hard disk.</p><p>So at one point, Max and I set out to write a piece of software that would help him in some administration tasks, namely creating and assigning the whole schools class schedule, making sure that all the boundary conditions were taken care of. Conditions like the (weighted) hours per teacher, or honouring their days off. Stuff like that. Not some fancy logic that would automatically take care of it, but supporting it. </p><p>The fun part: this was all written under MS-DOS in 8086 Assembler (yes) and we even created a nice (character) windowing and menu framework for this. At least I'm pretty sure we did.</p><p></p>So, Max happened to find the disks with the sources for it.<p></p><p>Now we need to get access to disk drives (3.5 and 5.25), and connect them to a modern PC.I checked: I really don't have any. And then hopefully get some DOS running in a VM and see what will happen. </p><p>Fingers crossed that any of this is still readable.</p><p>PS: I just might post some stories of that time here in the upcoming weeks, and of course the progress of our digital excavations.</p>Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-77199421546799783742022-04-10T09:49:00.001+02:002022-04-10T09:55:43.252+02:00Brave New Post-Brexit World<p>So, last week I had my first (business) trip to the UK since the Kingdom in its <a href="https://en.wikipedia.org/wiki/Brexit" target="_blank">infinite stupidity</a> decided to leave the EU.</p><p>It's been a while - Jan 2019 to be precise. Not because of Brexit, but of course because of the <a href="https://en.wikipedia.org/wiki/COVID-19_pandemic" target="_blank">COVID-19 pandemic</a>, that kept everyone from travelling.</p><p>There were two major changes and experiences that sort-of relate to tech in a larger sense, so I want to report on them here.</p><p><b>Mobile Phone/Data</b> and <b>Payments</b></p><h3 style="text-align: left;">Payments</h3><p>Let me start with the latter: Even when the UK was still part of the EU using any payment card (credit card like VISA, or debit card like the then <a href="https://en.wikipedia.org/wiki/Maestro_(debit_card)" target="_blank">maestro card</a> that meanwhile has been turned into Mastercard) was more costly than in mainland Europe. No, I should be fair, this got nothing to do with them Brits living on an island of their own, but with them having their own currency. EU regulations didn't allow to charge for payments or withdrawals within the <a href="https://en.wikipedia.org/wiki/Eurozone" target="_blank">Eurozone</a>[1], but they still could charge you for the currency conversion. So even before Brexit paying for a 1£ could potentially end up like 2-3€ on my account[2].</p><p>Back then, I already pondered getting a UK debit card, that I'd only need to charge once every blue moon, and thus limit the charges & fees.</p><p>This time I did. Some research amongst friends and colleagues led me to try <a href="https://www.revolut.com/" target="_blank">Revolut</a>. There are many similar other <a href="https://en.wikipedia.org/wiki/Financial_technology" target="_blank">fintech</a> startups with comparable offerings. I chose Revolut because people around me used it (and hence I hoped to piggyback on their experience) and it appears all have had the same startup issues in the last couple of years. Revolut it was.<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://upload.wikimedia.org/wikipedia/commons/1/19/Revolut.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="125" data-original-width="551" height="45" src="https://upload.wikimedia.org/wikipedia/commons/1/19/Revolut.png" width="200" /></a></div><p></p><p>I opened my account on a commuter train ride in & around Vienna[3], got an EU IBAN, and transferred some money from my regular (Austrian) checking account, created a "GBP" sub-account - or whatever you want to call it - and a virtual credit card. Thought I try my first trip without a physical one - and also I had only 1 week left, so chances it wouldn't arrive in time were high. Why bother at all, then.</p><p>Ah, yes, and I linked this card into <a href="https://pay.google.com/" target="_blank">Google Pay</a>, to facilitate contactless payments from then phone.</p><p>And guess what? It worked like a charm. No need to run a tab at the pub, hence no need to receive this credit-checking looks from behind the bar. Just tap the phone, and that's it.</p><p>Since I started with only 10€ for a start, of course I immediately had to top up the account from my checking account again, but that only took half a minute, without any charges... - in the pub with the pint half empty alredy Life's good.</p><h3 style="text-align: left;"><b>Mobile Phone/Data</b></h3><p>Well what can I say. I'm an idiot, I guess. I knew that with Brexit the UK also got out of the <a href="https://en.wikipedia.org/wiki/European_Union_roaming_regulations" target="_blank">EU roaming agreement</a>. Previously, I used to ignore roaming in the UK. Since I only was there for a couple of days at a time, there wasn't even the slightest risk of me violating the <a href="https://en.wikipedia.org/wiki/European_Union_roaming_regulations#Fair_use_policy" target="_blank">fair use limitations</a>, since most of my data volume was always used in Austria. And I knew that this was no longer in place. I knew that roaming charges (on data) again applied.</p><p>But I forgot how insufferably high they are. Just switching on my phone after landing at LHR, I immediately got 2 texts from my operator: the first informing me that I just used 40€ worth of roaming, and the other letting me know that they cut me off, because I reached the 50€ limit. And I hadn't even opened my seat-belt yet[4]. </p><p>So I jumped on the public Wifi in the terminal, whatsapp'd the colleague who handles our phone contracts and packages and he was nice enough to immediately sign me up for the roaming package.</p><p>Crisis averted - for now. The 100MB packages costs 40€ a month...Seriously? The 250MB still 80€... not really a volume discount there... Still was ridiculous. While still happy that I had a solution for the time being - without needing to hop on any next available free wifi, I needed something else.</p><p>And it wouldn't be a burner phone, like a co-worker suggested. One better, I have a dual SIM <a href="https://www.oneplus.com/" target="_blank">Oneplus 9</a>.</p><p>So, again with the help of some local recommendations, I decided to get a Three SIM, and top up as I needed. I was on the train from wonderful totally-non-boring <a href="https://en.wikipedia.org/wiki/Staines-upon-Thames" target="_blank">Staines-upon-Thames</a> into London already[5]. Arrived in Waterloo, strolled casually into the next WHSmith, only passed the SIM shelfs like 5 times, before a friendly assistant pointed to it, got a Three SIM for 0.99£ [6] , went to our wonderful London Office in London's Old Street - the area is affectionally called Silicon Roundabout, and I now know why - plugged the SIM into my phone and nothing.</p><blockquote>For a moment, nothing happened. Then, after a second or so, nothing continued to happen.</blockquote>The <a href="https://amzn.to/3xcKJDn" target="_blank">good old Hitchhiker</a>. <div><br /></div><div>I checked the <a href="https://www.three.co.uk/" target="_blank">three homepage</a>, where they confirmed, that once the SIM is plugged in and the phone switched on, I should receive a text after a while with my new phone number. Nothing.<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr-K6zgDNWmVuU24ECnRbbXB4WjvcSTGOPU3Z6ovqaCevJQb7TS4c6xRjx_NGamg1WqLsFpPFCVFvzGBXshydV2824SbGoGpdQihZznfyTL0NVgV-J2RVWqCQNTB2xdEdYBbhg0Qx-Hzz_xW4Cr1uOj_5plgyQ40wcrte2Wbmcmf8SJmVS8w/s280/three-logo.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="280" data-original-width="219" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr-K6zgDNWmVuU24ECnRbbXB4WjvcSTGOPU3Z6ovqaCevJQb7TS4c6xRjx_NGamg1WqLsFpPFCVFvzGBXshydV2824SbGoGpdQihZznfyTL0NVgV-J2RVWqCQNTB2xdEdYBbhg0Qx-Hzz_xW4Cr1uOj_5plgyQ40wcrte2Wbmcmf8SJmVS8w/w156-h200/three-logo.png" width="156" /></a></div><br /><div>Not even for half an hour. Tried several tricks, like switching off my Austrian A1 SIM. No. Switching off Wifi...No.</div><div>Well, let's leave that, I got work to do.. So I did. </div><div><br /></div><div>Then we popped out of the office for a quick bite and PLING... text from three arrived. Turned out there was no reception in the middle/core of the building where I sat... So while enjoying my sandwich I even more enjoyed to create an account, top up my Three SIM with 8GB for the month for 10£... Probably not the cheapest option in the world, could have had a cheaper per-GB plan, but do I even need 8GB a month, when I'm there at best 3-4 days a month? No I don't. So good for now.</div><div>Did you guess by now, how I paid the 10£? Right.</div><div><br /></div><div>(And then texted my colleague in Vienna, to switch of the roaming package, no need to waste money next months as well)</div><div>So 8GB for 10£~~12€ vs 100kB for 1.49€ or 40EUR for 100MB... Again, not the cheapest option, but a bargain compared to roaming charges these days.<br /></div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaJ5IjLUM_Hq1bCZBT8fkBhLkGkXSofjxw3vv_yKTfTETkgxFAKxNqGwPDCaLN9-uKq0yGK9AngY2DlHyDT7SwkL7iRH-ZkbUFEjxcbYC-klakC_juSX099wZu1B4TlajYwyMPgNTbx0jc7PBu4ZxKp5TCIOhIpimyQDffZPHsRGH-eAeLDA/s820/Screenshot_2022-04-10-09-07-23-77_0ce57feeccaa51fb7deed04b4dbda235.jpg" style="margin-left: 1em; margin-right: 1em;"><img alt="Tarifinfo UK: Lieber A1 Kunde, Sie nutzen jetzt Datenroaming. Wir verrechnen wie folgt: Daten 1,490/100 KB; MMS 0,990. Infos zu Ihrem Datenvolumen finden Sie auf A1.net und Mein A1 App. Preise in Euro inkl. USt., gültig nach Verbrauch etwaiger Freieinheiten, Roaminginfo +43664664666, Notruf 112. Ihr A1 Team Tariff information UK: Dear A1 customer, you are now using data roaming. We charge as follows: Data 1,490/100 KB; mms 0.990. You can find information about your data volume on A1.net and My A1 App. Prices in euros including VAT, valid after any free units have been used, roaming info +43664664666, emergency call 112. Your A1 team" border="0" data-original-height="820" data-original-width="808" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaJ5IjLUM_Hq1bCZBT8fkBhLkGkXSofjxw3vv_yKTfTETkgxFAKxNqGwPDCaLN9-uKq0yGK9AngY2DlHyDT7SwkL7iRH-ZkbUFEjxcbYC-klakC_juSX099wZu1B4TlajYwyMPgNTbx0jc7PBu4ZxKp5TCIOhIpimyQDffZPHsRGH-eAeLDA/w197-h200/Screenshot_2022-04-10-09-07-23-77_0ce57feeccaa51fb7deed04b4dbda235.jpg" width="197" /></a></div><br /><h3 style="text-align: left;">So?</h3><p>Why did I write that up?</p><p></p><ol style="text-align: left;"><li>if as a EU citizen you plan to travel the UK, I wanted to give you some recommendations.</li><li>I tried all of the above... Setup was really easy, and is for your if you consider yourself a non-tech-averse person.</li><li>Everything worked, no fraudulent or fishy things or hidden charges found so far.</li><li>I'm still annoyed by Brexit. Full stop.</li><li>A point of ale appears to taste better when paid from a local account ;)</li></ol><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhE3hC8aALvPQuCgX72PdnRcG08oR-VCcMOlahzzFPYhOKDe-CqCbrSAje-GdEkV0ZIFgpZKedhyVPT2jp-lNFlSmuKRMpmQcJuoG3vgLahMHJ3FXayxj94VMdcb9NdfWZ5z0C06-tRNsXakOu6LlyjbfjQeVNtdDveUoj-Ket4s2kq11YQjQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="800" data-original-width="937" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEhE3hC8aALvPQuCgX72PdnRcG08oR-VCcMOlahzzFPYhOKDe-CqCbrSAje-GdEkV0ZIFgpZKedhyVPT2jp-lNFlSmuKRMpmQcJuoG3vgLahMHJ3FXayxj94VMdcb9NdfWZ5z0C06-tRNsXakOu6LlyjbfjQeVNtdDveUoj-Ket4s2kq11YQjQ" width="281" /></a></div><br /><br /></div><p></p><p>------</p><p><span style="font-size: x-small;">[1] or was it actually <a href="https://en.wikipedia.org/wiki/Single_Euro_Payments_Area" target="_blank">SEPA</a>?</span></p><p><span style="font-size: x-small;">[2] honestly, I don't want to fact check this, but it felt like it ;)</span></p><p><span style="font-size: x-small;">[3] oh the enquiring "what-is-he-doing-now" look on my wife's face, when I first took a selfie on the platform and then two minutes later put my id card on the seat next to me to take pictures for identification ;)</span></p><p><span style="font-size: x-small;">[4] don't judge me.</span></p><p><span style="font-size: x-small;">[5] the 1 hour delay is a different story, but hey <a href="https://www.southwesternrailway.com/" target="_blank">SWR trains</a> at least come with Wifi.</span></p><p><span style="font-size: x-small;">[6] That's why I got the revolut account ;) smart, right? Right?</span></p><p><br /></p></div></div>Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-31440574563938054072021-07-05T11:01:00.002+02:002021-07-05T11:01:21.730+02:00“A damn stupid thing to do”—the origins of C<p>Very nice read on ArsTechnica ... for people my age ;)</p><span style="font-size: medium;"><a href="https://arstechnica.com/features/2020/12/a-damn-stupid-thing-to-do-the-origins-of-c/" target="_blank">“A damn stupid thing to do”—the origins of C</a></span><div><br /></div>Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-79225767200105856212021-04-24T13:11:00.001+02:002021-04-24T16:24:49.543+02:00Android 11 and Google Photos Permissions<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLqG_saSs1eX71HgnYiultcnsZDNUJ-3cH-3lqSbMVvxYKPLodQd7Zc0dcu-Xd_fSgA5UVpXRdh572bQTqVXFOlNt9qlylbU79bpEH_5SrtNCF9cr3tScJFvbvPj22FPxs9d5B/s1800/IMG_20210423_122707__01.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1800" data-original-width="1800" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLqG_saSs1eX71HgnYiultcnsZDNUJ-3cH-3lqSbMVvxYKPLodQd7Zc0dcu-Xd_fSgA5UVpXRdh572bQTqVXFOlNt9qlylbU79bpEH_5SrtNCF9cr3tScJFvbvPj22FPxs9d5B/w200-h200/IMG_20210423_122707__01.jpg" width="200" /></a></div> Got me a OnePlus 9 yesterday, which already comes with Android 11 installed. Migration of apps over there was rather smooth, many thanks again for LastPass, taking care of easily getting authenticated in all those newly (re-)installed apps.<p></p><p>Even moving those apps who are supposed to run on one device only, was quite easy this time. I'm speaking of authenticator apps (Microsoft and RSA) and the Banking apps.</p><p>What kept surprising me was that whenever I wanted to delete a photo in Google Photos I had to answer an additional "Allow Google Photos to ...".</p><p>I googled around and found that this was a side-effect of the new Android Scoped Storage that they finally implemented to get some more fine grained control over apps accessing the filesystem.</p><p>There is a nice article over at <a href="https://www.xda-developers.com/android-11-google-photos-trash-fix/" target="_blank">XDA Developers</a> detailing this "issue" and the remedy.</p><p>OnePlus Gallery app is the owner of the photo storage area ("System Gallery") and not Google Photos (except on Pixel phones of course), but you can change that and make Google Photos the owner. </p><p>The TL;DR: go to your pc, connect the phone and get out the <span style="font-family: courier;">adb</span>.</p><pre class="prettyprinted" style="background-color: white; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #666666; font-family: monospace, monospace; font-size: 14px; line-height: 21px; margin-bottom: 10px; margin-top: 0px; overflow-wrap: break-word; overflow: auto; padding: 10px; word-break: break-all;"><code class="prettyprinted" style="box-sizing: border-box; font-family: monospace, monospace;"><span class="pln" style="box-sizing: border-box; color: black;"><span class="pln" style="box-sizing: border-box;">adb shell cmd role </span></span><span class="kwd" style="box-sizing: border-box; color: #000088;"><span class="kwd" style="box-sizing: border-box;">add</span></span><span class="pun" style="box-sizing: border-box; color: #666600;"><span class="pun" style="box-sizing: border-box;">-</span></span><span class="pln" style="box-sizing: border-box; color: black;"><span class="pln" style="box-sizing: border-box;">role</span></span><span class="pun" style="box-sizing: border-box; color: #666600;"><span class="pun" style="box-sizing: border-box;">-</span></span><span class="pln" style="box-sizing: border-box; color: black;"><span class="pln" style="box-sizing: border-box;">holder android</span></span><span class="pun" style="box-sizing: border-box; color: #666600;"><span class="pun" style="box-sizing: border-box;">.</span></span><span class="pln" style="box-sizing: border-box; color: black;"><span class="pln" style="box-sizing: border-box;">app</span></span><span class="pun" style="box-sizing: border-box; color: #666600;"><span class="pun" style="box-sizing: border-box;">.</span></span><span class="pln" style="box-sizing: border-box; color: black;"><span class="pln" style="box-sizing: border-box;">role</span></span><span class="pun" style="box-sizing: border-box; color: #666600;"><span class="pun" style="box-sizing: border-box;">.</span></span><span class="pln" style="box-sizing: border-box; color: black;"><span class="pln" style="box-sizing: border-box;">SYSTEM_GALLERY com</span></span><span class="pun" style="box-sizing: border-box; color: #666600;"><span class="pun" style="box-sizing: border-box;">.</span></span><span class="pln" style="box-sizing: border-box; color: black;"><span class="pln" style="box-sizing: border-box;">google</span></span><span class="pun" style="box-sizing: border-box; color: #666600;"><span class="pun" style="box-sizing: border-box;">.</span></span><span class="pln" style="box-sizing: border-box; color: black;"><span class="pln" style="box-sizing: border-box;">android</span></span><span class="pun" style="box-sizing: border-box; color: #666600;"><span class="pun" style="box-sizing: border-box;">.</span></span><span class="pln" style="box-sizing: border-box; color: black;"><span class="pln" style="box-sizing: border-box;">apps</span></span><span class="pun" style="box-sizing: border-box; color: #666600;"><span class="pun" style="box-sizing: border-box;">.</span></span><span class="pln" style="box-sizing: border-box; color: black;"><span class="pln" style="box-sizing: border-box;">photos</span></span></code></pre><p>Did the trick for me.</p>Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-49215732198676079272021-01-04T10:42:00.003+01:002021-01-04T10:53:51.462+01:00ISO compliant year-week function in DB2<p> I've already shown <a href="http://www.it-conservations.com/2017/09/how-to-get-year-month-value-in-db2.html">how to create a year-month function</a> in DB2, which - when it comes to date arithmatic - is quite straightforward, because very year (in ISO/Gregorian) calendar starts with the first month.</p><p>Some systems argue whether this should have the ordinal 1 or 0, but thats the usual 0/1 issue in programming.</p><p><br />Weeks however, are far more complex, because not every year starts with the begin of a week (whether this is Sunday or Monday in your preference / area).</p><p>It might just start with a Thursday... WOW.</p><p>So for that ths <a href="https://en.wikipedia.org/wiki/ISO_week_date" target="_blank">ISO 8601 standard</a> set a definition on what is to be considered week 1 of a year:</p><p></p><blockquote>The ISO 8601 definition for week 01 is the week with the first Thursday of the Gregorian year (i.e. of January) in it</blockquote> Luckily, DB2 has a function for that - WEEK_ISO.<p></p><p>So let's just try that with a </p><p><span style="font-family: courier;">rtrim(char(year(TS))) || right(digits(week_iso(TS)),2)</span></p><p>Takes the year (need to rtrim it) and adds 2 digits week to it (you might want to insert a "w") between them.<br /></p><p>However, this leeds to e.g. 2021-01-03 being in week 53, because week 1 start on 2021-01-04.</p><p>the yearweek for 2021-01-03 therefore should be 2020-53 not 2021-53 as the above formular would yield.</p><p>Now we need to make sure that if we get a week 53 and its January we return the previous year... Only for January, because some days in December might also be week 53, and we need to keep the year there.</p><p>Voila:</p><p><span style="font-family: courier;">create function yearweek_iso(TS timestamp) <br />returns varchar(6) no external action deterministic <br />return <br />CASE</span></p><p><span style="font-family: courier;"> WHEN (week_iso(TS)=53 AND month(TS)=1) Then <span><br /> </span>rtrim(char(year (TS)-1)) || right(digits(week_iso(TS)),2) <br /> ELSE <br /> rtrim(char(year(TS))) || right(digits(week_iso(TS)),2)<br />END</span></p><p><br />The results now match whatever java.time package might do with week parsing. In order to get the first day of this week back (in Java, where I needed it), you parse as follow:</p><p><span style="font-family: courier;">new DateTimeFormatterBuilder()<br /> .appendValue(IsoFields.WEEK_BASED_YEAR, 4)<br /> .appendValue(IsoFields.WEEK_OF_WEEK_BASED_YEAR,2)<br /> .parseDefaulting(WeekFields.ISO.dayOfWeek(), 1)<br /> .toFormatter();</span> <br /></p>Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-4080085401496436882020-05-09T07:37:00.001+02:002020-05-09T07:37:21.778+02:00Windows 10 Folder Shortcuts<div dir="ltr" style="text-align: left;" trbidi="on">
I have to admit, I did not know about that:<br />
<br />
<blockquote class="tr_bq" style="border: 0px; margin-bottom: 1.5em; padding: 0px;">
The <span style="font-family: Courier New, Courier, monospace;">shell:</span> command can be used to open a special folder directly from the Start, Search menu or from the Run dialog. For example, the command <span style="font-family: Courier New, Courier, monospace;">shell:sendto</span> opens the SendTo folder (<span style="font-family: Courier New, Courier, monospace;">%userprofile%\sendto</span>) of your user profile. To launch the Documents folder of your user profile, you’d type <span style="border: 0px; margin: 0px; padding: 0px;"><span style="font-family: Courier New, Courier, monospace;">shell:Personal</span></span>. Below is a complete <span style="font-family: Courier New, Courier, monospace;">shell:</span> commands listing for Windows 10/8/7/XP/Vista. The entire listing is stored in the following registry key in Windows Vista and higher:</blockquote>
<pre style="background: rgb(246, 246, 247); border: 1px solid rgb(237, 237, 237); color: #3a3a3a; font-family: Consolas, Monaco, "Lucida Console", monospace; font-size: 0.95rem; line-height: normal; margin-bottom: 1.5em; max-width: 100%; overflow: auto; padding: 20px;">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\FolderDescriptions</pre>
<div>
So e.g. Windows-R and "<span style="font-family: Courier New, Courier, monospace;">shell:startup</span>" opens the startup folder.</div>
<div>
I used to play around with "%appdata%" etc etc where I knew there was an environment variable for it, but the <span style="font-family: Courier New, Courier, monospace;">shell:</span> shortcut enables a lot more.</div>
<div>
<br /></div>
<div>
Found - amongst others - here </div>
<div style="border: 0px; margin-bottom: 1.5em; padding: 0px;">
<a href="https://www.winhelponline.com/blog/shell-commands-to-access-the-special-folders/">https://www.winhelponline.com/blog/shell-commands-to-access-the-special-folders/</a></div>
<div style="border: 0px; margin-bottom: 1.5em; padding: 0px;">
and of course on superuser.com</div>
<div style="border: 0px; margin-bottom: 1.5em; padding: 0px;">
<a href="https://superuser.com/questions/673960/shell-shortcuts-in-windows-os">https://superuser.com/questions/673960/shell-shortcuts-in-windows-os</a></div>
</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-32737339945950994882020-01-08T08:49:00.003+01:002021-04-05T09:21:24.657+02:00How do I stop my Firestick from optimizing?<div dir="ltr" style="text-align: left;" trbidi="on">
Well, the other day I noticed that my USB charging cable for my Amazon Fire Stick was broken. So I just dug into my USB cable carton and get the next best USB micro charger and replaced the broken one.<br />
Done.<br />
<br />
I thought.</div><div dir="ltr" style="text-align: left;" trbidi="on"><br />
A couple of days later I found the stick busy "<b><i>Optimizing systems storage and applications...</i></b>", letting me know "<b><i>This will take approximately 10 minutes to complete.</i></b>".<br />
Fair enough... You do your thing then...<br />
<br />
Well, it never completed, Even rebooting did not help.<br />
<br />
<img alt="Image result for have you tried turning it off and on again" height="177" src="https://img.picturequotes.com/2/84/83810/have-you-tried-turning-it-off-and-on-again-quote-1.jpg" width="320" /><br />
<br />
So I googled, and found a bunch of useless videos, that show you the stuck message for minutes and complain about the stick being stuck... and that not even Alexa would work. No sh$t, Sherlock.<br />
<br />
<br />
Oddly enough, the cause (as those google searches revealed) was related to me changing the power supply/cable. Shouldn't have picked the cheapest one.<br />
Went back to the USB cable box, took a more expensive looking cable, and - voila - after completing the optimization the stick is now back running as it should.<br />
<br />
And I just saved you half an hour of your life watching those not-really-helping videos.<br />
You're welcome.<br />
<br /></div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-63240028812090788482019-10-29T20:42:00.002+01:002019-10-29T20:42:40.594+01:00Google .new shortcut for Calendar<div dir="ltr" style="text-align: left;" trbidi="on">
Just found <a href="https://www.engadget.com/2019/10/25/google-calendar-events-shortcut/" target="_blank">this </a>on engadget.<br />
<br />
<a href="https://www.gstatic.com/images/branding/product/1x/calendar_48dp.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://www.gstatic.com/images/branding/product/1x/calendar_48dp.png" width="200" /></a>If you type in <span style="font-family: Courier New, Courier, monospace;">cal.new</span> or <span style="font-family: Courier New, Courier, monospace;">meeting.new</span> in the address bar (sorry, awesomebar, or whatever it is called these days), it will directly re-direct you to the page/dialog to create a new calendar entry for your google calendar.<br />
<br />
Seems to have been around for google docs for a while now, but I don't really create a lot of them, compared to calendar entries.<br />
<br />
Nice use of TLDs ;)<br />
<br />
<br /></div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-70982832710409371642019-02-02T18:02:00.000+01:002019-02-02T18:02:30.346+01:00Google Photos from OnePlus Camera<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4lkSbVy7MpwsjFUMNhQ0tj_rzO2kOpn3PU09iygcURa2Syt-B70ugsOS721kCtaLc2oO-xU-4JW0HjsWrHevkPA5n_dINmNCI-oXhLpdfYGuSxX6gENRSNlaSqwrEckthsYLa/s1600/Screenshot_20190202-174812.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="707" data-original-width="1072" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4lkSbVy7MpwsjFUMNhQ0tj_rzO2kOpn3PU09iygcURa2Syt-B70ugsOS721kCtaLc2oO-xU-4JW0HjsWrHevkPA5n_dINmNCI-oXhLpdfYGuSxX6gENRSNlaSqwrEckthsYLa/s320/Screenshot_20190202-174812.jpg" width="320" /></a>The latest update on my OnePlus 5T (to Android P) make OnePlus Gallery the app that opens when you click on the gallery/image icon at the lower right corner.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtahNoezhuNBxOwR_e-dYYiixwY88AtDoLegjYAIPI6shOc_BWcEJD-5jpHexi2WbbfF0EWx51JGiarbIRpMYvl9_Kcw7-BEsYyh-g8O10vN3nNPR3DLkGpuECx8jTjw8w7n-4/s1600/Screenshot_20190202-175815.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="767" data-original-width="1069" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtahNoezhuNBxOwR_e-dYYiixwY88AtDoLegjYAIPI6shOc_BWcEJD-5jpHexi2WbbfF0EWx51JGiarbIRpMYvl9_Kcw7-BEsYyh-g8O10vN3nNPR3DLkGpuECx8jTjw8w7n-4/s320/Screenshot_20190202-175815.jpg" width="320" /></a></div>
Just setting Google Photos as the default app does not change that...<br />
You have actually disable the Gallery app.<br />
<br />
To do this, go to the phone's settings, and the applications menu there.<br />
Find the Gallery app, and click on the Disable button.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
From then on, the camera will open the default app for photos, which you should make sure to set to Google Photos.</div>
</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-22140635109744678732018-12-15T09:45:00.000+01:002018-12-15T16:52:06.200+01:00Finally LastPass Autofill on iOS<div dir="ltr" style="text-align: left;" trbidi="on">
I have to admit that I don't know how long this has been there, I just noticed it last week.<br />
iOS (on my iPad) can finally use <i><a href="https://lastpass.com/">LastPass </a></i><br />
<div class="separator" style="clear: both; text-align: center;">
<i><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9vVnFtiqRk81zBuNS7zHTrye8ZqaZobPmHkoIEW84xCPMgXAkHwIfczmc7SkEKdPB5njigfMiYNjRTJQniheCfEPx1r-ev7HAQlamgiH63pNmR3B0SNce87JIbzSCSB8gVgX/s1600/lastpasslogo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="50" data-original-width="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9vVnFtiqRk81zBuNS7zHTrye8ZqaZobPmHkoIEW84xCPMgXAkHwIfczmc7SkEKdPB5njigfMiYNjRTJQniheCfEPx1r-ev7HAQlamgiH63pNmR3B0SNce87JIbzSCSB8gVgX/s1600/lastpasslogo.png" /></a></i></div>
(my favorite password manager) in addition to it's own <i>keychain</i>.<br />
<br />
All you have to do (besides of course having a LastPass account and having the <a href="https://itunes.apple.com/il/app/lastpass-password-manager/id324613447?mt=8">LastPass app</a> installed on your device) is the following.<br />
<br />
Go to the Settings menu, and find the section "<i>Passwords & Accounts</i>".<br />
There you will see the item "AutoFill Passwords". Touch on the arrow to the right to get to the next step.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5xJ1b4lPP1rArhi5OevDr4QDbgxFLzgJnwDGvSBMbkoqpcwOIaNgzfxpDam6SxgQw0v2ELpwxNJPVkoNhcCRIA_vfbzWVhz677_EBl-cFRiuZsAG5HVadN1JtzwFDgaTXOzxO/s1600/IMG_0752.PNG" imageanchor="1"><img border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5xJ1b4lPP1rArhi5OevDr4QDbgxFLzgJnwDGvSBMbkoqpcwOIaNgzfxpDam6SxgQw0v2ELpwxNJPVkoNhcCRIA_vfbzWVhz677_EBl-cFRiuZsAG5HVadN1JtzwFDgaTXOzxO/s400/IMG_0752.PNG" width="400" /></a>.<br />
<br />
You should see all installed <i>AutoFill </i>applications there, in my case <i>Keychain </i>and <i>LastPass</i>.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLTV7c-YwuJxy1G7ilt4xgT_g9SHGDimfbnAsTCekB2MJ_zZSVxf3U0kvLJHLIv8xwDxZ-5ZJZVWSF-9g-MecZGai_K2zMylHwlT4I-884aB4ICjUJjJVhJDRslmfOL2zKJZgW/s1600/IMG_0753.PNG" imageanchor="1"><img border="0" height="146" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLTV7c-YwuJxy1G7ilt4xgT_g9SHGDimfbnAsTCekB2MJ_zZSVxf3U0kvLJHLIv8xwDxZ-5ZJZVWSF-9g-MecZGai_K2zMylHwlT4I-884aB4ICjUJjJVhJDRslmfOL2zKJZgW/s320/IMG_0753.PNG" width="320" /></a><br />
<br />
All you need to do here, is select the check mark to the right to enable it.<br />
<br />
Depending on your LassPass vault and settings, on the next Login (app or web-page), you will be given a choice to select the credentials from your LastPass account. In my case I have to provide a fingerprint first... but that's it.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPZo4tg-LVaDaypjGQBDXda-GLOZLMX0InQux9oEes9o45eGGpPoPM1P8-TUtBNbzpnyd7_oNTnDmZJcU3wo6mcVmyec9I-nd-iIXAVgzSFNTL5FZN_9yOrDjdGKnc7xIzayXZ/s1600/IMG_0754.PNG" imageanchor="1"><img border="0" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPZo4tg-LVaDaypjGQBDXda-GLOZLMX0InQux9oEes9o45eGGpPoPM1P8-TUtBNbzpnyd7_oNTnDmZJcU3wo6mcVmyec9I-nd-iIXAVgzSFNTL5FZN_9yOrDjdGKnc7xIzayXZ/s320/IMG_0754.PNG" width="320" /></a><br />
<br />
Pretty cool. Essentially the same as with Keychain, just accross platforms. That's why I use LastPass.<br />
<br /></div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-88959360672604672122017-09-23T10:53:00.001+02:002017-09-23T10:57:08.779+02:00How to get a year-month value in DB2<div dir="ltr" style="text-align: left;" trbidi="on">
I quickly needed to check the monthly progress of a certain variable over time. Problem was that those bookings/incomes are spread over the month, sometimes only one booking line, sometimes two... So I needed a grouping variable, that the "absolute month", i.e. the usual year-month value,that you know from financial system, e.g. 201709 for this current month.<br />
<br />
Here's the easy way to put that into a function on DB2:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">create function yearmonth(TS date) returns varchar(6) no external action deterministic return rtrim(char(year(TS))) || right(digits(month(TS)),2)</span><br />
<br />
Then you can easily do a group by <span style="font-family: "courier new" , "courier" , monospace;">yearmonth(date)</span>.<br />
(Don't omit the "not external action" and "deterministic" parts, because a) they are true and b) they are needed for grouping)<br />
<br />
Of course you don't have to create a function for this, but easier then re-typing it, or creating a view.<br />
<br />
(You might want to create the same function for <span style="font-family: "courier new" , "courier" , monospace;">timestamp</span> as well... just so happened that I now only needed it with the <span style="font-family: "courier new" , "courier" , monospace;">date </span>signature).<br />
<br />
You're welcome :)</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-84648852308385569062017-07-02T16:06:00.000+02:002017-07-02T21:29:44.017+02:00Instagram is weird...<div dir="ltr" style="text-align: left;" trbidi="on">
So I posted two (only 2 !!) pictures of a garden on instagram, and all of a sudden I get dozens of followers with garden-related accounts/names. I did not even tag those images as garden-something....<br />
<br />
<br />
Weird
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2HrVPx3ie_S1D0K38K-ovgq7WIM0hxLPMdwhOT-hz4EH9P4zY92-x3ATqtMFZZc5cnxWiFRfX_H3u_RL9ZdVVUaLHxUxbMbU8_-PPuX2Tcoe8SFA8Wfp6Pa0HY-1rPO7nApob/s1600/IMG_0692.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1600" data-original-width="1259" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2HrVPx3ie_S1D0K38K-ovgq7WIM0hxLPMdwhOT-hz4EH9P4zY92-x3ATqtMFZZc5cnxWiFRfX_H3u_RL9ZdVVUaLHxUxbMbU8_-PPuX2Tcoe8SFA8Wfp6Pa0HY-1rPO7nApob/s320/IMG_0692.jpg" width="251" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBp6rYEWZNK4Cs_7B8wHO4PUd1p3KUcD_dZETFCbtUUwU7WNqD_bwSan4ny7fLID7qIZele9KRz6i5JNb9dGAB9FPq2vnmv3is910erP3xT0yLjjblDsEAQrDWXL46DHF33g7N/s1600/garten1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="306" data-original-width="305" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBp6rYEWZNK4Cs_7B8wHO4PUd1p3KUcD_dZETFCbtUUwU7WNqD_bwSan4ny7fLID7qIZele9KRz6i5JNb9dGAB9FPq2vnmv3is910erP3xT0yLjjblDsEAQrDWXL46DHF33g7N/s200/garten1.png" width="198" /></a></div>
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBedANqFsI_bBRuiNOMXWUYvPfNQAhpz7L-gn_NhwJZFbZ6moPfwlsDQ9WD5T0UQnU1NAiL2xE957xMNLf2pZpYmDr0BJfUEp8b6WJ40z0s7NDVhgZCLRZ5pny6S0-UCJFEu7m/s1600/garten2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="312" data-original-width="310" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBedANqFsI_bBRuiNOMXWUYvPfNQAhpz7L-gn_NhwJZFbZ6moPfwlsDQ9WD5T0UQnU1NAiL2xE957xMNLf2pZpYmDr0BJfUEp8b6WJ40z0s7NDVhgZCLRZ5pny6S0-UCJFEu7m/s200/garten2.png" width="198" /></a><br />
.</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-6002879536794746052017-04-23T16:54:00.001+02:002017-04-23T16:54:10.284+02:00OnePlus One with Lineage OS<div dir="ltr" style="text-align: left;" trbidi="on">
So, haven't posted here in a while... sorry 'bout that... Here's what happened most recently:<br />
<br />
My Nexus 5X decided to get stuck in a bootloop (like <a href="https://www.google.at/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=nexus+5x+bootloop">most others in the world</a>). Started with random reboots a couple of weeks ago, and then, one day after I upgraded to Android 7.1.2, on the way to a friend, it decided to no longer even go into the recovery mode. Totally offline.<br />
<br />
Luckily, this very friend of mine, had a spare OnePlus One with CM on it, which I'm now the proud owner of. Since we went for a quick vacation in Lisbon just days after the bootloop incident, I decided just to move the most important data and apps on the OnePlus One (OPO from here-on) and properly set it up after the vacation.<br />
<br />
That's what I did yesterday. Flash it with <a href="https://download.lineageos.org/bacon">Lineage OS</a> 14.1 and <a href="https://wiki.lineageos.org/gapps.html">gApps</a>. Right after the reboot it offered to re-installed apps (and quite a lot of settings) from the last backup of the Nexus 5X.<br />
Since I had no recent backup (adb backup) of my Nexus 5X (I should have seen the crash coming, shouldn't I...) and I could not even get into recovery mode (to pull a new adb backup) that was the only thing I could rely on. LastPass again helped me to sign into those apps really fast, and a couple of hours later I was up and running with OPO+LIN14.1<br />
<br />
The two most cumbersome steps on the 2 hop migration (there was the minimum install on CM two weeks ago) was my <i>Banking</i> app, since both times I had to call my bank to reset the default device for the mobile TAN security feature (should have known this yesterday, but then again, just a 2min call to the bank, even off-hours... real good customer service, I have to admit), and the <u>RSA token</u> app I have to use for authentication for my company (vmware); that needed re-initialisation with the help from the help desk as well.<br />
<br />
So frist thing: have a backup of the new device ... CHECK.<br />
<br />
And again: Thanks, Max, for the fast help with the OPO...<br />
<br /></div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-1224960573449471532016-04-15T19:02:00.001+02:002016-04-15T19:17:48.794+02:00Even more speed, speed, speed<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg52IhX3iPj8MmpH6C4cShAE7ITzM4NojVpy5iFGuavTEo_-c2fZt-VjXuEFNSdkRcoF-QEaUrmeOGx-pDsSVlMECke0y7P8jchYaLtpf_TjDszE76XNR_lQ5AlNFrka0qxSFY6/s1600/speedtest+a1lte+20160415.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg52IhX3iPj8MmpH6C4cShAE7ITzM4NojVpy5iFGuavTEo_-c2fZt-VjXuEFNSdkRcoF-QEaUrmeOGx-pDsSVlMECke0y7P8jchYaLtpf_TjDszE76XNR_lQ5AlNFrka0qxSFY6/s320/speedtest+a1lte+20160415.png" width="320" /></a>Just <a href="http://www.it-conservations.com/2016/04/speed-speed-speed.html">two weeks after I upgraded my DSL</a> line to 100/20 Mbps, my employer was nice enough to move our mobiles to a new contract where we finally have LTE/4G included.<br />
<br />
116 M down/ 41 M up<br />
<br />
Wow... that was from my Nexus 5 this afternoon in Vienna, i.e. I was not looking for an "empty" cell during off-peak hours... pretty good.</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com1tag:blogger.com,1999:blog-20631714.post-91081994095044172422016-04-10T11:17:00.002+02:002016-04-10T11:17:42.767+02:00Speed, speed, speed<div dir="ltr" style="text-align: left;" trbidi="on">
After a chat with a friend (and former colleague of mine) I decided to trust my telco (A1 Telekom) to upgrade to a higher speed, though I only got 12 Mpbs down on my 16Mbps ADSL line because of the age-old copper lines.<br />
<br />
I called them, they checked the line and told me that they could guarantee 92Mbps if I go for the 100Mbps option (VDSL).<br />
<br />
So I did. Got a new modem (TG 588v), plugged it in and interestingly already for 14Mbps though I only had 12 with the old modem (same line, still ADSL). Then a couple of days later (as announced) they changed my line on the switch/exchange and now I'm running almost 100 down (and 20 up).<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAukZwAsy0EoS6jdAvaLiwZHycDCXT78oz0MlkGGHiXhyphenhyphenPRNZl5d4DJu1BBD1JXQsQS_rvWKFkQPMVniOf_eqxIvXI9de2qJVJv-HcovCZi_ZLvnaYQ_eBvH6Ip_1CA6H4uZoZ/s1600/speedtest.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAukZwAsy0EoS6jdAvaLiwZHycDCXT78oz0MlkGGHiXhyphenhyphenPRNZl5d4DJu1BBD1JXQsQS_rvWKFkQPMVniOf_eqxIvXI9de2qJVJv-HcovCZi_ZLvnaYQ_eBvH6Ip_1CA6H4uZoZ/s400/speedtest.png" /></a><br />
With two kids in the house, netflix, two tablets and four smart phones... it was overdue to say the least.<br />
<br />
So finally I can work while everyone else is watching Netflix (or the other way round).</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-28637040046722494642016-02-21T16:49:00.002+01:002016-02-21T16:49:17.835+01:00MWC 2016 - need to go offline<div dir="ltr" style="text-align: left;" trbidi="on">
So, as every year, just after CES the Mobile World Congress in Barcelona is starting right now. Time to go offline for a week... or be bored to death with all the new phone, screen, GHz, multicore and VR announcements.</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-34042142865468728982016-01-30T15:54:00.002+01:002016-01-30T15:54:46.893+01:00Google Play Services networking error > Phishing?<div dir="ltr" style="text-align: left;" trbidi="on">
Last week my son approached me, because his Samsung all of a sudden started to show networking errors for YouTube, the PlayStore and G+ app. Connectivity was fine, we switched from 4G to Wifi and back, with no change (he would not have asked me for a pure/true connectivity issue). The Youtube app itself worked fine and played videos, he just could not log in with his Google account.<br />
So no wonder this problem exists across several google services/apps, but nothing else.<br />
<br />
Opening google.com/youtube.com in the browser also showed no problem, so definitely not a networking, dns, routing... problem.<br />
<br />
I did some googling and found (apart from nonsense like "turn on wifi"...) some <a href="http://forum.xda-developers.com/showthread.php?t=2273994">hints about a broken hosts file</a>. So I adb'd into the device from my computer, pulled the /system/etc/hosts file:<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">127.0.0.1<span class="Apple-tab-span" style="white-space: pre;"> </span> localhost<br />127.127.120.139<span class="Apple-tab-span" style="white-space: pre;"> </span>android.clients.google.com</span></blockquote>
<div>
With a <a href="http://android.stackexchange.com/questions/60150/how-to-edit-etc-hosts-file">hint from the ever-helpful stackexchange</a> and the fine coincidence that he (or was it me?) rooted his phone sometime in the past, I was able to shell in, su to root, mount the file system as read-write, comment out that last weird line (for android.clients.google.com) and change the file system back to read only. Check the details on <a href="http://android.stackexchange.com/questions/60150/how-to-edit-etc-hosts-file">this post on stackexchange</a>.</div>
<div>
<br /></div>
<div>
And then it worked.</div>
<div>
<br /></div>
<div>
This looks suspiciously like a phishing attempt by some malware, that managed to manipulate the hosts file to get the google password. So thirst thing after fixing this, chance the password.</div>
<div>
Next thing, find that f*ing app that did this.</div>
<div>
<br /></div>
<div>
That's the downside of having rooted your phone. So finding the phone rooted was not such a coincidence after all. </div>
</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-30678620241173888952015-12-31T12:39:00.000+01:002015-12-31T12:39:07.591+01:00What happened 2015?<div dir="ltr" style="text-align: left;" trbidi="on">
So, as you noticed, I did not really blog a lot this year, i.e. 2015.<br />
Let me quickly recap what I was busy with in the last couple of month (lame excuse, I know).<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkts6rqqyai2kwlxWIte-grVUVZY4wZwltB5dYXk_a3Jhhqv9_QU35hqJPOM0taAjcNYgDKs3ZsZ0WqSorsMPVvR-GhYSMOIfBs5D_LIZUW1pFkc1p3j1vAG9DWMxMR-8Gi-1Q/s1600/vmware-logo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img alt="" border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkts6rqqyai2kwlxWIte-grVUVZY4wZwltB5dYXk_a3Jhhqv9_QU35hqJPOM0taAjcNYgDKs3ZsZ0WqSorsMPVvR-GhYSMOIfBs5D_LIZUW1pFkc1p3j1vAG9DWMxMR-8Gi-1Q/s200/vmware-logo.png" title="vmware" width="200" /></a>In summer I changed job from Oracle to <a href="http://www.vmware.com/">vmware</a>. Still handling the channel/partner business, but now no longer for (boring) hardware, but for - to me - exiting software. The concept of the <a href="https://en.wikipedia.org/wiki/Software-defined_data_center">software defined datacenter</a> - or SDDC for short - is something I really like. Virtualize everything. Move from on-premise to cloud(s) seamlessly... pretty cool I think.<br />
<br />
Enough of the professional plug.<br />
I still found time for some nice hacks at home.<br />
<br />
I've been recording my electricity and gas consumption at home for years, nay, decades now. What started with a plain ascii file in the early 90s, turned in to a DB2 application on OS/2 (with visual REXX) , and then to a very rudimentary web application (against the same DB2 database) under Windows XP and 7. Over the years I slightly modified the web application to also be mobile friendly, so I could take my phone (Nexus 5 right now) or iPad and enter the data while I was reading the meter.<br />
Did I mention that I'm a nerd and do this weekly? No?<br />
Well perhaps I should.<br />
Not very interesting from a hack perspective, is it?<br />
<br />
So this year I decided to change this, and I<br />
<br />
<ol style="text-align: left;">
<li>created an <b>Android app</b> for it</li>
<li>added the <a href="https://www.anyline.io/"><b>anyline</b></a> meter reading to it (because I did not want to get into the <b>OCR </b>stuff myself)</li>
<li>created a <b>REST interface</b> to my database (building upon the old web application I had), using <a href="https://jersey.java.net/"><b>Jersey</b></a>.</li>
</ol>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRGhJSetzkAde0Y8in51IORgESqCyErJbU3WOuT3_mOd0bQWj6BxHRwWmtxQTXrkwEivbEX5_620FU-HEoVgNrul65RAAcglZy7BEBsuiuYc3SuELaxMdvVZWb9lp2fEQG6nan/s1600/anylinelogo-300x138.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img alt="" border="0" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRGhJSetzkAde0Y8in51IORgESqCyErJbU3WOuT3_mOd0bQWj6BxHRwWmtxQTXrkwEivbEX5_620FU-HEoVgNrul65RAAcglZy7BEBsuiuYc3SuELaxMdvVZWb9lp2fEQG6nan/s200/anylinelogo-300x138.png" title="anyline" width="200" /></a>Two really impressive things here. Anyline... check it out. Excellent meter reading SDK (and other OCR stuff) on iOS and Android. </div>
<div>
And Jersey, wow!! REST with the click of a button, yet you are still in full control. And also getting JSON and XML with the same code. Nice.</div>
<div>
<br /></div>
<div>
Now for step 4 I'll re-write the old web-app to a pure <b>Ajax/jQuery/JSON</b> thing, and will only keep the REST interface to the database.</div>
<div>
<br /></div>
<div>
<a href="https://upload.wikimedia.org/wikipedia/en/c/c3/NFC-N-Mark-Logo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img alt="" border="0" height="167" src="https://upload.wikimedia.org/wikipedia/en/c/c3/NFC-N-Mark-Logo.png" title="nfc" width="200" /></a>And step 5, already started: I bought some <b>NFC </b>tags (from <a href="http://www.whiztags.com/">whiztags</a>, thanks for the hint, Max). One will go to the gas meter, the other one to the electricity meter, and both are registered to my app on Android. So when I go near the meter, it will automatically open the app with the OCR scanner for the respective meter. Click, and done.</div>
<div>
<br /></div>
<div>
So that's the last half year - or so - in a nutshell.</div>
<div>
<br /></div>
</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-75137105566221281002015-11-22T15:46:00.004+01:002017-05-07T14:00:44.848+02:00NetBeans and DB2 again<div dir="ltr" style="text-align: left;" trbidi="on">
So for various reasons (mainly the 64bit v 32bit problem with the native driver) I changed my DB2 JDBC driver to type 4, i.e. the Universal driver.<br />
However, when I connect from NetBeans with an URL like jdbc:db2://localhost:50000/sample the schema would stay empty.<br />
Nothing. Zip. Zilch. Zero.<br />
Nada.<br />
Quite some googling and debugging - mainly with a little java program like this:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">import java.sql.Connection;</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">import java.sql.DatabaseMetaData;</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">import java.sql.DriverManager;</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">import java.sql.ResultSet;</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">import java.sql.SQLException;</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">public class MainDB2 {</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> </span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> private static final String URL = "jdbc:db2://localhost:50000/SAMPLE";</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> private static final String USER = "roman";</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> private static final String PASSWORD = "pwd";</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> private static final String SCHEMA = "roman";</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> </span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> public static void main(String[] args) throws Exception {</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> Class.forName("com.ibm.db2.jcc.DB2Driver");</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> try {</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> DatabaseMetaData dmd = conn.getMetaData();</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> ResultSet rs = dmd.getTables(null, SCHEMA, "%", new String[] { "TABLE" });</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> try {</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> while (rs.next()) {</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> int count = rs.getMetaData().getColumnCount();</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> System.out.println("Column count: " + count);</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> int i;</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> for (i = 1; i <= count; i++) {</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> try {</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> System.out.println(rs.getString(i));</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> } catch (SQLException e) {</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> System.err.println("Exception reading column " + i);</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> e.printStackTrace();</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> }</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> }</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> System.out.println();</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> }</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> } finally {</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> rs.close();</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> }</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> } finally {</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> conn.close();</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> }</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"> }</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">}</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><br /></span>
<br />
<br />
I was able to trace it back to an <i>SQLCODE -443SQL0443N with diagnostic text "SYSIBM:CLI:-805". SQLSTATE=38553</i>. Google this and you will get to <a href="http://www-01.ibm.com/support/docview.wss?uid=swg21449630">here</a> and learn that - again - a package was not bound, this time the <span style="font-family: "courier new" , "courier" , monospace;">db2schema.bnd</span> file. Bind it as suggested in the article with the usual <span style="font-family: "courier new" , "courier" , monospace;">db2 bind db2schema.bnd blocking all grant public</span><br />
<br />
and voila, NetBeans will find the schema.<br />
<div>
<br /></div>
<div>
Gets me every second year, it seams.</div>
</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-55353308371982518322015-09-25T08:09:00.001+02:002015-09-25T08:10:42.567+02:00The iOS9 Podcast app is totally brokenUsually I hate and hence avoid to slam an app or service like this, but the podcast player in iOS9 really sucks. At least for video on an iPad.<div><br></div><div>No full screen video anymore, too much white space, and even with all that unused space, the controls are too small</div><div><br></div><div>Exhibit A:</div><div><div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSbSIyhnuw1bzzusi7dg_MXsmnQTT7InBPDWlX0p7HwPfG_DIPU3iUNwJwLtinnnIA48CLFC0iqCfeI0FpiFH2THVnaedt8HNLuf7xw35pvvNiykxvg6h0v539qpNUP0TAT_g1/s640/blogger-image-1392120618.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSbSIyhnuw1bzzusi7dg_MXsmnQTT7InBPDWlX0p7HwPfG_DIPU3iUNwJwLtinnnIA48CLFC0iqCfeI0FpiFH2THVnaedt8HNLuf7xw35pvvNiykxvg6h0v539qpNUP0TAT_g1/s640/blogger-image-1392120618.jpg"></a></div><div class="separator" style="clear: both;"><br></div><div class="separator" style="clear: both;">Please Apple, we need an urgent update to fix/revert this.</div><br></div>Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0tag:blogger.com,1999:blog-20631714.post-41824537770937337792015-09-13T10:48:00.000+02:002015-09-13T10:48:18.175+02:00How to hide a userid from Windows login screen<div dir="ltr" style="text-align: left;" trbidi="on">
With DB2 on my home PC[1] I have a service account for the DB2 instance, makes life a lot easier than trying to map it to you actual user(s). <br />
<br />
However, regular Windows (Home) setup has 2 defaults that are annoying:<br />
a. password and account expiry for this user.<br />
b. the userid appears on the Windows login/lock screen, although nobody is supposed to sign in with it.<br />
<br />
<b>Create a maintenance free user</b><br />
The first issue I fixed a couple of month ago, because that was really annoying. Because DB2 just would not start. And the first two times this happened I had to work through db2diag.log to find out what happened.<br />
So, make sure the account actually never expires (that's separate from the password). With admin privileges run<br />
<span style="background-color: #eeeeee; color: #222222; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; white-space: inherit;">net user db2admin</span> [2]<br />
to check if the user account expires.<br />
If it does, then run a<br />
<span style="background-color: #eeeeee; color: #222222; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; white-space: inherit;">net user db2admin /expires:never</span><br />
to fix this.<br />
<br />
The password expiration is trickier, since it cannot be done with the net user command.<br />
To make the password everlasting, run<br />
<span style="background-color: #eeeeee; color: #222222; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; white-space: inherit;">WMIC USERACCOUNT WHERE "Name='db2admin'" SET PasswordExpires=FALSE</span><br />
<br />
I found this thanks to the folks at <a href="http://serverfault.com/questions/434717/how-to-create-a-never-expiring-password-user-via-net-user-through-bat-file?newreg=4a235c3d75ad4f85ae4b7a69bf7bcafa">StackExchange</a>.<br />
<br />
<b>Hide the service account from the login screen</b><br />
I wanted to do this on Windows 7 already, but never found the time or cared enough. Now with the <a href="http://www.it-conservations.com/2015/09/windows-10-installed.html">move to Window 10</a> I thought of it again and fixed it.<br />
So this can be done with group policies and stuff, but not on a standalone Windows Home edition.<br />
<br />
Registry and <a href="https://social.technet.microsoft.com/Forums/windows/en-US/16378967-8a39-4aef-85e4-d859a71648d3/hide-user-accounts-on-windows-7-logon">Microsoft Technet</a> to the rescue:<br />
<br />
Create an entry under
<br />
<span style="background-color: #eeeeee; color: #222222; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; white-space: inherit;">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList</span> and list the <span style="background-color: #eeeeee; color: #222222; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; white-space: inherit;">db2admin</span> user with a dword (32) of 0 to hide it. Remove the entry or set it to 1 to show the user again.<br />
<br />
VoilĂ .<br />
<br />
--<br />
[1] Ha, now that I no longer work for Oracle, I can again freely admit it... Not that I really held back on this in the past 5 years.<br />
[2] replace <span style="font-family: Courier New, Courier, monospace;">db2admin </span>with the userid you need this for</div>
Romanhttp://www.blogger.com/profile/08175981164786441497noreply@blogger.com0