<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://wikar.se/feed.xml" rel="self" type="application/atom+xml" /><link href="https://wikar.se/" rel="alternate" type="text/html" /><updated>2025-12-13T09:10:04+00:00</updated><id>https://wikar.se/feed.xml</id><title type="html">Daniel Wikar</title><subtitle>Personal blog about Analytics, Big Data, Microsoft and IT</subtitle><author><name>Daniel Wikar</name></author><entry><title type="html">Radxa ROCK 4C+ Image Builder</title><link href="https://wikar.se/linux/2025/12/05/radxa-rock-4c-plus-image-builder.html" rel="alternate" type="text/html" title="Radxa ROCK 4C+ Image Builder" /><published>2025-12-05T00:00:00+00:00</published><updated>2025-12-05T00:00:00+00:00</updated><id>https://wikar.se/linux/2025/12/05/radxa-rock-4c-plus-image-builder</id><content type="html" xml:base="https://wikar.se/linux/2025/12/05/radxa-rock-4c-plus-image-builder.html"><![CDATA[<p>I’ve had various issues (blank screen, no display signal, no blue LED, etc) getting the <a href="https://radxa.com/products/rock4/4cp/">Radxa ROCK 4C+</a> to work based with the Armbian, DietPi and Radxa standard images for Debian Bookworm. Therefore I created this script to build an image via <a href="https://github.com/RadxaOS-SDK/rsdk">rsdk</a> from within a Docker container.</p>

<p>Successfully tested with the Radxa ROCK 4C+ but could/should also work with other boards compatible with rsdk.</p>

<p>Download: <a href="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/misc/2025-12-05-radxa-rock-4c-plus-image-builder/rsdk-docker-build.sh">rsdk-docker-build.sh</a></p>

<h2 id="rsdk-docker-build-script">rsdk Docker Build Script</h2>

<p>Build RadxaOS images for ARM single-board computers using Docker.</p>

<h2 id="requirements">Requirements</h2>

<ul>
  <li>Docker</li>
  <li>~10GB free disk space</li>
  <li>sudo access (for binfmt_misc setup)</li>
</ul>

<h2 id="quick-start">Quick Start</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">chmod</span> +x rsdk-docker-build.sh

<span class="c"># Build with defaults (creates rock-4c-plus-bookworm-kde-YYYYMMDD.img)</span>
./rsdk-docker-build.sh <span class="nt">--product</span> rock-4c-plus

<span class="c"># Specify suite and edition</span>
./rsdk-docker-build.sh <span class="nt">--product</span> rock-5b <span class="nt">--suite</span> bookworm <span class="nt">--edition</span> cli

<span class="c"># Custom image name</span>
./rsdk-docker-build.sh <span class="nt">--product</span> rock-4c-plus <span class="nt">--name</span> my-custom.img
</code></pre></div></div>

<h2 id="output">Output</h2>

<p>Both compressed and uncompressed images are created automatically:</p>
<ul>
  <li><code class="language-plaintext highlighter-rouge">&lt;name&gt;.img</code> - Uncompressed image</li>
  <li><code class="language-plaintext highlighter-rouge">&lt;name&gt;.img.xz</code> - Compressed image (xz -9)</li>
</ul>

<p>Default output directory: <code class="language-plaintext highlighter-rouge">./output/</code></p>

<h2 id="supported-boards">Supported Boards</h2>

<p>Common products: <code class="language-plaintext highlighter-rouge">rock-4c-plus</code>, <code class="language-plaintext highlighter-rouge">rock-5b</code>, <code class="language-plaintext highlighter-rouge">rock-3a</code>, <code class="language-plaintext highlighter-rouge">zero-3w</code></p>

<p>List all available products:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./rsdk-docker-build.sh <span class="nt">--list</span>
</code></pre></div></div>

<h2 id="options">Options</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">-p, --product</code> - Board name (required)</li>
  <li><code class="language-plaintext highlighter-rouge">-s, --suite</code> - Debian suite (optional, default from config)</li>
  <li><code class="language-plaintext highlighter-rouge">-e, --edition</code> - Edition variant (optional, default from config)</li>
  <li><code class="language-plaintext highlighter-rouge">-o, --output</code> - Output directory (default: ./output)</li>
  <li><code class="language-plaintext highlighter-rouge">-n, --name</code> - Custom image name (default: product-suite-edition-date.img)</li>
  <li><code class="language-plaintext highlighter-rouge">-r, --repo</code> - rsdk repository URL (default: official RadxaOS-SDK/rsdk)</li>
  <li><code class="language-plaintext highlighter-rouge">-l, --list</code> - List available products</li>
  <li><code class="language-plaintext highlighter-rouge">-h, --help</code> - Show help</li>
</ul>

<h2 id="using-a-custom-fork">Using a Custom Fork</h2>

<p>To add support for custom editions or boards:</p>

