{ "version": "https://jsonfeed.org/version/1", "user_comment": "This feed allows you to read the posts from this site in any feed reader that supports the JSON Feed format. To add this feed to your reader, copy the following URL -- http://dddd.mettre.de/wp/feed/json -- and add it your reader.", "home_page_url": "http://dddd.mettre.de/wp", "feed_url": "http://dddd.mettre.de/wp/feed/json", "title": "DDDD", "description": "For the job to be done", "items": [ { "id": "http://dddd.mettre.de/wp/see-you-in-paris/", "url": "http://dddd.mettre.de/wp/see-you-in-paris/", "title": "See you in Paris", "content_html": "
This years 4D Summit takes place 20. – 22. march in Paris.
\nI suppose it makes sense to attend this year, at least there is a lot of hype generated by 4D. Meeting people is most important! I’m reachable by email,\u00a0by phone\u00a0and by messages.
\n", "date_published": "2018-02-07T12:05:23+00:00", "date_modified": "2018-02-07T15:07:12+00:00", "author": { "name": "Ortwin Zillgen" } }, { "id": "http://dddd.mettre.de/wp/imac-215-zoll-4k-retina-display-2015/", "url": "http://dddd.mettre.de/wp/imac-215-zoll-4k-retina-display-2015/", "title": "iMac 21,5″ Zoll 4k Retina Display [VERKAUFT]", "content_html": "Verkaufe meinen\u00a0iMac 21,5″ Zoll 4k Retina Display, (Ende 2015).
\n3,1 GHz i5,\u00a016 GB RAM,\u00a02 TB Fusion Drive (2TB Harddisk + 128GB SSD)
Magic Keyboard + Magic Trackpad 2 (beides kabellos)
Lightning-USB-Kabel (zum Aufladen oder als Kabelverbindung),\u00a0Netzkabel\u00a0in Original-Verpackung
High Sierra vorinstalliert, startklar
Habe diesen Rechner durch den 2017er mit 32 GB RAM ersetzt.
\n", "date_published": "2018-02-03T12:24:34+00:00", "date_modified": "2018-02-07T15:07:26+00:00", "author": { "name": "Ortwin Zillgen" } }, { "id": "http://dddd.mettre.de/wp/teaser-2018/", "url": "http://dddd.mettre.de/wp/teaser-2018/", "title": "Teaser 2018", "content_html": "\n\n4D for xxx? \u2026\u00a0Sorry \u2013 no details for now \u2026
\n
4D Summit 2018 in Paris, Washington and M\u00fcnchen. Wondering what this could be? Visiting Paris for a couple of days in march seems like a good idea. To sit down in a darkened, air-conditioned room on torture-hotelchairs all day needs a really good reason. 4D Server on Linux is not a good one.
\nF\u00fcr 2018 sind 4D Summits in Paris, Washington und Eching angek\u00fcndigt. 4D lockt, was kann das sein? Ein paar Tage Paris ist auch im M\u00e4rz ein Anla\u00df. Doch um mich in einem abgedunkelten, \u00fcber-klimatisierten Raum auf Hotelst\u00fchlen martern zu lassen braucht es einen wirklich guten Grund. 4D Server auf Linux ist kein guter Grund.
\nUnsere Kunden brauchen einen mobilen Client zu unseren 4D-Anwendungen. Das ist eindeutig deren oberste Priorit\u00e4t und damit auch unsere. Kein Kunde kauft einen Update auf V16/V17, wenn nichts dabei f\u00fcr ihn rauskommt. Mein verbesserter Komfort mit Objekten und anderen Programmier-Tools aus V14/V15 und V16 ist keinem Kunden einen Cent wert. Dot-notation ab V16Rx gehen meinen Kunden am Allerwertesten vorbei.
\nAm besten gebrauchen k\u00f6nnt ich einen nativen 4D Client auf iOS und/oder Android.
\nDieser spezielle 4D Client mu\u00df nur wenig k\u00f6nnen. Eine Runtime f\u00fcr 4D-Formulare sollte hinreichen. Dieser 4D mobile Client
\nDie gr\u00f6\u00dfte H\u00fcrde sind die klassischen Formulare in 4D. Ich habe es hintangestellt, mir einen solchen Client in HTML5 zu bauen, weil ich Formular-Objekten keine Eigenschaften geben kann, die mir deren Darstellung auf Bildschirmen in iPhone-Gr\u00f6\u00dfe m\u00f6glich machen. Formulare des mobilen 4D Client au\u00dferhalb von 4D zu gestalten, ist mehr als umst\u00e4ndlich und/oder schleppt zu viel\u00a0Stiefelschlaufen-Ballast mit.
\nDie zus\u00e4tzlich n\u00f6tigen Eigenschaften eines 4D Formularobjektes sind mindestens
\nHTML5-forms beschreibt die fehlenden Eigenschaften der 4D-Formobjekte recht gut.
\nHabe Paris gebucht und buche Eching. 4D Partner haben Zugriff auf die V16R6-Features. Dort finden Sie\u00a0Dynamic Forms (preview). Lesen Sie mehrfach.
\nOur users need a mobile client for our 4D application. This mobile client is primary concern for them and for us. No user buys an update to V16/V17, if there is nothing to comfort them. Those nice tools and object-enhancements we programmers got with V14/V15 and V16 is of no value to our clients, besides being nice to us.\u00a0Dot-notation as of V16Rx are of no use to any of them.
\nI would be really satisfied getting a native 4D Client on iOS and/or Android.
\nThis specific 4D Client might be a sparse client. Suppose a runtime to execute 4D forms would already do. This 4D mobile client
\nResolving this is rather easy in HTML5 on one hand and trickier than necessary, because 4D forms are not well suited for that purpose. I’ve neglected my attempts for now. 4D formobjects miss attributes, which could ease the conversion for iPhone-sized screens. Creating forms for a mobile 4D Client with a different editor than 4D, adds complexity and bootstraps too much fat.
\n4D formobjects are missing at least these attributes
\nHTML5-forms is a pretty good description of missing 4D-formobject properties.
\nParis is booked and\u00a0Eching will be booked. As a 4D Partner you get access to V16R6-features today. There you’ll find\u00a0Dynamic Forms (preview). Read and re-read those pages.
\n", "date_published": "2018-01-02T12:18:20+00:00", "date_modified": "2018-01-13T12:55:35+00:00", "author": { "name": "Ortwin Zillgen" } }, { "id": "http://dddd.mettre.de/wp/more-than-one/", "url": "http://dddd.mettre.de/wp/more-than-one/", "title": "More than one", "content_html": "Working in different projects means using different 4D versions concurrently. Just now I’m in V15, V15R5, V16 32-Bit and V16 64-Bit. And there are services I implemented in 4D, of course. Which icon is which 4D?
\nIch habe mehrere Projekte auf dem Tisch. Jedes Projekt in einer anderen 4D Version. Aktuell brauche ich V15, V15R5, V16 32-Bit and V16 64-Bit. Au\u00dferdem laufen Services, die ich mit 4D gel\u00f6st habe. Welches Icon ist welche 4D?
\nF\u00fcr Standard-Versionen verwendet 4D seit V15 ein O-Icon und die R-Version haben ein Q-Icon. Die V15 ist rot, die V16 lila. Ich brauche mehr Info, um sie im Dock auseinanderzuhalten. Es hilft die Version in den App-Namen zu integrieren, ebenso die Kopie. Dann kann ich die Master in der V15.4-1 \u00f6ffnen und die Komponente in der V15.4-2.
\n\nMeine Services (MeinB\u00fcro, VersionControl) laufen auch in je einer V16R, 64-Bit. Die brauchen eine andere Farbe. Aus den 4D-Resourcen habe ich das Icon (4D v16 R4/4D R4 VCS.app/Contents/Resources/4D-main.icns
) in GraphicConverter ge\u00f6ffnet, dort die Farben getauscht.
Aus dem Lila, mache ich ein Gr\u00fcn und ein Blau. Die ver\u00e4nderten Icons sichere ich als PNG. Im Finder dann bekommen die Kopien f\u00fcr MeinB\u00fcro und VersionControl das PNG als Objektbild.
\nKleiner Aufwand und hilfreich im Tagesgesch\u00e4ft.
\nThe standard-versions of 4D since V15 use an O-icon and the R-versions do have an Q-icon. V15 is red, V16 uses lilac. I need more help to distinguish the copies in the dock. First action is to name properly including version and copy. Now I know to open the master-db with V15.4-1 and run the component with V15.4-2.
\n\nMy services (MeinB\u00fcro, VersionControl) both use a copy of V16R, 64-bit. Those need a different color. I opened the 4D icon from 4D resources (4D v16 R4/4D R4 VCS.app/Contents/Resources/4D-main.icns
) using GraphicConverter and changed colors.
I changed lilac to green and blue. Saved the modified icons as PNG. Using Finder each 4D-copy to run MeinB\u00fcro and VersionControl got one of the PNGs as object-picture.
\nNot much to do and of great help.
\n", "date_published": "2017-12-21T11:21:14+00:00", "date_modified": "2017-12-21T14:24:00+00:00", "author": { "name": "Ortwin Zillgen" } }, { "id": "http://dddd.mettre.de/wp/dezember-werkstatt-2017-in-hamburg/", "url": "http://dddd.mettre.de/wp/dezember-werkstatt-2017-in-hamburg/", "title": "Dezember-Werkstatt 2017 in Hamburg", "content_html": "Dez-Werkstatt: wie immer zu Gast in den R\u00e4umen der MediSoft GmbH,\u00a0Haferweg 38,\u00a022769 Hamburg, 14:00h – 18:00h
\nAnbindung und Webservices
\n", "date_published": "2017-12-13T14:31:43+00:00", "date_modified": "2017-12-13T14:33:47+00:00", "author": { "name": "Ortwin Zillgen" } }, { "id": "http://dddd.mettre.de/wp/good-artists-and-great-artists/", "url": "http://dddd.mettre.de/wp/good-artists-and-great-artists/", "title": "Good artists and great artists", "content_html": "You know that quote from Picasso about good artists and great artists or whoever this is attributed to.
\nWahrscheinlich kennen Sie den Picasso zugeschriebenen Vergleich von guten K\u00fcnstlern und gro\u00dfen K\u00fcnstlern, oder wem auch immer das Bonmot zugeschrieben wird.
\n\nEs l\u00e4\u00dft sich nicht verhindern, da\u00df man gutes sieht oder h\u00f6rt und sich sp\u00e4ter daran erinnert. Meinereiner hofft sogar, sich rechtzeitig an Entdecktes wieder zu erinnern. Rechtzeitig erinnern hei\u00dft f\u00fcr mich meinen kreativen Proze\u00df nicht bei Null anfangen zu m\u00fcssen, sondern auf das Aufsetzen zu k\u00f6nnen, was andere bereits erarbeitet haben. Habe ich gen\u00fcgend Zeit, brauche ich nicht nur zu kopieren, kann meinen Anteil am Schaffensproze\u00df hinzuf\u00fcgen und die Idee weiterbringen.
\nVor ein paar Monaten habe ich \u00fcber den Real estate blues geschrieben. Freut mich, da\u00df das Thema Nachhall gefunden hat.
\nDie guten Ideen finden Sie auf dieser WebSite \u2026
\nWhile getting around I see and hear good ideas. I love to remember those ideas when in the need to build something new. Remembering saves me quite a lot of redo, gives a head-start to the solution. Starting at a point others already had reached, is a good starting point. While I add my 2 cents to the idea I hopefully move the idea further.
\nEarly this year I had the real estate blues. Today I see my ideas blooming in a different garden. Well done, this must have been a good idea of mine.
\nAs always, the good ideas are to be found on this site \u2026
\n", "date_published": "2017-12-11T10:29:25+00:00", "date_modified": "2017-12-12T08:57:49+00:00", "author": { "name": "Ortwin Zillgen" } }, { "id": "http://dddd.mettre.de/wp/moving-subforms/", "url": "http://dddd.mettre.de/wp/moving-subforms/", "title": "Moving subforms", "content_html": "Placing subforms on a masterform seems pretty simple. Drag the form from the explorer onto the masterform. Done! Well, this could be enhanced. Be prepared or do it yourself.
\nEine Subform auf einem anderen Formular zu platzieren erscheint einfach. Aus der Formular-Liste des Explorer auf die Zielform ziehen und loslassen. Fertig! Tats\u00e4chlich l\u00e4\u00dft sich das verbessern. Arbeiten Sie vor oder machen Sie es selbst.
\n\nBevor es Sinn macht den Befehl aus dem Popup-Men\u00fc des Subform-Objektes anzuwenden, gilt es das Formular vorzubereiten.
\nDazu w\u00e4hlen Sie ganz unten aus dem gleichen Popup-Men\u00fc den Befehl Formular bearbeiten. Das spart Extra-Wege.
\nJetzt sind Sie im Formular, das Sie als Subform verwenden wollen. Ich mache die Formulargr\u00f6\u00dfe abh\u00e4ngig von einem unsichtbaren Rechteck in der rechten unteren Ecke. Das ist das Ma\u00df f\u00fcr die Breite. Die H\u00f6he wird hier leider nicht abgefragt, die kommt aus der Markierungslinie f\u00fcr den Datenteil. Den Kopfteil setze ich auf 0.
\n\nIch interpretiere die unterschiedliche Vorgehensweise als ein Relikt aus der Zeit, als Subforms noch Listenforms waren. Heute ist das nicht mehr logisch.
\nDiese Vorgehensweise klappt, wenn im Ziel-Formular die passende Gr\u00f6\u00dfe f\u00fcr die Instanz der Subform vorgesehen ist. Doch ist das selten bis nie der Fall. Darum
\nIch arbeite mit zwei unsichtbaren Rechtecken auf dem Master-Formular. Das eine hat den Objektnamen Payload und liegt im sichtbaren Bereich des Formulars. Payload hat die Eigenschaften zu wachsen oder sich zu bewegen, wie es an der Position notwendig ist.
\nDas zweite hat den Objektnamen Parking und liegt au\u00dferhalb des Formulars. Das Rechteck Parking bewegt sich so, da\u00df es immer au\u00dferhalb des\u00a0Formulars bleibt.
\nDie Subform\u00a0lege ich ebenfalls au\u00dferhalb des sichtbaren Bereiches des Formulares an. Sie bekommt einen beschreibenden Objektnamen wie sf_Buchen. Dazu die Wachsen- und Bewege-Eigenschaften wie Payload.
\nJe nach Situation gebe ich der Subform sf_Buchen die Koordinaten von Payload oder Parking mit dem Befehl OBJECT SET COORDINATES. Ist Payload das Ziel, wird OBJECT SET VISIBLE auf True gesetzt und beim Ziel Parking auf False.
\n\nSobald ich das selber mache, kapsele ich die Funktionalit\u00e4t in meine Methode, hier Object_Move_To („Show“;$payload;$sf_Buchen) bzw. Object_Move_To („Hide“;$parking;$sf_Buchen). Mehr dazu in More to show.
\nBefore using the context-menu command to automatically size a subform prepare the form-properties.
\nSelect Edit form from the same context-menu, that saves mousing miles.
\nThis is the form which I’m going to use as subform. I set the form-size to be depend on a small invisible rectangle I placed at the lower right corner. That size determines the width of the subform. That rectangle doesn’t determine the height. You need to set the markerline for detail-area instead. I also set header-area to 0.
\n\nThis illogicalness is probably a relict of the times, when there were only list-subforms.
\nWorking this way is ok as long as the subform has the proper proportions for the masterform, which is seldom or never the case. Which brings us to
\nI use two invisible rects on the master-form. One is named Payload and is placed inside the visible area of the form. Payload grows or moves as is appropriate at this position.
\nThe second one is named Parking and is placed outside the visible area of the form. The rect Parking moves to always stay in the outside-region.
\nThe subform is placed outside the visible area of the form, too. I name it appropriate to the function it serves like sf_Buchen. Growing and moving properties same as Payload.
\nDepending on situation the subform sf_Buchen gets the coordinates of Payload or Parking using the command OBJECT SET COORDINATES. Is Payload the target, OBJECT SET VISIBLE is set to True, False for target Parking.
\n\nWhen doing things myself I build a functionality like Object_Move_To („Show“;$payload;$sf_Buchen) or Object_Move_To („Hide“;$parking;$sf_Buchen). Different usage of the functionality : More to show.
\n", "date_published": "2017-10-29T13:11:21+00:00", "date_modified": "2017-10-29T13:14:53+00:00", "author": { "name": "Ortwin Zillgen" } }, { "id": "http://dddd.mettre.de/wp/embedding-svg-inside-an-svg/", "url": "http://dddd.mettre.de/wp/embedding-svg-inside-an-svg/", "title": "Embedding SVG inside an SVG", "content_html": "Using SVG for charting purposes is gratifying. Both completely new kinds of charts and those resembling the obsolete CT Chart Array-command. Besides enhancing the chart-capabilities another requirement was to include the customers-logo as part of the chart. First I thought about parsing that logo.svg \u2026 sounds like too much work.
\nHistogramme und Business-Graphik in SVG zu erstellen f\u00fchrt zu guten Ergebnissen. Einerseits sollte der obsolete CT Chart Array-Befehl ersetzt werden, andererseits komplett fachspezifische Chart-Typen m\u00f6glich machen. Eine Anforderung war, das Logo des Kunden in den Chart einzubetten. Erst dachte ich, das Logo.svg zu parsen \u2026 doch h\u00f6rt sich das nach zu viel Arbeit an.
\nOct 24, 2017: resulting images added
\n\n\n$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture)
\nfunktioniert, doch erzeugt es ein zu gering aufgel\u00f6stes PNG im SVG.
Danach experimentierte ich mit dem definierten Codec „svg“
\n$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture;5;0;“svg“)
\nKam nichts bei raus.
Gl\u00fccklicherweise habe ich den Source als Handbuch zur Hand. Mit Codec ist eigentlich die Extension gemeint, also „.svg“. Diese Zeile Code
\n$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture;5;0;“.svg“)
\nliefert genau was ich will: 4D kann das SVG im SVG rendern.
Alle anderen SVG-Renderer scheitern am base64-codierten SVG im SVG. Mich st\u00f6rt das nicht, solange 4D hochaufl\u00f6sende JPEG und PNG aus dem SVG erzeugt.
\n$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture)
\nresults in a low-resolution PNG inside the SVG.
Next I tried the defined codec-option „svg“
\n$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture;5;0;“svg“)
\nto no avail.
Finally I checked my manual of the source. Actually codec means extension, ergo „.svg“. This line of code
\n$svgPictureRef:=SVG_New_embedded_image ($svgCopyrightLayer_Ref;$interPicture;5;0;“.svg“)
\ndelivers what I was looking for: 4D renders SVG inside SVG perfectly well.
All other SVG-renderer fail to render the base64-encoded SVG inside a SVG. Doesn’t bother me, as long as 4D delievers high-resolution JPEG and PNG from that kind of SVG.
\nI ran the code 4 times using these extensions: .svg
, svg
, .png
, png
as codec-parameter to SVG_New_embedded_image. \u00a0Then I exported the picture containing the SVG into JPEG, which is another story. Finally I open the jpegs using GraphicConverter, enlarged to 400%, shot screenshots and cut the same small peace out of every screenshot.
Here are the JPEG-results at 300 dpi * for comparison:
\nfirst what’s all about: send „.svg“-extension as codec to SVG_New_embedded_image
\n\nsecond what seemed obvious at first place: send „.png“-extension as codec to SVG_New_embedded_image
\n\njust for the sake of completeness: send any codec, both „svg“ and „png“ to SVG_New_embedded_image
\n\nYes, just an empty white area and I didn’t include the other one.
\n* wouldn’t have made sense to use the SVG, as no other SVG-renderer than 4D renders embedded, base64-encoded SVGs at all. ↵
\n", "date_published": "2017-10-22T20:09:41+00:00", "date_modified": "2017-10-24T10:05:56+00:00", "author": { "name": "Ortwin Zillgen" } }, { "id": "http://dddd.mettre.de/wp/summertime/", "url": "http://dddd.mettre.de/wp/summertime/", "title": "Summertime", "content_html": "Done nothing to the site and left for a vacation. While we are testing local food and wines, WordPress displays a blank page to the visitors. Now I know, I’d probably been able to solve from the iPhone \u2013 perfect conditions in walachia. Sorry for the inconvinience.
\nNix an der WebSite gemacht und in Ferien gefahren. Teste lokales Essen und Trinken, trudelt die Meldung ein: „Deine Site l\u00e4uft nicht“. Jetzt wei\u00df ich wie reparieren, h\u00e4tte ich wohl vom iPhone l\u00f6sen k\u00f6nnen \u2013 hervorragendes Mobil-Netz in der Walachei. Beim n\u00e4chsten Mal!
\n", "date_published": "2017-08-08T10:04:55+00:00", "date_modified": "2017-08-08T10:04:55+00:00", "author": { "name": "Ortwin Zillgen" } }, { "id": "http://dddd.mettre.de/wp/which-window-to-call-form/", "url": "http://dddd.mettre.de/wp/which-window-to-call-form/", "title": "Which window to CALL FORM?", "content_html": "To use CALL FORM I need the window-reference. I never thought about taking care of window-references and I’m not happy about to start that extra efforts. Therefore I was thinking about how to ask 4D, to receive the window-reference for a process, where I know the name of. I usually don’t know the process-name either, but there are reasonable options to derive that name with some logic. Here is a function that works:
\nUm CALL FORM verwenden zu k\u00f6nnen, brauche ich die Referenz des Fensters. Ich habe mir nie Gedanken um die Fensterreferenz gemacht und ich wollte jetzt nicht damit anfangen. Wie mu\u00df ich 4D fragen, um an die Fensterreferenz eines Prozesses zu kommen, von dem ich den Prozessnamen wei\u00df bzw. dessen Namen ich mir mit einer Art von Logik ableiten kann. Das ist mein aktueller Stand:
\n$windowRef_L:=myFunction(„processName“)
\n\u00a0\u00a0//\u00a0\u00a0myFunction
\n$checkProcessName:=$1
\n$N:=Count user processes
\nFor ($i;1;$N)
\nPROCESS PROPERTIES($i;$Prozessname;$Prozesstatus_L;$Prozesszeit_L;$modus_b;$unique_L;$source_L)
\nCase of
\n: ($source_L<0)
\n: ($modus_b=False) // not visible
\n: ($Prozessname=$checkProcessName)
\n$pzsIDLookingFor_L:=$i
\n$i:=$N+1
\nEnd case
\nEnd for
ARRAY LONGINT($t_Windows_L;0)
\nWINDOW LIST($t_Windows_L)
\n$N:=Size of array($t_Windows_L)
\nFor ($i;1;$N)
\n$pzs_L:=Window process($t_Windows_L{$i})
\nIf ($pzs_L=$pzsIDLookingFor_L)
\n$return_L:=$t_Windows_L{$i}
\n$i:=$N+1
\nEnd if
\nEnd for
$0:=$return_L
\n", "date_published": "2017-07-16T09:55:33+00:00", "date_modified": "2017-07-16T10:00:25+00:00", "author": { "name": "Ortwin Zillgen" } }, { "id": "http://dddd.mettre.de/wp/tokens-in-object-notation/", "url": "http://dddd.mettre.de/wp/tokens-in-object-notation/", "title": "Tokens in object.notation", "content_html": "I’d asked
\nobject notation is something like
\n$name:=$o.Firstname
\nthe key Firstname is not set in doublequotes. Hmh, that means Firstname is tokenized, or is it?
Will keys in OB SET($o;Firstname;“Vorname“) be tokenized too?
\n$name:=$o.Firstname
\nWill be tokenized into something like this:
\n[LocalVar][Assign][LocalVar][TokenMember]
So if it was your question „1“, yes first name in this case will be a separate token. In fact so is a quoted 4D string, which is a 4D [constante] token of type string…
\nRegarding your question 2. Lets take a detour.
\nDot syntax should really be understood as a shortcut for
\n$name:=$o[„Firstname“]
\nOr
\n$name:=OB GET($o;“Firstname“)
This shortcut is available only when one can resolve any lexical (understand tokenization) ambiguity. Indeed, an object is only a key-value dictionary. The key is a string with very few constraints. Taking an extreme example:
\n$o[„value“]:=1
\n$o[„value+[Table_1]Num“]:=2//This is an absolutely valid object key!
\n[Table_1]Num:=3
\nAlert(String($o.value+[Table_1]Num))//Am I actually performing an addition or just requesting a key?
Most language accepting object notation, notably javascript put some restriction on which key can be used in these shortcuts. Check the „Object property identifiers“ paragraph.
\nthis is why, when using ob set/get or bracket syntax, you’ll still have to use a string.
\nI hope I helped.