<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Akintunde</title>
    <description>The latest articles on Forem by Akintunde (@akintunde102).</description>
    <link>https://forem.com/akintunde102</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F188447%2F27818f3c-617e-4e52-942a-046e5a8dc0f5.jpeg</url>
      <title>Forem: Akintunde</title>
      <link>https://forem.com/akintunde102</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/akintunde102"/>
    <language>en</language>
    <item>
      <title>Made Our Supabase Alternative Open Source</title>
      <dc:creator>Akintunde</dc:creator>
      <pubDate>Wed, 27 Dec 2023 07:32:44 +0000</pubDate>
      <link>https://forem.com/akintunde102/made-our-supabase-alternative-open-source-5n6</link>
      <guid>https://forem.com/akintunde102/made-our-supabase-alternative-open-source-5n6</guid>
      <description>&lt;p&gt;Finally made Nobox Open source.&lt;/p&gt;

&lt;p&gt;This is just an Introduction Video to get feedback.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=qhk0biCL97w"&gt;https://www.youtube.com/watch?v=qhk0biCL97w&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Running Open Source Models locally with a TAURI GUI</title>
      <dc:creator>Akintunde</dc:creator>
      <pubDate>Tue, 07 Nov 2023 18:07:23 +0000</pubDate>
      <link>https://forem.com/akintunde102/running-open-source-models-locally-with-a-tauri-gui-2i62</link>
      <guid>https://forem.com/akintunde102/running-open-source-models-locally-with-a-tauri-gui-2i62</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p_D973IL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fxed50rvow2kgzim22rd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p_D973IL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fxed50rvow2kgzim22rd.png" alt="Ollama Chat" width="800" height="781"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've always been a fan of the &lt;a href="https://ollama.ai"&gt;Ollama Project&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Recently, I created a simple web UI for it. It was just a slap-together of react codes.&lt;/p&gt;

&lt;p&gt;I've also developed a desktop application with improved features and user-friendliness. However, I can't share the MacBook executables just yet because I need to sign the app (which I plan to do soon).&lt;/p&gt;

&lt;p&gt;My main goal is to share the open-source code with anyone who's interested in experiencing the beauty of running open-source models locally, without requiring any specialized programming skills. I also welcome contributions from the community.&lt;/p&gt;

&lt;p&gt;You can find the project on GitHub here: &lt;a href="https://github.com/Akintunde102/ollama-chat-desktop-app"&gt;https://github.com/Akintunde102/ollama-chat-desktop-app&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ollama</category>
      <category>llama</category>
      <category>ai</category>
      <category>tauri</category>
    </item>
    <item>
      <title>My Rough Ollama Local WebUI</title>
      <dc:creator>Akintunde</dc:creator>
      <pubDate>Sat, 05 Aug 2023 02:39:13 +0000</pubDate>
      <link>https://forem.com/akintunde102/my-rough-ollama-local-webui-5gap</link>
      <guid>https://forem.com/akintunde102/my-rough-ollama-local-webui-5gap</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--20n_A-Lm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5lbkt5awe23f72ry22jn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--20n_A-Lm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5lbkt5awe23f72ry22jn.png" alt="Image description" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install from here: &lt;a href="https://github.com/Akintunde102/ollama-webui"&gt;https://github.com/Akintunde102/ollama-webui&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openapi</category>
      <category>llm</category>
    </item>
    <item>
      <title>Introducing Nobox.cloud: A Backend as a Service for JS Devs</title>
      <dc:creator>Akintunde</dc:creator>
      <pubDate>Wed, 02 Aug 2023 21:51:27 +0000</pubDate>
      <link>https://forem.com/akintunde102/introducing-noboxcloud-a-backend-as-a-service-for-js-devs-240f</link>
      <guid>https://forem.com/akintunde102/introducing-noboxcloud-a-backend-as-a-service-for-js-devs-240f</guid>
      <description>&lt;p&gt;Late last year - 2022, I suddenly found myself in a situation where I got flooded with several solutions I needed to build with little or no resources to bring them to reality, time being the scarcest of these resources. &lt;/p&gt;