<ol>
  <li>Fork https://github.com/RadxaOS-SDK/rsdk</li>
  <li>Edit the fork with your changes, e.g. <code class="language-plaintext highlighter-rouge">src/share/rsdk/configs/products.json</code></li>
  <li>Build using your fork:</li>
</ol>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./rsdk-docker-build.sh <span class="se">\</span>
  <span class="nt">--product</span> rock-4c-plus <span class="se">\</span>
  <span class="nt">--edition</span> cli <span class="se">\</span>
  <span class="nt">--repo</span> https://github.com/yourusername/rsdk.git
</code></pre></div></div>

<p>Example: Adding CLI edition to rock-4c-plus:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
    </span><span class="nl">"product"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rock-4c-plus"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"supported_suite"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"bookworm"</span><span class="p">],</span><span class="w">
    </span><span class="nl">"supported_edition"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"kde"</span><span class="p">,</span><span class="w"> </span><span class="s2">"cli"</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<h2 id="notes">Notes</h2>

<ul>
  <li>First build takes 30-60 minutes</li>
  <li>Uses QEMU for ARM cross-compilation</li>
  <li>Runs entirely in Docker containers</li>
  <li>Requires privileged mode for loop devices</li>
  <li>Default repository is official RadxaOS-SDK/rsdk</li>
</ul>]]></content><author><name>Daniel Wikar</name></author><category term="Linux" /><category term="radxa" /><category term="linux" /><category term="sbc" /><category term="rock-4c-plus" /><category term="docker" /><category term="rsdk" /><summary type="html"><![CDATA[I’ve had various issues (blank screen, no display signal, no blue LED, etc) getting the Radxa ROCK 4C+ to work based with the Armbian, DietPi and Radxa standard images for Debian Bookworm. Therefore I created this script to build an image via rsdk from within a Docker container.]]></summary></entry><entry><title type="html">iCloud Custom Email Domain - Configuration for Outlook Mobile</title><link href="https://wikar.se/icloud/2024/05/21/icloud-mail-custom-email-domain-imap-outlook.html" rel="alternate" type="text/html" title="iCloud Custom Email Domain - Configuration for Outlook Mobile" /><published>2024-05-21T00:00:00+00:00</published><updated>2024-05-21T00:00:00+00:00</updated><id>https://wikar.se/icloud/2024/05/21/icloud-mail-custom-email-domain-imap-outlook</id><content type="html" xml:base="https://wikar.se/icloud/2024/05/21/icloud-mail-custom-email-domain-imap-outlook.html"><![CDATA[<p>Since Google decided to <a href="https://support.google.com/a/answer/2855120">shut down the excellent free G Suite</a> that I used for years I had to find an alternative. Google Workspace is ridiculously priced for a family domain and unfortunately Microsoft has also removed the option for personalized email addresses in <a href="https://support.microsoft.com/en-us/office/changes-to-microsoft-365-email-features-and-storage-e888d746-61e5-49e3-9bd1-94b88e9be988">Outlook.com / O365 Family</a>.</p>

<p>After sifting through numerous other alternatives I settled on Apple’s <a href="https://support.apple.com/en-us/102540">Custom Email Domain with iCloud Mail</a>, pretty easy choice in the end since it’s a lot of bang for the buck and easy to <a href="https://support.apple.com/guide/icloud/mma473945269">setup</a>.</p>

<p>The only little snag I ran into was setting up the mail account in my Outlook Mobile (Android). Setting it up as an iCloud provider was easy but then it automatically used my @icloud.com address and no option to change that to my custom address but after numerous tries I finally found the correct configuration via <a href="https://support.apple.com/en-us/102525">IMAP</a>.</p>

<h3 id="apple-id-app-specific-password">Apple ID App-specific Password</h3>

<p>First you need to setup an app-specific password at <a href="appleid.com">appleid.com</a> as described <a href="https://support.apple.com/en-us/102654">here</a>.</p>

<h3 id="outlook-mobile-configuration">Outlook Mobile Configuration</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Email Address: daniel@example.com
Display Name: Daniel Wikar
Description:

IMAP Host Name: imap.mail.me.com
Port: 993
Security Type: SSL/TLS
IMAP Username: &lt;your-account&gt;@icloud.com
IMAP Password: &lt;your-app-specific-password&gt;

SMTP Host Name: smtp.mail.me.com
Port: 587
Security Type: StartTls
SMTP Username: &lt;your-account&gt;@icloud.com
SMTP Password: &lt;your-app-specific-password&gt;
</code></pre></div></div>

<p>Using StartTls as the Security Type for SMTP was the key in getting it to work.</p>

