<?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>DEV Community: Saalik Lokhandwala</title>
    <description>The latest articles on DEV Community by Saalik Lokhandwala (@saaliklok).</description>
    <link>https://dev.to/saaliklok</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%2F17027%2F241c7058-ea85-4faa-962f-109aafea3e22.jpg</url>
      <title>DEV Community: Saalik Lokhandwala</title>
      <link>https://dev.to/saaliklok</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saaliklok"/>
    <language>en</language>
    <item>
      <title>Building an open source analytics platform in 2 weeks</title>
      <dc:creator>Saalik Lokhandwala</dc:creator>
      <pubDate>Tue, 25 May 2021 14:11:40 +0000</pubDate>
      <link>https://dev.to/saaliklok/building-an-open-source-analytics-platform-in-2-weeks-4nip</link>
      <guid>https://dev.to/saaliklok/building-an-open-source-analytics-platform-in-2-weeks-4nip</guid>
      <description>&lt;p&gt;Smidgeon Analytics is a small, dead-simple, and open source analytics tool that tracks page views on your website or blog.&lt;/p&gt;

&lt;p&gt;As a culmination of my time at Launch Academy, this project was built as a full stack application with Ruby on Rails and React. It's currently an MVP that has a v1 release. I'm actively developing and adding new features to it. &lt;/p&gt;

&lt;p&gt;If you just want to check out the code + demo, go for it, it's open source!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/SaalikLok/smidgeon-analytics" rel="noopener noreferrer"&gt;SaalikLok/smidgeon-analytics&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Idea
&lt;/h3&gt;

&lt;p&gt;The idea for Smidgeon arose in my desire to track page views on my personal blog / website. Google Analytics is always an option for this, but I found the tool full of feature bloat. That got me curious about how I could create a very simple analytics platform powered by a JavaScript snippet.&lt;/p&gt;

&lt;p&gt;I know the power of JavaScript snippets firsthand after having worked at Drift, and I wanted to take a technical deep dive into the vast networking of it. For readers who aren't technically inclined, a JavaScript snippet can be included on a website to fire off some code after a certain event occurs. In this case, it fires off some code whenever a page finishes loading.&lt;/p&gt;

&lt;p&gt;To keep the project appropriately scoped (I only had 2 weeks to complete an MVP), I ensured that Smidgeon Analytics tracked page visits to a site and all pages that the JavaScript snippet is installed on, not much more or less.  &lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it:
&lt;/h3&gt;

&lt;p&gt;The project has a couple different pieces, that all have different jobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ruby on Rails: this technology powers the backend server. It's in charge of getting data to the right place, at the right time.&lt;/li&gt;
&lt;li&gt;React: a popular frontend library, React powers the visual aspects of the application.&lt;/li&gt;
&lt;li&gt;PostgreSQL: The technology responsible for managing my SQL database.&lt;/li&gt;
&lt;li&gt;A JavaScript Snippet: Written in pure JavaScript and minified, when this code is included on a website and that website is registered in Smidgeon, it will send visit data to Smidgeon's servers whenever anyone lands on that website.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Notable Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Each website's page includes a data visualization for page views on a monthly basis.&lt;/li&gt;
&lt;li&gt;Smidgeon tracks referring page urls, as well as what paths were visited on the site.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Technical Challenges
&lt;/h3&gt;

&lt;p&gt;The hardest part of this project was creating the snippet was dealing with CORS. This is cross-origin resource sharing. It's a mechanism that browsers use to ensure that requests that are sent from different clients to different servers are protected (so that no one can bring an application down as easily). &lt;/p&gt;

&lt;p&gt;Since my JavaScript snippet uses someone else's client to talk to my server, CORS was not happy with me at first. Understanding this mechanism was the biggest learning from this project.&lt;/p&gt;

&lt;p&gt;I'm working on tightening up security and validations over the coming weeks.&lt;/p&gt;

&lt;p&gt;I also want to learn more Regex (Regular Expressions). I'm using Regex to validate forms and other pieces of data input, but I'm still not totally sure what I'm doing in that realm. If webdev Twitter is anything to go by, it seems like lots of people don't understand regex. 😅&lt;/p&gt;

&lt;h3&gt;
  
  
  Future Plannning
&lt;/h3&gt;

&lt;p&gt;The two primary areas of focus going forward are focused around data validation and data visualization.&lt;/p&gt;

&lt;p&gt;As I mentioned in the section above on technical challenges, I want to tighten up validations and security for data input in the app, particularly around CORS protocols.&lt;/p&gt;

&lt;p&gt;From a data visualization standpoint, the app currently shows a line graph that displays page views by month. I want users to have more granular control over their data. This would include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Date range filters&lt;/li&gt;
&lt;li&gt;Including a downloadable CSV of user data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project has been a blast to create, and it's useful, to boot. As I dabble in other projects, Smidgeon will live on — I want to add new features incrementally, evolving the project over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Originally &lt;a href="https://saaliklok.com//update/2021/05/25/building-an-open-source-analytics-platform-in-2-weeks/" rel="noopener noreferrer"&gt;posted on my blog&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>ruby</category>
      <category>rails</category>
      <category>react</category>
    </item>
    <item>
      <title>Side Project Journal: An Inspirational Quote API</title>
      <dc:creator>Saalik Lokhandwala</dc:creator>
      <pubDate>Sun, 09 Aug 2020 12:46:28 +0000</pubDate>
      <link>https://dev.to/saaliklok/side-project-journal-an-inspirational-quote-api-4a6m</link>
      <guid>https://dev.to/saaliklok/side-project-journal-an-inspirational-quote-api-4a6m</guid>
      <description>&lt;p&gt;TL;DR - Spark is a dead-simple GraphQL API of inspirational quotes meant to inspire and move end-users. &lt;/p&gt;

