Blogs

Here you can find a list of all my blogs published here.

  • State of the art documentation from SAP
    SAP is investing heavily in marketing the Fiori for iOS and the SDK. In case you are slightly interested in Fiori and UX in general in SAP, for sure you heard a lot about the SDK. 2 ½ years after the announcement the Fiori Design guidelines include an iOS section, there are SAP Developers tutorials, a special iPad app for learning its usage is available, even Apple has set up a Fiori page. Current version of the SDK is 3.0, and now there is even an Android version available (with much less marketing activities). If you want to write an app with the SDK, make sure you have an iPad. The online SDK documentation is available too, but offers less…
    Continue reading »

  • Remove last n characters of file in MacOs
    With MacOS and finder you can easily substitute characters of files using the rename functionality. Just select 2 or more files, right click, and inform the character you want to substitute, like _ with space. To remove the last N characters from a file that looks like Text-2018221112.mp4 to Text is more complicated. The rename dialog does not understand regex. What you can use is the shell and rename Install rename brew install rename Go to the directory with the files and run rename -n 's/.{11}.mp4/\.mp4/' * Rename uses the well known sed syntax s/char/replace/. -n runs the replace in simulation mode. It will print the result, without renaming the files yet. Perfect for testing. {11} number of characters to…
    Continue reading »

  • Response for preflight does not have HTTP ok status
    Issuing an AJAX request is more complex than you might think. Issue When you issue an AJAX request to a server in another domain (CORS), you may get the following error message: Response for preflight does not have HTTP ok status. Problem The server is configured to allow CORS. The Apache configuration includes Header set Access-Control-Allow-Origin "*" The response header of the service contains the correct header value. With this set you can access the service via CORS. Solution Now, why does it not work? You have to be aware that this works for simple CORS requests. For more complex requests that set custom headers, etc, the service may not work. This is due to the preflight mechanism of the…
    Continue reading »

  • Automount share
    The example used in this blog is a CIFS share from a Samba server running on a Raspberry Pi mounted on demand by a client running Debian. Goal The goal is to have a share on a client that is dynamically mounted. The share should only be mounted when an app needs to access. In my case I do have a server with a data storage share connected. The storage is made available to clients in the network. To not have the share being mounted by the clients all the time, the share should be mounted only when real demand exists. For instance, an app needs to read data from the share. If the share is not needed by the client,…
    Continue reading »

  • Activate Clickjacking-Framing-Protection service
    SAP NetWeaver comes with its own solution to prevent clickjacking for its most relevant UI frameworks. For more information about this protection, see the corresponding SAP Notes. WDA: 1872800. Clickjacking protection framework, see Note 2319727. By default, clickjacking protection is disabled. To activate it, you need to insert a value into table HTTP_WHITELIST. Insert values into table HTTP_WHITELIST Transaction: SE16 Check if clickjacking protection service is enabled or disabled. It is disabled, if no record with ENTRY_TYPE=30 is in the table, or if the table is empty. Table name: HTTP_WHITELIST Execute Result By default, no values are in the table and the service is not enabled. For data that needs to be inserted into table HTTP_WHITELIST, see SAP Note 2142551.…
    Continue reading »

  • OpenVPN Assign static IP to client
    After configuring the overall OpenVPN client and server infrastructure, my clients can connect to a VPN. The client can access server resources and vice versa. While the server gets normally always the same IP assigned, the client IP address is assigned dynamically from a pool of IP addresses. Meaning: there is no guarantee that the client always gets the same IP address. Normally, this is not a problem, as the client connects to consume server resources. Such like a web site, or git repository. In my case, the architecture is that the OpenVPN server acts as a proxy to internal services. The web site, git repository, etc are running on the client. Therefore, the server must be able to connect…
    Continue reading »

  • ERR_CONTENT_DECODING_FAILED
    Configuring a reverse proxy is not an easy task. It involves some trial and error and dealing with unexpected errors. One of those errors is ERR_CONTENT_DECODING_FAILED. The web site won’t load in your browser will show this error message: Error ERR_CONTENT_DECODING_FAILED may show up in your browser when a resource is configured on your reverse proxy, and the backend communication is working. That is: the backend is returning data, but not in a form the browser expects. Example: browser expects a GZIP response, but receives plain text. Therefore the hint from your browser about content decoding failed. The content is received, but the browser is not able to decode / understand the data. If a plain text response is expected,…
    Continue reading »

  • How to access UI5 model data
    Old habits are not easily dying and replaced by best practices and general recommendations. In the early days, when UI5 started to gain traction, people discovered it, tried it out, wrote apps, made them somehow work. Everybody was learning, and things we can do today were not possible or known then. Changes to the documentation, API and recommendations are simply the result of lessons learned. As UI5 apps are based around a model, its data, representation and manipulation, a lot of questions around UI5 development are about the model: how to access data, change, update or delete it. A good thing of UI5 is that it is following semantic versioning, and code written for UI5 1.1x or 1.2x will still…
    Continue reading »

  • How to use find to sort files across folders
    Short version You have files named File0.txt to File100.txt in different folders and want to move the first 30 files in a separate directory (command for Mac users. Linux users can use find and mv): For sorting FileNN.txt (character + number) gfind -type f -printf "%f %p\n" | sort -n -k 1.5 | sed 's/.* //' | head -30 | xargs gmv -t ./A/ For sorting NN.txt (numeric filename) gfind -type f -printf "%f %p\n" | sort -n | sed 's/.* //' | head -30 | xargs gmv -t ./A/ Preparation For the below commands to work, you’ll need to use GNU find. If you are using a Mac, you’ll need to install the GNU version of find and mv…
    Continue reading »

  • SAP Web IDE: Invalid backend response received by SCC
    Connectivity between SAP Cloud Platform and an on premise SAP NetWeaver system is normally achieved via SAP Cloud Connector. A nice feature depending on this is the remote connection of SAP Web IDE to an on premise ABAP system. The feature allows to easily load apps from the ABAP system and change or extend them from everywhere. For this feature to work, some ICF services must be active on the ABAP system and remote access enabled on SCC. If not, Web IDE cannot “talk” to NW ABAP. Some possible errors and solutions regarding the setup are shown in this blog. Scenario A NetWeaver ABAP system with Fiori apps is available and the SAP Cloud Connector is configured to expose the…
    Continue reading »