&lt;p&gt;Best thing I could do, as I thought then, was to build a backend as a service product that would at least remove the backend challenge off my list. I guess , you would be wondering why I didn't just use firebase at the time. I just didn't like to do that, the integration process was already disappointing.  I wanted something that fit into my workflow and most importantly, a BAAS that gives me a custom-experience most backend-as-a-service out there couldn't give. &lt;/p&gt;

&lt;p&gt;I ended up building nobox.cloud with help from some of my friends and since then, it has evolved far beyond being just a personal tool – it's now being embraced and used by others too!.  &lt;/p&gt;

&lt;p&gt;Bottom line here is: We would really love it if you could check out nobox.cloud and give us some feedback. &lt;/p&gt;

&lt;p&gt;Currently, we're in the Alpha Release stage and have decided not to have a waitlist, so registration is open for a limited time.&lt;/p&gt;

&lt;p&gt;During this Alpha phase, we're particularly eager to gather feedback from users like you. &lt;/p&gt;

&lt;p&gt;I'm looking forward to hearing your thoughts on nobox.cloud!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>backend</category>
      <category>frontend</category>
      <category>firebase</category>
    </item>
    <item>
      <title>Dynamic Offline Storage In React Native Applications</title>
      <dc:creator>Akintunde</dc:creator>
      <pubDate>Tue, 30 Jun 2020 01:13:22 +0000</pubDate>
      <link>https://forem.com/akintunde102/dynamic-offline-storage-in-react-native-applications-4imm</link>
      <guid>https://forem.com/akintunde102/dynamic-offline-storage-in-react-native-applications-4imm</guid>
      <description>&lt;p&gt;A while ago, I built a react native App that allowed people to view and save African Fashion Styles. The app simply displays about 400+ african fashion styles and then allow you save the styles you like.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7kvJ5eEa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/3tf07szmy3zjgc4bba45.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7kvJ5eEa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/3tf07szmy3zjgc4bba45.gif" alt="Alt Text" width="600" height="1267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post isn't really about the app, it's about certain storage complexitiies I had to deal with in the process. Complexities that became simple afterwards.&lt;/p&gt;

&lt;p&gt;I will not go deep into the discovery and analysis of the complexities and how I unfruitfully tried solving those problems with the use of RealmDb , Sqlite and AsyncStorage. I will go straight to the eventual simplification of these complexities.&lt;/p&gt;

&lt;p&gt;I will like to mention that there are actually a lot of other similar Fashion Gallery Apps already.&lt;/p&gt;

&lt;p&gt;So you might ask,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Then why did you build yet another one?.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, here is my response&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I wanted to create one that had what the users of such apps really wanted: offline Storage , which subsequently helps to limit Data Expenses that occur when you have to always download the images each time you open the app.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;center&gt; Here is the Breakdown &lt;/center&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I created A Node Server, that housed these images and the code that aids their retrieval. This server will feed the app with these images when the app gets installed and initialzed as it is somewhat wrong, unconventional and "rude" to add 400 images (about 146 mb) to an APK . More so, it will be very much unnecessary to launch a new version of app simply becuase I need to add new images. This helps make the app lighter to download and makes image updates easier without releasing new version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When the user downloads the app and launches it, it connects to the nodejs server , to download an Object file ( imageDict )that shows the details of this images including their names and path details on same server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then it downloads this object file to the device filesystem, this file is about 1kb, so it feels light and appropriate to do that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After that is done, a function called &lt;code&gt;fetchAndSave()&lt;/code&gt; runs through this object file and uses the details present to download these images to the user's device using &lt;code&gt;rn-fetch-blob&lt;/code&gt; to fetch the files from the remote server , then subsequently using &lt;code&gt;rn-fetch-blob&lt;/code&gt; again to save each image as a local file. Note: Before each image is called, it checks if image already exist locally to avoid unnecessary overwriting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Here is a twist, before &lt;code&gt;fetchAndSave()&lt;/code&gt; is called, the app actually starts and the gallery opens. This seems inappropriate becuase you might wonder , if you have not saved , what are you going to display in the gallery but its actually the best feature of the app, in my opinion.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Let me explain.
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Each Picture Container has a dynamic URI that can either be local or remote. If the image is available offline, the uri becomes an base64 encoded version of the offline image, otherwise the uri is a remote url that fetches the image from the remote server, while the loader gif keeps the viewer in wait.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Why
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;So that for the life time of using the app, you only have to wait for the each image to load remotely once, every susbequent view of an image will be local and let's not forget &lt;code&gt;fetchAndSave&lt;/code&gt; is already loading meaning at least 60% of the images would have been offline before you get to them even if you internet is only modest in speed. I tested that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;More so, if you abruptly turn off your internet , and close the app, &lt;code&gt;fetchAndSave()&lt;/code&gt; will not download an image twice when it runs again on a consequent app launch. So, it is very easy to tell the user the exact amount of data he or she will have to expend during the lifetime of the app usage. For now, it is 146mb, which is roughly, the exact size of all the images and object file which acts as the manifest.&lt;/p&gt;

