<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Aleim</title>
  <link href="https://okubax.co.uk/" rel="alternate"/>
  <link href="https://okubax.co.uk/atom.xml" rel="self"/>
  <id>https://okubax.co.uk/</id>
  <updated>2025-06-15T12:00:00+00:00</updated>
  <author><name>Ajibola Okubanjo</name></author>
  <entry>
    <title>Building a Better ii IRC Setup: From Manual Pain to Automated Bliss</title>
    <link href="https://okubax.co.uk/2025/06/15/improved-ii-irc-setup/" rel="alternate"/>
    <id>https://okubax.co.uk/2025/06/15/improved-ii-irc-setup/</id>
    <published>2025-06-15T12:00:00+00:00</published>
    <updated>2025-06-15T12:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Back in 2018, I wrote about setting up &lt;a href=&quot;https://tools.suckless.org/ii/&quot;&gt;ii (IRC it)&lt;/a&gt;, the wonderfully minimal filesystem-based IRC client from suckless. The core idea is brilliant: use standard Unix tools like &lt;code&gt;tail&lt;/code&gt; and &lt;code&gt;echo&lt;/code&gt; to chat on IRC. But honestly? My original setup was pretty clunky and manual.&lt;/p&gt;
&lt;p&gt;Seven years later, I’ve completely rebuilt my ii workflow. What used to be a collection of manual steps and crossed fingers is now a smooth, automated system that actually makes IRC enjoyable to use daily.&lt;/p&gt;
&lt;h2&gt;What Makes This Better&lt;/h2&gt;
&lt;p&gt;The new setup fixes all the pain points that made me occasionally ragequit IRC. No more manual authentication dance thanks to proper password handling per network. Multiple IRC networks that just work without thinking about them. Smart timing instead of “sleep 5 and pray” everywhere. Actual error handling so you know when things break. One command to rule them all for startup and management. And dynamic multitail that automatically finds your active channels.&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;First, install what you need:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# On Arch Linux
sudo pacman -S ii stunnel multitail kitty

# Adjust for your distro&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Setting Up stunnel for SSL&lt;/h2&gt;
&lt;p&gt;Create &lt;code&gt;/etc/stunnel/stunnel.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;setuid = stunnel
setgid = stunnel
CAfile = /etc/ssl/certs/ca-certificates.crt
verify = 2

# Libera Chat
[lb]
client = yes
accept = 127.0.0.1:6698
connect = irc.libera.chat:6697
verifyChain = yes
CApath = /etc/ssl/certs

# Snoonet
[sn]
client = yes
accept = 127.0.0.1:6697
connect = irc.snoonet.org:6697
verifyChain = yes
CApath = /etc/ssl/certs

# OFTC
[of]
client = yes
accept = 127.0.0.1:6699
connect = irc.oftc.net:6697
verifyChain = yes
CApath = /etc/ssl/certs&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enable it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl enable stunnel&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The Main Management Script&lt;/h2&gt;
&lt;p&gt;This is where the magic happens. Save this as &lt;code&gt;~/bin/ii-start&lt;/code&gt; and make it executable:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/bin/bash
# ii-start - Because manually connecting to IRC is for masochists

# Where everything lives
IRC_HOME=&amp;quot;$HOME/irc&amp;quot;
CREDENTIALS_FILE=&amp;quot;$HOME/.config/ii/credentials&amp;quot;

# Server configs: network_name -&amp;gt; host:port:nickname
declare -A SERVERS=(
    [&amp;quot;lb&amp;quot;]=&amp;quot;127.0.0.1:6698:your_nick&amp;quot;
    [&amp;quot;sn&amp;quot;]=&amp;quot;127.0.0.1:6697:your_nick&amp;quot; 
    [&amp;quot;of&amp;quot;]=&amp;quot;127.0.0.1:6699:your_nick&amp;quot;
)

# What channels to join where
declare -A CHANNELS=(
    [&amp;quot;lb&amp;quot;]=&amp;quot;#archlinux #linux #bash&amp;quot;
    [&amp;quot;sn&amp;quot;]=&amp;quot;#help&amp;quot;
    [&amp;quot;of&amp;quot;]=&amp;quot;#debian&amp;quot;
)

# Passwords (you can put them here or in a separate file)
declare -A NETWORK_CREDENTIALS=(
    [&amp;quot;lb:your_nick&amp;quot;]=&amp;quot;your_libera_password&amp;quot;
    [&amp;quot;sn:your_nick&amp;quot;]=&amp;quot;your_snoonet_password&amp;quot;
    [&amp;quot;of:your_nick&amp;quot;]=&amp;quot;your_oftc_password&amp;quot;
)

# Make sure stunnel is actually running
check_stunnel() {
    if ! systemctl is-active --quiet stunnel; then
        echo &amp;quot;Starting stunnel...&amp;quot;
        sudo systemctl start stunnel || {
            echo &amp;quot;Stunnel failed to start. That&amp;#x27;s not good.&amp;quot;
            exit 1
        }
        sleep 2
        echo &amp;quot;✓ stunnel is up&amp;quot;
    else
        echo &amp;quot;✓ stunnel already running&amp;quot;
    fi
}

# Wait for ii to actually connect (no more blind sleeping!)
wait_for_connection() {
    local server_dir=&amp;quot;$1&amp;quot;
    local timeout=30
    local count=0
    
    while [ $count -lt $timeout ]; do
        if [ -p &amp;quot;$server_dir/in&amp;quot; ] &amp;amp;&amp;amp; [ -f &amp;quot;$server_dir/out&amp;quot; ]; then
            return 0
        fi
        sleep 1
        ((count++))
    done
    return 1
}

# Fire up an ii instance
start_ii_instance() {
    local name=&amp;quot;$1&amp;quot;
    local server_info=&amp;quot;${SERVERS[$name]}&amp;quot;
    local host=$(echo &amp;quot;$server_info&amp;quot; | cut -d: -f1)
    local port=$(echo &amp;quot;$server_info&amp;quot; | cut -d: -f2)
    local nick=$(echo &amp;quot;$server_info&amp;quot; | cut -d: -f3)
    
    echo &amp;quot;Connecting to $name as $nick...&amp;quot;
    mkdir -p &amp;quot;$IRC_HOME/$name&amp;quot;
    
    ii -i &amp;quot;$IRC_HOME/$name/&amp;quot; -n &amp;quot;$nick&amp;quot; -s &amp;quot;$host&amp;quot; -p &amp;quot;$port&amp;quot; &amp;amp;
    
    if wait_for_connection &amp;quot;$IRC_HOME/$name/$host&amp;quot;; then
        echo &amp;quot;✓ $name connected&amp;quot;
    else
        echo &amp;quot;✗ $name connection timed out&amp;quot;
        return 1
    fi
}

# Handle NickServ authentication
authenticate() {
    local name=&amp;quot;$1&amp;quot;
    local server_info=&amp;quot;${SERVERS[$name]}&amp;quot;
    local host=$(echo &amp;quot;$server_info&amp;quot; | cut -d: -f1)
    local nick=$(echo &amp;quot;$server_info&amp;quot; | cut -d: -f3)
    
    # Try to find a password
    local password=&amp;quot;${NETWORK_CREDENTIALS[$name:$nick]}&amp;quot;
    
    if [ -z &amp;quot;$password&amp;quot; ] &amp;amp;&amp;amp; [ -f &amp;quot;$CREDENTIALS_FILE&amp;quot; ]; then
        password=$(grep &amp;quot;^$name:$nick:&amp;quot; &amp;quot;$CREDENTIALS_FILE&amp;quot; | cut -d: -f3-)
        if [ -z &amp;quot;$password&amp;quot; ]; then
            password=$(grep &amp;quot;^$nick:&amp;quot; &amp;quot;$CREDENTIALS_FILE&amp;quot; | cut -d: -f2-)
        fi
    fi
    
    if [ -n &amp;quot;$password&amp;quot; ]; then
        echo &amp;quot;Authenticating $nick on $name...&amp;quot;
        
        # Different networks, different syntax (because why make it easy?)
        case &amp;quot;$name&amp;quot; in
            &amp;quot;of&amp;quot;)
                echo &amp;quot;/j NickServ IDENTIFY $password&amp;quot; &amp;gt; &amp;quot;$IRC_HOME/$name/$host/in&amp;quot;
                ;;
            *)
                echo &amp;quot;/j NickServ IDENTIFY $nick $password&amp;quot; &amp;gt; &amp;quot;$IRC_HOME/$name/$host/in&amp;quot;
                ;;
        esac
        
        # Wait for confirmation
        local auth_wait=0
        while [ $auth_wait -lt 20 ]; do
            local server_out=&amp;quot;$IRC_HOME/$name/$host/out&amp;quot;
            local nickserv_out=&amp;quot;$IRC_HOME/$name/$host/nickserv/out&amp;quot;
            
            if ([ -f &amp;quot;$server_out&amp;quot; ] &amp;amp;&amp;amp; tail -n 10 &amp;quot;$server_out&amp;quot; 2&amp;gt;/dev/null | grep -q &amp;quot;You are now identified\|Password accepted\|successfully identified\|now recognized&amp;quot;) || \
               ([ -f &amp;quot;$nickserv_out&amp;quot; ] &amp;amp;&amp;amp; tail -n 10 &amp;quot;$nickserv_out&amp;quot; 2&amp;gt;/dev/null | grep -q &amp;quot;You are now identified\|Password accepted\|successfully identified\|now recognized&amp;quot;); then
                echo &amp;quot;✓ $nick authenticated on $name&amp;quot;
                return 0
            fi
            
            sleep 2
            ((auth_wait += 2))
            echo &amp;quot;  Still waiting for auth... (${auth_wait}s)&amp;quot;
        done
        
        echo &amp;quot;⚠ Auth timeout for $nick on $name (might still work)&amp;quot;
    else
        echo &amp;quot;⚠ No password found for $nick on $name&amp;quot;
    fi
}

# Join all the channels we care about
join_channels() {
    local name=&amp;quot;$1&amp;quot;
    local server_info=&amp;quot;${SERVERS[$name]}&amp;quot;
    local host=$(echo &amp;quot;$server_info&amp;quot; | cut -d: -f1)
    local channels=&amp;quot;${CHANNELS[$name]}&amp;quot;
    
    if [ -n &amp;quot;$channels&amp;quot; ]; then
        echo &amp;quot;Joining channels for $name: $channels&amp;quot;
        for channel in $channels; do
            echo &amp;quot;  Joining $channel...&amp;quot;
            echo &amp;quot;/j $channel&amp;quot; &amp;gt; &amp;quot;$IRC_HOME/$name/$host/in&amp;quot;
            sleep 3
            
            if tail -n 5 &amp;quot;$IRC_HOME/$name/$host/out&amp;quot; 2&amp;gt;/dev/null | grep -q &amp;quot;JOIN.*$channel&amp;quot;; then
                echo &amp;quot;    ✓ Joined $channel&amp;quot;
            else
                echo &amp;quot;    ⚠ Might not have joined $channel&amp;quot;
            fi
        done
    fi
}

