From 9e8fbb5f2bb41e712e9680f825d238181876f45c Mon Sep 17 00:00:00 2001 From: Akshay Date: Wed, 11 Mar 2020 23:53:26 +0530 Subject: finish up rss feeds --- docs/index.xml | 519 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ generate.sh | 7 +- rss.esh | 37 ++++ 3 files changed, 562 insertions(+), 1 deletion(-) create mode 100644 docs/index.xml create mode 100644 rss.esh diff --git a/docs/index.xml b/docs/index.xml new file mode 100644 index 0000000..cb23ad8 --- /dev/null +++ b/docs/index.xml @@ -0,0 +1,519 @@ + + + nerdypepper's μblog + https://peppe.rs + programming, design, software + + + nerdypepper logo + https://u.peppe.rs/n.png + https://peppe.rs + + en-us + Creative Commons BY-NC-SA 4.0 + +Termux Tandem +

I learnt about termux from a friend on IRC recently. +It looked super gimmicky to me at first, but it eventually +proved to be useful. Here's what I use it for:

+ +

rsync

+ +

Ever since I degoogled my android device, syncing files +between my phone and my PC has always been a pain. I’m +looking at you MTP. But, with termux and sshd all set up, +it's as simple as:

+ +
$ arp
+Address         HWtype  HWad ...
+192.168.43.187  ether   d0:0 ...
+
+$ rsync -avz 192.168.43.187:~/frogs ~/pics/frogs
+
+ +

ssh & tmux

+ +

My phone doubles as a secondary view into my main machine +with ssh and tmux. When I am away from my PC (read: +sitting across the room), I check build status and IRC +messages by sshing into a tmux session running the said +build or weechat.

+ +

file uploads

+ +

Not being able to access my (ssh-only) file host was +crippling. With a bash instance on my phone, I just copied +over my ssh keys, and popped in a file upload script (a +glorified scp). Now I just have to figure out a way to +clean up these file names …

+ +
~/storage/pictures/ $ ls
+02muf5g7b2i41.jpg  7alt3cwg77841.jpg  cl4bsrge7id11.png
+mtZabXG.jpg        p8d5c584f2841.jpg  vjUxGjq.jpg
+
+ +

cmus

+ +

Alright, I don't really listen to music via cmus, but I +did use it a couple times when my default music player was +acting up. cmus is a viable option:

+ +

cmus.png

+https://peppe.rs/posts/termux_tandem/ +Sun, 08 Mar 20 16:47:00 +0000 +https://peppe.rs/posts/termux_tandem/ +
+ +Call To ARMs +

My 4th semester involves ARM programming. And proprietary +tooling (Keil C). But we don't do that here.

+ +

Building

+ +