<p>Also confirmed to be working with the excellent <a href="https://k9mail.app/">K-9 Mail</a> and should work with any third-party client supporting SSL/TLS + StartTls.</p>]]></content><author><name>Daniel Wikar</name></author><category term="iCloud" /><category term="apple" /><category term="appleid" /><category term="email" /><category term="domain" /><category term="outlook" /><category term="imap" /><category term="k-9" /><category term="k9" /><summary type="html"><![CDATA[Since Google decided to shut down the excellent free G Suite that I used for years I had to find an alternative. Google Workspace is ridiculously priced for a family domain and unfortunately Microsoft has also removed the option for personalized email addresses in Outlook.com / O365 Family.]]></summary></entry><entry><title type="html">Flatcar Container Linux - Bare Metal Simple Installation Guide</title><link href="https://wikar.se/flatcar/2022/07/15/flatcar-bare-metal-simple-installation-guide.html" rel="alternate" type="text/html" title="Flatcar Container Linux - Bare Metal Simple Installation Guide" /><published>2022-07-15T00:00:00+00:00</published><updated>2022-07-15T00:00:00+00:00</updated><id>https://wikar.se/flatcar/2022/07/15/flatcar-bare-metal-simple-installation-guide</id><content type="html" xml:base="https://wikar.se/flatcar/2022/07/15/flatcar-bare-metal-simple-installation-guide.html"><![CDATA[<p>One of the main reasons I wanted to get <a href="http://wikar.se/openwrt/2022/07/12/openwrt-netbootxyz.html">netboot.xyz</a> up and running was to simplify installation of various linux machines and more specifically <a href="https://flatcar-linux.org/">Flatcar Container Linux</a> which have really caught my interest as a minimal, immutable and always up-to-date container host.</p>

<p><a href="https://kinvolk.io/">Kinvolk</a>, the company behind Flatcar, was also <a href="https://kinvolk.io/blog/2021/04/microsoft-acquires-kinvolk/">acquired by Microsoft</a> recently which piqued my curiosity even more.</p>

<p>I wrote up this little step-by-step bare metal installation guide and to be able to follow this method you would need to have a spare Linux instance with Docker. I used my <a href="https://openwrt.org/">OpenWRT</a> router once again but you could also use <a href="https://docs.docker.com/desktop/windows/wsl/">WSL2</a> on Windows, a <a href="https://www.stewright.me/2022/01/install-docker-on-a-raspberry-pi-tutorial/">Raspberry Pi with Docker</a> or whatever you prefer.</p>

<h3 id="1-create-password">1. Create password</h3>

<p>Using your existing Linux/Docker instance create a password hash to be used in the config.yaml for Flatcar.</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run <span class="nt">--rm</span> <span class="nt">--interactive</span> <span class="nt">--tty</span> fscm/mkpasswd <span class="nt">--method</span><span class="o">=</span>SHA-512 <span class="nt">--rounds</span><span class="o">=</span>4096 yourpassword
</code></pre></div></div>

<p><a href="https://www.flatcar.org/docs/latest/provisioning/cl-config/examples/#generating-a-password-hash">https://www.flatcar.org/docs/latest/provisioning/cl-config/examples/#generating-a-password-hash</a></p>

<h3 id="2-create-configyaml-container-linux-config">2. Create config.yaml (Container Linux Config)</h3>

<p>I created a directory <code class="language-plaintext highlighter-rouge">/home/daniel/ignition</code> and this minimal <code class="language-plaintext highlighter-rouge">config.yaml</code>.</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nano config.yaml
</code></pre></div></div>

<p>In the <code class="language-plaintext highlighter-rouge">password_hash</code> section paste the hash from <a href="#1-create-password">1</a>. I also added a static IP (additional comment under <a href="#6-network-configuration-optional">6</a>) and made my user a member of the sudo group.</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">passwd</span><span class="pi">:</span>
  <span class="na">users</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">daniel</span>
      <span class="na">password_hash</span><span class="pi">:</span> <span class="s2">"</span><span class="s">$6$rounds=4096$this_is_where_you_paste_your_really_long_password_hash"</span>
      <span class="na">groups</span><span class="pi">:</span> <span class="pi">[</span><span class="s2">"</span><span class="s">sudo"</span><span class="pi">]</span>
<span class="na">networkd</span><span class="pi">:</span>
  <span class="na">units</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">enp0s25.network</span>
      <span class="na">contents</span><span class="pi">:</span> <span class="pi">|</span>
        <span class="s">[Match]</span>
        <span class="s">Name=enp0s25</span>

        <span class="s">[Network]</span>
        <span class="s">DNS=1.1.1.1</span>
        <span class="s">Address=192.168.100.252/24</span>
        <span class="s">Gateway=192.168.100.1</span>
</code></pre></div></div>

<p><a href="https://www.flatcar.org/docs/latest/provisioning/cl-config/examples/">https://www.flatcar.org/docs/latest/provisioning/cl-config/examples/</a></p>

<p><a href="https://www.flatcar.org/docs/latest/provisioning/config-transpiler/configuration/">https://www.flatcar.org/docs/latest/provisioning/config-transpiler/configuration/</a></p>

<h3 id="3-transpile-configyaml-into-ignitionjson">3. Transpile config.yaml into ignition.json</h3>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cat </span>config.yaml | docker run <span class="nt">--rm</span> <span class="nt">-i</span> ghcr.io/flatcar-linux/ct:latest <span class="o">&gt;</span> ignition.json
</code></pre></div></div>