# The main event
start_all() {
    echo &amp;quot;Starting the IRC circus...&amp;quot;
    
    check_stunnel || exit 1
    
    local started_instances=()
    for server in &amp;quot;${!SERVERS[@]}&amp;quot;; do
        if start_ii_instance &amp;quot;$server&amp;quot;; then
            started_instances+=(&amp;quot;$server&amp;quot;)
        fi
    done
    
    if [ ${#started_instances[@]} -eq 0 ]; then
        echo &amp;quot;✗ Nothing started. That&amp;#x27;s disappointing.&amp;quot;
        exit 1
    fi
    
    echo &amp;quot;Letting connections settle...&amp;quot;
    sleep 8
    
    echo &amp;quot;=== Time to authenticate ===&amp;quot;
    for server in &amp;quot;${started_instances[@]}&amp;quot;; do
        authenticate &amp;quot;$server&amp;quot;
    done
    
    echo &amp;quot;Waiting for auth to finish...&amp;quot;
    sleep 15
    
    echo &amp;quot;=== Joining channels ===&amp;quot;
    for server in &amp;quot;${started_instances[@]}&amp;quot;; do
        join_channels &amp;quot;$server&amp;quot;
        sleep 5
    done
    
    echo &amp;quot;✓ All done! (${#started_instances[@]} networks connected)&amp;quot;
    echo &amp;quot;Check status: $0 status&amp;quot;
    echo &amp;quot;Start chatting: ii-chat&amp;quot;
}

# Kill everything
stop_all() {
    echo &amp;quot;Shutting down IRC...&amp;quot;
    
    for server in &amp;quot;${!SERVERS[@]}&amp;quot;; do
        local server_info=&amp;quot;${SERVERS[$server]}&amp;quot;
        local host=$(echo &amp;quot;$server_info&amp;quot; | cut -d: -f1)
        local server_dir=&amp;quot;$IRC_HOME/$server/$host&amp;quot;
        
        if [ -p &amp;quot;$server_dir/in&amp;quot; ]; then
            echo &amp;quot;/quit&amp;quot; &amp;gt; &amp;quot;$server_dir/in&amp;quot;
        fi
    done
    
    sleep 3
    pkill -f &amp;quot;ii -i&amp;quot; 2&amp;gt;/dev/null || true
    echo &amp;quot;✓ Everything stopped&amp;quot;
}

# Show what&amp;#x27;s actually running
show_status() {
    echo &amp;quot;=== IRC Status Check ===&amp;quot;
    echo
    
    echo &amp;quot;stunnel service:&amp;quot;
    if systemctl is-active --quiet stunnel; then
        echo &amp;quot;✓ Running&amp;quot;
    else
        echo &amp;quot;✗ Not running&amp;quot;
    fi
    
    echo
    echo &amp;quot;ii processes:&amp;quot;
    local ii_procs=$(pgrep -f &amp;quot;ii -i&amp;quot; | wc -l)
    if [ $ii_procs -gt 0 ]; then
        echo &amp;quot;✓ $ii_procs instances running&amp;quot;
    else
        echo &amp;quot;✗ No ii processes found&amp;quot;
    fi
    
    echo
    echo &amp;quot;Active channels:&amp;quot;
    local channel_count=0
    for server in &amp;quot;${!SERVERS[@]}&amp;quot;; do
        local server_info=&amp;quot;${SERVERS[$server]}&amp;quot;
        local host=$(echo &amp;quot;$server_info&amp;quot; | cut -d: -f1)
        local channels=&amp;quot;${CHANNELS[$server]}&amp;quot;
        
        for channel in $channels; do
            local out_file=&amp;quot;$IRC_HOME/$server/$host/$channel/out&amp;quot;
            if [ -f &amp;quot;$out_file&amp;quot; ]; then
                echo &amp;quot;✓ $server/$channel&amp;quot;
                ((channel_count++))
            fi
        done
    done
    
    if [ $channel_count -eq 0 ]; then
        echo &amp;quot;✗ No active channels&amp;quot;
    fi
}

# Generate the multitail command for viewing everything
show_multitail_command() {
    local cmd=&amp;quot;multitail -CS ii -s 2&amp;quot;
    local files_found=0
    local quiet_mode=false
    
    if [ &amp;quot;$1&amp;quot; = &amp;quot;--quiet&amp;quot; ]; then
        quiet_mode=true
    fi
    
    for server in &amp;quot;${!SERVERS[@]}&amp;quot;; do
        local server_info=&amp;quot;${SERVERS[$server]}&amp;quot;
        local host=$(echo &amp;quot;$server_info&amp;quot; | cut -d: -f1)
        local channels=&amp;quot;${CHANNELS[$server]}&amp;quot;
        
        for channel in $channels; do
            local out_file=&amp;quot;$IRC_HOME/$server/$host/$channel/out&amp;quot;
            if [ -f &amp;quot;$out_file&amp;quot; ]; then
                cmd=&amp;quot;$cmd $out_file&amp;quot;
                ((files_found++))
            fi
        done
    done
    
    if [ $files_found -eq 0 ]; then
        if [ &amp;quot;$quiet_mode&amp;quot; = false ]; then
            echo &amp;quot;No active channels found. Start ii first!&amp;quot;
        fi
        return 1
    fi
    
    if [ &amp;quot;$quiet_mode&amp;quot; = true ]; then
        echo &amp;quot;$cmd&amp;quot;
    else
        echo &amp;quot;Multitail command for $files_found channels:&amp;quot;
        echo &amp;quot;$cmd&amp;quot;
    fi
}

# Handle commands
case &amp;quot;${1:-start}&amp;quot; in
    start)
        start_all
        ;;
    stop)
        stop_all
        ;;
    restart)
        stop_all
        sleep 3
        start_all
        ;;
    status)
        show_status
        ;;
    multitail)
        show_multitail_command
        ;;
    multitail-quiet)
        show_multitail_command --quiet
        ;;
    *)
        echo &amp;quot;Usage: $0 {start|stop|restart|status|multitail|multitail-quiet}&amp;quot;
        echo
        echo &amp;quot;Commands:&amp;quot;
        echo &amp;quot;  start    - Fire up stunnel and ii&amp;quot;
        echo &amp;quot;  stop     - Kill everything&amp;quot; 
        echo &amp;quot;  restart  - Stop and start again&amp;quot;
        echo &amp;quot;  status   - Show what&amp;#x27;s running&amp;quot;
        echo &amp;quot;  multitail - Show command for viewing all channels&amp;quot;
        exit 1
        ;;
esac&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Make it executable:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;chmod +x ~/bin/ii-start&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Optional: Separate Credentials File&lt;/h2&gt;
&lt;p&gt;If you don’t want passwords in the main script:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p ~/.config/ii
cat &amp;gt; ~/.config/ii/credentials &amp;lt;&amp;lt; &amp;#x27;EOF&amp;#x27;
# Format: network:nickname:password OR just nickname:password
lb:your_nick:your_libera_password
sn:your_nick:your_snoonet_password  
of:your_nick:your_oftc_password
EOF

chmod 600 ~/.config/ii/credentials&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Making multitail Look Good&lt;/h2&gt;
&lt;p&gt;Create &lt;code&gt;~/.multitailrc&lt;/code&gt; for better colors:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cat &amp;gt; ~/.multitailrc &amp;lt;&amp;lt; &amp;#x27;EOF&amp;#x27;
colorscheme:irc
cs_re:green:.*your_nick.*
cs_re_s:yellow:(((http|https|ftp|gopher)|mailto):(//)?[^ &amp;lt;&amp;gt;\&amp;quot;[:blank:]]*|(www|ftp)[0-9]?\.[-a-z0-9.]+)
cs_re:cyan:.*has joined #.*
cs_re:blue:.*changed mode.*
cs_re:red:.*has quit.*
cs_re:yellow:.*NOTICE.*
titlebar:%m %u@%h %f (%t) [%l]
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Handy Aliases&lt;/h2&gt;
&lt;p&gt;Add these handy aliases to your shell config to make life easier. The basic ii management commands like ii-start, ii-stop, ii-restart, and ii-status make controlling everything simple. There’s also an ii-chat function that launches multitail with all your active channels in one window. For quick messaging, ii-msg lets you send messages from the command line. And if you want to monitor individual channels, you can set up aliases like ii-arch and ii-linux that tail specific channel logs.&lt;/p&gt;
&lt;p&gt;Reload your shell:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;source ~/.bashrc  # or ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Daily Usage&lt;/h2&gt;
&lt;p&gt;Here’s how you’d typically use this setup. Start everything with the simple command ii-start. View all your channels at once with ii-chat. Send quick messages using ii-msg followed by the server, channel, and your message. Check what’s running anytime with ii-status.&lt;/p&gt;
&lt;h2&gt;Sway Integration (Bonus)&lt;/h2&gt;
&lt;p&gt;If you use Sway, add this to your config:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bindsym $mod+i exec ~/bin/ii-sway chat&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And create &lt;code&gt;~/bin/ii-sway&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/bin/bash
# Sway integration for ii

case &amp;quot;$1&amp;quot; in
    &amp;quot;chat&amp;quot;)
        cmd=$(~/bin/ii-start multitail-quiet)
        if [ $? -eq 0 ] &amp;amp;&amp;amp; [ -n &amp;quot;$cmd&amp;quot; ]; then
            exec kitty -e sh -c &amp;quot;$cmd&amp;quot;
        else
            notify-send &amp;quot;ii IRC&amp;quot; &amp;quot;No active channels. Start ii first!&amp;quot;
        fi
        ;;
        
    &amp;quot;status&amp;quot;)
        status=$(~/bin/ii-start status 2&amp;gt;&amp;amp;1)
        notify-send &amp;quot;ii IRC Status&amp;quot; &amp;quot;$status&amp;quot;
        ;;
        
    *)
        echo &amp;quot;Usage: $0 {chat|status}&amp;quot;
        exit 1
        ;;
esac&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Why This Is So Much Better&lt;/h2&gt;
&lt;p&gt;This setup is so much better for several reasons. It actually works reliably instead of using “sleep 5 and hope for the best” scripting since the new setup waits for actual confirmation at each step. Zero manual work is required because one command connects to all your networks, handles authentication, and joins your channels. Multi-network support is made easy since each network can have different settings, passwords, and channels without any mental overhead. You know when things break thanks to proper error handling and status reporting, which means no more mystery IRC failures. And best of all, it’s still just ii under the hood, so all the Unix philosophy goodness remains. You’re still just using files and pipes to chat, but the automation handles all the boring setup stuff.&lt;/p&gt;
&lt;h2&gt;Wrapping Up&lt;/h2&gt;
&lt;p&gt;This setup transforms ii from “interesting but painful” to “actually pleasant to use daily.” The core ii experience is unchanged, you’re still just echoing to files and tailing logs. But now all the tedious connection management happens automatically.&lt;/p&gt;
&lt;p&gt;Whether you’re lurking in development channels, helping newbies, or just enjoying the simplicity of text-based IRC, this gives you a solid foundation that won’t make you want to ragequit when something breaks.&lt;/p&gt;
&lt;p&gt;Time to get back to chatting!&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Quick Fix: Getting Clipman to Work with Wofi Height Settings</title>
    <link href="https://okubax.co.uk/2025/06/12/clipman-wofi-fix/" rel="alternate"/>
    <id>https://okubax.co.uk/2025/06/12/clipman-wofi-fix/</id>
    <published>2025-06-12T00:00:00+00:00</published>
    <updated>2025-06-12T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;I ran into a silly little issue today while setting up clipboard management in Sway. I wanted to use &lt;a href=&quot;https://github.com/chmouel/clipman&quot;&gt;clipman&lt;/a&gt; with &lt;a href=&quot;https://hg.sr.ht/~scoopta/wofi&quot;&gt;wofi&lt;/a&gt; as my picker, and I specifically wanted the picker window to be 260px tall.&lt;/p&gt;