&lt;p&gt;All though, I try to keep the user a bit on a prepatory &lt;code&gt;image loading&lt;/code&gt; screen before the gallery opens , this is to avoid bad user experience when the user's internet is pretty bad or turned off , in which case, the user is made aware to &lt;code&gt;Please turn the internet on&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>typescript</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>A SimpleExplorer Built With ElectronJs, ReactJs,and Typescript</title>
      <dc:creator>Akintunde</dc:creator>
      <pubDate>Sun, 13 Oct 2019 12:39:19 +0000</pubDate>
      <link>https://forem.com/akintunde102/a-simpleexplorer-built-with-electronjs-reactjs-and-typescript-4n0k</link>
      <guid>https://forem.com/akintunde102/a-simpleexplorer-built-with-electronjs-reactjs-and-typescript-4n0k</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8OjxdCjk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://quantizd.com/wp-content/uploads/2018/05/Electron-React.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8OjxdCjk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://quantizd.com/wp-content/uploads/2018/05/Electron-React.png" alt="Electron Image from Quantized.com " width="800" height="442"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image: &lt;small&gt;Quantized.com&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I promise to say the truth and nothing but the truth.&lt;/p&gt;

&lt;p&gt;Here it comes.... the truth...Drum rolls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mymncPrL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media3.giphy.com/media/OsLReVsmTgicw/source.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mymncPrL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media3.giphy.com/media/OsLReVsmTgicw/source.gif" alt="I have been busy" width="245" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;I have been busy &lt;/center&gt;

&lt;p&gt;Yeah, that is the truth , I said it. I am free. &lt;/p&gt;

&lt;p&gt;It doesn't look like something I should be scared to say but then, I believe I should not be too busy to finish a project I started. &lt;/p&gt;

&lt;p&gt;Anyways, it happened. I started a project and left it unfinished. &lt;/p&gt;

&lt;p&gt;This is not an article about the love and hate relationship most developers have with electron apps. It is more about a Simple File Explorer App I created with Electronjs. I have been on it for a while  and I hope someone might just tell me what he or she thinks about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here are some details about it:
&lt;/h2&gt;