Assembling and linking ARM binaries on non-ARM architecture +devices is fairly trivial. I went along with the GNU cross +bare metal toolchain binutils, which provides arm-as and +arm-ld (among a bunch of other utils that I don't care +about for now).

+ +

Assemble .s files with:

+ +
arm-none-eabi-as main.s -g -march=armv8.1-a -o main.out
+
+ +

The -g flag generates extra debugging information that +gdb picks up. The -march option establishes target +architecture.

+ +

Link .o files with:

+ +
arm-none-eabi-ld main.out -o main
+
+ +

Running (and Debugging)

+ +

Things get interesting here. gdb on your x86 machine +cannot read nor execute binaries compiled for ARM. So, we +simulate an ARM processor using qemu. Now qemu allows you +to run gdbserver on startup. Connecting our local gdb +instance to gdbserver gives us a view into the program’s +execution. Easy!

+ +

Run qemu, with gdbserver on port 1234, with our ARM +binary, main:

+ +
qemu-arm -singlestep -g 1234 main
+
+ +

Start up gdb on your machine, and connect to qemu’s +gdbserver:

+ +
(gdb) set architecture armv8-a
+(gdb) target remote localhost:1234
+(gdb) file main
+Reading symbols from main...  # yay!
+
+ +

GDB Enhanced

+ +

gdb is cool, but it's not nearly as comfortable as well +fleshed out emulators/IDEs like Keil. Watching registers, +CPSR and memory chunks update is pretty fun.

+ +

I came across gdb's TUI mode (hit C-x C-a or type tui +enable at the prompt). TUI mode is a godsend. It highlights +the current line of execution, shows you disassembly +outputs, updated registers, active breakpoints and more.

+ +

But, it is an absolute eyesore.

+ +

Say hello to GEF! “GDB +Enhanced Features” teaches our old dog some cool new tricks. +Here are some additions that made my ARM debugging +experience loads better:

+ +
    +
  • Memory watches
  • +
  • Register watches, with up to 7 levels of deref (overkill, +I agree)
  • +
  • Stack tracing
  • +
+ +

And it's pretty! See for yourself:

+ +

gef.png

+ +

Editing

+ +

Vim, with syntax off because it +dosen't handle GNU ARM syntax too well.

+https://peppe.rs/posts/call_to_ARMs/ +Fri, 07 Feb 20 18:30:00 +0000 +https://peppe.rs/posts/call_to_ARMs/ +
+ +Color Conundrum +

This piece aims to highlight (pun intended) some of the +reasons behind my color +free editor setup.

+ +

Imagine highlighting an entire book because all of it is +important. That is exactly what (most) syntax highlighting +does. It is difficult for the human eye to filter out noise +in rainbow barf. Use color to draw attention, not diverge +it.

+ +

At the same time, a book devoid of color is boring! What +is the takeaway from this 10 line paragraph? What are the +technical terms used?

+ +

Prose and code are certainly different, but the fickle +minded human eye is the same. The eye constantly looks for a +frame of reference, a focal point. It grows tired when it +can't find one.

+ +

The following comparison does a better job of explaining +(none, ample and over-the-top highlighting, from left to +right):

+ +

hi.png

+ +

Without highlighting (far left), it is hard to differentiate +between comments and code! The florid color scheme (far +right) is no good either, it contains too many attention +grabbers. The center sample is a healthy balance of both. +Function calls and constants stand out, and repetitive +keywords and other noise (let, as) are mildly dimmed +out. Comments and non-code text (sign column, status text) +are dimmed further.

+ +

I'll stop myself before I rant about color contrast and +combinations.

+https://peppe.rs/posts/color_conundrum/ +Mon, 30 Dec 19 18:30:00 +0000 +https://peppe.rs/posts/color_conundrum/ +
+ +Static Sites With Bash +

After going through a bunch of static site generators +(pelican, +hugo, +vite), I decided to roll +my own. If you are more of the ‘show me the code’ kinda guy, +here you go.

+ +

Text formatting

+ +

I chose to write in markdown, and convert +to html with lowdown.

+ +

Directory structure

+ +

I host my site on GitHub pages, so +docs/ has to be the entry point. Markdown formatted posts +go into posts/, get converted into html, and end up in +docs/index.html, something like this:

+ +
posts=$(ls -t ./posts)     # chronological order!
+for f in $posts; do
+    file="./posts/"$f      # `ls` mangled our file paths
+    echo "generating post $file"
+
+    html=$(lowdown "$file")
+    echo -e "html" >> docs/index.html
+done
+
+ +

Assets

+ +

Most static site generators recommend dropping image +assets into the site source itself. That does have it’s +merits, but I prefer hosting images separately:

+ +
# strip file extension
+ext="${1##*.}"
+
+# generate a random file name
+id=$( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 2 | head -n 1 )
+id="$id.$ext"
+
+# copy to my file host
+scp -P 443 "$1" emerald:files/"$id" 
+echo "https://u.peppe.rs/$id"
+
+ +

Templating

+ +

generate.sh +brings the above bits and pieces together (with some extra +cruft to avoid javascript). It uses sed to produce nice +titles from the file names (removes underscores, +title-case), and date(1) to add the date to each post +listing!

+https://peppe.rs/posts/static_sites_with_bash/ +Fri, 22 Nov 19 18:30:00 +0000 +https://peppe.rs/posts/static_sites_with_bash/ +
+ +My Setup +

Decided to do one of these because everyone does one of +these.

+ +

scrot

+ +

My entire setup is managed with GNU stow, making it easier +to replicate on fresh installations. You can find my +configuration files on GitHub.

+ +

I run Void Linux (glibc) on my +HP Envy 13” (2018). +To keep things simple, I run a raw X session with 2bwm as my +window manager, along with dunst (notification daemon) and +Sam's compton +(compositor) fork.

+ +

I am a fan of GNU tools, so I use bash as my shell, and +coreutils to manage files, archives, strings, paths etc. I +edit files with vim, chat with weechat, listen to music +with cmus, monitor processes with htop, manage sessions +with tmux, read pdfs in zathura. I rarely ever leave +the comfort of my terminal emulator, urxvt.

+ +

Most of my academic typesetting is done with TeX, and +compiled with xelatex. Other fun documents are made with +GIMP :).

+https://peppe.rs/posts/my_setup/ +Wed, 06 Nov 19 18:30:00 +0000 +https://peppe.rs/posts/my_setup/ +
+ +WPA Woes +

I finally got around to installing Void GNU/Linux on my main +computer. Rolling release, non-systemd, need I say more?

