| tw gh r: li so fb g+ tx
SQLite: "collate nocase"
2016-03-11 20:35 sqlitenocase [permalink]
Learn something new each day! (Or also: I should have known about this!) SQLite is so strict! But in a good way. It's in the little things that come up now and then that you notice how delightfully strict it is designed, with reliability and safety up front. And no extra's. So it's quite logic that sorting a column with string values* is sorted case-sensitive, with al upper-case letters before the lower-case letters. To change this, add
collate nocase either to the
create table statement or the
order by clause of queries. I've picked up somewhere that it's better for performance to have it in the
create table statement, but I haven't checked this with the documentation or by testing in a test setup (yet), but for now I just went for updating the tables since changing all the queries would take much more work. That said, updating: not quite.
Alter table doesn't have
alter column apparently, but it does have a
rename to, and
insert into TblUpdate select * from Tbl works great, even with an autoincrement primary key, so it's a relatively painless transition.
And this barely a week after I find out about the busy timeout!
(*: due to manifest typing different records may hold values of different type in the same field, but in practice you'll usually follow the type as determined by the schema.)
"What will you do?"
2016-03-11 11:50 whattodo [permalink]
"I'm trying to decide between making a big change for a small number of people, or making a small change for a big number of people.
What I dream of is making a big change for a big number of people, but that's everybody's childhood dream, isn't it?
Then again, most people that did make a big change for a big number of people, were only trying to make a small change for themselves."
2016-03-08 10:27 20160308i [permalink]
Nu moest ik toch even lachen met deze: N-VA: "Turkije hoort niet thuis in EU. Nooit" Zou mijn voorspelling van vijf jaar terug dan alsnog uitkomen? Dat ze Europees gezien het zichzelf onmogelijk gaan maken?
De laatste dagen vroeg ik me al af wat er gebeurd was dat ze in Brussel plots dikke vriendjes spelen, en zelfs niet-Erdohan laten zeggen dat ze er echt wel bij willen. Ah, een gigantische stroom oorlogsvluchtelingen natuurlijk.
Even terzijde, jammer dat ze in het nieuws er niet in slagen een juist beeld te geven van de juiste mix Syriërs-Irakezen-Afganen-Afrikanen-etc, maar dat is dan ook een moeilijk geval, zelfs voor de betrokken diensten ter plaatse.
Maar Turkije dus, en de EU, ik ben aan het aftellen tot wanneer het woord Cyprus eindelijk valt. Waarschijnlijk na ze iets in de vorm van een akkoord hebben over wat ze voor (niet met!) de vluchtelingen gaan doen. En heel misschien valt zelfs eerst nog het woord Koerdistan. Soit, ik hou nog even deze goed in de gaten...
jsonV: plain and simple JSON viewer based on jsonDoc
2016-02-19 21:39 jsonV [permalink]
I decided to create a really simple JSON viewer based on a TTreeView instance and jsonDoc, which itself is heavily based on OleVariants (I really hate long lists of overloads!) so I have some VarType values handled, but show the rest
'('+IntToHex(VarType(v),4)+')'. It could do so much more, but it then would be no longer a really simple JSON viewer. (I currently use Atom with beautify for JSON editing.) I've commited the source in the jsonDoc repository, see here for a ready-to-run executable (It's an exe in a zip, so some browsers and virus-scanners may cry havok about the security risk):
just an idea: var in code for variables of limited scope
2016-02-03 16:18 var-limited-scope [permalink]
I've been reading around a lot about the new programming languages (Go, Rust, D, WebJavaECMACoffee6asm.ScriptX) and there's ofcourse this thing, but I still do most work for work and distraction in Delphi. So all of a sudden, in a large code block (I know, I know, one is supposed to keep their methods many and small) I thought of something like this:
more_code_that_makes_the_world_tick(); //perhaps even using 's' but the one declared way above...
In light of the asynchronous programming most languages get pushed upon them, and the need to have 'scope' outliving the usual runtime of the function call, this may have been considered. But purely on the basis of syntax, this could be done. A 'var' token at that point is never valid, so could get used by a parser to initiate a declaration block, followed by a begin/end block, that the compiler would know how to convert into a separate scope (with unwinding, and auto-calling release on interfaces/reference-counted-instances)...
But it currently doesn't. The closest thing you could get is define an anonymous function and call it once there and then, but that may look ugly and is too much code for what it does, in my humble opinion.
So for now I will just be (re-)using a single
s:string; on top, I'm afraid. (I feel your sqeam, but I'll be really carefull I promise.)
Google Finance: BTCEUR
2015-12-11 08:22 gfBTCEUR [permalink]
Hee, sinds wanneer hebben ze deze toegevoegd?
2015-12-11 00:00 metaclick466 [permalink]
- when suspended, time down to unsuspend only on self
- time down on buttons on self is always a normal click
- setting: hide unless mouse over (only show corners)
- setting: alpha blend level
2015-12-10 23:56 metakeys446 [permalink]
- issue changing font with "hide unless mouse over"
- replaced "Wingdings 3" for "Symbol" in default kbl's
- code 666 closes MetaClick
- code 777 opens settings dialog
- codes 1000..1999 loads "000.kbl".."999.kbl"
- code XXXYYY resizes to XXX by YYY pixels
- code KKKXXXYYY loads "KKK.kbl" and resizes to XXX by YYY pixels
- hide unless mouse over (only show corners)
CouchDB connector: TCouchDBConnection
2015-12-03 07:43 TCouchDB [permalink]
After creating my own wrapper around ADO with the least possible of extra's, but with the most ease-of-use I could get; I tried the same for mongoDB; then Redis; then RethinkDB, but first had to tackle protocol buffers, but in the mean time both advanced to a new version and RethinkDB dropped protocol buffers, so I dropped my RethinkDB connector and put both on the to-do list again.
So now I thought I'd look into CouchDB, it's all HTTP so it should be easy enough. The point is you connect to your CouchDB instance on an address and port that's not publicly accessible, so a full-fledged HTTP library would be too much (though it's still highly recommended nowadays to use TLS over internal connections as well, but that's on the roadmap for xxmHttp). For handling JSON I can re-use what I created for TMongoWire: jsonDoc. So there it is. For now it offers a basic call to exchange JSON with the server, but this should be enough to unlock the main features CouchDB has to offer.
Types of Information
2015-11-24 11:04 typesofinformation [permalink]
Life would be good if all we had was information. If only we could get all the information. We can't handle that much information, so we build systems to handle the information for us. Strange things happen when information comes in. Good systems are designed to handle these well. In designing information processing systems, you have to cater for the following.
Some input signals contain no information. They are either damaged in transport, incomplete, or not of a correct form for the system to handle. Either report them to find out if repair is possible, or keep count of them to be able to report about the health of the system.
Some input signals come in twice, and contain the same information. Or do they? If possible try to have the last step in the chain report if an event did take place twice, or if it's an echo on the line. Sometimes a clerk does drop a pack of cards and enters them again just to be sure. Be ready to take only the new cards.
Some information is wrong. Us humans do make mistakes. The system sometimes doesn't know. It processes a signal, of the correct form, holding valid information. Then again, the fact that some information already in the system may be incorrect is also information.
Don't expect to get all information. There is always more.
More input is coming in. Sometimes we know how much input is still waiting to come in. We'll roughly know how much information there'll be added. In most cases it follows a measurable trend. In some cases it follows the business.
Information processing is one thing, but does it deliver the required new information? Is there more to mine out of the amassment? Sometimes the numbers can show what you need to know, but do you know where to look?
It's hard to design for things we don't know we don't know (yet). But it serves to be prepared. New things have a knack for looking a lot like something we have already. Sometimes they deserve a new module, sometime just a new category, but don't forget to put the existing items in a category also.
GMail: make the labels menu larger
2015-10-22 09:36 GMailLargerLabelsMenu [permalink]
When you don't like it: adapt it.
At work we've been switched to Google Mail for some time now, and to make sense of the mayhem that is the incoming torrent of e-mail, I've been using an extensive set of labels and sub-labels with nice colours and stuff.*
But the list of labels on the pop-up-menu if the 'move' and 'label' buttons is so small, only showing the first few labels, and I had to scroll most of the time.
Is there way to adapt this? It turns out there is. At first I read about user stylesheets, but these got removed from Google Chrome, but there's an extension that does the same: Stylish
Install this, and for URL's that start with "
https://mail.google.com/mail/", add this:
top: 92px !important;
top: 92px !important;
*: Extra tip: I was searching for something nice to prefix the label-names with that would cause them to get storted (alphabetically) at the end. In theory you could use "zzz " as prefix, but that's ugly. And assumes you'll never have an account named "zzz".
After a bit of searching around the unicode spec, I stumbled upon Bopomofo, so now i use ㄍ and ㄑ which apparently sort past 'z' and look pretty nice.
2015-10-16 22:24 tx [permalink]
tx started as a tool to keep track of things. From there it evolved into a new take on data, categorisation, oversight, structure, registration, evaluation...
To complete the configuration, set up a multi-user environment or tweak the project to your needs, it's advised to install and build from the source code.
To get started quickly with default configurations, download and install this easy installer. It has tx and xxm combined into a single executable (that conveniently launches the URL in the default browser at start-up), and a minimal database to get you started. Read more about configuring tx here.
Learn something new every day: set tab width on a plain TMemo
2015-10-09 09:30 TMemoTabWidth [permalink]
Strange that I haven't thought of this before, but it's surprisingly easy to do:
TabWidth:=12;//override the default of 32 'units'
If you want/need to you can pass an array of tab-stop positions instead if just the one (but use
See also EM_SETTABSTOPS
Skipping the COM registry by calling DllGetClassObject yourself
2015-09-30 16:07 DllGetClassObject [permalink]
Yey! For the first time ever I created a COM object from the DLL, skipping the COM registry. (Should have done this much, much sooner!) Why, you ask? Just to be sure you're using the correct DLL, and that the registry is not (ab)used to divert it to another DLL. And also this way in some cases you can avoid having to get administrative privileges at some point just to get that COM registration into the Windows registry...
T_DGCO=function(const CLSID, IID: TGUID; var Obj): HResult; stdcall;//DllGetClassObject
x:IMyObject;//replace by an interface of choice
if (p=nil) or (p(CLASS_MyObject,IClassFactory,f)<>S_OK) then
if f.CreateInstance(nil,IMyObject,x)<>S_OK then
x.Hello('World');//or whatever your object does
Results of survey "Designing a new language, what would you use?"
2015-09-14 17:26 plsurvey2results [permalink]
After having done a first survey, more intended as a joke than in seriousness, I decided to do another survey, (also on reddit) just to get to know a little more on where the people at large are about the things I read about when researching the web for what I need with this toy programming language I started.
As per the last time, I noticed answers come in in the first 24 hours and then nothing, so I thought I'd wait a few days and then process the results. First this: thank you, thank you, thank you very much for the 34 responses.
For back-end, 18 of 33 would use LLVM, 5 JVM, 4 CLR, 4 GCC, just one LuaJIT, and one other offered the gentle advice to use "IR, then translate that IR into whichever backend you want." Which I find strange since that's what I thought a back-end is for... I'm surprised to see so little for JVM, it fuels my suspition that some programming languages are more written about than written in...
For run-time, 19 of 31 would use "FFI to anything C" which makes sense as most do as far as I can tell; 4 JVM, all of which had also JVM for the previous question, again makes sense; 4 CLR, 3 of which had CLR for the previous question, and one LLVM: I have checking out Roslyn high on my to-do list, but I'm not sure if all of the puzzle pieces are out there (yet) to get that working; 2 OCaml, 2 Python, and someone entered "variant of c++" not sure what that is, but it might just be the same as what I meant by "anything C"...
As one could predict, the choices for IDE are a bit more diverse, but roughly what I anticipated:
* 6 emacs
* 4 atom.io, which is pretty good for the new kid on the block
* 4 Eclipse, only 2 of those had JVM on the previous questions
* 4 Microsoft Visual Studio
* 3 IntelliJ IDEA, strangely enough none of those with JVM on the previous questions
* 3 vim
* 2 Code Blocks
* 1 Codelite
* 1 Delphi
* 1 kdevelop
* 1 pharo.org
* 1 "just a text editor"
* 1 "made in this new lang"
* 1 "no ide"
* 1 "shouldn't be tied to an IDE"
To build a parser, 8 out of 30 recommend yacc. 7 advise to roll your own, which kind of surprises me but also not that much, since as someone also points out, it allows you to pay extra attention to having the parser spew out usefull errors when it hits syntax it doesn't understand. 6 would go with GNU Bison, 2 JavaCC, 2 "parser combinations", 1 "recursive decent", 1 "Ada's OpenToken library", 1 Json; those in quotes I should look up as I may have heard about them but am not fully acquainted with (yet!).
For debugger, 18 of 29 would go with gdb, 7 with lldb, 2 with WinDbg, someone would let it depend on the platform, someone else would like to see a "More indepth debugger". And there's someone that would have the debugger be written in the language using meta programming, but this person also left all the questions unanswered, except "pharo.org" for IDE, and "SmallTalk" for the next question. The world needs all kinds of people.
And then the question I was looking forward to the most: projects to learn from
* 9 LLVM
* 9 Lua
* 2 OCaml
* 2 CoffeeScript: which apparently, I noticed, has annotated source right there on the website!
* 2 Haskell (someone wrote "GHC", assuming that stands for the Glasgow Haskell Compiler, I'll count it here)
* 1 Rust
* 1 Smalltalk
* 1 clojure
* 1 DMD
* 1 GCC
* 1 "Ada, a Lisp varient, and probably an ML-language", those are three at once! A LISP variant, I agree, I have clojure in this list but not Scala, strange. And as ML-languages go I've only heard about OCaml.
* 1 "Assembly "Learn e.g. x86 assembly. Without which you will not be able to understand how it is being execute.d=" I don't know what dee equals, but x86 isn't quite the open source compiler I was thinking of. Also I've read this one back to back, does that count?
5th Element: a remake?
2015-09-07 23:42 5thElementRemakePlease [permalink]
Naar mijn bescheiden mening is het tijd voor een 5th Element remake. Misschien is het dat wel al een tijdje. (van 2013!) Niet dezelfde film, akkoord, maar er zat zo veel goed in die film. Jammer genoeg ook een hoop waar een hoop mensen, terecht, van wegblijven, maar op mij had het van direct de eerste keer de indruk dat als je die dingen negeert, je de parels kan rapen in die film. Zoals andere grotere verhalen gaat het over een selecte groep mensen die per toeval er toe komen het volledige universum te redden van de ondergang. Dat is en blijft een goede kapstok voor gelijk welke film, vooral als de fictieve elementen goed ineen lijken te zitten en ze uit de buurt van ongeloof blijven. Plus, mij krijg je gewonnen als alles niets is wat het lijkt. Een verenigde militaire kracht die in al zijn kunde toch even niet weet wat gedaan, de strenghouders van het geloof die bevraagd worden om antwoorden, maar eigenlijk zelf niet weten dat ze het niet (meer) weten... De slechteriken die eigenlijk echt ook wel hard werken aan hun inzet en ambities. De zakenman die eerst dacht een zaakje te kunnen doen, maar dan toch snapt dat de partner niet echt een parnerschap in gedachten had. Dat moet zeker allemaal blijven. Flikken die in een McDonalds-kamion belanden? Misschien. Een hyperactieve radiopresentator die op de gekste momenten dan maar tussen het geflikflooi een programma moet neerzetten? Nee dank je.
Hier is nog een idee: waarom niet 5th Element, maar 5 Elements, en er zoals het nu in zwier is, een serie. Een paar afleveringen dat het er zit aan te komen dat de Mondochewan zullen moeten komen ingrijpen. Een paar afleveringen dat het allemaal kapot is, en langzaam het misverstand uit komt. Dan de reconstructie (het pakje met de witte stroken, remember?) en het uitzoeken wat er dan moet gebeuren, en dan een hoop afleveringen waarin ze elk van de elementen moeten gaan opsnorren...
Natuurlijk in dezelfde tijdsgeest, met de heerlijke sneren naar de dingen die nu fout gaan en dan nog altijd fout(er) gaan zitten. Met effecten. Niet persé 3D, maar ik denk aan district 9 (nee ik heb Chappie nog niet gezien), en aan de 'overzichten' van de ruimteschepen in Battlestar Galactica, het lijkt of je er tussen zou kunnen hangen, er bij zou kunnen zijn, en dan leef je beter mee in het verhaal. Zolang het maar klopt als een bus. Nog meer dan dat je op het nieuws ziet dat de opruimdiensten staken, en dat de luchthaven dan vol afval ligt. Da's een goed begin, maar fan kan je voor je winnen door een verhaal dat zich afspeelt naast het verhaal te laten zien aan hints hier en daar. Maar misschien heb ik te veel naar Yamato 2199 gekeken.
Awel ja, waarom niet een mash-up van dat, met Macross er gewoon tussendoor (maar dan het verhaal en de setting, niet perse de mecha), en een echte serie slechteriken die in de weg lopen bij het redden van de wereld en alles... Maar ik zit maar wat te dromen natuurlijk.
TMongoWire can now authenticate over SCRAM-SHA-1
2015-07-09 00:51 mongoAuth3 [permalink]
You can now use TMongoWire on mongoDB version 3.0 or newer and authenticate over SASL with SCRAM-SHA-1. This harder form of encryption offers a strong protection of your credentials and prevents against 'man in the middle' attacks. (But does not encrypt the data over the wire, it's advised to use TLS for that.) I did not find a ready-made SASL library for Delphi, so made the required encryption tools myself. I have added this support for HMAC and PBKDF2 to md5.zip.
To authenticate, call
MongoWireAuthenticate from the new unit
mongoAuth3.pas on a connected TMongoWire instance. (For backwards compatibility,
mongoAuth.pas remains available.)
jsonDoc: JSON object for Delphi based on IUnknown and OleVariant
2015-06-26 21:21 jsonDoc [permalink]
I was using bsonDoc.pas and bsonUtils.pas from the TMongoWire project in several projects that didn't have anything to do with MongoDB, so I thought this one deserved a repository of its own:
yoy/delphi on beginend.net
2015-06-25 18:07 yoybe on beginendnet [permalink]
I've proposed the Delphi RSS feed of this site to https://www.beginend.net/. Thank you Eric.
Results of the programming paradigms survey
2015-06-25 00:11 plsurveyresults [permalink]
A while ago I created a little survey about programming language specifics, and posted it on reddit/programming. Here are the results.
There were 123 responses on May 21st, 8 on May 22nd and one more on the 23rd. I guess then it moved off the first page on reddit... The posted ended on a solid score of zero upvotes.
Whitespace: the majority of you (93 votes) like whitespace to be unimportant to syntax, the others (34) like that it defines scope or levels in code.
6 prefer not to use an operator for assignment. Some nice people note that Lisp uses (set! ) for assignment, and Scheme uses equal, which are not really operators. Someone warns not to use == in Java for general comparison. Good to know. (Reminds me to send the daily thank you to the person that once warned me not to use Java.)
Readability: 87 like code to read like human language, against 41 that appreciate that it's for the machines that we're writing. So that's bad news for my attempt at designing a programming language without reserved words...
Subject Object Verb: 109 prefer infix notation (a+b), 15 prefer prefix notation (+ a b), 1 voted postfix (a b +) and 7 prefer something else than operators.
Declarative-Executive: 60 like declarative and executive separate and can live without having them nested, 16 find that declarative and executive should be visually separate but may occur nested, 47 think executive prevails (so they can manipulate their declarative, eew!)
Compiler directives, Pre-compiler: 49 prefer language specific syntax to denote code that is dependent on something external, 39 prefer the linker to be smart enough to ignore unused logic, 38 sticks to the heavy pre-compiler with its own box of tricks.
Garbage collection: 57 likes reference counting; 43 doesn't even bother with clean-up or gives the GC a ping; 26 does their own object lifetime management (or is unwittingly writing leaks).
Multiple Inheritence: 88 claim not to need it; 38 claim to use it; 3 claim do be blissfully oblivious, the lucky bastards.
Concurrency: 80 prefer syntax to work with a parallel workload, 36 likes to just write loops and have the language put the metal to work, 14 roll their own threads.
Generics: Yea 98, Nay 32, the yeas have it. Another reminder I'm part of a (shrinking?) minority...
As I noted in the reddit remarks, I'm not used to setting up surveys like this, and may not have selected the most neutral wordings for the questionnaire, perhaps steering the results a little. In any case, it's nice to hear back from people, and compare where you are in relation to the masses, get to know if your niche is still comfortably narrow.
2015-06-23 21:25 sha512 [permalink]
I added SHA-512 to the collection! I also had a quick comparison with code similar to some other implementations where instead of a loop, a long list of 'round' calls are made, with some convolution made in the arguments, and it turns out the way I go at it here performs better. (Your milage may vary)
yoy.be new design!
2015-06-19 20:50 new design [permalink]
I finally have the new design for this website ready! It was long over due. Hope you like it. I have removed a lot of the dynamic back-end of this website, it was very under-used here, but it lives on in another form. The re-design also serves as a re-focus for this website, so it serves its two main purposes better: my personal weblog and the main place to download my freeware from and get updates. The openness to add things here is gone, but I am always available for advice, comments, remarks and questions on twitter, stackoverflow, google+, github and others like that.
2015-03-03 21:42 r1825 [permalink]
- error page: back link when referer, refresh link only on GET
- LoadCopy by library file signature to avoid multiple copies being loaded, retries on access denied
- default xxmSession on TStringList (sorted!) instead of TObjectList
- parser: in code, treat lines that start with "<" and end with ">" as HTML,
allow [[#]] section on one line in a code section
- recycle allocated memory buffers, use HeapAlloc instead of GlobalAlloc
- long polling support (IXxmContextSuspend, IXxmProjectEvents2)
- xxmHttp: thread to wait on groups of (slow) connections that have all content in buffer
- xxmHttp: support basic authentication (401, "WWW-Authenticate: Basic")
- xxmIsapi: asynchronous sending on more than 64KiB in buffer (project should set Context.ContentBuffer!)
- xxmLocal: custom handling of WWW-Authenticate,
when debugging hold 'X' on authenticated page load to clear stored credentials
- xxmConv: /noupdate switch
- revised thread scheduling from thread pool
trick: get a non-empty recordset with NULLs
2015-02-26 10:31 i3098 [permalink]
If you ever need a non-empty recordset with all NULL values, e.g. for listing the columns:
select C.* from (select 1 X) X left outer join Customer C on C.ID=0
"Even snel een login-procedure maken"...
2015-01-09 17:21 r1823 [permalink]
→ "Even snel een login-procedure maken"...
Gaat ook hierover: http://blog.codinghorror.com/the-god-login/