&lt;p&gt;Check it out here: &lt;a href="https://github.com/SaalikLok/Spark-API" rel="noopener noreferrer"&gt;https://github.com/SaalikLok/Spark-API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In some of my projects, I've thought about using a quote API to get inspirational quotes and include them in loading screens, etc. When I couldn't find an API that did exactly what I wanted, I realized that I'd be better off making my own!&lt;/p&gt;

&lt;p&gt;Spark is a project that I've started, stopped, and restarted with a new set of tools and motivation several times. I tried with Express and MongoDB, which ended very early. I finished a version of Flask and a MySQL database, running locally, but it was a pain to push to production and felt like overkill.&lt;/p&gt;

&lt;p&gt;I'm happy that this time, I was able to create a static version of this with GraphQL, without the need for the database or any fanciness. And it's great that the API gets all the perks of using an awesome technology like GraphQL.&lt;/p&gt;

&lt;p&gt;As I'm deepening my full stack React knowledge, GraphQL is a critically important tool in the ecosystem. I realized that building a simple static API for quotes would be a great entry point to this.&lt;/p&gt;

&lt;p&gt;It's hosted using the Heroku free account (for now) but we'll see if there's some interest and usage!&lt;/p&gt;

&lt;p&gt;If people (or myself) start using the API more regularly, I'll add more quotes to it and ultimately throw a bit of money at Heroku to make it more performable.&lt;/p&gt;

&lt;p&gt;If you're a developer, I'd love to hear your thoughts and any feedback you have on the project. &lt;/p&gt;

&lt;p&gt;There are a few more fun things in store on the horizon, which I'm super excited to share soon.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was originally posted on my blog: &lt;a href="https://blog.saaliklok.com/" rel="noopener noreferrer"&gt;https://blog.saaliklok.com/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>project</category>
      <category>api</category>
      <category>quotes</category>
    </item>
    <item>
      <title>In the market for a new laptop! Ideas?</title>
      <dc:creator>Saalik Lokhandwala</dc:creator>
      <pubDate>Wed, 31 Oct 2018 13:52:42 +0000</pubDate>
      <link>https://dev.to/saaliklok/in-the-market-for-a-new-laptop-ideas-4lke</link>
      <guid>https://dev.to/saaliklok/in-the-market-for-a-new-laptop-ideas-4lke</guid>
      <description>&lt;h2&gt;
  
  
  Mo' Computers Mo' Problems 💻
&lt;/h2&gt;

&lt;p&gt;I'm looking to scale back how many devices I use. Currently I have a 2015 Macbook Air, which has slowed down considerably, and doesn't have enough RAM to keep up with running local servers, Sketch/Figma, VSCode, Chrome and Firefox open at once. &lt;/p&gt;

&lt;p&gt;My solution to that has been running Linux on an old laptop which is basically a brick with no battery life (so a desktop replacement). It's been annoying to split my time between the two, since it feels like a waste of two machines that could be used by everyday users.&lt;/p&gt;

&lt;p&gt;To that effect, I'd like to give away or sell my current computers and replace it with a new one that fits the right criteria.&lt;/p&gt;

&lt;p&gt;I'm a React developer who's messing with backend stuff in Python, plus I do some light design work.&lt;/p&gt;

&lt;p&gt;Here's what I'm looking for in my next workstation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs OSX or Linux (which basically means any computer works)&lt;/li&gt;
&lt;li&gt;HD Screen (Retina or 1080p)&lt;/li&gt;
&lt;li&gt;Good quality touchpad for design work&lt;/li&gt;
&lt;li&gt;16gb of RAM&lt;/li&gt;
&lt;li&gt;Decent battery life&lt;/li&gt;
&lt;li&gt;256GB SSD or better&lt;/li&gt;
&lt;li&gt;i7 processor&lt;/li&gt;
&lt;li&gt;Portable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some options I was looking at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dell XPS 15&lt;/li&gt;
&lt;li&gt;Macbook Pro 15&lt;/li&gt;
&lt;li&gt;The new Macbook Air&lt;/li&gt;
&lt;li&gt;LG Gram&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What's your workstation like? ❓
&lt;/h3&gt;

&lt;p&gt;If you've tried any of the above, what do you like/dislike about them?  &lt;/p&gt;

&lt;p&gt;Let's chat in the comments below! 👇&lt;/p&gt;

</description>
      <category>workstations</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Hi, I'm Saalik Lokhandwala</title>
      <dc:creator>Saalik Lokhandwala</dc:creator>
      <pubDate>Wed, 19 Apr 2017 14:26:27 +0000</pubDate>
      <link>https://dev.to/saaliklok/hi-im-saalik-lokhandwala</link>
      <guid>https://dev.to/saaliklok/hi-im-saalik-lokhandwala</guid>
      <description>&lt;p&gt;I have been coding for 4 years.&lt;/p&gt;

&lt;p&gt;You can find me on GitHub as SaalikLok (&lt;a href="https://github.com/SaalikLok" rel="noopener noreferrer"&gt;https://github.com/SaalikLok&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;I live in Boston currently.&lt;/p&gt;

&lt;p&gt;I go to school at Bentley University but have worked full-time as a Product Manager at Agora.&lt;/p&gt;

&lt;p&gt;I mostly program in these languages: Java (Android), Javascript, HTML, CSS.&lt;/p&gt;

&lt;p&gt;I am currently learning more about Mobile Development, starting with Android and hopefully moving on to iOS.&lt;/p&gt;

&lt;p&gt;Nice to meet you.&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