+ +

As with all GNU/Linux distributions, wireless networks had +me in a fix. If you can see this post, it means I've managed +to get online. It turns out, wpa_supplicant was detecting the +wrong interface by default (does it ever select the right +one?). Let us fix that:

+ +
$ sudo rm -r /var/service/wpa_supplicant
+$ sudo killall dhcpcd
+
+ +

What is the right interface though?

+ +
$ iw dev
+   ...
+   Interface wlp2s0
+   ...
+
+ +

Aha! Let us run wpa_supplicant on that interface, as a +background process:

+ +
$ sudo wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/wpa_supplicant.conf
+$ sudo dhcpcd -B wlp2s0
+$ ping google.com
+PING ...
+
+ +

Yay! Make those changes perpetual by enabling the service:

+ +
------------------------------------------------------
+# Add these to /etc/wpa_supplicant/wpa_supplicant.conf
+OPTS="-B"
+WPA_INTERFACE="wlp2s0"
+------------------------------------------------------
+$ sudo ln -s /etc/sv/wpa_supplicant /var/service/
+$ sudo ln -s /etc/sv/dhcpcd /var/service/
+$ sudo sv restart wpa_supplicant
+$ sudo sv restart dhcpcd
+
+https://peppe.rs/posts/WPA_woes/ +Sat, 12 Oct 19 16:18:00 +0000 +https://peppe.rs/posts/WPA_woes/ +
+ +Bye Bye BDFs +

Glyph Bitmap Distribution Format is no more, as the creators of +Pango, one of the most widely used text rendering +libraries, +announced +their plans for Pango 1.44.

+ +

Until recently, Pango used FreeType to draw fonts. They will be moving over +to Harfbuzz, an evolution of FreeType.

+ +

Why?

+ +

In short, FreeType was hard to work with. It required complex logic, and +provided no advantage over Harfbuzz (other than being able to fetch +opentype metrics with ease).

+ +

Upgrading to Pango v1.44 will break your GTK applications (if you use a +bdf/pcf bitmap font). Harfbuzz does support bitmap-only OpenType fonts, +otbs. Convert your existing fonts over to otbs using +FontForge. It is to be noted that applications +such as xterm and rxvt use xft (X FreeType) to render fonts, and will +remain unaffected by the update.

+ +

Both scientifica and +curie will soon ship with bitmap-only +OpenType font formats.

+https://peppe.rs/posts/bye_bye_BDFs/ +Wed, 07 Aug 19 12:31:00 +0000 +https://peppe.rs/posts/bye_bye_BDFs/ +
+ +Onivim Sucks +

Onivim is a ‘modern modal editor’, combining fancy +interface and language features with vim-style modal editing. What's wrong you +ask?

+ +

Apart from buggy syntax highlighting, +broken scrolling and +others, +Onivim is proprietary software. It is licensed under a commercial +end user agreement license, +which prohibits redistribution in both object code and source code formats.

+ +

Onivim's core editor logic (bits that belong to vim), have been separated from +the interface, into libvim. libvim is +licensed under MIT, which means, this ‘extension’ of vim is perfectly in +adherence to vim's license text! +Outrun Labs are exploiting this loophole (distributing vim as a library) to +commercialize Onivim.

+ +

Onivim's source code is available on GitHub. +They do mention that the source code trickles down to the +oni2-mit repository, which (not yet) contains +MIT-licensed code, 18 months after each commit to the original repository.

+ +

Want to contribute to Onivim? Don't. They make a profit out of your contributions. +Currently, Onivim is priced at $19.99, ‘pre-alpha’ pricing which is 80% off the +final price! If you are on the lookout for an editor, I would suggest using +Vim, charity ware that actually works, and costs $100 lesser.

+https://peppe.rs/posts/onivim_sucks/ +Fri, 02 Aug 19 12:31:00 +0000 +https://peppe.rs/posts/onivim_sucks/ +
+ +Bash Harder With Vim +

Bash is tricky, don't let your editor get in your way. Here's a couple of neat +additions you could make to your vimrc for a better shell programming +experience.

+ +

Man pages inside vim

+ +

Source this script to get started:

+ +
runtime ftplugin/man.vim
+
+ +

Now, you can open manpages inside vim with :Man! It adds nicer syntax highlighting +and the ability to jump around with Ctrl-] and Ctrl-T.

+ +

By default, the manpage is opened in a horizontal split, I prefer using a new tab:

+ +
let g:ft_man_open_mode = 'tab'
+
+ +

Scratchpad to test your commands

+ +

I often test my sed substitutions, here is +a sample from the script used to generate this site:

+ +
# a substitution to convert snake_case to Title Case With Spaces
+echo "$1" | sed -E -e "s/\..+$//g"  -e "s/_(.)/ \u\1/g" -e "s/^(.)/\u\1/g"
+
+ +

Instead of dropping into a new shell, just test it out directly from vim!

+ +
    +
  • Yank the line into a register:

    + +
    yy
    +
  • +
  • Paste it into the command-line window:

    + +
    q:p
    +
  • +
  • Make edits as required:

    + +
    syntax off            # previously run commands
    +edit index.html       # in a buffer!
    +w | so %
    +!echo "new_post.md" | sed -E -e "s/\..+$//g"  --snip--
    +^--- note the use of '!'
    +
  • +
  • Hit enter with the cursor on the line containing your command!

    + +
    $ vim
    +New Post         # output
    +Press ENTER or type command to continue
    +
  • +
+https://peppe.rs/posts/bash_harder_with_vim/ +Wed, 31 Jul 19 06:30:00 +0000 +https://peppe.rs/posts/bash_harder_with_vim/ +
+ +Hold Position! +

Often times, when I run a vim command that makes “big” changes to a file (a +macro or a :vimgrep command) I lose my original position and feel disoriented.

+ +

Save position with winsaveview()!

+ +

The winsaveview() command returns a Dictionary that contains information +about the view of the current window. This includes the cursor line number, +cursor coloumn, the top most line in the window and a couple of other values, +none of which concern us.

+ +

Before running our command (one that jumps around the buffer, a lot), we save +our view, and restore it once its done, with winrestview.

+ +
let view = winsaveview()
+s/\s\+$//gc              " find and (confirm) replace trailing blanks
+winrestview(view)        " restore our original view!
+
+ +

It might seem a little overkill in the above example, just use `` (double +backticks) instead, but it comes in handy when you run your file through +heavier filtering.

+https://peppe.rs/posts/hold_position!/ +Tue, 30 Jul 19 12:31:00 +0000 +https://peppe.rs/posts/hold_position!/ +
+ +Get Better At Yanking And Putting In Vim +
    +
  1. reselecting previously selected text (i use this to fix botched selections):

    + +
    gv  " :h gv for more
    +    " you can use `o` in visual mode to go to the `Other` end of the selection
    +    " use a motion to fix the selection
    +
  2. +
  3. reselecting previously yanked text:

    + +
    `[v`]
    +`[         " marks the beginning of the previously yanked text   :h `[
    +`]         " marks the end                                       :h `]
    + v         " visual select everything in between
    +
    +nnoremap gb `[v`]    " "a quick map to perform the above
    +
  4. +
  5. pasting and indenting text (in one go):

    + +
    ]p   " put (p) and adjust indent to current line
    +]P   " put the text before the cursor (P) and adjust indent to current line
    +
  6. +
+https://peppe.rs/posts/get_better_at_yanking_and_putting_in_vim/ +Mon, 29 Jul 19 12:31:00 +0000 +https://peppe.rs/posts/get_better_at_yanking_and_putting_in_vim/ +
+ + +
+
diff --git a/generate.sh b/generate.sh index ccae2dd..a836eb1 100755 --- a/generate.sh +++ b/generate.sh @@ -116,9 +116,14 @@ for f in $posts; do title="$post_title" \ read_time="$r_time" \ height="$height" - done +# generate rss feeds +echo "generating RSS feeds ..." +esh -s /bin/bash \ + -o "./docs/index.xml" \ + "rss.esh" + cat >> ./docs/index.html << EOF
diff --git a/rss.esh b/rss.esh new file mode 100644 index 0000000..941ccd7 --- /dev/null +++ b/rss.esh @@ -0,0 +1,37 @@ + + + nerdypepper's μblog + https://peppe.rs + programming, design, software + + + nerdypepper logo + https://u.peppe.rs/n.png + https://peppe.rs + + en-us + Creative Commons BY-NC-SA 4.0 + <% for f in `ls -t ./posts`; do + file="./posts/"$f + post_date=$(date -u -r "$file" "+%a, %d %b %y %H:%M:00 %z") + html=$(lowdown "$file") + id="${file##*/}" + id="${id%.*}" + post_title=$(echo "$id" | sed -E -e "s/\..+$//g" -e "s/_(.)/ \u\1/g" -e "s/^(.)/\u\1/g") + post_link="https://peppe.rs/posts/$id/" + + echo "" + + echo "$post_title" + echo "$html" + echo "$post_link" + echo "$post_date" + echo "$post_link" + + echo "" + + done + %> + + + -- cgit v1.2.3