[WayBack] Exit Vim 2 Win shows the use of vim.js for a challenge.
Source code at [WayBack] GitHub – idoco/exit-vim-2-win: Exiting vim eventually
–jeroen
Posted by jpluimers on 2021/04/01
[WayBack] Exit Vim 2 Win shows the use of vim.js for a challenge.
Source code at [WayBack] GitHub – idoco/exit-vim-2-win: Exiting vim eventually
–jeroen
Posted in Apri1st, Development, Fun, JavaScript/ECMAScript, Software Development | Leave a Comment »
Posted by jpluimers on 2021/03/31
Based on [WayBack] linux – How can I execute a series of commands in a bash subshell as another user using sudo? – Stack Overflow:
alias restart-spotlight-service-as-root="sudo bash -c 'echo stop;launchctl stop com.apple.metadata.mds;echo start;launchctl start com.apple.metadata.mds;echo started'"
The bold bits above sudo bash -c 'echo stop;launchctl stop com.apple.metadata.mds;echo start;launchctl start com.apple.metadata.mds;echo started' allow the commands between single quotes to executed in one new bash shell under sudo.
–jeroen
Posted in *nix, *nix-tools, Apple, bash, bash, Development, Mac OS X / OS X / MacOS, Power User, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2021/03/25
A great way for testing REST JSON calls is using the [WayBack] JSONPlaceholder – Fake online REST API for developers:
Fake Online REST API for Testing and Prototyping
Serving ~200M requests per month
Powered by JSON Server [WayBack] + LowDB [WayBack]
It is like [WayBack] Placeholder.com: Placeholder Images Done For You [JPG, GIF & PNG] but for JSON and supports both CORS and JSON-P for cross domain requests.
You can either use that site (which has a predefined set of REST calls) or the basic [WayBack] My JSON Server – Fake online REST server for teams that allows you to respond it to a db.json file from github:
Fake Online REST server for teams
Create a JSON file on GitHub
github.com/user/repo/master/db.json{ "posts": [ { "id": 1, "title": "hello" } ], "profile": { "name": "typicode" } }Get instantly a fake server
my-json-server.typicode.com/user/repo/posts/1{ "id": 1, "title": "hello" }
There is basic documentation at the repository [WayBack] GitHub – typicode/jsonplaceholder: A simple online fake REST API server:
Posted in Communications Development, Development, HTTP, Internet protocol suite, JavaScript/ECMAScript, JSON, REST, Scripting, Software Development, TCP | Leave a Comment »
Posted by jpluimers on 2021/03/25
I bumped into this amazing JScript/batch file hybrid. It starts as a batch file, then continues as a JScript script, and creates/updates .lnk files: [WayBack] batch.scripts/shortcutJS.bat at master · npocmaka/batch.scripts · GitHub.
Wow. Just wow.
Not that I would want to be the one maintaining it (:
Via [WayBack] batch file – How do I create a shortcut via command-line in Windows? – Stack Overflow of which I like these answers most:
Check the shortcutJS.bat – it is a jscript/bat hybrid and should be used with .bat extension:
call shortcutJS.bat -linkfile "%~n0.lnk" -target "%~f0" -linkarguments "some arguments"
With -help you can check the other options (you can set icon , admin permissions and etc.)
http://www.nirsoft.net/utils/nircmd.html
Full instructions here: http://www.nirsoft.net/utils/nircmd2.html#using (Scroll down to the “shortcut” section.)
Yes, using nircmd does mean you are using another 3rd-party .exe, but it can do some functions not in (most of) the above solutions (e.g., pick a icon # in a dll with multiple icons, assign a hot-key, and set the shortcut target to be minimized or maximized).
Though it appears that the shortcutjs.bat solution above can do most of that, too, but you’ll need to dig more to find how to properly assign those settings. Nircmd is probably simpler.
–jeroen
Posted in Batch-Files, Development, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2021/03/11
For my script list:
/system ntp client set enabled=yes server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org,3.pool.ntp.org /delay 10 /system ntp client print
If the delay was long enough, you will see output like this:
enabled: yes primary-ntp: 0.0.0.0 secondary-ntp: 0.0.0.0 server-dns-names: 0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org,3.pool.ntp.org mode: unicast poll-interval: 15m active-server: 149.210.230.59 last-update-from: 149.210.230.59 last-update-before: 29s290ms last-adjustment: 702us
If the delay was too short, the lines after mode will not be present.
–jeroen
Posted in Development, RouterOS, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2021/03/11
This makes it way easier to save WayBack content:
[WayBack] GitHub – pastpages/savepagenow: A simple Python wrapper for archive.org’s “Save Page Now” capturing service
A poor-mans alternative is the below bash script from [WayBack] Saving of public Google+ content at the Internet Archive’s Wayback Machine by the Archive Team has begun : plexodus:
For Linux, MacOS / OSX, BSD, and other Unix-like operating systems (including Android with Termux, or Windows, with a Unix/Linux environment), the following script (I’ve saved this as
archive-url) will archive the requested URL:#!/bin/bash # archive-url # Archive selected URL at the Internet Archive curl -s -I -H "Accept: application/json" "https://web.archive.org/save/${1}" | grep '^x-cache-key:' | sed "s,https,&://,; s,\(${1}\).*$,\1,"Save that to your execution path (I’ve chosen
~/bin, you might use/usr/local/binor another location on your$PATH, and invoke as, say (again referring to the G+MM homepage):$ archive-url https://plus.google.com/communities/112164273001338979772If you have a list of URLs in a file (or pipelined from command output), you can request all of them to be archived in a simple bash loop. I’m using xargs here to run ten simultaneous requests from the file
gplus-urllist:cat gplus_urllist | while read url do xargs -I{} -P 10 archive-url {}; doneI’ve run this on over 10,000 URLs over a modest residential broadband connection in a hair over two hours.
Note that such requests trigger an archive by the Internet Archive from one of its archiving nodes, you’re not sending the page to the Archive yourself. In particular, archival from regions defaulting to another language may result in the Google+ site content (but not post or comments) being in a different language. I’ve frequently seen my pages turning up in Japanese, for instance.
–jeroen
Posted in bash, Development, Python, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2021/03/10
TL;DR of https://css-tricks.com/debouncing-throttling-explained-examples/:
- debounce: Grouping a sudden burst of events (like keystrokes) into a single one.
- throttle: Guaranteeing a constant flow of executions every X milliseconds. Like checking every 200ms your scroll position to trigger a CSS animation.
- requestAnimationFrame: a throttle alternative. When your function recalculates and renders elements on screen and you want to guarantee smooth changes or animations. Note: no IE9 support.
Full article [WayBack] Debouncing and Throttling Explained Through Examples | CSS-Tricks
Delphi implementations:
TObservable.FromEventPattern(Edit1, 'OnChange');
.Throttle(1000)
.ObserveOn(TScheduler.MainThread)
.Subscribe(
procedure(const args: TNotifyEventArgs)
begin
Caption := Format('searching for %s', [TEdit(args.Sender).Text]);
end);
–jeroen
Posted in Algorithms, Delphi, Development, JavaScript/ECMAScript, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2021/03/04
I bumped into a very interesting [WayBack] choco/RefreshEnv.cmd at master · chocolatey/choco · GitHub.
It allows you to refresh your cmd environment from new settings that were only applied to the registry using the SET command.
Note there is a PowerShell counterpart too: [WayBack] choco/Update-SessionEnvironment.ps1 at master · chocolatey/choco · GitHub
There are many cool tricks in it, most of which you can see in the [WayBack] new commit history, and a few you can find back in the [WayBack] old commit history of the previous repository (I have no idea why those histories have never been merged).
The basic structure is to first create some intermediate batch files, then delete them afterwards:
"%TEMP%\_envget.tmp"
:GetRegEnv to get all environment variables for the MACHINE or USER level, then loop through them and call :SetFromReg during each iteration (except for the Path environment variable which is skipped)."%TEMP%\_envset.tmp"
:SetFromReg to emit one line of SET code to "%TEMP%\_env.cmd"."%TEMP%\_env.cmd"
SET commands for the new environment variable values.All the above methods use quoting to ensure that environment variables having names or values containing spaces are handled correctly.
I like the echo | set /p trick to echo a string without a newline allows it to start as this:
C:\>RefreshEnv
Refreshing environment variables from registry for cmd.exe. Please wait...
then finish like this by appending another string to it:
C:\>RefreshEnv
Refreshing environment variables from registry for cmd.exe. Please wait...Finished..
It is explained in the old history at [WayBack] (GH-153)(GH-134) Update PATH on cmd.exe · chocolatey/chocolatey@a09e158 · GitHub.
There is an even more interesting example of this trick in [WayBack] windows – What does /p mean in set /p? – Stack Overflow:
<nul set /p=This will not generate a new line
One hard thing in scripting is taking into account that path names can contain spaces. This means you need to carefully quote path names, but not overdo the quotes, otherwise the quoting works against you.
Two commits from the commit history show there were two weak spots that had to be changed in [WayBack] (GH-1227) Fix: RefreshEnv doesn’t set path w/spaces · chocolatey/choco@fdfcd06 · GitHub.
Environment variables can come from two places in the registry:
HKLM\System\CurrentControlSet\Control\Session Manager\EnvironmentHKCU\EnvironmentNormally, the second overrides the first.
This means they are grabbed from the registry MACHINE and USER order, then applied to the cmd environment.
PATHThe PATH environment variable is special for two reasons:
Path, but in the environment it is usually called PATH (this is true for both the MACHINE and USER parts of the registry). New values are applied with the Path environment variable name, so after executing RefreshEnv once, they are called Path in the cmd.exe environment too.:: Caution: do not insert space-chars before >> redirection sign echo/set "Path=%%Path_HKLM%%;%%Path_HKCU%%" >> "%TEMP%\_env.cmd"
I am not sure why there is a space before the >>, given there is a comment above it there should not be one.
The SET command however, puts the MACHINE PATH in front of the USER PATH.
USERNAME, and collateral PROCESSOR_ARCHITECTUREThe USERNAME environment variable special too. In the registry, it is only in the MACHINE part, but with a value SYSTEM.
In cmd.exe, it is actually filled with the current username, so it should not be overwritten with the one in the MACHINE part.
Currently this is resolved by storing a copy of the old value of USERNAME and PROCESSOR_ARCHITECTURE in [WayBack] (GH-902) Fix: User changed to SYSTEM during env update · chocolatey/choco@cb6b92c · GitHub.
I am not sure why PROCESSOR_ARCHITECTURE is also stores.
In any case, this means that setting a USERNAME or PROCESSOR_ARCHITECTURE in the USER part of the registry, will not be reflected by RefreshEnv.
I am not sure yet when that can cause problems, so this is a reminder to myself that if ever it does, then this logic needs to be changed.
–jeroen
Posted in Batch-Files, Development, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2021/02/19
As a follow-up on Still looking for base64url decoding tools, both on-line and for MacOS homebrew: this is in Python, works on MacOS, Linux and Windows, and can be integrated in a web page.
It is based on the ideas in [WayBack] Python-Twitter-Hacks/websiteScreenshot.py at master · edent/Python-Twitter-Hacks · GitHub, which was more like a code snippet with hard coded literals.
It downloads a jpeg web-site screenshot using the Google PageSpeed API V1, which generates the screenshot as a base64url encoded blob inside a JSON structure.
Python does not have native Python base64url support, but the concept of it is fairly straightforward: [WayBack] RFC 4648 – The Base16, Base32, and Base64 Data Encodings: Base 64 Encoding with URL and Filename Safe Alphabet, which allows data to be passed inside URLs without reverting to [WayBack] Percent-encoding – Wikipedia.
My changes work, but are by no means in canonical form or Idiomatic Python. I have a long way to go to reach that level of Python.
So I forked the repository, and fixed the script basing it on Python 3.
I might make it V2 compatible in the future. More information on V2 in [WayBack] Google APIs Explorer: Services > PageSpeed Insights API v2 > pagespeedonline.pagespeedapi.runpagespeed
Content is in the below gist.
–jeroen
Posted in base64, base64url, Development, Encoding, Python, Scripting, Software Development | Leave a Comment »
Posted by jpluimers on 2021/02/18
Recently, I bumped into [WayBack] Write-Output confusion for the upteenth time.
Luckily I had the below links archived, basically invalidating the use of Write-Output, and invalidating the answer at [WayBack] powershell – What’s the difference between “Write-Host”, “Write-Output”, or “[console]::WriteLine”? – Stack Overflow.
Posted in CommandLine, Development, PowerShell, PowerShell, Scripting, Software Development | Leave a Comment »