&lt;p&gt;My first attempt was the obvious one:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clipman pick -t wofi -H 260&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But instead of a nice clipboard picker, I got slapped with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clipman: error: unknown short flag &amp;#x27;-H&amp;#x27;, try --help&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Well, that’s embarrassing. Turns out I was being dumb. The &lt;code&gt;-H 260&lt;/code&gt; flag isn’t for clipman at all, it’s for wofi! I was passing wofi’s arguments directly to clipman, which had no idea what to do with them.&lt;/p&gt;
&lt;h2&gt;The Actual Solution&lt;/h2&gt;
&lt;p&gt;The right way to do this is with clipman’s &lt;code&gt;--tool-args&lt;/code&gt; option:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clipman pick -t wofi --tool-args=&amp;quot;-H 260&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This tells clipman to use wofi and passes the height argument where it actually belongs.&lt;/p&gt;
&lt;h2&gt;Why This Even Happened&lt;/h2&gt;
&lt;p&gt;Here’s the weird part. This whole thing started because I tweaked my display scaling in Sway. I’d been happily using this keybinding for ages:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bindsym Mod1+h exec clipman pick -t wofi&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Everything worked great until I adjusted my laptop’s DPI settings. I bumped the scale from 2 to 2.2 because things were getting too small for my tired eyes:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;output eDP-1 scale 2.2&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At home I use an external monitor scaled to 1.25:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;output HDMI-A-1 scale 1.25&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After that scale change, clipman started acting weird on the external monitor. It would work fine on the laptop screen but completely fail when I switched to the external display. Running it from terminal gave me this lovely error:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Gdk-Message: 18:14:23.630: Error flushing display: Protocol error&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I spent way too much time googling that error message with zero useful results.&lt;/p&gt;
&lt;p&gt;The breakthrough came when I accidentally tried setting the wofi height explicitly:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clipman pick -t wofi --tool-args=&amp;quot;-H 260&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Suddenly everything worked perfectly, even on the external monitor. Go figure.&lt;/p&gt;
&lt;p&gt;I still don’t fully understand why the height setting fixes the display protocol error, but hey, sometimes you take the wins where you find them.&lt;/p&gt;
&lt;h2&gt;My Current Setup&lt;/h2&gt;
&lt;p&gt;Now my Sway keybinding looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bindsym mod1+h exec &amp;quot;clipman pick -t wofi --tool-args=&amp;#x27;-H 260&amp;#x27;&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or if you prefer keeping scripts separate, which I usually do:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bindsym mod1+h exec &amp;quot;~/.config/sway/scripts/clip-picker.sh&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With the script containing:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/bin/bash
clipman pick -t wofi --tool-args=&amp;quot;-H 260&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Don’t forget to make it executable:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;chmod +x ~/.config/sway/scripts/clip-picker.sh&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Takeaway&lt;/h2&gt;
&lt;p&gt;Sometimes the solution to a mysterious technical problem is just properly reading the documentation. The &lt;code&gt;--tool-args&lt;/code&gt; flag exists specifically for passing arguments to the picker tool, but it’s easy to miss when you’re in “just make it work” mode.&lt;/p&gt;
&lt;p&gt;Hope this saves someone else a few minutes of head scratching!&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>How to Set Up Sway Window Manager on Arch Linux</title>
    <link href="https://okubax.co.uk/2024/12/10/setting-up-sway-on-arch/" rel="alternate"/>
    <id>https://okubax.co.uk/2024/12/10/setting-up-sway-on-arch/</id>
    <published>2024-12-10T00:00:00+00:00</published>
    <updated>2024-12-10T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;The Sway window manager is a tiling Wayland compositor inspired by i3, offering a lightweight, keyboard-driven experience for Linux users. It’s an excellent choice for those who prefer minimalism, configurability, and performance. Here’s a step-by-step guide to setting up Sway on Arch Linux.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Before diving into the installation, ensure you have the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A basic Arch Linux installation.&lt;/li&gt;