<p><a href="https://flatcar-linux.org/docs/latest/provisioning/config-transpiler/">https://flatcar-linux.org/docs/latest/provisioning/config-transpiler/</a></p>

<h3 id="4-setup-local-webserver">4. Setup local webserver</h3>

<p>Setup a local webserver to host the ignition.json file and serve this during the Flatcar installation. I decided to share the directory <code class="language-plaintext highlighter-rouge">/home/daniel/ignition</code> using port 7080 in order to not conflict with an existing webserver.</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run <span class="nt">--name</span> nginx-ignition <span class="nt">-v</span> /home/daniel/ignition:/usr/share/nginx/html:ro <span class="nt">-p</span> 7080:80 <span class="nt">-d</span> nginx
</code></pre></div></div>

<h3 id="5-local-installation">5. Local installation</h3>

<p>Everything is now prepared and we’re ready to boot into a live version of Flatcar either via <a href="https://flatcar-linux.org/docs/latest/installing/bare-metal/booting-with-iso/">ISO</a> or <a href="http://wikar.se/openwrt/2022/07/12/openwrt-netbootxyz.html">PXE</a> on the target machine.</p>

<p>Using <a href="https://netboot.xyz/">netboot.xyz</a> you can pass the ignition.json already during first boot but since we’re going to do a local installation we can skip this step.</p>

<p>Once booted you will automatically be logged into a shell on the console without prompting for a password.</p>

<p>Now it’s time to transfer the ignition.json file locally using the webserver from <a href="#4-setup-local-webserver">4</a>.</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>wget http://192.168.1.1:7080/ignition.json
</code></pre></div></div>

<p>If you are unsure of your disk setup you can check this with…</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>lsblk
</code></pre></div></div>

<p>And you then perform the installation by running…</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>flatcar-install <span class="nt">-d</span> /dev/sda <span class="nt">-i</span> ignition.json
</code></pre></div></div>

<h3 id="6-network-configuration-optional">6. Network configuration (Optional)</h3>

<p>During my first installation I specified the wrong interface name (should have been <code class="language-plaintext highlighter-rouge">Name=enp0s25</code>) in the <code class="language-plaintext highlighter-rouge">config.yaml</code> and I haven’t figured out how the automatic naming works so on my second try I ran…</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>netstat <span class="nt">-i</span>
</code></pre></div></div>

<p>To list all active network devices…</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0          1500        0      0      0 0             7      0      0      0 BMU
enp0s25          1500    58858      0    420 0         26959      0      0      0 BMRU
lo              65536        0      0      0 0             0      0      0      0 LRU
</code></pre></div></div>

<p>Then I modified <code class="language-plaintext highlighter-rouge">config.yaml</code> with the correct interface and transpiled again through step <a href="#3-transpile-configyaml-into-ignitionjson">3</a> before installing <a href="#5-local-installation">5</a>.</p>

<h3 id="done">Done</h3>

<p>Now you should be able to ssh into your freshly installed <a href="https://flatcar-linux.org/">Flatcar Container Linux</a> instance.</p>

<p>Full documentation is found <a href="https://flatcar-linux.org/docs/latest">here</a>.</p>

<p>Good luck!</p>]]></content><author><name>Daniel Wikar</name></author><category term="Flatcar" /><category term="flatcar" /><category term="linux" /><category term="docker" /><category term="container" /><category term="coreos" /><category term="microsoft" /><category term="netboot.xyz" /><category term="pxe" /><category term="ipxe" /><summary type="html"><![CDATA[One of the main reasons I wanted to get netboot.xyz up and running was to simplify installation of various linux machines and more specifically Flatcar Container Linux which have really caught my interest as a minimal, immutable and always up-to-date container host.]]></summary></entry><entry><title type="html">OpenWRT + netboot.xyz</title><link href="https://wikar.se/openwrt/2022/07/12/openwrt-netbootxyz.html" rel="alternate" type="text/html" title="OpenWRT + netboot.xyz" /><published>2022-07-12T00:00:00+00:00</published><updated>2022-07-12T00:00:00+00:00</updated><id>https://wikar.se/openwrt/2022/07/12/openwrt-netbootxyz</id><content type="html" xml:base="https://wikar.se/openwrt/2022/07/12/openwrt-netbootxyz.html"><![CDATA[<p>There are numerous ways to get <a href="https://netboot.xyz/">netboot.xyz</a> running as a PXE server together with OpenWRT but this is the simplest (and only) way I got it to work 😊</p>

<p>Inspired by <a href="https://forum.openwrt.org/t/dnsmasq-pxe-boot-using-netboot-xyz/56075/4">this forum post</a> but I couldn’t get it to boot straight from http so instead I did the following.</p>

<h3 id="1-created-a-tfpt-directory-in-the-root-of-openwrt">1. Created a tfpt-directory in the root of OpenWRT</h3>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir </span>tftp
</code></pre></div></div>