&lt;p&gt;Github REPO: &lt;a href="https://github.com/Akintunde102/simpleExplorer"&gt;Simple Explorer&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is an ElectronJs App&lt;/li&gt;
&lt;li&gt;It is meant to be a File Explorer for PCs/Macs&lt;/li&gt;
&lt;li&gt;It has a bundle of features like file preview for some media content types&lt;/li&gt;
&lt;li&gt;It can read Code files and preview it with good indenting, all thanks to some wonderful react libraries.&lt;/li&gt;
&lt;li&gt;The architecture of the app was cannibalized from the &lt;a href="https://github.com/martpie/museeks"&gt;Museeks&lt;/a&gt; App, meaning I downloaded Museeks Source Code, removed the core codebase while leaving the file structure and configuration behind, then I added my own codes to make SimpleExplorer. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why did I Cannibalize &lt;a href="https://github.com/martpie/museeks"&gt;Museeks&lt;/a&gt;?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Museeks as a project was too attractive. It was architectured for Typescript &amp;amp; React usage. What else can be more wonderful? &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What do I need from you?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tell me what you think&lt;/li&gt;
&lt;li&gt;Adopt this project as yours&lt;/li&gt;
&lt;li&gt;Contribute to it&lt;/li&gt;
&lt;li&gt;Be a friend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for taking your time to read. Expecting your response.&lt;/p&gt;

</description>
      <category>electronjs</category>
      <category>javascript</category>
      <category>react</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Development Tips for Software Peeps</title>
      <dc:creator>Akintunde</dc:creator>
      <pubDate>Mon, 01 Jul 2019 06:59:37 +0000</pubDate>
      <link>https://forem.com/akintunde102/development-tips-for-software-peeps-317h</link>
      <guid>https://forem.com/akintunde102/development-tips-for-software-peeps-317h</guid>
      <description>&lt;p&gt;This is will be my very first post on &lt;a href="https://dev.to"&gt;Dev.to&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While it's really nice to be here, I believe it will be nicer if I could just add some value by pouring my hearts out about certain tips I think can help boost developer productivity.&lt;/p&gt;

&lt;p&gt;I will be emphasizing on time management and &lt;strong&gt;staying in ones comfort zone long enough to leap out of it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here they come!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;h2&gt;
  
  
  Beware of commuting, it steals time.
&lt;/h2&gt;

&lt;p&gt;Some of us already know this. For those that I have not observed, take note. It will be nice to just invest in a fast transportation system, live close to work or above all, work remote or half-remote than waste endless hours on the road when you could be working on something. That way, we might just be able to save some extra hours for self development each week.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h2&gt;
  
  
  Commuting Steals Strength , focus and then time and productivity
&lt;/h2&gt;

&lt;p&gt;While commuting could help stretch the bones, loosen some body bolts and improve &lt;strong&gt;cardio&lt;/strong&gt; efficiency, there are times when it just messes things up with the stress and eventual fatigue that can come from being stuck in traffic. I try to reduce commuting as much as I can , most especially when I am in a busy city. I expect every developer to think of a way to deal with this.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h2&gt;
  
  
  Don't Overthink A Project
&lt;/h2&gt;

&lt;p&gt;There is a reason why some people chose to "Just do it" rather than over-plan a project or an idea until "they the idea fades out of possible execution". This is what happens when we over-think things through it. If you want to be really productive as a developer (or as anything else), it is just better to type away on a side project rather than just over-plan it before you put your hands to the keyboard. When you discover that the planning process is taking too long, I suggest you "just do it". While it is good to make a piece of software as &lt;strong&gt;performant&lt;/strong&gt; as possible. I believe it is better to have an imperfect project than have none because an imperfect project can be improved. While this is a good tip, I only apply it to my side projects. Production Codes are a different ball game entirely.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h2&gt;
  
  
  Stay in your comfort zone long enough to leap out of it
&lt;/h2&gt;

&lt;p&gt;Just because your project is better coded in another language does not make it impossible in your present skill set, at least not all the time. If this is the case for you, would it not be nice to at least have a portfolio with projects than have none or one with scanty projects because you want to build the most &lt;strong&gt;performant&lt;/strong&gt; code ever. If you have the time to learn something new, fine!, go ahead but if you don't , I suggest you use your present skills , learn later when the time is there and then come back to improve whatever you have done.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading it all.  I hope someone found these tips useful.&lt;/p&gt;

</description>
      <category>tips</category>
      <category>javascript</category>
      <category>programming</category>
      <category>development</category>
    </item>
  </channel>
</rss>