&lt;li&gt;A working internet connection.&lt;/li&gt;
&lt;li&gt;Familiarity with the terminal and text editors (like &lt;code&gt;nano&lt;/code&gt;, &lt;code&gt;vim&lt;/code&gt;, or &lt;code&gt;nvim&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Step 1: Update Your System&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;First, update your system to ensure all packages are up-to-date. Open a terminal and run:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
sudo pacman -Syu
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Step 2: Install Sway&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Sway is available in the Arch Linux official repositories, so installing it is straightforward:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
sudo pacman -S sway
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This command installs the core Sway package. However, you’ll need additional tools for a better experience.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Step 3: Install Recommended Utilities&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Here are some additional utilities to enhance your Sway experience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Wayland utilities&lt;/strong&gt;: Tools like &lt;code&gt;wl-clipboard&lt;/code&gt; for clipboard management and &lt;code&gt;grim&lt;/code&gt; for screenshots.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Status bar&lt;/strong&gt;: &lt;code&gt;swaybar&lt;/code&gt; comes with Sway, but tools like &lt;code&gt;waybar&lt;/code&gt; provide more customization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Background manager&lt;/strong&gt;: &lt;code&gt;swaybg&lt;/code&gt; for setting a wallpaper.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application launcher&lt;/strong&gt;: &lt;code&gt;wofi&lt;/code&gt; or &lt;code&gt;rofi-lbonn-wayland&lt;/code&gt; (Wayland-compatible).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notification daemon&lt;/strong&gt;: &lt;code&gt;mako&lt;/code&gt; for system notifications.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install them with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
sudo pacman -S swaybg waybar wofi mako grim wl-clipboard
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Step 4: Configure Sway&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Sway’s configuration file is located at &lt;code&gt;~/.config/sway/config&lt;/code&gt;. If it doesn’t exist, you can copy the default configuration file as a starting point:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
mkdir -p ~/.config/sway

cp /etc/sway/config ~/.config/sway/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Edit the configuration file to customize Sway. For example, to set a wallpaper using &lt;code&gt;swaybg&lt;/code&gt;, add this line:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
exec swaybg -i /path/to/your/wallpaper.jpg -m fill
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also configure keybindings, layout, and other settings in this file.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Step 5: Start Sway&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Once configured, you can start Sway by typing:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
sway
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you’re logging in from a display manager, make sure Sway is listed as a session option. Alternatively, you can start it from a TTY.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Step 6: Fine-Tune Your Environment&lt;/strong&gt;&lt;/h2&gt;
&lt;h3&gt;Set Up Wayland-Compatible Applications&lt;/h3&gt;
&lt;p&gt;Some X11 applications may not work out of the box on Wayland. Install &lt;code&gt;xwayland&lt;/code&gt; to enable compatibility for legacy applications:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
sudo pacman -S xorg-xwayland
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Adjust Fonts and Appearance&lt;/h3&gt;
&lt;p&gt;To set fonts and GTK themes, install &lt;code&gt;gtk3&lt;/code&gt; and &lt;code&gt;lxappearance&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
sudo pacman -S gtk3 lxappearance
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Use &lt;code&gt;lxappearance&lt;/code&gt; to tweak the appearance of GTK apps.&lt;/p&gt;
&lt;h3&gt;Configure Waybar&lt;/h3&gt;
&lt;p&gt;Waybar is a customizable status bar. Edit its configuration and style files located at &lt;code&gt;~/.config/waybar/config&lt;/code&gt; and &lt;code&gt;~/.config/waybar/style.css&lt;/code&gt;. For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;
{

  &amp;quot;layer&amp;quot;: &amp;quot;top&amp;quot;,

  &amp;quot;position&amp;quot;: &amp;quot;top&amp;quot;,

  &amp;quot;modules-left&amp;quot;: [&amp;quot;sway/workspaces&amp;quot;, &amp;quot;clock&amp;quot;],

  &amp;quot;clock&amp;quot;: {

    &amp;quot;format&amp;quot;: &amp;quot;{:%Y-%m-%d %H:%M:%S}&amp;quot;

  }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Step 7: Troubleshooting&lt;/strong&gt;&lt;/h2&gt;
&lt;h3&gt;Logs&lt;/h3&gt;
&lt;p&gt;If Sway fails to start or behaves unexpectedly, check the logs for debugging:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
sway -d 2&amp;gt; sway.log
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Input Issues&lt;/h3&gt;
&lt;p&gt;If your keyboard or mouse doesn’t work, ensure Wayland-compatible input drivers are installed:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
sudo pacman -S libinput
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Step 8: Autostart Sway&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;To start Sway automatically when you log in, add it to your &lt;code&gt;~/.bash_profile&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;
if [ &amp;quot;$(tty)&amp;quot; = &amp;quot;/dev/tty1&amp;quot; ]; then

  exec sway

fi
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;You’ve successfully set up the Sway window manager on Arch Linux! Sway offers a streamlined and efficient workflow for users who appreciate tiling window managers. From here, you can dive deeper into customizing your environment and making it uniquely yours.&lt;/p&gt;
&lt;p&gt;Let me know how your setup goes or if you run into any issues—happy tiling!&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Mastering Vim: A Productivity Revolution with Practical Examples</title>
    <link href="https://okubax.co.uk/2024/01/30/mastering-vim-productivity-revolution-with-practical-examples/" rel="alternate"/>
    <id>https://okubax.co.uk/2024/01/30/mastering-vim-productivity-revolution-with-practical-examples/</id>
    <published>2024-01-30T00:00:00+00:00</published>
    <updated>2024-01-30T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Are you ready to supercharge your coding workflow and boost productivity? Say hello to Vim – a powerful text editor that may seem intimidating at first, but with a bit of effort, can transform the way you work. In this blog post, I’ll explore the key features of Vim, with some examples to get anyone started on their journey to text editing excellence.&lt;/p&gt;
&lt;h2&gt;1. Modal Editing: A New Way of Thinking&lt;/h2&gt;
&lt;p&gt;One of Vim’s defining features is its modal editing system.
Understanding and utilizing different modes may take some time, but the payoff is enormous. Let’s look at an example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;- Normal Mode:&lt;/strong&gt; Press &lt;strong&gt;&lt;code&gt;Esc&lt;/code&gt;&lt;/strong&gt; to enter Normal mode. Here, you can navigate the document using powerful commands. For instance, to delete a line, type &lt;strong&gt;&lt;code&gt;dd&lt;/code&gt;&lt;/strong&gt;.
&lt;strong&gt;- Insert Mode:&lt;/strong&gt; Press &lt;strong&gt;&lt;code&gt;i&lt;/code&gt;&lt;/strong&gt; to enter Insert mode, where you can type and edit text. To return to Normal mode, press &lt;strong&gt;&lt;code&gt;Esc&lt;/code&gt;&lt;/strong&gt;.
&lt;strong&gt;- Visual Mode:&lt;/strong&gt; Press &lt;strong&gt;&lt;code&gt;v&lt;/code&gt;&lt;/strong&gt; to enter Visual mode, allowing you to select text. Once selected, you can copy (&lt;strong&gt;&lt;code&gt;y&lt;/code&gt;&lt;/strong&gt;), cut (&lt;strong&gt;&lt;code&gt;d&lt;/code&gt;&lt;/strong&gt;), or delete (&lt;strong&gt;&lt;code&gt;x&lt;/code&gt;&lt;/strong&gt;) the chosen text.&lt;/p&gt;
&lt;h2&gt;2. Efficient Navigation Commands&lt;/h2&gt;
&lt;p&gt;Vim’s navigation commands are keystroke miracles. Here’s a quick example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To move to the beginning of a line, press 0.&lt;/li&gt;
&lt;li&gt;To jump to the end of a line, press $.&lt;/li&gt;
&lt;li&gt;To navigate word by word, use w to move forward and b to move backward.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Customization for Your Comfort&lt;/h2&gt;
&lt;p&gt;Customizing Vim is where the magic happens. Add the following lines to your ~/.vimrc file to create a custom shortcut:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;quot; Map Ctrl-s to save the file
nnoremap &amp;lt;C-s&amp;gt; :w&amp;lt;CR&amp;gt;

&amp;quot; Map Ctrl-q to quit
nnoremap &amp;lt;C-q&amp;gt; :q&amp;lt;CR&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, you can save by pressing &lt;strong&gt;&lt;code&gt;Ctrl-s&lt;/code&gt;&lt;/strong&gt; and quit with &lt;strong&gt;&lt;code&gt;Ctrl-q&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;4. Harness the power of plugins&lt;/h2&gt;
&lt;p&gt;Vim’s plugin system allows you to extend its functionality. Let’s take the example of installing the popular NERDTree plugin for better file navigation:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Using a plugin manager like Vim-Plug
&amp;quot; Add this to your ~/.vimrc
Plug &amp;#x27;preservim/nerdtree&amp;#x27;

# Open Vim and run the following command
:PlugInstall&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, you can toggle the file explorer with &lt;strong&gt;&lt;code&gt;:NERDTreeToggle&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;5. Search and Replace with Ease&lt;/h2&gt;
&lt;p&gt;Vim’s search and replace capabilities are legendary. To replace all occurrences of “old” with “new,” use the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:%s/old/new/g&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;6. Mastering the Vim Philosophy&lt;/h2&gt;
&lt;p&gt;Vim encourages simplicity and efficiency. Embrace the philosophy by minimizing mouse usage and relying on keyboard shortcuts. The payoff is a streamlined and focused coding experience.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;These examples only scratch the surface of Vim’s capabilities. As you delve deeper, you’ll discover a wealth of features that can revolutionize your text editing experience. Embrace the learning curve, practice consistently, and soon you’ll find yourself navigating and editing text at lightning speed with Vim. Happy coding!&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>How to reset Windows Network Stack</title>
    <link href="https://okubax.co.uk/2023/03/23/windows-tips-how-to-reset-windows-network-stack/" rel="alternate"/>
    <id>https://okubax.co.uk/2023/03/23/windows-tips-how-to-reset-windows-network-stack/</id>
    <published>2023-03-23T00:00:00+00:00</published>
    <updated>2023-03-23T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Back with a Windows tip!&lt;/p&gt;
&lt;p&gt;If you’re experiencing network issues on your Windows system and you’ve tried disconnecting and then connecting back to a network and you still do not have internet access (your system will be connected to a network but you can’t access the internet), one possible remedy is to reset the network stack on Windows.&lt;/p&gt;
&lt;p&gt;Some of the commands used here can be run from the Command Prompt without invoking administrator privileges, but it is strongly advised to run them with elevated privileges.&lt;/p&gt;
&lt;p&gt;Click the start button on your system, or press the Start button on your keyboard and type “cmd”, select ‘Run as an administrator’ and then input the following commands in the Command Prompt (Windows Terminal in the latest version of Windows 11):&lt;/p&gt;
&lt;p&gt;Type &lt;code&gt;ipconfig /release&lt;/code&gt; and press Enter
Type &lt;code&gt;ipconfig /flushdns&lt;/code&gt; and press Enter
Type &lt;code&gt;ipconfig /renew&lt;/code&gt; and press Enter
Type &lt;code&gt;netsh int ip reset&lt;/code&gt; and press Enter (don’t restart yet when prompted)
Type &lt;code&gt;netsh winsock reset&lt;/code&gt; and press Enter&lt;/p&gt;
&lt;p&gt;You can now proceed to restart your system and hopefully when your system comes back on, you would have your internet access restored.&lt;/p&gt;
&lt;p&gt;Till next time!.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>How to merge multple JPG files into one PDF</title>
    <link href="https://okubax.co.uk/2022/11/28/linux-tips-merge-multiple-images-into-one-pdf/" rel="alternate"/>
    <id>https://okubax.co.uk/2022/11/28/linux-tips-merge-multiple-images-into-one-pdf/</id>
    <published>2022-11-28T00:00:00+00:00</published>
    <updated>2022-11-28T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Another quick and simple Linux tip, if you have multiple JPG image files and would like to convert them into a single PDF file then ImageMagick is your friend.&lt;/p&gt;
&lt;p&gt;Let’s say for example you have four imag files anmely: image1.jpg, image2.jpg, image3.jpg and image4.jpg, to convert/merge them into a single PDF file, simply run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;convert image1.jpg image2.jpg image3.jpg image4.jpg images.pdf&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or if the images are all in a folder:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;convert *.jpg images.pdf&lt;/code&gt;&lt;/pre&gt;</content>
  </entry>
  <entry>
    <title>How To get detailed Battery Information on a Windows System</title>
    <link href="https://okubax.co.uk/2022/02/08/windows-tips-how-to-generate-battery-report-in-windows/" rel="alternate"/>
    <id>https://okubax.co.uk/2022/02/08/windows-tips-how-to-generate-battery-report-in-windows/</id>
    <published>2022-02-08T00:00:00+00:00</published>
    <updated>2022-02-08T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;If you like information overload and you have a thing for stats, then you can generate a detailed battery report on your windows system with the help of the powercfg program on a Windows system.&lt;/p&gt;
&lt;p&gt;You can generate a battery report on Windows by running from the cmd line or Windows Terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;powercfg /batteryreport /output &amp;quot;C:\Users\(your windows username)\battery_report.html&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the screenshot below, my username is ‘Olusola’, replace that with yours to generate the battery report&lt;/p&gt;
&lt;img src=&quot;/assets/images/windows/cmd_bat_report.png&quot; alt=&quot;cmd prompt&quot;&gt;
&lt;p&gt;Open the generated html file with the web browser of your choice and it will look something like below:&lt;/p&gt;
&lt;img src=&quot;/assets/images/windows/bat_report.png&quot; alt=&quot;battery report&quot;&gt;</content>
  </entry>
  <entry>
    <title>How To Retrieve Windows 10 Product Key from a Linux System</title>
    <link href="https://okubax.co.uk/2021/05/15/linux-tips-how-retrieve-windows-10-key/" rel="alternate"/>
    <id>https://okubax.co.uk/2021/05/15/linux-tips-how-retrieve-windows-10-key/</id>
    <published>2021-05-15T00:00:00+00:00</published>
    <updated>2021-05-15T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;You’ve got a new Windows 10 machine and like me, swiftly replaced it with a Linux OS - I run ArchLinux on mine, and for whatever reason, you want to retrieve your Windows 10 Product KEY.&lt;/p&gt;
&lt;p&gt;Microsoft incorporates the use of a digital license to activate Windows 10 so you don’t need to remember or know the Product Key for the Windows 10 installation that came with your system. That being said, for record purposes, there’s a way to retrieve your Windows 10 Product Key from your Linux system, you need the hexdump program (provided by &lt;a href=&quot;https://archlinux.org/packages/core/x86_64/util-linux/&quot;&gt;util-linux&lt;/a&gt; on Archlinux).&lt;/p&gt;
&lt;p&gt;On my Dell Laptop, I retrieved my product key by running:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo hexdump -s 56 -e &amp;#x27;&amp;quot;MSDM key: &amp;quot; /29 &amp;quot;%s\n&amp;quot;&amp;#x27; /sys/firmware/acpi/tables/MSDM&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Output will look like the one below (without the X’s):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;MSDM key: RXXXX-7XXX-MXXX-YXXXX-MXXXX&lt;/code&gt;&lt;/pre&gt;</content>
  </entry>
  <entry>
    <title>How to print from Vim in Linux</title>
    <link href="https://okubax.co.uk/2020/11/06/linux-tips-how-to-print-from-vim/" rel="alternate"/>
    <id>https://okubax.co.uk/2020/11/06/linux-tips-how-to-print-from-vim/</id>
    <published>2020-11-06T00:00:00+00:00</published>
    <updated>2020-11-06T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Back after a long hiatus, what a year 2020 has been and we’re not even done with it yet!, anyway, life as people say must go on and so, I am back with another Linux quick tip.&lt;/p&gt;
&lt;p&gt;This time, I’m going to show how you can print from the Vim interface on a Linux system, unlike some other programs, vim cannot print directly to PDF and so one needs to first print to a PostScript file format (.ps) and then convert the PostScript file into PDF.&lt;/p&gt;
&lt;p&gt;To print to a PostScript file from console Vim:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;:hardcopy &amp;gt; file.ps&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and then convert the PostScript file by using the ps2pdf program, forexample, using the file.ps file above, we can convert it to PDF by running the following command in a terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ps2pdf file.ps&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Running the above command will output a PDF file named file.pdf which can be opened with any PDF reader.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>How to merge multiple PDFs</title>
    <link href="https://okubax.co.uk/2020/06/15/linux-tips-merge-multiple-pdfs/" rel="alternate"/>
    <id>https://okubax.co.uk/2020/06/15/linux-tips-merge-multiple-pdfs/</id>
    <published>2020-06-15T00:00:00+00:00</published>
    <updated>2020-06-15T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;This is post no 3 in the general software tips series.&lt;/p&gt;
&lt;p&gt;Let’s say you have two or more PDF files lying around that you would rather they are all in one single PDF document, then you can use Ghostscript to merge your multiple PDFs.&lt;/p&gt;
&lt;p&gt;Make sure you have Ghostscript installed (it might have been installed already if you are using a desktop environment like GNOME or KDE).&lt;/p&gt;
&lt;p&gt;Open up a terminal and enter the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf file3.pdf ...&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the command that we used above,&lt;/p&gt;
&lt;p&gt;output.pdf is the merged PDF file&lt;/p&gt;
&lt;p&gt;file1.pdf, file2.pdf and file3.pdf … are PDF files that we want to merge&lt;/p&gt;
&lt;p&gt;Till next time, bye!.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>How to join two images in GIMP</title>
    <link href="https://okubax.co.uk/2019/08/12/software-tips-join-two-images-gimp/" rel="alternate"/>
    <id>https://okubax.co.uk/2019/08/12/software-tips-join-two-images-gimp/</id>
    <published>2019-08-12T00:00:00+00:00</published>
    <updated>2019-08-12T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;This is the first on the general software tips series, just a quick tip on how to join two images together in GIMP.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;File &gt; New; create a new image with an image size that is bigger
than the combined size of the two images that you are combining
File -&gt; Open as Layers ; open the images you want combined
Use the Move [M] tool to arrange your images as you see fit
Use the Crop [Shift+C] tool to crop the images after rearranging them
File -&gt; Export : save your combined image to the desired  image format&lt;/p&gt;
&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <title>I&#x27;m back</title>
    <link href="https://okubax.co.uk/2019/08/06/im-back/" rel="alternate"/>
    <id>https://okubax.co.uk/2019/08/06/im-back/</id>
    <published>2019-08-06T00:00:00+00:00</published>
    <updated>2019-08-06T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;After taking some months off to deal with a little thing called ‘life’, this blog has now been woken up. Will be making some postings to the blog at least once every month so time to despair, its happening folks! :-).&lt;/p&gt;
&lt;a title=&quot;D464-Darren Hall [CC BY 2.0 (https://creativecommons.org/licenses/by/2.0)], via Wikimedia Commons&quot; href=&quot;https://commons.wikimedia.org/wiki/File:FM104_Wide_awake_and_weird%5E_-_Flickr_-_D464-Darren_Hall.jpg&quot;&gt;&lt;img width=&quot;256&quot; alt=&quot;FM104 Wide awake and weird^ - Flickr - D464-Darren Hall&quot; src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/FM104_Wide_awake_and_weird%5E_-_Flickr_-_D464-Darren_Hall.jpg/256px-FM104_Wide_awake_and_weird%5E_-_Flickr_-_D464-Darren_Hall.jpg&quot;&gt;&lt;/a&gt;</content>
  </entry>
  <entry>
    <title>How to Quick Format NTFS Drives in Linux</title>
    <link href="https://okubax.co.uk/2018/10/22/linux-tips-quick-ntfs-format/" rel="alternate"/>
    <id>https://okubax.co.uk/2018/10/22/linux-tips-quick-ntfs-format/</id>
    <published>2018-10-22T00:00:00+00:00</published>
    <updated>2018-10-22T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;This is the second on the Linux tips series, recently I tried formatting my external hard drive in Linux to NTFS. Used a LUKS container of course, and used this command to start the process:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo mkfs.ntfs /dev/mapper/luks-xxxxxxxxxxx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;but then my terminal showed my this after running the above command:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Cluster size has been automatically set to 4096 bytes
Initializing device with zeroes&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above command was taking a long time to complete, more than one hour had elapsed and the process was still at 59%.&lt;/p&gt;
&lt;p&gt;According to mkfs.ntfs &lt;a href=&quot;https://linux.die.net/man/8/mkfs.ntfs&quot;&gt;manual page&lt;/a&gt;, to do a quick format on an NTFS partition (similar to the quick format option in Windows), the -f or -Q option can be used which would skip zeroing of the partition being formatted and also disables error checking.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Transition to Jekyll</title>
    <link href="https://okubax.co.uk/2018/04/08/transition-to-jekyll/" rel="alternate"/>
    <id>https://okubax.co.uk/2018/04/08/transition-to-jekyll/</id>
    <published>2018-04-08T00:00:00+00:00</published>
    <updated>2018-04-08T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;It’s time for a change - for close to 2 years now, I’ve been using &lt;a href=&quot;http://blog.getpelican.com/&quot;&gt;Pelican&lt;/a&gt; to build my site, as someone who’s always eager to try out new things, I decided to move on to a new static site generator. Enter &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;, a ruby-based static site generator that is on par with Pelican (which is Python-based) in terms of features.&lt;/p&gt;
&lt;p&gt;Jekyll has excellent documentation and boasts a very good selection of plugins and themes available to it and like Pelican also supports Markdown &amp;amp; HTML markup languages, sadly (at least for me), the way post files are structured and formatted in Jekyll is different to Pelican and I couldn’t find any converter to convert my Pelican markdown files into Jekyll compatible ones, this meant having to manually edit each one of my posts which is the only drawback from my transition from Pelican.&lt;/p&gt;
&lt;p&gt;To find out more about Jekyll, the first point of call should be the excellent &lt;a href=&quot;https://jekyllrb.com/docs/home/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>ii irc client</title>
    <link href="https://okubax.co.uk/2018/03/05/ii-irc-client/" rel="alternate"/>
    <id>https://okubax.co.uk/2018/03/05/ii-irc-client/</id>
    <published>2018-03-05T00:00:00+00:00</published>
    <updated>2018-03-05T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Over the years in my Linux journey, I’ve been slowly developing a soft spot for simple, lightweight (preferably terminal-based) applications over complicated bulky ones, why I’ve been slowly going through the process of substituting bulky, GUI-heavy apps for minimalist ones in my workflow; ranger for thunar, vim (with plugins) for Microsoft Code, etc.&lt;/p&gt;
&lt;p&gt;Which brings me onto IRC clients, I’ve transitioned from &lt;a href=&quot;https://irssi.org/&quot;&gt;irssi&lt;/a&gt; to &lt;a href=&quot;https://weechat.org/&quot;&gt;weechat&lt;/a&gt; and back over recent years and as someone who loves discovering new apps, I came across a little gem called &lt;a href=&quot;https://tools.suckless.org/ii/&quot;&gt;Irc it (ii)&lt;/a&gt;, part of a collection of tools on the &lt;a href=&quot;https://tools.suckless.org/ii/&quot;&gt;suckless site&lt;/a&gt;. What makes ii special is that it is a bare minimal FIFO filesystem-based IRC client and all you need to do is to use &lt;code&gt;tail -f&lt;/code&gt; to follow conversations and &lt;code&gt;echo&lt;/code&gt; to send your replies or commands to an IRC server.&lt;/p&gt;
&lt;p&gt;To install ii, first clone its repo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://git.suckless.org/ii
cd ii
make&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then, copy the binary (ii) to your bin folder.&lt;/p&gt;
&lt;p&gt;The command syntax for running ii is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ii &amp;lt;-s host&amp;gt; [-i &amp;lt;irc dir&amp;gt;] [-p &amp;lt;port&amp;gt;] [-u &amp;lt;sockname&amp;gt;] [-n &amp;lt;nick&amp;gt;] [-k &amp;lt;password&amp;gt;] [-f &amp;lt;fullname&amp;gt;]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;for example, for the freenode IRC network, the command will be:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ii -s chat.freenode.net -n your_nick&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and to identify your nick, the command will be:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo &amp;quot;/j nickserv identify your_nick_password&amp;quot;&amp;gt; irc/chat.freenode.net/in&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you didn’t specify a directory where you you want your ii files stored, ii will by default store your files in a folder named &lt;code&gt;irc&lt;/code&gt; on your user home directory, once connected to the  freenode network, you can join a channel by echoing the name of the channel you want to join to the &lt;code&gt;in&lt;/code&gt; file which would have been created by ii as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo &amp;quot;/j #archlinux&amp;quot; &amp;gt; ~/irc/chat.freenode.net/in&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The newly created &lt;code&gt;irc&lt;/code&gt; folder structure would look like this once you’ve connected to an IRC server and added some chat channels:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;irc
└── chat.freenode.net
    ├── #android
    │   ├── in
    │   └── out
    ├── #archlinux
    │   ├── in
    │   └── out
    ├── chanserv
    │   ├── in
    │   └── out
    ├── in
    ├── nickserv
    │   ├── in
    │   └── out
    └── out&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Following the above commands will get you up and running with ii and connected to an IRC network like freenode but without SSL/TLS support as ii by itself doesn’t support it. So trying to connect to freenode on port 7000 for an SSL-encrypted connection will not work.&lt;/p&gt;
&lt;p&gt;To get SSL/TLS support for ii, we need to use a program that can add SSL/TLS functionality to a program, I came across a guide online that used OpenBSD’s relayd, unfortunately, I couldn’t find any package for ArchLinux so I settled for &lt;a href=&quot;https://www.stunnel.org/&quot;&gt;stunnel&lt;/a&gt; instead. Using stunnel for ii on ArchLinux is pretty straight-forward. Install from the official Arch repo and then create a config file as follows:&lt;/p&gt;
&lt;h5&gt;&lt;code&gt;/etc/stunnel/stunnel.conf&lt;/code&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;setuid = stunnel
setgid = stunnel
CAfile = /etc/ssl/certs/ca-certificates.crt
verify = 2

[irc]
client = yes
accept = 127.0.0.1:6667
connect = chat.freenode.net:6697
verifyChain = yes
CApath = /etc/ssl/certs&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Afterwards, start the stunnel systemd service by running:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl start stunnel.service&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can then start ii and connect for example to freenode using port 6697(6667) for a SSL-encrypted  connection:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ii -n your_nick -s 127.0.0.1 -p 6667&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, entering the above command everytime you need to connect to an IRC network seems cumbersome, I wrote a small script to automate the process of connecting to a typical IRC network like freenode, identifying your nick, and then connecting to any chat channel of your choosing. The script below connects to the freenode IRC network through SSL (you must have the stunnel service running before running this script), and connects to the archlinux and android freenode channels.&lt;/p&gt;
&lt;h5&gt;&lt;code&gt;startii&lt;/code&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/bin/sh
ii -n your_nick -s 127.0.0.1 -p 6667 &amp;amp;
sleep 10
echo &amp;quot;/j nickserv identify your_nick_password&amp;quot;&amp;gt; $HOME/irc/127.0.0.1/in
sleep 10
echo &amp;quot;/j #archlinux&amp;quot; &amp;gt; $HOME/irc/127.0.0.1/in
echo &amp;quot;/j #android&amp;quot; &amp;gt; $HOME/irc/127.0.0.1/in&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once you get ii up and running, you can watch conversations on a chat channel by running:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;tail -f irc/127.0.0.1/\#archlinux/out&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;in a terminal.&lt;/p&gt;
&lt;img src=&quot;/assets/images/linux/ii-chat-window.png&quot; alt=&quot;ii chat window&quot;&gt;
&lt;p&gt;Now the above screenshot only shows one channel, meaning one would need to have multiple windows open for multiple chat channels, this is not a good way to work. Enter &lt;a href=&quot;https://www.vanheusden.com/multitail/&quot;&gt;Multitail&lt;/a&gt;, which is a program that according to its website - “allows one to monitor logfiles and command output in multiple windows in a terminal, colorize, filter and merge”&lt;/p&gt;
&lt;p&gt;Multitail is available in the official Arch repo and once installed, create a &lt;code&gt;.multitailrc&lt;/code&gt; file in your home directory with the following contents:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;colorscheme:irc
cs_re:green:.*nion.*
cs_re_s:yellow:(((http|https|ftp|gopher)|mailto):(//)?[^ &amp;lt;&amp;gt;\&amp;quot;[:blank:]]*|(www|ftp)[0-9]?\.[-a-z0-9.]+)
cs_re:cyan:.*has joined #.*
cs_re:blue:.*changed mode.*
cs_re:yellow:Did.not

titlebar:%m %u@%h %f (%t) [%l&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Afterwards, with the stunnel systemd service and ii running in the background, run the following in your terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;multitail -CS irc -f $HOME/irc/127.0.0.1/#archlinux/out -f $HOME/irc/127.0.0.1/#android/out&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Screenshot of the above command in action is show below:&lt;/p&gt;
&lt;img src=&quot;/assets/images/linux/multitail-window.png&quot; alt=&quot;Multitail Window&quot;&gt;
&lt;p&gt;I run i3-wm on my Arch system, so I find it convenient to use a keybind for the multitail command , in my i3 config I have this line:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bindsym $mod+i exec urxvt -e multitail -CS irc -f $HOME/irc/127.0.0.1/#archlinux/out -f $HOME/irc/127.0.0.1/#android/out&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The line above launches a multitail window showing the archlinux and android IRC channels.&lt;/p&gt;
&lt;p&gt;You can of course use multitail to monitor more than two IRC chat channels at the same time and also use it to  manipulate colors and window positioning as you deem fit.&lt;/p&gt;
&lt;p&gt;If you don’t want to ‘echo’ every IRC message, you can use vim, just cd into the &lt;code&gt;irc&lt;/code&gt; folder and open vim from there, type your message(s) and then switch to vim’s normal mode and press &lt;code&gt;:&lt;/code&gt; on your keyboard to enter command mode, then for example to post what you’ve just written in vim to the archlinux channel, type this &lt;code&gt;.w &amp;gt;&amp;gt; \#archlinux/in&lt;/code&gt; and press &lt;code&gt;Enter&lt;/code&gt;. That’s it, you can keep the vim window open to post messages to any other IRC chat channel..&lt;/p&gt;
&lt;p&gt;I have to admit that setting IRC it (ii) up hasn’t been totally straight-forward and easy as I’d hoped mostly because it required taking some extra steps to get it working safely and securely, one positive is that the setting-up process led me to discover some amazing new handy applications like multitail, exciting to think of many other ways that I can utilize it in my workflow.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Meltdown and Spectre</title>
    <link href="https://okubax.co.uk/2018/01/10/meltdown-and-spectre/" rel="alternate"/>
    <id>https://okubax.co.uk/2018/01/10/meltdown-and-spectre/</id>
    <published>2018-01-10T00:00:00+00:00</published>
    <updated>2018-01-10T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;The words Spectre and Meltdown sound like the name of some Hollywood thrillers (actually, Spectre is the twenty-fourth spy film in the James Bond film series), but this is not a film review, its actually pretty serious. Spectre and Meltdown are the names of two very serious security flaws that are found in computer processors.&lt;/p&gt;
&lt;p&gt;This post does not expand on what those two flaws are, if you’re interested in learning more about Meltdown and Spectre, there are numerous articles already floating on the internet that do a great job of explaining what they are.&lt;/p&gt;
&lt;p&gt;The flaws are so serious that they have an &lt;a href=&quot;https://meltdownattack.com/&quot;&gt;official site&lt;/a&gt; and logos&lt;/p&gt;
&lt;div id=&quot;image-table&quot;&gt;
    &lt;table&gt;
	    &lt;tr&gt;
    	    &lt;td style=&quot;padding:5px&quot;&gt;
        	        &lt;img src=&quot;/assets2/images/linux/meltdown.png&quot; alt=&quot;Meltdown logo&quot;&gt;
      	    &lt;/td&gt;
            &lt;td style=&quot;padding:5px&quot;&gt;
                &lt;img src=&quot;/assets2/images/linux/spectre.png&quot; alt=&quot;Spectre logo&quot;&gt;
             &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;On Linux systems however, if you want to check if your Linux system is vulnerable against the 3 “speculative execution” CVEs which are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5753&quot;&gt;CVE-2017-5753&lt;/a&gt; bounds check bypass (Spectre Variant 1)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5715&quot;&gt;CVE-2017-5715&lt;/a&gt; branch target injection (Spectre Variant 2) and&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5754&quot;&gt;CVE-2017-5754&lt;/a&gt; rogue data cache load (Meltdown)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can use a script to check if your Linux Kernel has been patched to mitigate against the 3 CVEs mentioned above, the script in question is called &lt;a href=&quot;https://github.com/speed47/spectre-meltdown-checker&quot;&gt;Spectre &amp;amp; Meltdown Checker&lt;/a&gt;, download and run the script by running the following in your Linux terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/speed47/spectre-meltdown-checker.git
cd spectre-meltdown-checker
sudo ./spectre-meltdown-checker.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The script will ask you to run it with root privileges if you want to get accurate results, running with root privileges will confirm if your system is vulnerable to the Meltdown and Spectre processor flaws as shown below:&lt;/p&gt;
&lt;img src=&quot;/assets/images/linux/meltdown_spectre_checker.png&quot; alt=&quot;meltdown_spectre_checker&quot;&gt;</content>
  </entry>
  <entry>
    <title>Using systemd-networkd to manage your network connections</title>
    <link href="https://okubax.co.uk/2017/08/09/linux-tips-systemd-networkd-with-roaming-wifi-profiles/" rel="alternate"/>
    <id>https://okubax.co.uk/2017/08/09/linux-tips-systemd-networkd-with-roaming-wifi-profiles/</id>
    <published>2017-08-09T00:00:00+00:00</published>
    <updated>2017-08-09T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Systemd comes with a component named systemd-networkd that you can use in-place of the de facto network manager on most Linux distros, the aptly named networkmanager. Why bother you may ask? If networkmanager works well for you, there is no need in my opinion to use anything else. But for the likes of me who enjoy working mostly in the terminal with minimal GUI apps, systemd-networkd is a simple and robust replacement for networkmanager.&lt;/p&gt;
&lt;p&gt;For wired connections, you just need to set up your *.network config file, setting up wireless connections need a little bit more effort as systemd-networkd relies on other services like wpa_supplicant to connect to wifi networks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: &lt;em&gt;Only tested on ArchLinux &amp;amp; I can’t make any promises that this guide would work on other Linux distros.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first step is to stop and disable all running services like networkmanager that you’re currently using to mange your network connections:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;systemctl stop NetworkManager
systemctl disable NetworkManager&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After that, you should set up two network configuration files, 50-wired.network (for wired) and 25-wireless.network (for wireless), all configurations for systemd-networkd are stored in the &lt;code&gt;/etc/systemd/network&lt;/code&gt; folder and the network interface for wired and wireless are &lt;code&gt;enp1s0&lt;/code&gt; and &lt;code&gt;wlp1s0&lt;/code&gt; respectively.&lt;/p&gt;
&lt;h5&gt;&lt;code&gt;/etc/systemd/network/50-wired.network&lt;/code&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;[Match]
Name=enp1s0

[Network]
DHCP=yes&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;&lt;code&gt;/etc/systemd/network/25-wireless.network&lt;/code&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;[Match]
Name=wlp1s0

[Network]
DHCP=yes&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The 25 and 50 prefix in the config names are for a reason, this means wired connections would be prioritized over wireless ones, which is what most people would want.&lt;/p&gt;
&lt;p&gt;At this point, if all you need is for your wired connection to work, simply start and enable the following systemd services:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;systemctl start systemd-resolved.service
systemctl start systemd-networkd.service
systemctl enable systemd-resolved.service
systemctl enable systemd-networkd.service&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For wireless network connections, as mentioned earlier, you need to configure wpa_supplicant and enable its systemd service to get things rolling. Create a config file for your wireless network interface which in my case is &lt;code&gt;wlp1s0&lt;/code&gt;, you can run &lt;code&gt;iw dev&lt;/code&gt; to get your own wireless interface name.&lt;/p&gt;
&lt;h5&gt;&lt;code&gt;/etc/wpa_supplicant/wpa_supplicant-wlp1s0.conf&lt;/code&gt;&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1
fast_reauth=1

network={
	ssid=&amp;quot;wifi1&amp;quot;
	psk=wifi1_passphrase
	priority=100
}
network={
	ssid=&amp;quot;wifi2&amp;quot;
	psk=wifi2_passphrase
	priority=80
}
network={
	ssid=&amp;quot;wifi-hotspot&amp;quot;
	key_mgmt=NONE
	priority=20
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the above configuration, if you don’t want to use your network password in plain text, run the &lt;code&gt;wpa_passphrase&lt;/code&gt; command line tool to generate your wpa_supplicant config. For example, running &lt;code&gt;wpa_passphrase MYSSID passphrase&lt;/code&gt; will output:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;network={
	ssid=&amp;quot;MYSSID&amp;quot;
	#psk=&amp;quot;passphrase&amp;quot;
	psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can then safely remove the &lt;code&gt;#psk=&amp;quot;passphrase&amp;quot;&lt;/code&gt; line and then add the rest to your &lt;code&gt;wpa_supplicant&lt;/code&gt; config or just simply run as root:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# wpa_passphrase MYSSID passphrase &amp;gt; /etc/wpa_supplicant/wpa_supplicant-wlp1s0.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;From the man page of wpa_supplicant. it is noted that:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The priority of a network when selecting among multiple networks; a higher value means a network is more desirable. By default networks have priority 0.  When multiple networks with the same priority are considered for selection, other information such as security policy and signal strength are used to select one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;All that needs doing after this is to enable and start the corresponding systemd service for your wpa_supplicant config, remembering to disable any existing wpa_supplicant to avoid any issues. For the one we made, it would be:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;systemctl enable wpa_supplicant@wlp1s0
systemctl start wpa_supplicant@wlp1s0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should now be connected to your chosen wifi network, if you have any issues, you can check the status of the networkd and wpa_supplicant systemd service units:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;systemctl status systemd-networkd
systemctl status wpa_supplicant@wlp1s0&lt;/code&gt;&lt;/pre&gt;</content>
  </entry>
  <entry>
    <title>How to Fix Corrupt SD Cards in Linux</title>
    <link href="https://okubax.co.uk/2017/07/26/linux-tips-sdcard-fix/" rel="alternate"/>
    <id>https://okubax.co.uk/2017/07/26/linux-tips-sdcard-fix/</id>
    <published>2017-07-26T00:00:00+00:00</published>
    <updated>2017-07-26T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;This is the first of many Linux tips and tricks that I would be posting on my blog, my fat32 formatted SD Card recently got corrupted and I was nervous as I had stored some important pictures on the card. After searching on the internet for a solution, I came across a fsck Linux command that does the trick:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo fsck.msdos -aw /dev/mmcblk0p1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/dev/mmcblk0p1&lt;/code&gt; being your sd card device&lt;/p&gt;
&lt;p&gt;&lt;code&gt;aw&lt;/code&gt; - this option automatically repairs the filesystem and writes any changes  to disk immediately&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Windows 10 Creators Update Privacy Settings</title>
    <link href="https://okubax.co.uk/2017/04/21/win10-creators-update-privacy-settings/" rel="alternate"/>
    <id>https://okubax.co.uk/2017/04/21/win10-creators-update-privacy-settings/</id>
    <published>2017-04-21T00:00:00+00:00</published>
    <updated>2017-04-21T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Microsoft recently released a new &lt;del&gt;major&lt;/del&gt; update for Windows 10 which they call the &lt;a href=&quot;https://blogs.windows.com/windowsexperience/2017/04/11/whats-new-in-the-windows-10-creators-update/&quot;&gt;‘Windows 10 Creators Update’&lt;/a&gt;. Of course what I’m mostly interested in is what updates they made to the privacy settings in the new update, I’ve updated my Windows 10 VM to the Creators Update and I was presented with the privacy setup screen as shown in the images below.&lt;/p&gt;
&lt;p&gt;I left everything off (Diagnostics can’t be turned off, you only have the option to chose between Basic and Full) except Location because nothing’s more important in life than location specific weather information. /s&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/windows/win10cu1.png&quot; alt=&quot;Windows 10 Privacy Settings&quot;&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Backup and restore your Android phone using adb</title>
    <link href="https://okubax.co.uk/2017/03/06/android-adb-backup/" rel="alternate"/>
    <id>https://okubax.co.uk/2017/03/06/android-adb-backup/</id>
    <published>2017-03-06T00:00:00+00:00</published>
    <updated>2017-03-06T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;h4&gt;Backup&lt;/h4&gt;
&lt;p&gt;Backing up your Android phone by using the phone manufacturer’s prescribed software is in most cases a chore, there is a more easy way to backup your phone’s data and apps using adb.
Android Debug Bridge or &lt;a href=&quot;https://developer.android.com/studio/command-line/adb.html&quot;&gt;adb&lt;/a&gt; as it’s commonly known is one of the command line tools that is part of the Android SDK package, this tool lets you communicate with your Android phone and can perform a variety of actions such as installing and debugging apps as well as helping to backup your phone’s data and apps safely and securely on your computer no matter which OS your computer runs on be it on MacOS, Windows, or Linux.&lt;/p&gt;
&lt;p&gt;To get started on backing up your Android phone’s data and apps using adb, you need to have the tool installed already, if not, &lt;a href=&quot;https://lifehacker.com&quot;&gt;lifehacker&lt;/a&gt; has a &lt;a href=&quot;https://lifehacker.com/the-easiest-way-to-install-androids-adb-and-fastboot-to-1586992378&quot;&gt;guide&lt;/a&gt; on how you can easily install Android tools like adb on your OS of choice.&lt;/p&gt;
&lt;p&gt;Once the adb tool is up and running on your computer, the next step is to enable developer options on your Android phone. Follow the steps below to do that (the screenshots below are from a phone running the latest Android software release (Nougat 7.1.1):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Launch the settings app from the app drawer or notification shade&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Scroll to the bottom and tap on ‘About phone’.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/android/about.png&quot; alt=&quot;about phone screen&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Scroll down in this menu and there should be an option labelled ‘Build number’&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/android/build_number.png&quot; alt=&quot;build number&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Tap repeatedly on this option until you see a prompt on the phone’s screen showing the text ‘You have enabled development settings’&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/android/development_settings_enabled.png&quot; alt=&quot;development settings&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;: Now go back to the main settings screen and scroll to the bottom, there should now be a new option labelled ‘Developer options’&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/android/developer_options.png&quot; alt=&quot;developer options&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;: Now to enable adb debugging on your phone, tap on the ‘Developer options’ label and turn it on by tapping on the button near the top as shown below&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/android/developer_option_turn_on.png&quot; alt=&quot;developer options turn on&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;: You should now get a prompt asking if you want to ‘Allow development settings?’, tap ‘OK’ to enable adb usb debugging. For some newer devices with the latest Android OS software installed, you might need to scroll to down the menu a bit until you see an option labelled ‘Android debugging’, click on this label to enable Android debugging on your phone&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/android/enable_android_debugging.png&quot; alt=&quot;enable android debugging&quot;&gt;&lt;/p&gt;
&lt;p&gt;Now that you have enable adb debugging on your device, the next step is to connect your Android phone to your PC which should already have adb installed (you might get a prompt on your phone once you connect it to your PC asking if you want to allow USB debugging, enable the option to ‘Always allow from this computer and then tap OK) and then open your terminal(Linux) or command prompt (Windows).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/android/allow_usb_debugging.png&quot; alt=&quot;allow usb debugging&quot;&gt;&lt;/p&gt;
&lt;p&gt;To make sure your phone is detected by your PC via adb, in the terminal or command prompt, type the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;adb devices&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and press enter, if everything is working as it it should, you should get a similar response as shown below:&lt;/p&gt;
&lt;img src=&quot;/assets/images/android/adb_devices.png&quot; alt=&quot;adb devices&quot;&gt;
&lt;p&gt;Now to backup your device (apps + data) using adb, still on your terminal or command prompt, enter the following:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;adb backup -apk -shared -all -f backup-file.adb&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;apk – Backs up your apps.&lt;/li&gt;
&lt;li&gt;noapk – Does not backup apps.&lt;/li&gt;
&lt;li&gt;shared – Backs up data on the SD card.&lt;/li&gt;
&lt;li&gt;noshared – Does not backup data on the SD card.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;/assets/images/android/adb_backup.png&quot; alt=&quot;adb backup&quot;&gt;
&lt;p&gt;Your phone should now display a prompt asking you to enter a password if you want to encrypt the full backup of your phone, best to use a password to keep your data safe.
Tap ‘BACK UP MY DATA’ and the backup up process will start.&lt;/p&gt;
&lt;img src=&quot;/assets/images/android/backup_password_prompt.png&quot; alt=&quot;adb backup prompt&quot;&gt;
&lt;p&gt;There will be a prompt on your phone showing ‘Backup starting’&lt;/p&gt;
&lt;img src=&quot;/assets/images/android/backup_starting.png&quot; alt=&quot;start adb backup&quot;&gt;
&lt;p&gt;The backup time depends on the amount of apps and data you have on your phone. Once the process is complete, a prompt will appear on your phone stating ‘backup finished’ and the backup file will be in the current working location which is usually the user’s home directory for Linux users and in &lt;code&gt;C:\Users\your_user_name&lt;/code&gt; for Windows OS users.&lt;/p&gt;
&lt;img src=&quot;/assets/images/android/backup_finished.png&quot; alt=&quot;backup completed&quot;&gt;
&lt;h4&gt;Restore&lt;/h4&gt;
&lt;p&gt;To restore your phone from the backup file you created earlier, use the adb restore command on the terminal or command prompt (note: change the working directory to the location of the adb backup file)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;adb restore backup-file.adb&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;/assets/images/android/adb_restore.png&quot; alt=&quot;adb restore&quot;&gt;
&lt;p&gt;Your phone will then prompt you for the password you used earlier to encrypt the backup file&lt;/p&gt;
&lt;img src=&quot;/assets/images/android/backup_restore_prompt.png&quot; alt=&quot;adb restore prompt&quot;&gt;
&lt;p&gt;Input the password and the tap on &lt;code&gt;RESTORE MY DATA&lt;/code&gt; to start the restore process, nothing else to do now but wait until the backup process is completed&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Get Google Calender in your Linux Terminal</title>
    <link href="https://okubax.co.uk/2016/09/12/google-calender-terminal/" rel="alternate"/>
    <id>https://okubax.co.uk/2016/09/12/google-calender-terminal/</id>
    <published>2016-09-12T00:00:00+00:00</published>
    <updated>2016-09-12T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Running Linux on your system and doing most of your work through the terminal?, then you’ll be happy to learn that you can display from and add events to your Google Calender via gcalcli.
From the software’s &lt;a href=&quot;https://github.com/insanum/gcalcli&quot;&gt;homepage&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;gcalcli is a Python application that allows you to access your Google Calendar(s) from a command line. It’s easy to get your agenda, search for events, add new events, delete events, edit events, and even import those annoying ICS/vCal invites from Microsoft Exchange and/or other sources. Additionally, gcalcli can be used as a reminder service and execute any application you want when an event is coming up.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you’re running ArchLinux, gcalcli is available in the &lt;a href=&quot;https://aur.archlinux.org/packages/gcalcli/&quot;&gt;AUR&lt;/a&gt;, for other Linux OSes, check your software manager for packages.&lt;/p&gt;
&lt;p&gt;After linking your Google Calender to gcalcli, you can add aliases to your bash/zsh alias file like I’ve done to quickly access your daily/weekly/monthly events and also to quickly add events to your Google Calender. The relevant parts in my aliases file are:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;alias calm=&amp;quot;gcalcli calm&amp;quot; #month
alias calw=&amp;quot;gcalcli calw&amp;quot; #week
alias cald=&amp;quot;gcalcli agenda&amp;quot; #day
alias calquick=&amp;quot;gcalcli quick --calendar &amp;#x27;your_google_calender_name&amp;#x27;&amp;quot;
alias caladd=&amp;quot;gcalcli add --calendar &amp;#x27;your_google_calender_name&amp;#x27;&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Screenshots below:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cald&lt;/code&gt;&lt;/p&gt;
&lt;img src=&quot;/assets/images/linux/cald.png&quot; alt=&quot;gcalcli window&quot;&gt;
&lt;p&gt;&lt;code&gt;calw&lt;/code&gt;&lt;/p&gt;
&lt;img src=&quot;/assets/images/linux/calw.png&quot; alt=&quot;gcalcli window&quot;&gt;
&lt;p&gt;&lt;code&gt;calm&lt;/code&gt;&lt;/p&gt;
&lt;img src=&quot;/assets/images/linux/calm.png&quot; alt=&quot;gcalcli window&quot;&gt;</content>
  </entry>
  <entry>
    <title>EU Referendum</title>
    <link href="https://okubax.co.uk/2016/06/24/uk-referendum/" rel="alternate"/>
    <id>https://okubax.co.uk/2016/06/24/uk-referendum/</id>
    <published>2016-06-24T00:00:00+00:00</published>
    <updated>2016-06-24T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;On the 24th of June, 2016. This happened:&lt;/p&gt;
&lt;img src=&quot;/assets/images/world/eu-ref.png&quot; alt=&quot;EU Referendum Result&quot;&gt;
&lt;p&gt;Was watching the results as they came in and when the Sunderland vote was declared for the leave camp, I knew right then that the remain camp was in a spot of bother. Except in London and Scotland, the remain vote was largely weak in most regions of the UK.&lt;/p&gt;
&lt;p&gt;The repercussions of this referendum result will be felt for years to come.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Playing audio via Pulseaudio and Google Chromecast</title>
    <link href="https://okubax.co.uk/2016/06/14/chromecast-pulseaudio/" rel="alternate"/>
    <id>https://okubax.co.uk/2016/06/14/chromecast-pulseaudio/</id>
    <published>2016-06-14T00:00:00+00:00</published>
    <updated>2016-06-14T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;I love my Google Chromecast, it’s been my go-to device for playing videos via YouTube and music via Google’s Play Music Android app. When not using the Chromecast at home, I usually tend to listen to music via &lt;a href=&quot;https://www.musicpd.org/&quot;&gt;MPD&lt;/a&gt; and &lt;a href=&quot;http://rybczak.net/ncmpcpp/&quot;&gt;ncmpcpp&lt;/a&gt; on my Linux system.&lt;/p&gt;
&lt;p&gt;The natural thing to do then was playing my locally stored music using mpd/ncmpcpp and then ‘casting’ it to the Chromecast which is connected to my TV and sound system.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href=&quot;https://github.com/masmu/pulseaudio-dlna&quot;&gt;pulseaudio-dlna&lt;/a&gt; which is a streaming server that brings DLNA/UPNP support to Pulseaudio and Linux.&lt;/p&gt;
&lt;p&gt;As I am on ArchLinux, the software package is available in the &lt;a href=&quot;https://aur.archlinux.org/packages/pulseaudio-dlna&quot;&gt;AUR&lt;/a&gt; and after installing it, the service needs to be started either in the background or in a terminal and then the audio source needs to be changed in pavucontrol as shown below:&lt;/p&gt;
&lt;img src=&quot;/assets/images/linux/pavucontrol_pulse.png&quot; alt=&quot;pavucontrol&quot;&gt;
&lt;p&gt;After changing the audio output sink in pavucontrol, Chromecast should automatically pick up the audio sound.&lt;/p&gt;
&lt;p&gt;One thing that it doesn’t do is show the song information on Chromecast but that is trivial, I’m just happy to be able to play my local songs via MPD on the Chromecast.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Transition to Pelican</title>
    <link href="https://okubax.co.uk/2016/06/13/transition-to-pelican/" rel="alternate"/>
    <id>https://okubax.co.uk/2016/06/13/transition-to-pelican/</id>
    <published>2016-06-13T00:00:00+00:00</published>
    <updated>2016-06-13T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;I have been using &lt;a href=&quot;http://blog.getpelican.com/&quot;&gt;Pelican&lt;/a&gt; for a couple of months now, and I have finally completed moving my Wordpress posts over to Pelican. Pelican is a static site generator written in &lt;a href=&quot;http://www.python.org/&quot;&gt;Python&lt;/a&gt; that is simple and easy to use.&lt;/p&gt;
&lt;p&gt;I used a Wordpress plugin &lt;a href=&quot;https://wordpress.org/plugins/jekyll-exporter/&quot;&gt;‘Jekyll Exporter’&lt;/a&gt; to convert my Wordpress posts into a markdown format, and after that, it was just  a matter of rebuilding the whole site after double-checking hyperlinks and image links.&lt;/p&gt;
&lt;p&gt;To find out more about Pelican, the first point of call should be the excellent &lt;a href=&quot;http://docs.getpelican.com/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Enable Test Mode in Windows 10</title>
    <link href="https://okubax.co.uk/2016/05/11/windows-test-mode/" rel="alternate"/>
    <id>https://okubax.co.uk/2016/05/11/windows-test-mode/</id>
    <published>2016-05-11T00:00:00+00:00</published>
    <updated>2016-05-11T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;If you’re like me and you run a software that requires ‘unsigned’ windows drivers to function properly, in my case the software I’m running is &lt;a href=&quot;https://github.com/t-d-k/LibreCrypt&quot;&gt;Librecrypt&lt;/a&gt; which is very useful as it enables me to mount my LUKS-encrypted hard drive on a Windows system.&lt;/p&gt;
&lt;p&gt;To enable Test Mode on Windows, open an elevated command prompt (Press Start-&gt;Search-&gt;cmd then right-click on it and click Run as administrator) and enter the following command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bcdedit /set testsigning on&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;and reboot after running the command above&lt;/p&gt;
&lt;p&gt;To disable Test mode, open an elevated command prompt as above and enter the following command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bcdedit /set testsigning off&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;and also reboot after running the above command&lt;/p&gt;
&lt;p&gt;Once you reboot, there would be a watermark message as shown below that would confirm that Test Mode is on.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/windows/test_mode_windows.png&quot; alt=&quot;Windows Test Mode&quot;&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>DHCPv4 Request Timeout in NetworkManager</title>
    <link href="https://okubax.co.uk/2016/01/25/public-wifi-network-manager/" rel="alternate"/>
    <id>https://okubax.co.uk/2016/01/25/public-wifi-network-manager/</id>
    <published>2016-01-25T00:00:00+00:00</published>
    <updated>2016-01-25T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;I tried connecting my ArchLinux laptop to a BT-Wifi Hotspot recently and it kept timing out. Only BT-WiFi has this issue as I was able to connect to other WiFi hotspots without any issues. I found the answer as usual in a &lt;a href=&quot;https://bbs.archlinux.org/viewtopic.php?id=192894&quot;&gt;Post on the ArchLinux Forum&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The solution is to edit or comment out this line in /etc/dhcpcd.conf as root:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;duid&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;and uncomment this line&lt;/p&gt;
&lt;p&gt;&lt;code&gt;clientid&lt;/code&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Paris Attacks</title>
    <link href="https://okubax.co.uk/2015/11/14/paris-attacks/" rel="alternate"/>
    <id>https://okubax.co.uk/2015/11/14/paris-attacks/</id>
    <published>2015-11-14T00:00:00+00:00</published>
    <updated>2015-11-14T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;The horrific attacks on Paris by terrorists is sickening and must be condemned by all. This senseless cowardly attack that left more than 127 people dead and God knows how many injured is not only an attack on democracy but also an attack on the very core of the way of life of all people from all nations who value freedom and tolerance.
Vive la France!&lt;/p&gt;
&lt;p&gt;Image from &lt;a href=&quot;http://imgur.com/cOeyPSb&quot;&gt;Imgur&lt;/a&gt; via &lt;a href=&quot;https://www.reddit.com&quot;&gt;Reddit&lt;/a&gt;&lt;/p&gt;
&lt;img src=&quot;/assets/images/world/france_paris_solidarity.png&quot; alt=&quot;French Colors&quot;&gt;</content>
  </entry>
  <entry>
    <title>The net tightens</title>
    <link href="https://okubax.co.uk/2015/10/07/alison-madueke/" rel="alternate"/>
    <id>https://okubax.co.uk/2015/10/07/alison-madueke/</id>
    <published>2015-10-07T00:00:00+00:00</published>
    <updated>2015-10-07T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;img src=&quot;/assets/images/world/diezani.png&quot; alt=&quot;Diezani Alison-Madueke&quot;&gt;
&lt;p&gt;When news broke early this week about the arrest of Nigeria’s former Minister of Petroleum Resources in London, majority of Nigeria’s were not surprised. It was a matter of when not if she will be arrested, SaharaReporters have an &lt;a href=&quot;http://saharareporters.com/2015/10/05/how-nigeria%E2%80%99s-ex-minister-petroleum-madueke-laundered-looted-money-her-accomplices&quot;&gt;opinion piece&lt;/a&gt; on the whole story.
Here’s hoping to more arrests and revelations, revenue from oil must be used for development and not used to bulk up the bank balances of greedy corrupt public officials.&lt;/p&gt;
&lt;p&gt;Under Buhari’s Presidency, if there is a scandal involving the nations oil revenues, we would know who to blame: Mr President himself as he’d just appointed himself Petroleum Minister.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>A case for Elemntary OS (freya) as a Windows OS alternative</title>
    <link href="https://okubax.co.uk/2015/09/24/elementaryos/" rel="alternate"/>
    <id>https://okubax.co.uk/2015/09/24/elementaryos/</id>
    <published>2015-09-24T00:00:00+00:00</published>
    <updated>2015-09-24T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;I’ve just recently tried out the latest release of Elementary OS (Freya) and I have to say that it is hands-down the best looking Linux Distro I know of. It looks slick and runs fast even on old hardware and if you’re tired of all the shenanigans of Windows and can’t afford(or stand) a Mac, you should give your PC a new lease of live and definitely give Elementary OS a try.&lt;/p&gt;
&lt;p&gt;Some screenshots below to show Elementary OS in all of its glory&lt;/p&gt;
&lt;img src=&quot;/assets/images/linux/eos/eOS1.png&quot; alt=&quot;elementary OS&quot;&gt;
&lt;img src=&quot;/assets/images/linux/eos/eOS2.png&quot; alt=&quot;elementary OS&quot;&gt;
&lt;img src=&quot;/assets/images/linux/eos/eOS3.png&quot; alt=&quot;elementary OS&quot;&gt;
&lt;img src=&quot;/assets/images/linux/eos/eOS4.png&quot; alt=&quot;elementary OS&quot;&gt;</content>
  </entry>
  <entry>
    <title>Buhari: First 100 Days in Office</title>
    <link href="https://okubax.co.uk/2015/08/10/buhari-first-hundred-days/" rel="alternate"/>
    <id>https://okubax.co.uk/2015/08/10/buhari-first-hundred-days/</id>
    <published>2015-08-10T00:00:00+00:00</published>
    <updated>2015-08-10T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;img src=&quot;/assets/images/world/buhari2.png&quot; alt=&quot;Muhammadu Buhari&quot;&gt;
&lt;p&gt;100 Days in, and we can safely say that Buhari’s Presidency is definitely unlike recent governments that Nigerians have had to endure. He came to power promising a ‘real’ fight against corruption and from his government’s recent actions, he is mostly keeping to his word.&lt;/p&gt;
&lt;p&gt;Firstly, he had to dismantle the illegal cartel that the previous government under Goodluck Jonathan &lt;del&gt;worked with&lt;/del&gt; allowed to flourish. These cartels siphoned off the revenue from the oil sales and diverted it into their own businesses and accounts. The result of this?, majority of the States couldn’t pay their workers for months and it was even worse in Ondo State where workers were owed up to a year’s wages. The news leaks that keeps coming out about the level of corruption perpetuated by the previous administration under Goodluck Jonathan is staggering in terms of its scale and breadth.&lt;/p&gt;
&lt;p&gt;Corruption in Nigeria is a terminal disease that kills off the very heart and soul of the country, scares potential foreign investment away and contributes to the rising inequality that is prevalent in the Nigerian society.&lt;/p&gt;
&lt;p&gt;As we wait for the President to assemble his cabinet and make important ministerial appointments, his anti-corruption stance will be judged by the calibre of people he appoints as Ministers, enough with appointing of Ministers to curry political favour and time to start appointing Men and Women based on their proven track record.&lt;/p&gt;
&lt;p&gt;But all of this won’t mean anything unless prosecutions are made and the public are able to be reassured that office holders who steal from the nations’ coffers are not going to get away with it scot-free.&lt;/p&gt;
&lt;p&gt;The public awaits Mr President, it’s time to start delivering.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Race relations in good ol&#x27; USA</title>
    <link href="https://okubax.co.uk/2015/07/01/race-relations-usa/" rel="alternate"/>
    <id>https://okubax.co.uk/2015/07/01/race-relations-usa/</id>
    <published>2015-07-01T00:00:00+00:00</published>
    <updated>2015-07-01T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;img src=&quot;/assets/images/world/america-time.png&quot; alt=&quot;Time Magazine&quot;&gt;
&lt;p&gt;For those following recent events in the great land of &lt;em&gt;freedom&lt;/em&gt; that is the &lt;del&gt;United&lt;/del&gt; States Of America, found the above image online that sums up my feelings on the issue.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>New Dawn in Nigeria</title>
    <link href="https://okubax.co.uk/2015/06/14/new-dawn-nigeria/" rel="alternate"/>
    <id>https://okubax.co.uk/2015/06/14/new-dawn-nigeria/</id>
    <published>2015-06-14T00:00:00+00:00</published>
    <updated>2015-06-14T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;img src=&quot;/assets/images/world/buhari.png&quot; alt=&quot;Buhari&quot;&gt;
&lt;p&gt;Nigeria now has a new Government headed by a former military dictator (he’s now a democrat, swears he). Muhammadu Buhari has his hands full with Boko Haram still raging in the north and the economy still largely reliant on Oil, the expectations of Nigerians has never been higher.&lt;/p&gt;
&lt;p&gt;They are surely going to be disappointed, Boko Haram won’t go quietly without a bloody fight and developing other sectors of the economy won’t be an easy task but if there is one man to do it, few would look past Buhari to accomplish them. Here’s hoping against hope that his government will do right by the people.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>We&#x27;ve come a long way</title>
    <link href="https://okubax.co.uk/2015/01/19/weve-come-a-long-way/" rel="alternate"/>
    <id>https://okubax.co.uk/2015/01/19/weve-come-a-long-way/</id>
    <published>2015-01-19T00:00:00+00:00</published>
    <updated>2015-01-19T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Pictures like this show that the black race have come through a long, sad and perilous journey from being enslaved, to finally be regarded as a ‘normal’ human being with equal rights and opportunity as the Caucasians.&lt;/p&gt;
&lt;img src=&quot;/assets/images/world/girl-human-zoo.png&quot; alt=&quot;Picture of an African Girl been kep in a Human Zoo&quot;&gt;
&lt;p&gt;For the full story and more depressing images, click on the article headline below&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.popularresistance.org/deep-racism-the-forgotten-history-of-human-zoos&quot;&gt;Deep Racism: The Forgotten History Of Human Zoos&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Customizing KDE4</title>
    <link href="https://okubax.co.uk/2013/12/29/customizing-kde4/" rel="alternate"/>
    <id>https://okubax.co.uk/2013/12/29/customizing-kde4/</id>
    <published>2013-12-29T00:00:00+00:00</published>
    <updated>2013-12-29T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;I have been a GNOME fan for as long as I can remember. It was Ubuntu/Gnome2 that got me interested in Linux about 5 years ago. My desktop looked like this in those days:&lt;/p&gt;
&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/okubax/4993421499&quot; title=&quot;ArchLinux in Ubuntu Colors&quot;&gt;&lt;img src=&quot;https://farm5.staticflickr.com/4153/4993421499_2651bb3d11.jpg&quot; width=&quot;500&quot; height=&quot;300&quot; alt=&quot;ArchLinux in Ubuntu Colors&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;p&gt;After the Gnome3/Gnome-Shell debacle, I decided to finally part ways with Gnome, using ArchLinux, I had a whole load of choices of DEs/WMs to use. I’ve used Openbox, i3, XFCE and finally KDE4, I have a fairly fast system with good specs so my system would be more than capable of running KDE4.&lt;/p&gt;
&lt;p&gt;Without any modification, my KDE system looks like this:&lt;/p&gt;
&lt;img src=&quot;/assets2/images/linux/kde4-orig.png&quot; alt=&quot;KDE 4.11&quot;&gt;
&lt;p&gt;I got tired of the KDE default look and I began tinkering with the interface, after a lot of hits and misses, I finally settled on this look:&lt;/p&gt;
&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/okubax/11644487513&quot; title=&quot;End.Of.Year.Scrot&quot;&gt;&lt;img src=&quot;https://farm4.staticflickr.com/3749/11644487513_65e78241f4.jpg&quot; width=&quot;500&quot; height=&quot;281&quot; alt=&quot;End.Of.Year.Scrot&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;p&gt;Things I did/installed to get this look on ArchLinux -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;moved the default desktop panel from the bottom to the top&lt;/li&gt;
&lt;li&gt;removed the task manager applet from the panel and added a menu bar applet (installed these packages to get this done: appmenu-qt from the main repo and kdeplasma-applets-menubar from the AUR)&lt;/li&gt;
&lt;li&gt;created a new panel and moved it to the left&lt;/li&gt;
&lt;li&gt;added the icon-task-manager applet to the left panel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;KDE4 offers a lot(a bit too much in my opinion) of packages as standard. I had to disable Nepomuk cos I don’t need it and it unnecessarily hogs my system resources.&lt;/p&gt;
&lt;p&gt;Now, I have a very stable KDE4 installation running on ArchLinux and I think KDE4 is going to be running on my system for the foreseeable future.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Margaret Thatcher 1925-2013</title>
    <link href="https://okubax.co.uk/2013/04/09/margaret-thatcher-1925-2013/" rel="alternate"/>
    <id>https://okubax.co.uk/2013/04/09/margaret-thatcher-1925-2013/</id>
    <published>2013-04-09T00:00:00+00:00</published>
    <updated>2013-04-09T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;She may divide opinions, but none can dispute the impact she had on both the national and international scene. RIP Iron Lady&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;/assets/images/world/margaret-thatcher.png&quot; alt=&quot;Former British Prime Minister Margaret Thatcher&quot;/&gt;
  &lt;figcaption&gt;Image Credit: Chris Collins of the Margaret Thatcher Foundation.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bbc.co.uk/news/uk-politics-22067670&quot;&gt;BBC News - Obituary: Margaret Thatcher&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>London Riots @Woolwich</title>
    <link href="https://okubax.co.uk/2011/08/17/london-riots-woolwich/" rel="alternate"/>
    <id>https://okubax.co.uk/2011/08/17/london-riots-woolwich/</id>
    <published>2011-08-17T00:00:00+00:00</published>
    <updated>2011-08-17T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Writings on a makeshift wall on one of the buildings destroyed by fire during the London Riots in Woolwich.&lt;/p&gt;
&lt;img src=&quot;/assets/images/world/woolwich1_small.png&quot; alt=&quot;woolwich riots&quot;&gt;
&lt;img src=&quot;/assets/images/world/woolwich2_small.png&quot; alt=&quot;woolwich riots&quot;&gt;
&lt;img src=&quot;/assets/images/world/woolwich3_small.png&quot; alt=&quot;woolwich riots&quot;&gt;</content>
  </entry>
  <entry>
    <title>Spot the difference</title>
    <link href="https://okubax.co.uk/2011/07/06/spot-the-difference-2/" rel="alternate"/>
    <id>https://okubax.co.uk/2011/07/06/spot-the-difference-2/</id>
    <published>2011-07-06T00:00:00+00:00</published>
    <updated>2011-07-06T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;img src=&quot;/assets/images/world/uk-papers.png&quot; alt=&quot;UK Newspaper Coverage of the Phone Hacking Scandal&quot;&gt;
&lt;p&gt;Via &lt;a href=&quot;http://twitpic.com/5lxpqg&quot;&gt;Twitpic&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Gnome 3.0 on ArchLinux</title>
    <link href="https://okubax.co.uk/2011/04/08/gnome-3-0-on-archlinux/" rel="alternate"/>
    <id>https://okubax.co.uk/2011/04/08/gnome-3-0-on-archlinux/</id>
    <published>2011-04-08T00:00:00+00:00</published>
    <updated>2011-04-08T00:00:00+00:00</updated>
    <author><name>Ajibola Okubanjo</name></author>
    <content type="html">&lt;p&gt;Gnome 3.0 looking good&lt;/p&gt;
&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/okubax/5596208046/&quot; title=&quot;Gnome 3.0 On ArchLinux&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5304/5596208046_3d5636938d.jpg&quot; width=&quot;500&quot; height=&quot;313&quot; alt=&quot;Gnome 3.0 On ArchLinux&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;https://embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;</content>
  </entry>
</feed>