<h3 id="2-downloaded-netbootxyzkpxe-and-netbootxyzefi-locally">2. Downloaded netboot.xyz.kpxe and netboot.xyz.efi locally</h3>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> /tftp
curl http://boot.netboot.xyz/ipxe/netboot.xyz.kpxe <span class="nt">-o</span> netboot.xyz.kpxe
curl http://boot.netboot.xyz/ipxe/netboot.xyz.efi <span class="nt">-o</span> netboot.xyz.efi
</code></pre></div></div>

<h3 id="3-modified-etcdnsmasqconf-to-act-as-tftp-server">3. Modified /etc/dnsmasq.conf to act as TFTP server</h3>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nano /etc/dnsmasq.conf
</code></pre></div></div>

<p>Add this block to the end of the file.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">####################################</span>
<span class="c"># TFTP Server custom configuration #</span>
<span class="c">####################################</span>
enable-tftp
tftp-root<span class="o">=</span>/tftp
dhcp-boot<span class="o">=</span>netboot.xyz.efi
</code></pre></div></div>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/etc/init.d/dnsmasq restart
</code></pre></div></div>

<p>(Couldn’t get the BIOS/EFI identification to work so I manually switched between netboot.xyz.kpxe and netboot.xyz.efi)</p>

<h3 id="4-finally-a-crucial-but-hard-to-find-configuration-change-for-openwrt">4. Finally a crucial but hard to find configuration change for OpenWRT</h3>

<p>Disable the LAN interface to announce itself as a <code class="language-plaintext highlighter-rouge">Local IPv6 DNS server</code> which in turn somehow conflicted with the iPXE DNS lookup (even though booted in IPv4 mode).</p>

<p>Available through the OpenWRT interface. Network -&gt; Interfaces, LAN -&gt; Edit, DHCP Server -&gt; 
IPv6 Settings. Untick this box if ticked.</p>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2022-07-12-openwrt-netbootxyz/local-ipv6-dns-server.png" alt="local-ipv6-dns-server" /></p>

<p>Identified through <a href="https://github.com/netbootxyz/netboot.xyz/issues/283">this thread</a>.</p>

<h3 id="done">Done</h3>

<p>Good luck!</p>]]></content><author><name>Daniel Wikar</name></author><category term="OpenWRT" /><category term="openwrt" /><category term="netboot.xyz" /><category term="pxe" /><category term="ipxe" /><category term="efi" /><category term="bios" /><summary type="html"><![CDATA[There are numerous ways to get netboot.xyz running as a PXE server together with OpenWRT but this is the simplest (and only) way I got it to work 😊]]></summary></entry><entry><title type="html">Thinkers vs Repeaters</title><link href="https://wikar.se/thinking/2018/11/24/thinkers-vs-repeaters.html" rel="alternate" type="text/html" title="Thinkers vs Repeaters" /><published>2018-11-24T00:00:00+00:00</published><updated>2018-11-24T00:00:00+00:00</updated><id>https://wikar.se/thinking/2018/11/24/thinkers-vs-repeaters</id><content type="html" xml:base="https://wikar.se/thinking/2018/11/24/thinkers-vs-repeaters.html"><![CDATA[<p><a href="https://en.wikipedia.org/wiki/Creative_thinking">Creative</a> and <a href="https://en.wikipedia.org/wiki/Critical_thinking">critical</a> thinking are key factors in both creating and sustaining success.</p>

<p>During my career I have come across two different groups of people, as always there’s really a spectra between the two but to be able to clearly describe the distinguishable differences I’ll focus on the extremes; <em>Thinkers</em> and <em>Repeaters</em></p>

<p>So what’s the characteristics of a <em>Thinker</em>? They think for themselves, have a mind of their own and have the ability to create new creative/critical thoughts out of thin air based on their own experience and competence. Nothing is taken for granted and they don’t trust blindly, everything has to be proven and evaluated. They welcome external input for inspiration, challengement or enlightenment - but this is something they consciously evaluate to validate, oppose or reshape their own thoughts.</p>

<blockquote>
  <p>“Knowledge has to be improved, challenged, and increased constantly, or it vanishes.” - Peter F. Drucker</p>
</blockquote>

<p>The <em>Repeaters</em> on the other hand can seem and sound very initiated, they can be charismatic and well-spoken but the actual words coming out of their mouths are based not on thoughts of their own but rather the words of other <em>Thinkers</em> or <em>Repeaters</em>. They depend on other people to do the thinking for them to repeat and present as their own, be it colleagues, subordinates, consultants or other external parties with or without agendas of their own.</p>

<p><em>Repeaters</em> have a hard time (often unknowingly) separating right from wrong, A from B, facts from opinions, helpful thoughts from hidden agendas, etc.</p>

<p><em>Repeaters</em> repeating the words of other <em>Repeaters</em> often end up in a ‘whispering game’ where the actual initial thought from a <em>Thinker</em> is lost or messed up along the way.</p>

<p>The lack of true understanding can even make the <em>Repeaters’</em> claims end up in a complete jumbled mess where the ‘thought’ in one sentence is opposed already in the next (again unknowingly).</p>

<p>Sometimes it’s easy and sometimes it’s really hard to distinguish a <em>Repeater</em> from a <em>Thinker</em>. There are professional and clever <em>Repeaters</em> who have built their whole career in being experts at repeating other’s thoughts as their own and doing it really well.</p>

<p>For some nuance it’s hard to be a <em>Thinker</em> in every single domain but there are clearly severe drawbacks in being a <em>Repeater</em> within your main profession, both for yourself and for the actual <em>Thinkers</em> around you.</p>

<p><em>So, are you a Thinker or a Repeater? How about your manager? Your colleagues?</em></p>

<p>Crossposted @ <a href="https://www.linkedin.com/pulse/thinkers-vs-repeaters-daniel-wikar-1f/">LinkedIn</a></p>]]></content><author><name>Daniel Wikar</name></author><category term="Thinking" /><category term="creative" /><category term="creativity" /><category term="critical" /><category term="thinking" /><category term="behaviour" /><category term="leadership" /><category term="organization" /><category term="intelligence" /><summary type="html"><![CDATA[Creative and critical thinking are key factors in both creating and sustaining success.]]></summary></entry><entry><title type="html">Install Data Mining Add-in In Excel</title><link href="https://wikar.se/excel/2018/06/11/install-data-mining-add-in-in-excel-2016.html" rel="alternate" type="text/html" title="Install Data Mining Add-in In Excel" /><published>2018-06-11T00:00:00+00:00</published><updated>2018-06-11T00:00:00+00:00</updated><id>https://wikar.se/excel/2018/06/11/install-data-mining-add-in-in-excel-2016</id><content type="html" xml:base="https://wikar.se/excel/2018/06/11/install-data-mining-add-in-in-excel-2016.html"><![CDATA[<p><strong>Edit:</strong> This has also been confirmed working in Excel 2019 / 2021 / Office 365.</p>

<p>Ever since the release of Excel 2016 a compatible SQL Server Data Mining Add-in has been missing. There has been numerous requests for Microsoft to release an official update but so far this hasn’t happened.</p>

<p>Having Excel 2013 and Excel 2016 installed side-by-side has been used as a workaround to get the Excel 2013 DM Add-In semi-working also for Excel 2016. The following registry hack is allowing the otherwise blocked installation to proceed for Excel 2016 without the need for an actual Excel 2013 installation.</p>

<ol>
  <li>
    <p>Download <a href="https://www.microsoft.com/en-us/download/details.aspx?id=56047">Microsoft® SQL Server® 2012 SP4 Data Mining Add-ins for Microsoft® Office®</a> (Latest official version)</p>
  </li>
  <li>
    <p>Insert the following entry in the Windows registry (.reg file <a href="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/misc/2018-06-11-install-data-mining-add-in-in-excel-2016/excel-2016-dm-registry-check.reg">here</a> but use at your own risk)
<img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2018-06-11-install-data-mining-add-in-in-excel-2016/regedit_excel_2016_dm_hack.png" alt="excel2016-hack" /></p>
  </li>
  <li>
    <p>Proceed with installation which now shouldn’t complain about missing Excel 2010/2013</p>
  </li>
</ol>]]></content><author><name>Daniel Wikar</name></author><category term="Excel" /><category term="excel" /><category term="data mining" /><category term="sql server" /><category term="ssas" /><summary type="html"><![CDATA[Edit: This has also been confirmed working in Excel 2019 / 2021 / Office 365.]]></summary></entry><entry><title type="html">ERP World View</title><link href="https://wikar.se/erp/2016/01/07/erp-world.html" rel="alternate" type="text/html" title="ERP World View" /><published>2016-01-07T00:00:00+00:00</published><updated>2016-01-07T00:00:00+00:00</updated><id>https://wikar.se/erp/2016/01/07/erp-world</id><content type="html" xml:base="https://wikar.se/erp/2016/01/07/erp-world.html"><![CDATA[<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2016-01-07-erp-world/erp-world.png" alt="erp-world" /></p>

<p>During my career I have encountered numerous different ERP systems, vendors, consultants and specialists. Something that has struck me as common for many (but not all) ERP professionals is the lack of understanding for the need of other enterprise applications and/or integration of the same. Many also seem to favor customizations within the ERP rather than making it a part of a service-oriented landscape with other enterprise or business unit specific applications.</p>

<blockquote>
  <p>“Documentation? Well, we do have some ER diagrams but they’re not complete or up to date.”</p>
</blockquote>

<blockquote>
  <p>“Why would you like to extract data <u>out</u> from the ERP?”</p>
</blockquote>

<blockquote>
  <p>“Services? Interfaces? We’d suggest you to take a look in the database if you really need some of our data.”</p>
</blockquote>

<blockquote>
  <p>“We already have that in our ERP, not as good but it would still be better to use that.”</p>
</blockquote>

<blockquote>
  <p>“Integrate? Wouldn’t it be better to just migrate the data into the ERP?”</p>
</blockquote>

<p>Anyone with similar experiences or maybe the opposite?</p>]]></content><author><name>Daniel Wikar</name></author><category term="ERP" /><category term="dynamics ax" /><category term="dynamics nav" /><category term="navision" /><category term="sap" /><category term="movex" /><category term="system21" /><category term="jeeves" /><category term="jd edwards" /><category term="oracle" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Power BI Desktop/Azure now supports SSAS Multidimensional</title><link href="https://wikar.se/power-bi/2016/01/06/power-bi-desktop-azure-now-support-ssas-molap.html" rel="alternate" type="text/html" title="Power BI Desktop/Azure now supports SSAS Multidimensional" /><published>2016-01-06T00:00:00+00:00</published><updated>2016-01-06T00:00:00+00:00</updated><id>https://wikar.se/power-bi/2016/01/06/power-bi-desktop-azure-now-support-ssas-molap</id><content type="html" xml:base="https://wikar.se/power-bi/2016/01/06/power-bi-desktop-azure-now-support-ssas-molap.html"><![CDATA[<p>Ever since the possibility to create a data source connecting Power BI to an on-premises SSAS Tabular instance the same was <a href="https://ideas.powerbi.com/forums/265200-power-bi/suggestions/6606693-sql-server-analysis-services-cubes?tracking_code=3023dd7e6506a9e11f2a2fc1acddfe56">requested</a> for Multidimensional (MOLAP) cubes and now the time has finally come!</p>

<p>Details on how to connect it through Power BI Desktop can be found here: <a href="https://powerbi.microsoft.com/en-us/documentation/powerbi-desktop-ssas-multidimensional/">Connect to SSAS Multidimensional Models in Power BI Desktop</a></p>

<p>Setting up the Power BI Gateway: <a href="https://powerbi.microsoft.com/en-us/documentation/powerbi-gateway-enterprise-manage-ssas/">Manage your enterprise data source - Analysis Services</a></p>]]></content><author><name>Daniel Wikar</name></author><category term="Power-BI" /><category term="power-bi" /><category term="ssas" /><category term="analysis-services" /><category term="multidimensional" /><category term="olap" /><category term="mdx" /><summary type="html"><![CDATA[Ever since the possibility to create a data source connecting Power BI to an on-premises SSAS Tabular instance the same was requested for Multidimensional (MOLAP) cubes and now the time has finally come!]]></summary></entry><entry><title type="html">Reblog - Datazen now able to use MDX generated by SSMS</title><link href="https://wikar.se/datazen/2015/12/14/reblog-datazen-now-support-ssms-mdx.html" rel="alternate" type="text/html" title="Reblog - Datazen now able to use MDX generated by SSMS" /><published>2015-12-14T00:00:00+00:00</published><updated>2015-12-14T00:00:00+00:00</updated><id>https://wikar.se/datazen/2015/12/14/reblog-datazen-now-support-ssms-mdx</id><content type="html" xml:base="https://wikar.se/datazen/2015/12/14/reblog-datazen-now-support-ssms-mdx.html"><![CDATA[<p>Since the latest release Datazen is now able to use MDX queries generated through SQL Server Management Studio. Christopher Finlan wrote about it is his blog post <a href="http://christopherfinlan.com/2015/07/15/new-datazen-server-build-brings-some-mdx-magic/">New Datazen Server Build Brings some MDX Magic</a> and no use repeating the same here so I’ll just post the link as a reblog.</p>

<p>Happy dashboarding!</p>]]></content><author><name>Daniel Wikar</name></author><category term="Datazen" /><category term="datazen" /><category term="ssas" /><category term="analysis-services" /><category term="multidimensional" /><category term="olap" /><category term="mdx" /><summary type="html"><![CDATA[Since the latest release Datazen is now able to use MDX queries generated through SQL Server Management Studio. Christopher Finlan wrote about it is his blog post New Datazen Server Build Brings some MDX Magic and no use repeating the same here so I’ll just post the link as a reblog.]]></summary></entry><entry><title type="html">Dynamics AX7 (Rainier) - BI/Analytics Preview</title><link href="https://wikar.se/dynamicsax/2015/12/12/dynamics-ax7-bi-preview.html" rel="alternate" type="text/html" title="Dynamics AX7 (Rainier) - BI/Analytics Preview" /><published>2015-12-12T00:00:00+00:00</published><updated>2015-12-12T00:00:00+00:00</updated><id>https://wikar.se/dynamicsax/2015/12/12/dynamics-ax7-bi-preview</id><content type="html" xml:base="https://wikar.se/dynamicsax/2015/12/12/dynamics-ax7-bi-preview.html"><![CDATA[<p>It has been known for a while that Dynamics AX7 (Codename Rainier) would come with significant changes to the BI &amp; Analytics features. Not much has been known about the details but about a week ago Microsoft released a video revealing some of the upcoming news. Thanks to Nurlin Aberra, <a href="http://www.dynaax.se">DynaAX</a>, for the tip.</p>

<p>You can find the actual video here, <a href="https://www.youtube.com/watch?v=jepSqjGkuxE">www.youtube.com/watch?v=jepSqjGkuxE</a>. I extracted some of the most interesting bits into snippets below together with some personal comments.</p>

<h3 id="perspectives">Perspectives</h3>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-02.png" alt="dax7-bi-preview-02" /></p>

<p>Personally I only have experience with BI in AX2012 R3 but have been working with the Microsoft BI stack outside of AX since 2007. The experience of AX BI has been a bit so-so especially since we often want to combine the data from AX with historical data and/or data from other sources. I still see the BI features in AX mainly as operational, analytics closer and more integrated to the business processes.</p>

<h3 id="workspaces">Workspaces</h3>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-01.png" alt="dax7-bi-preview-01" /></p>

<p>Moving from the role centers into more personalized and process-centric views - a welcome change.</p>

<h3 id="flavors-of-reporting-in-dynamics-ax">Flavors of reporting in Dynamics AX</h3>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-03.png" alt="dax7-bi-preview-03" /></p>

<p>Reporting still feels a bit scattered. Interesting to see whether the new BI features in <a href="http://blogs.technet.com/b/dataplatforminsider/archive/2015/10/29/microsoft-business-intelligence-our-reporting-roadmap.aspx">SQL Server 2016</a> (such as <a href="http://www.datazen.com">Datazen</a>) will be leveraged in the on-prem version of AX7.</p>

<h3 id="how-a-developer-consumes-aggregate-data-in-ax7">How a developer consumes aggregate data in AX7</h3>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-04.png" alt="dax7-bi-preview-04" /></p>

<p>“Aggregate Measurements” becoming an alternative to the SSAS cubes. Initally it was unclear which underlying technology is actually used (In-memory OLTP, Tabular Models, etc) but during the Q&amp;A it was “demystified” by talking about the SQL Server columnstore indexes and read-only secondaries. I have a feel this can’t be all to it (same Aggregate Measurements deployed twice to enable Excel self-service analytics?) and it require further detailing ahead.</p>

<h3 id="in-memory-real-time-vs-ssas-cube">In-Memory Real-time vs SSAS Cube</h3>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-05.png" alt="dax7-bi-preview-05" /></p>

<p>Developer view in Visual Studio. Notice the options for both InMemoryRealTime and SSAS Cube.</p>

<h3 id="ax-2012-bi-capabilities-are-great---but-hard-to-implement">AX 2012 BI capabilities are GREAT - but hard to implement</h3>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-06.png" alt="dax7-bi-preview-06" /></p>

<p>Agree to all the boxes in red. Good to see the AX team acknowledging and aiming to fill the gaps.</p>

<h3 id="aggregate-models---deployment-choices">Aggregate models - Deployment choices</h3>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-07.png" alt="dax7-bi-preview-07" /></p>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-08.png" alt="dax7-bi-preview-08" /></p>

<p>Here we can see the difference between the two deployment options. Nonclustered Columnstore Index (NCCI) or SSAS. Multi-dimensional or Tabular not mentioned - referring to MDX a give-away for MOLAP?</p>

<h3 id="ax7---power-bi">AX7 - Power BI</h3>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-09.png" alt="dax7-bi-preview-09" /></p>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-10.png" alt="dax7-bi-preview-10" /></p>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-11.png" alt="dax7-bi-preview-11" /></p>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-12.png" alt="dax7-bi-preview-12" /></p>

<p><img src="https://raw.githubusercontent.com/wikar/wikar.github.io/master/assets/images/2015-12-12-dynamics-ax-7-bi-preview/dax7-bi-preview-13.png" alt="dax7-bi-preview-13" /></p>

<p>Not much to mention here apart from it becoming a two-way integration of Power BI. Data out from and reports/dashboards back into AX.</p>

<h3 id="data-extraction--data-mashup">Data extraction / Data mashup</h3>

<p>It was once again expressed that if you want to extract data from AX to integrate into an external data warehouse DIXF is the way to go. If you want to consume data irregularly for data mashups exposing queries through OData will still be available much like <a href="https://technet.microsoft.com/en-us/library/dn198214.aspx">today</a>.</p>]]></content><author><name>Daniel Wikar</name></author><category term="DynamicsAX" /><category term="dynamics ax" /><category term="ax" /><category term="ax7" /><category term="rainier" /><category term="bi" /><category term="analytics" /><summary type="html"><![CDATA[It has been known for a while that Dynamics AX7 (Codename Rainier) would come with significant changes to the BI &amp; Analytics features. Not much has been known about the details but about a week ago Microsoft released a video revealing some of the upcoming news. Thanks to Nurlin Aberra, DynaAX, for the tip.]]></summary></entry></feed>