<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  
  <title>RATUL&#39;S RANTS</title>
  <subtitle>Data Engineer in Berlin writing about code, ideas, and life.</subtitle>
  <link href="https://ratul.minhaz.net/blog/feed.xml" rel="self" />
  <link href="https://ratul.minhaz.net/" />
  <updated>2023-07-20T00:00:00Z</updated>
  <id>https://ratul.minhaz.net/</id>
  <author>
    <name>Ratul Minhaz</name>
    <email>hello@ratul.xyz</email>
  </author>
  <entry>
    <title>Intro to Web - A Webmaker Event at AIUB</title>
    <link href="https://ratul.minhaz.net/blog/intro-to-web-webmaker-event-aiub/" />
    <updated>2013-09-27T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/intro-to-web-webmaker-event-aiub/</id>
    <content type="html">&lt;p&gt;The Firefox @ AIUB community is relatively a new Firefox Club, in fact
it isn&#39;t actually a registered club yet. Our idea is to be objective
than being subjective and we found that if we had the AIUB authority
supporting us, then registering as a club is not the most important
thing at this moment. Thus we started our journey to spread the
philosophy of Open Web and Open Source in our campus :D&lt;/p&gt;
&lt;p&gt;On a small adda, almost two months ago, someone proposed we have a
Webmaker event. Since most of us have very little idea about how
actually websites work, the proposal was greeted with mass appraisal :)
We talked to our honorable faculties and after many days of planning
arranged &lt;a href=&quot;http://www.facebook.com/events/203313443175367/&quot; title=&quot;Intro to Web - A Webmaker event&quot;&gt;Intro to Web - A Webmaker
event&lt;/a&gt;.
And it was a blast! :D :D All thanks goes to Saef sir for guiding us
through the whole event!&lt;/p&gt;
&lt;p&gt;We had no prior experience in event organizing, so we did some rigorous
planning before this one. And it paid us well ^_^ We even had plan B,
plan C in case of emergencies which actually occurred! When three of our
Mozillian attendees couldn&#39;t make it to the event, we triggered our back
up plan and improvised with anything else. Personally, I am grateful
that my teammates are so awesome that we had almost all the ends tied up
:)&lt;/p&gt;
&lt;p&gt;Around 2 PM when half of the computer lab was full and we were still
copying local version of Thimble, Mr. Mashiour Rahman, Assistant
Professor and Head, Computer Science, dropped in to see our progress! We
did ask our honorable teacher to visit us in his free time but this was
so unexpected! Mashiour sir even gave a short speech, which was truly
inspiring for us :)&lt;/p&gt;
&lt;p&gt;Anam started with a introduction to Mozilla. He explained why Mozilla is
concerned about the Open Web and why we should care. Then he gave a
short review of Mozilla Bangladesh community&#39;s activities to date.
Afterwards Anam transcended in and out after sessions. A few
participants had some questions about Mozilla and it&#39;s activities, Anam
explained those nicely :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2013/09/img_50822.jpg&quot; alt=&quot;How can I join Mozilla?&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;How can I join Mozilla?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After that Sharif came with X-ray Goggles :D We started with X-ray
Goggles because with this cool tool the participants will be able to get
a clear view of how websites are constructed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2013/09/img_50881.jpg&quot; alt=&quot;Sharif with X-ray Goggles&quot; title=&quot;Sharif with X-ray Goggles&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Sharif with X-ray Goggles&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After Sharif, Rifaz came forward with Mozilla Thimble. The participants
were eagerly waiting for this one because this is when they get to try
out their newly learned coding skills :D&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2013/09/img_51181.jpg&quot; alt=&quot;Rifaz explaining tags in HTML&quot; title=&quot;Rifaz explaining tags in HTML&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Rifaz explaining tags in HTML&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now that the participants had two tools under their belt, we gave them
some time to get creative and build something :D&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2013/09/img_50961.jpg&quot; alt=&quot;Let&#39;s create something!&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Let&#39;s create something!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2013/09/1ly-4-mozilla.jpg&quot; alt=&quot;Hello from Mozilla!&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Hello from Mozilla!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2013/09/img_51461.jpg&quot; alt=&quot;Volunteers and facilitators helping the participants&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Volunteers and facilitators helping the participants&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here are a few of the works done by our participants :D&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hasantg.makes.org/thimble/my-amazing-crazy-stuffs&quot;&gt;https://hasantg.makes.org/thimble/my-amazing-crazy-stuffs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://honesty.makes.org/goggles/honestys-remix-of-american-international-universitybangladesh-&quot;&gt;http://honesty.makes.org/goggles/honestys-remix-of-american-international-universitybangladesh-&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webpagemaker-dev.allizom.org/p/00/&quot;&gt;https://webpagemaker-dev.allizom.org/p/00/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webpagemaker-dev.allizom.org/p/0a/&quot;&gt;https://webpagemaker-dev.allizom.org/p/0a/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webpagemaker-dev.allizom.org/p/0x/&quot;&gt;https://webpagemaker-dev.allizom.org/p/0x/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://reznov9185.makes.org/thimble/its-1500-mr-mozilla&quot;&gt;https://reznov9185.makes.org/thimble/its-1500-mr-mozilla&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And my personal favorite:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://reznov9185.makes.org/thimble/wolverine-vs-hulk-edited-by-sajid-&quot;&gt;https://reznov9185.makes.org/thimble/wolverine-vs-hulk-edited-by-sajid-&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Afterwards we selected 3 of the best Remixes and gave them prizes :D&lt;/p&gt;
&lt;p&gt;Around 5 PM when we were at the end of the event the speakers also
received some gift packs from AIUB. We gifted lanyards to our honorable
faculties.&lt;/p&gt;
&lt;p&gt;Thus the event officially ended :D&lt;/p&gt;
&lt;p&gt;More photos at Flickr:
&lt;a href=&quot;http://www.flickr.com/photos/minhazr/sets/72157635934429984/&quot;&gt;http://www.flickr.com/photos/minhazr/sets/72157635934429984/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Organized by Firefox @ AIUB community
(&lt;a href=&quot;http://www.facebook.com/groups/fxaiub/&quot;&gt;http://www.facebook.com/groups/fxaiub/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;A part of Mozilla Bangladesh (&lt;a href=&quot;http://www.facebook.com/groups/MozillaBD/&quot;&gt;http://www.facebook.com/groups/MozillaBD/&lt;/a&gt;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to Have a Mozilla Event at Your University</title>
    <link href="https://ratul.minhaz.net/blog/how-to-have-a-mozilla-event-at-your-university/" />
    <updated>2013-11-22T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/how-to-have-a-mozilla-event-at-your-university/</id>
    <content type="html">&lt;p&gt;So you have got selected for &lt;a href=&quot;https://www.mozilla.org/en-US/contribute/universityambassadors/&quot; title=&quot;Firefox Student Ambassadors&quot;&gt;Firefox Student Ambassadors
program&lt;/a&gt;?
And already opened a Firefox club at your very own campus? :D Yay!
Congratulations! Now the real work begins :D&lt;/p&gt;
&lt;p&gt;As a beginner, you, the Firefox Club, can organize a number of events
that don’t require extensive experience at event management. One of
them, and my personal favorite is the
&lt;a href=&quot;https://ratul.minhaz.net/blog/intro-to-web-webmaker-event-aiub/&quot; title=&quot;Intro to Web – A Webmaker event at AIUB&quot;&gt;Webmaker&lt;/a&gt;.
Search it on the web and Mozilla’s wiki for more information.&lt;/p&gt;
&lt;h2&gt;STEP 1&lt;/h2&gt;
&lt;p&gt;After establishing your Club and discussing the type of event with your
fellow Ambassadors, the first thing you need to do is let your local
Mozilla community (Mozilla Bangladesh in this case) know your
intentions. You can ask for suggestions and advices in our Facebook
groups: &lt;a href=&quot;https://www.facebook.com/groups/MozillaBD/&quot; title=&quot;Mozilla Bangladesh&quot;&gt;Mozilla
Bangladesh&lt;/a&gt;
and &lt;a href=&quot;https://www.facebook.com/groups/fsabd/&quot; title=&quot;Firefox Student Ambassadors, Bangladesh&quot;&gt;Firefox Student Ambassadors,
Bangladesh&lt;/a&gt;.
When you have got a clear view of  the plan, send an email to the local
Mozilla community’s mailing list
(&lt;a href=&quot;https://lists.mozilla.org/listinfo/community-bangladesh&quot; title=&quot; community-bangladesh Info Page&quot;&gt;community-bangladesh&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;STEP 2&lt;/h2&gt;
&lt;p&gt;By now you have got okay sign from community members, plus one or more
&lt;a href=&quot;https://wiki.mozilla.org/ReMo&quot; title=&quot;ReMo - MozillaWiki&quot;&gt;ReMo&lt;/a&gt; are ready to
help your out :D Good job. I take that you explained every part of your
plan and adjusted it as other Mozillians suggested. Now you need to find
someone at your university who can get you the permission from authority
to arrange the event. You can go to-&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The Office of Student Affairs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;President of your university’s IT related club&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A super-enthusiastic faculty&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Explain your plan to them too. They too would have some suggestion and
advice, revise your plan accordingly.&lt;/p&gt;
&lt;h2&gt;STEP 3&lt;/h2&gt;
&lt;p&gt;You have let both the ends know about what you want to do. Now it is
time to get official. You need to send a proposal letter through email
or as a printed copy (ask your contact which is better) to your
university authority. It might be the Head of the Department, an
Executive Officer at Office of Student Affairs, or a Faculty in charge
of these activities. You can find a demo proposal letter from asking at
Mozilla Bangladesh communication channels. Ask on the mailing list
thread about any confusion. Add the necessary details to your proposal
letter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Topic of the event&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Duration and date&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Speakers and sessions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Target audience and estimated participants&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Necessary resources- auditorium, projector, speaker etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Advertisement- booths, banners and posters.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You are all set to send the letter :)&lt;/p&gt;
&lt;p&gt;Note: Try to fix a date for the event after at least 6 weeks from the
confirmation of your proposal. In that way we can ensure swags and have
plenty of time to plan in details.&lt;/p&gt;
&lt;h2&gt;STEP 4&lt;/h2&gt;
&lt;p&gt;You have all sorts of permissions for your activities. It is high time
you had planned the details. Get a few experienced Mozillians to help
you out in this. They might also be the ones taking sessions in this
event, or they can suggest who can. You need to-&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Fix segments for the sessions and gap between them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Decide how to distribute swags&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Always have plan B, C, even D in case of emergency&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select some of your finest as volunteers/facilitator&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A photographer friend or someone from the Photography Club for
awesome photo memories&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;STEP 5&lt;/h2&gt;
&lt;p&gt;It&#39;s time for the event :D Check if everything is okay a day before the
event. Remember to-&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check your task list/planning page&lt;/li&gt;
&lt;li&gt;Keep the next speaker and their instruments ready&lt;/li&gt;
&lt;li&gt;Put the volunteers on the move so that they can help the
participants&lt;/li&gt;
&lt;li&gt;Distribute swags carefully&lt;/li&gt;
&lt;li&gt;Be careful with food (if you plan to give refreshments)&lt;/li&gt;
&lt;li&gt;Take lots and lots of photos&lt;/li&gt;
&lt;li&gt;And have tons of fun :D&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;STEP 6&lt;/h2&gt;
&lt;p&gt;I hope the event was a success :D Congratulations you and your awesome
mates! Not time to sit back yet :P You have to share your amazing
experience with us!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Post on Facebook/Google+/Twitter with the FSA page attached with it&lt;/li&gt;
&lt;li&gt;Write a blog post :D with the great photos!&lt;/li&gt;
&lt;li&gt;Upload the photos to the Mozilla Bangladesh Flickr group&lt;/li&gt;
&lt;li&gt;Email all the links to the mailing list thread!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aaaaaand you are done! Hope to see more and more events :D&lt;/p&gt;
&lt;p&gt;Thanks to my buddy another Mozillian
&lt;a href=&quot;http://tanhaislampinkdevil.wordpress.com/&quot;&gt;Tanha&lt;/a&gt; for reminding me to
write a step by step guide :) True that not every event will follow
these steps, but it will help to get some idea of where to start.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Mozilla Awareness Booth at AIUB, Spring 2014</title>
    <link href="https://ratul.minhaz.net/blog/mozilla-awareness-booth-at-aiub-spring-2014/" />
    <updated>2014-02-22T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/mozilla-awareness-booth-at-aiub-spring-2014/</id>
    <content type="html">&lt;p&gt;&amp;quot;My gosh! I had no idea Mozilla has all these things going on besides the browser!&amp;quot; is how a visitor exclaimed their astonishment after getting to know about Mozilla a bit more from &lt;a href=&quot;https://reps.mozilla.org/e/mozilla-awareness-booth-at-aiub-spring-2014/&quot;&gt;Mozilla Awareness Booth at AIUB&lt;/a&gt;. The booth was a successful effort of &lt;a href=&quot;https://www.facebook.com/firefoxataiub&quot;&gt;Firefox at AIUB&lt;/a&gt;&#39;s members to let the students at their university discover Mozilla from the perspective of a worldwide organization constantly working on to keep the beautiful Web open. We know it was successful when we are still getting messages through social sites and email with queries about joining this collective force, to be a part of the future of Web.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/02/20140217_134205.jpg&quot; alt=&quot;&quot;&gt;
&lt;em&gt;The crowd at Mozilla Awareness Booth&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Although the Firefox at AIUB community was born almost a year ago, it&#39;s members felt that their fellow students of the institution are still in the dark of their voluntary efforts for Mozilla. Even after organizing a &lt;a href=&quot;https://ratul.minhaz.net/blog/intro-to-web-webmaker-event-aiub/&quot;&gt;Webmaker&lt;/a&gt; event and a meet up in November, last year, the students seem to have no clue on what actually Mozilla does, or how to get involved with it. For this very reason we took contact information from interested people who came to our booth and sent them useful links and resources on this matter.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/02/20140217_132422.jpg&quot; alt=&quot;&quot;&gt;
&lt;em&gt;Interested people provided us with their contact info&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/02/20140217_142123.jpg&quot; alt=&quot;&quot;&gt;
&lt;em&gt;A potential Mozillian&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This was a great opportunity to reach out for potential web developers and tech enthusiasts who are very eager to know the latest ideas and technologies. In the booth we talked about-&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mozilla&#39;s mission&lt;/li&gt;
&lt;li&gt;Philosophy of Open Web&lt;/li&gt;
&lt;li&gt;Firefox OS and it&#39;s potential&lt;/li&gt;
&lt;li&gt;Firefox Student Ambassador activities&lt;/li&gt;
&lt;li&gt;Necessity of WoMoz&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/02/20140217_142103.jpg&quot; alt=&quot;&quot;&gt;
&lt;em&gt;Maliha eplaining why WoMoz is important&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We gave the visitors demonstration of Firefox OS with Developer Preview Keons. It might seem a bit harsh but we did enjoy the shock and awe in the faces of the visitors when we told them the entire interface they tried out in those phones were in fact web pages. We also hosted a small game competition of &lt;a href=&quot;https://marketplace.firefox.com/app/mozzle/&quot;&gt;Mozzle&lt;/a&gt;, the very first game from Firefox at AIUB group, by rocker coder &lt;a href=&quot;https://mozillians.org/en-US/u/anistuhin/&quot;&gt;Anis Tuhin&lt;/a&gt;. Sadly the winner is still undecided.&lt;/p&gt;
&lt;p&gt;We hope to see at least 100 of new Firefox Student Ambassadors from this two day long Mozilla Awareness Booth. We did learn a lot of new and interesting things about arranging booths. We are researching on these points as you read this blog post, so that we can implement the ideas from the next time.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Mentoring Mozilla Contributors of EWU</title>
    <link href="https://ratul.minhaz.net/blog/mentoring-mozilla-contributors-ewu/" />
    <updated>2014-06-08T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/mentoring-mozilla-contributors-ewu/</id>
    <content type="html">&lt;p&gt;Last Thursday we went to East West University (EWU) to mentor the new
contributors on how to get involved with Mozilla&#39;s cool projects. They
recently had a MozAwareness Booth at their campus, so all of the
participants were very eager to know all the tricks and tips! They were
so hyped up after the sessions that some of them started contributing
right away! Here is a part of the contributors:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/06/14167589987_cca612a967_b.jpg&quot; alt=&quot;Image&quot;&gt;&lt;/p&gt;
&lt;p&gt;We started out for EWU a bit late but got there right in time for the
event. The lab booked for this event was already house full when we
stepped into it :D Around 40 participants were present at the time. As a
matter of fact, &lt;a href=&quot;http://ewubd.edu/~nawab/&quot;&gt;Dr. Md. Nawab Yousuf Ali&lt;/a&gt;
sir, Chairperson of the CSE department of EWU was there to welcome us
with a short but resourceful speech.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/06/10321042_680569675347387_7925741188415757030_o.jpg&quot; alt=&quot;Honorable Chairperson of CSE Department, EWU&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Honorable Chairperson of CSE Department, EWU&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/06/14355123161_9082cb58a0_b.jpg&quot; alt=&quot;House full!&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;House full!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We started the Contributor Mentoring day with an introduction to
Mozilla. The participants already had a gross idea of what Mozilla is
and what philosophy drives us, but this introduction session cleared up
lots of confusions like whether all Mozilla&#39;s projects are open source
or not and stuff like this. This session was taken by me :D&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/06/14352464062_4fb627e883_b.jpg&quot; alt=&quot;Me, asking question instead of answering :3&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Me, asking question instead of answering :3&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After answering all the curious questions from the participants we gave
them hands on tour of IRC, the mailing lists, different Facebook groups
of Mozilla. Other than a little problem with IRC chat, they got through
all these steps of getting connected to Mozilla Bangladesh.&lt;/p&gt;
&lt;p&gt;It was Zarin who gave them idea of the Facebook groups and how to get
help on these groups. The also talked about WoMoz and Webmaker. An
interesting aspect was that many male and female participants were
equally interested in WoMoz, which proves their willingness to promote
women in the field of technology. Webmaker was another project that got
lots of applause because of it&#39;s innovativeness.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/06/14378620113_ddeba227fe_b.jpg&quot; alt=&quot;Zarin talking about Webmaker&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Zarin talking about Webmaker&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After Zarin, Iqram came up with MDN and SuMo. Many of the participants
who work as web developers already knew about MDN so Iqram showed them
how we localized almost all of the MDN in to Bangla. He also coverd
SuMo, describing it as,&amp;quot;One stop helpline for Mozillians.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/06/14354014285_86c066f0bf_b.jpg&quot; alt=&quot;Iqram explaining the importance of MDN&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Iqram explaining the importance of MDN&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After we finished guiding the participants through all the communication
channels, there was a question and answer session conducted by Iqram.
Whatever confusion they new Mozillians had was wiped clean, thanks to
him! :D&lt;/p&gt;
&lt;p&gt;Finally, we gave the participants stickers and other swags. For all
their effort and work we gave lanyards to the volunteers and a Firefox
T-shirt to &lt;a href=&quot;https://mozillians.org/en-US/u/smamir.tuhin/&quot;&gt;Sayed Mohammad
Amir&lt;/a&gt;, the club lead of
Firefox@EWU club.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/06/14331010916_3a28f556cc_b.jpg&quot; alt=&quot;Firefox@EWU&#39;s Club Lead Amir&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Firefox@EWU&#39;s Club Lead Amir&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://ratul.minhaz.net/media/2014/06/14167506879_257eb5169f_b.jpg&quot; alt=&quot;Fahmida, an WoMoz from EWU&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Fahmida, an WoMoz from EWU&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The event was a total success, and it ended with a few group photos and
selfies :D&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://maruffislamm.wordpress.com/2014/06/06/%E0%A6%AE%E0%A6%9C%E0%A6%BF%E0%A6%B2%E0%A6%BE-%E0%A6%95%E0%A6%A8%E0%A7%8D%E0%A6%9F%E0%A7%8D%E0%A6%B0%E0%A6%BF%E0%A6%AC%E0%A6%BF%E0%A6%89%E0%A6%9F%E0%A6%B0-%E0%A6%AE%E0%A7%87%E0%A6%A8%E0%A7%8D%E0%A6%9F/&quot;&gt;Here&lt;/a&gt;
is another blog post by Maruf Islam about the event(Bangla). He is an
active Firefox Student Ambassador from EWU who likes to talk about
Firefox OS.&lt;/p&gt;
&lt;p&gt;Photos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.flickr.com/photos/124415049@N04/sets/72157644618326097/&quot;&gt;https://www.flickr.com/photos/124415049@N04/sets/72157644618326097/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.flickr.com/photos/smamir_tuhin/sets/72157644626937020/&quot;&gt;https://www.flickr.com/photos/smamir_tuhin/sets/72157644626937020/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
  </entry>
  <entry>
    <title>If .gitignore Does Not Ignore</title>
    <link href="https://ratul.minhaz.net/blog/if-gitignore-does-not-ignore/" />
    <updated>2015-04-15T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/if-gitignore-does-not-ignore/</id>
    <content type="html">&lt;p&gt;Sometimes after changing your .gitignore the new (un)ignored files don&#39;t get get behind the scenes, as you would have expected. The reason behind this is you have already committed the files that you added to .gitignore and now git is tracking the files. Unless you delete them git will keep an eye on any changes on those files as it would do with any other. To get the new .gitignore rule registered with the repo you will have to manually remove tho file(s) from git&#39;s cache. So here is what you need to do:&lt;/p&gt;
&lt;p&gt;First of all, YOU MUST COMMIT any staged progress, otherwise they will get lost.&lt;/p&gt;
&lt;p&gt;Then you can go on to removing the problematic files from git&#39;s tracking. For only one file, you will have to run this commad and that&#39;s it. Git will smartly ignore whatever you tell it to ignore:&lt;/p&gt;
&lt;pre class=&quot;language-shell&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--cached&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;file&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But in case you have way too many files to mention one by one, you might want to remove all the files at once. In this case git will stop tracking all files, so you will also have to add them once again manually.&lt;/p&gt;
&lt;pre class=&quot;language-shell&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--cached&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;file&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lastly, simply commit again:&lt;/p&gt;
&lt;pre class=&quot;language-shell&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; commit &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;fixed .gitignore&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tada, problem solved! If you ever want to undo this, just add the file to git:&lt;/p&gt;
&lt;pre class=&quot;language-shell&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;file&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Scraping Github</title>
    <link href="https://ratul.minhaz.net/blog/scraping-github/" />
    <updated>2015-10-18T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/scraping-github/</id>
    <content type="html">&lt;h2&gt;The Setup&lt;/h2&gt;
&lt;p&gt;Data science is a buzzword these days and everyone is asking how to be a data scientist. A data scientist&#39;s job is definitely awesome, because if anyone is close to predicting the future, they are the ones who probably do it. But what does a data scientist actually do? The process of &amp;quot;data science&amp;quot; roughly consists of three things: mining, analysis and visualization. Each one of these three segments is interesting in it&#39;s own right. In data mining you get to collect data from large data sources, mostly from the Internet using clever techniques like scraping.&lt;/p&gt;
&lt;p&gt;Many websites provide &lt;code&gt;API&lt;/code&gt; so that other people can collect data from those sites to use in their work. For example you might want to know a Facebook page&#39;s growth over a certain period of time. Facebook made an API just so that you can get the data to do the analysis needed to answer your question. This sort of API is provided by Github and Twitter too. You can not imagine how vastly useful this public data is, they even came in handy as much as &lt;a href=&quot;https://blog.twitter.com/2015/usgs-twitter-data-earthquake-detection&quot;&gt;detecting earthquakes&lt;/a&gt; faster than the U.S. Geological Survey!&lt;/p&gt;
&lt;p&gt;Enough talk, let&#39;s have some action! In this tutorial, I will get you started with scraping data from API using Python. We will use Github&#39;s API as data source and keep the scraped data in a database called RethinkDB. Don&#39;t worry if you have never heard of it before, it&#39;s pretty cool. If you want to try out other databases, you will just have to tweak a few lines of code. Let&#39;s set up the necessary softwares.&lt;/p&gt;
&lt;p&gt;You will need to install a few softwares, preferably in a Linux workstation. I am going to use Ubuntu. If you are using Windows, then switch to Ubuntu or any other *nix. There is no way around it. You will need-&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python 3&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://docs.python-guide.org/en/latest/dev/virtualenvs/&quot;&gt;Virtualenv and virtualenvwrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RethinkDB 2.0.x&lt;/li&gt;
&lt;li&gt;Sublime Text 3 or any good text editor for coding&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Virtualenv and virtualenvwrapper&lt;/h3&gt;
&lt;p&gt;You probably have already used these if you tried to solve version dependency in your code. These are handy tools that create Python virtual environments that are separate and isolated from eachother. Follow this &lt;a href=&quot;http://docs.python-guide.org/en/latest/dev/virtualenvs/&quot;&gt;link&lt;/a&gt; to read more and install them. Create and activate a virtual environment for this project:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;mkvirtualenv scraping
workon scraping&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;RethingDB&lt;/h3&gt;
&lt;p&gt;If you are new to Ubuntu or Linux, installing RethinkDB might be a little bit complicated for you. Nothing you can&#39;t do though, just a few lines of extra commands to copy and paste. RethinkDB has really nice docs starting with &lt;a href=&quot;https://www.rethinkdb.com/docs/install/&quot;&gt;installation&lt;/a&gt; and trying it for the &lt;a href=&quot;https://www.rethinkdb.com/docs/quickstart/&quot;&gt;first time&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;TIP: RethinkDB server won&#39;t start automatically everytime you log on to your PC, so you might want to set it up for &lt;a href=&quot;https://www.rethinkdb.com/docs/start-on-startup/&quot;&gt;autostart&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You will also need the Python driver to connect to the database using your code. Start up the virtual environment you created earlier and install the driver:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;pip &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; rethinkdb&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Now you are worthy enough to move on to next stage :D&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Fetching Data&lt;/h2&gt;
&lt;p&gt;API, or Application Programming Interface was created to make things easier for developers who want to use anything made by other people. That&#39;s the watered down version of what an API is, you can(should) Google and learn more about it. There are tons of APIs out there that you can use to access anything starting from social media posts to map location data. A site called &lt;a href=&quot;http://www.programmableweb.com/&quot;&gt;Programmable Web&lt;/a&gt; keeps track of over 13,000 APIs like Google Maps, Twitter, Youtube, Flickr etc.&lt;/p&gt;
&lt;p&gt;Are you ready to begin scraping? Definitely you are, you have set up all the tools needed. But the question is, what are you going to scrape? Remember the API I talked about last time?&lt;/p&gt;
&lt;h3&gt;Exploring Github&#39;s API&lt;/h3&gt;
&lt;p&gt;Websites like Github and Facebook have API or Application Programming Interface so that you can interact with their services and data through your programs. They usually have extensive documentation on how to do this. In Github&#39;s &lt;a href=&quot;https://developer.github.com/&quot;&gt;API documentation&lt;/a&gt; you will see how to send requests to Github, what you will get in reply and how you can filter the reply for your specific needs. How about you check it out? Open up a new tab in the browser and go to the address &lt;em&gt;https://api.github.com/users/username&lt;/em&gt; with your own username in place of &amp;quot;username&amp;quot;. You will see something similar to this:&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;login&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;gvanrossum&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2894642&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;avatar_url&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://avatars.githubusercontent.com/u/2894642?v=3&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;gravatar_id&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://api.github.com/users/gvanrossum&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;html_url&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://github.com/gvanrossum&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;User&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;site_admin&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Guido van Rossum&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;company&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Dropbox&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;blog&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;http://python.org/~guido/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;location&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;San Francisco Bay Area&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;email&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;guido@python.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;hireable&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token null keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;bio&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token null keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;public_repos&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;public_gists&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;followers&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;911&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;following&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;created_at&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2012-11-26T18:46:40Z&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;updated_at&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2015-12-23T18:35:37Z&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is what I see when I visit the address with Python&#39;s daddy Guido&#39;s username: &lt;a href=&quot;https://api.github.com/users/gvanrossum&quot;&gt;https://api.github.com/users/gvanrossum&lt;/a&gt;. I left out a few lines so that it&#39;s easier to read. You will notice that we can know many things about Guido&#39;s Github account: when it was created, how many public repositories he has, even how many people he is following. This is how it works: Github takes a few parameters from you (eg. Guido&#39;s username) and looks up the related information in their database. Depending on your access permission, Github then shows you a webpage with the available info. The page is in &lt;a href=&quot;https://www.json.org&quot;&gt;JSON&lt;/a&gt; format, that is, list of data in key-value pairs. Not very unlike Python&#39;s dictionaries.&lt;/p&gt;
&lt;h3&gt;Let&#39;s start scraping!&lt;/h3&gt;
&lt;h4&gt;Who and what to scrape&lt;/h4&gt;
&lt;p&gt;Now that we know what sort of data we can get, let&#39;s start coding. First of all we need to import the modules we are going to use in this project.
We will also be defining a few variables:&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; requests

&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    users &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;google&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;facebook&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;apache&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    baseurl &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://api.github.com/users/&quot;&lt;/span&gt;
    properties &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;login&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;id&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;html_url&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;public_repos&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;created_at&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You probably don&#39;t have &lt;code&gt;requests&lt;/code&gt; module installed, so type &lt;code&gt;pip install requests&lt;/code&gt; in your terminal for that. We can put any Github username in the &lt;code&gt;users&lt;/code&gt; list, but for now let&#39;s keep Google, Facebook and Apache in it. &lt;code&gt;baseurl&lt;/code&gt; is the URL to access Github&#39;s API. We will add usernames at the end of this URL to access that user&#39;s info. Finally, the &lt;code&gt;properties&lt;/code&gt; list has a few properties of the JSON file that we are going to use.&lt;/p&gt;
&lt;h4&gt;Test run&lt;/h4&gt;
&lt;p&gt;We have three users in our &lt;code&gt;users&lt;/code&gt; list, so we will have to loop through it. But at let&#39;s test with one user first. Add these lines to your code:&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;    &lt;span class=&quot;token comment&quot;&gt;# to grab and show info from Github&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# make API url with Github username&lt;/span&gt;
    current_page &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; baseurl &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;facebook&quot;&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;# &quot;https://api.github.com/users/facebook&quot;&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# take response from the url&lt;/span&gt;
    response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; requests&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;current_page&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# conversion to human readable format&lt;/span&gt;
    json &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;json&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# print properties in json dictionary&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;json&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;json&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;json&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;html_url&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; __name__ &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;__main__&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    main&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now run the code. Did you see something like this?&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;Facebook
69631
https://github.com/facebook
147
2009-04-02T03:35:22Z&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now time for line by line explanation. After putting Facebook&#39;s API URL in &lt;code&gt;current_page&lt;/code&gt;, we grab the page by this:&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;    response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; requests&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;current_page&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;response&lt;/code&gt; object now holds the exact response that Github&#39;s server replied us with when we try to access the address in &lt;code&gt;current_page&lt;/code&gt;. It has got the JSON information of Facebook, along with some other HTTP metadata. We take the JSON info from that using &lt;code&gt;json()&lt;/code&gt; method and convert it into Python&#39;s familiar dictionary:&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;    page_info &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;json&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We have all the necessary info in &lt;code&gt;json&lt;/code&gt;, you can try testing that by printing it. But we only need the name, id and profile address this time, so:&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;    &lt;span class=&quot;token comment&quot;&gt;# print properties in json dictionary&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;page_info&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;page_info&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;page_info&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;html_url&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Looping through&lt;/h4&gt;
&lt;p&gt;We already completed our main objective, that is, scrap info from APIs. Congratulations to you! But we are not done yet. This is not an efficient way to get information of multiple users. So we need to loop through the &lt;code&gt;users&lt;/code&gt; list as well as the &lt;code&gt;properties&lt;/code&gt; list to get all the user&#39;s info. Let&#39;s rewrite our test code with the following loop like this:&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;    &lt;span class=&quot;token comment&quot;&gt;# to grab and show info from Github&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; username &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; users&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;# make API url with Github username&lt;/span&gt;
        current_page &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; baseurl &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; username
        &lt;span class=&quot;token comment&quot;&gt;# take response from the url&lt;/span&gt;
        response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; requests&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;current_page&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;# conversion to human readable format&lt;/span&gt;
        page_info &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;json&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; properties&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;{} : {}&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; page_info&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This time when we run the code, it will grab info of all the usernames in &lt;code&gt;users&lt;/code&gt; list. Then print the properties of them too. We can move on to next stage: saving the info in to RethinkDB&#39;s database. Here is the full code for further use.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/mnzr/30fbd4e6fd3177a53f83.js&quot;&gt;&lt;/script&gt;
&lt;h2&gt;Storing in RethinkDB&lt;/h2&gt;
&lt;p&gt;RethinkDB is a cool database system that is used for realtime apps. It has a flexible query language, monitoring APIs and is really easy to set up. It does not use SQL to run queries, so you can use your knowledge of Python to do all the stuff you would do with SQL in other databases like MySQL or PostgreSQL. Interestingly data is stored in RethinkDB in the format of JSON. And Python + JSON = &amp;lt;3&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Sentiment Analysis: An Intertwinement of Disciplines</title>
    <link href="https://ratul.minhaz.net/blog/sentiment-analysis/" />
    <updated>2015-11-26T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/sentiment-analysis/</id>
    <content type="html">&lt;p&gt;How often do you get the urge to know what others think about you, that is, your actions and preferences? No matter what the number is, you are not alone. Humans as individuals, have always been interested in knowing the opinion of the people around them. Should I talk to her? Is it a good idea to buy that car? Who should I vote? These are only the simplest examples of opinion related questions that arise in our minds every single day. Getting a nod from your best friend, a positive gesture from your dad or a better campaign slogan helps a lot to answer these questions. Similar questions exist not only in our personal lives but in the academia, business and governments as well. The hunting ground for opinions on these questions used to be friends and family, acquaintances, consumer reports et cetera.&lt;/p&gt;
&lt;p&gt;But have you ever wondered how this scenario has turned out to be in the post web era? During the last decade, mining for public opinion has gotten a lot organized, thanks to the abundance of information in the web. This is what we call opinion mining, otherwise known as sentiment analysis.&lt;/p&gt;
&lt;p&gt;By definition sentiment analysis is the process of extraction and analysis of public opinion from any sort of source material using natural language processing, text analysis and computational linguistics. In essence, we try to get the subjective information from a document, usually written. This can help determining the attitude and emotional state of the author or speaker on some certain topic. The simplest task of sentiment analysis is finding out whether the text has a negative or positive attitude. It can even be translated to good or bad. A little more complex is to rank the attitude in a scale of 1 to 5. This gets way more complicated when emotional states like &amp;quot;happy&amp;quot;, &amp;quot;sad&amp;quot;, or &amp;quot;angry&amp;quot; are added as parameters. Based on this analysis of sentiment can be classified in a few ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Polarity or valence&lt;/li&gt;
&lt;li&gt;Emotional state or feelings&lt;/li&gt;
&lt;li&gt;Subjectivity or objectivity identification&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sentiment analysis draws ideas and techniques from statistics, natural language processing, machine learning and a few more. The massive amount of data found in the web is overwhelming if not sorted out. Statistics helps to get a count of words and sentence patterns to give a overview of the document&#39;s polarity. Natural language processing techniques give more accuracy by breaking the sentences in to tokens with weights. Machine learning refine the result further more by learning from previously analyzed data and modifying the algorithms.&lt;/p&gt;
&lt;p&gt;Natural language processing is breaking down sentences into a language&#39;s bare basic components, nouns, verbs, adverbs, pronouns, punctuations etc. By breaking down a sentence we can understand how a sentence is formed, whether it has negated words or not etc.&lt;/p&gt;
&lt;p&gt;An example of application of machine learning in sentiment analysis is the use of Support Vector Machine (SVM). This standard machine-learning technique is said to be the most accurate text classifier method. Naive Bayes classifier is another technique, a Bayes theorem based simple probabilistic classifier widely used in spam filtering, sorting emails, language detection and sentiment detection.&lt;/p&gt;
&lt;p&gt;There are many examples of sentiment analysis in action in the internet. For example &lt;a href=&quot;http://sentdex.com/&quot;&gt;Sentdex&lt;/a&gt; goes through thousands of news articles, analyses words and brand names and provides infographics on the polarity of them.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Setting Up Ember CLI Sass</title>
    <link href="https://ratul.minhaz.net/blog/setup-ember-cli-sass/" />
    <updated>2017-01-27T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/setup-ember-cli-sass/</id>
    <content type="html">&lt;p&gt;Trying to set up Sass with Ember can be quiet problematic if you are using a version manager for Node. For example I was using a version manager called &#39;n&#39; and could not integrate Sass in anyway with my Ember app. It all boiled down to my Ember installation not finding libraries needed to compile Sass. These two modules were the reason of the problem: node-gyp and node-sass.&lt;/p&gt;
&lt;p&gt;After fiddling around for a while I found out the proper way to setup Sass with Ember. First, ensure these are not installed in the project&#39;s node_modules:&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; uninstall node-gyp
&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; uninstall node-sass&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then install them again with the right version on Node:&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;n latest                        &lt;span class=&quot;token comment&quot;&gt;# switch to the latest version of Node&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; node-gyp
&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; node-sass
ember &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; ember-cli-sass    &lt;span class=&quot;token comment&quot;&gt;# this will install Ember addons for Sass&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Don&#39;t let your negative thoughts poison your present moment</title>
    <link href="https://ratul.minhaz.net/blog/dont-let-your-negative-thoughts-poison-your-present-moment/" />
    <updated>2020-07-15T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/dont-let-your-negative-thoughts-poison-your-present-moment/</id>
    <content type="html">&lt;p&gt;In these uncertain times, it always feels like things will get only worse. It&#39;s hard to not think about what&#39;s going to happen, specially if you were in a good chapter in your life just before shit hit the fan. Your mistakes might feel way bigger than anyone else&#39;s, you might have a really hard time letting go of the downsides of decisions you made or events occurring around you. I know I am feeling like that a lot lately.&lt;/p&gt;
&lt;p&gt;But it&#39;s not real, whatever you are feeling. It&#39;s a hard concept to grasp but our minds are like lenses, not mirrors. We don&#39;t see things happening around us as they are, we take in the information and perceive it in our own way, warped by our emotions at the time and twisted by how our peers also see them happen. You can be more or less sure the intense regret you are feeling or the longing for a comparatively good time in your heart is almost always an amplified version of the real incidents.&lt;/p&gt;
&lt;p&gt;Tens of thousands of years ago we used to live in caves, and when darkness fell upon at the day end, our world would become a terrifying hell of death. Every moving creature in the bushes became humongous predators in our minds. I mean even if the slight rustling was because of the smallest bunny in the land, you would have a better chance of living if you assumed it was just another predator. Years of practiced habit still lingers in us, so much so that we actually have a name for this assume the worst behavior: the negativity bias. This is the reason you can&#39;t seem to let go of all those bad thoughts about your decisions, constantly self-doubting and feeling sad.&lt;/p&gt;
&lt;p&gt;As I often say to myself, there is no bad time, or good time, as a matter of fact. You are a being living in the moment, you are taking your decisions in the moment, with all the resources you have at hand. Trust in yourself. &amp;quot;I shouldn&#39;t have done that&amp;quot;,&amp;quot;I will regret this&amp;quot;,&amp;quot;What if I made a huge mistake?&amp;quot; these thoughts will come into your mind, your brain wants you to always review again and again if you are gonna survive whatever you are going through. Gently hold those thoughts and blow them into the air. The deed is done, only way now is to move forward.&lt;/p&gt;
&lt;p&gt;Do new things, enjoy them. Savor the long forgotten memories of joy. Rejuvenate your soul with new habits. You got this!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The Fall</title>
    <link href="https://ratul.minhaz.net/blog/the-fall/" />
    <updated>2021-02-23T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/the-fall/</id>
    <content type="html">&lt;p&gt;If you cup your hands on both of your ears, you will hear a swishing sound that almost feels increases every few seconds. You might say that is the sound of your blood pulsating in your body, recycling carbon dioxide and bringing in new oxygen every now and then.&lt;/p&gt;
&lt;p&gt;To me is is the sound of wind passing by us, as we fall through the eternal void. It is a reminder of that inevitable crash we all have to face when this brief flight we have been in since our birth ends and we stop moving forever.&lt;/p&gt;
&lt;p&gt;When you first realize this you can throw your arms outwards and cry in fear, you can try to clutch on to anything you can grab a hold of. Suddenly there is something in your extended fists! Another hand is clutching on to yours! The vibration of the wind rushing to meet you from below feel ecstatic almost. You were going to brace yourself for the entirety of this journey towards sure obliteration, but now you have someone to occupy your mind instead of those thoughts. Whenever you look right over your shoulder, there is that person smiling back at you like bright red petunia. You feel like it&#39;s not so bad, may be this is what was meant to be, may be we were doomed to meet the ground with someone holding our hands.&lt;/p&gt;
&lt;p&gt;You look outwards and see the ones without a hand to grab on to. Something breaks inside you. The wind grows stronger, but you feel like you need to hold that person&#39;s hands. You stretch out to them and surprisingly see the other hand, the hand that gave you the warmth in the first place loosens up a bit. You cannot ignore your instinct of flying towards the other body falling with all it&#39;s weight centered in it&#39;s heart. It&#39;s a very heavy one indeed, and you feel like you need to lend some help to carry it.&lt;/p&gt;
&lt;p&gt;The other body drops as if it&#39;s bound to a rock, you can&#39;t seem to get a hold of it. Your heart bleeds each time you try to nudge yourself a bit towards it, but just want to give it some warmth, that&#39;s all it needs, right? The warmth you got changed the fall for you, to you it&#39;s not the fall that worries you anymore, you are more anxious how to fly in the sky rest of the way! You almost grab the other person by their collar. You close your eyes as you embrace them for one warm and fuzzy hug.&lt;/p&gt;
&lt;p&gt;The wind grows colder. What is the end of this fall, anyway? Will it be a big splash? Or a thunderous kapoot! Will you remember the sound when it all ends and you are lying on the floor, looking up towards the gold-blue afternoon sky? You can&#39;t think of anything with the anticipation of impending conjuncture. But oh? You wave your hands at nothing! You open your eyes and suddenly discover you have flown off far away. The heavy hearted one is still falling, you haven&#39;t been able to give them the purpose to fly, you couldn&#39;t show them the dream of the avian marvels of the prehistoric era. Instead you are so far away from those set of warm hands that gave you this newfound joy in meeting your crash, that you don&#39;t even know how to get back to it. One single snowflake lands on your fingertip, the freeze starting to spread...&lt;/p&gt;
&lt;p&gt;The last thing you see before your eyes turn into crystal orbs of ice is those two pair of hands, the ones that held on to you when you were alone in despair. You have lost the amicable ardor that you were so fond of. You don&#39;t hear the sound your body makes when it meets the concrete street and breaks into a thousand piece, you are gone way before.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Not All Data Engineers Are Made Equally - 4 Types of Data Engineer Roles</title>
    <link href="https://ratul.minhaz.net/blog/not-all-data-eng-are-same/" />
    <updated>2023-07-20T00:00:00Z</updated>
    <id>https://ratul.minhaz.net/blog/not-all-data-eng-are-same/</id>
    <content type="html">&lt;p&gt;&lt;em&gt;… or how I realized there isn&#39;t one single path to becoming a data engineer.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I had been lurking forums like r/dataengineering for a while now and every few months I see these two questions pop up again and again:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What is a data engineer?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How much code do I need to know to be a data engineer?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And every single time, it sparks vibrant yet inconclusive discussions. This is not surprising, though. It&#39;s a relatively new field that&#39;s evolving like crazy, and it&#39;s interesting to see the different roles and backgrounds that make up this diverse community.&lt;/p&gt;
&lt;p&gt;I switched to the glamorous job of data plumbing a while back, but I used to be just a plain backend developer. So I believe I can give a bit of shape to the different varieties of data engineering roles we see. I couldn&#39;t think of different names for each of the roles since they all indeed do the one essential thing: move data from one place to another so that it makes more sense. If data engineering were a role-playing game, there would be 4 classes: The Wizards with their magical SQL queries, The Jedis who wield the force of software engineering principles, The Ninjas of no-code solutions, and last but not least, The Chameleons who can adapt to any data needs.&lt;/p&gt;
&lt;h2&gt;1. The Wizards: Traditional SQL-Driven Data Engineer&lt;/h2&gt;
&lt;p&gt;First up, we have the SQL-based traditional data engineers, the Parselmouths of the data world. They are proficient in writing extremely complex SQL queries, designing and optimizing database structures, and transforming data for reporting and analytics purposes. Often, these data engineers come from backgrounds in SQL development, data analysis, or business intelligence (BI).&lt;/p&gt;
&lt;h3&gt;Strengths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Proficient in data querying and modeling, enabling quick and accurate data extraction and analysis.&lt;/li&gt;
&lt;li&gt;Strong understanding of databases, optimizing their structures for efficient data processing.&lt;/li&gt;
&lt;li&gt;Swift responders to business data requests in data-driven organizations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Weaknesses&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Limited ability to handle complex ETL processes or automate data workflows without additional coding skills.&lt;/li&gt;
&lt;li&gt;May face challenges in adopting modern tech stacks or integrating machine learning algorithms.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Skills Needed&lt;/h3&gt;
&lt;p&gt;To join the ranks of the wizards, you&#39;ll need a solid foundation in SQL and a deep understanding of databases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start with the Basics: Familiarize yourself with SQL syntax, data types, and simple SELECT statements.&lt;/li&gt;
&lt;li&gt;Master Data Manipulation: Learn how to filter, aggregate, and join data using advanced SQL concepts like GROUP BY, JOIN, and subqueries.&lt;/li&gt;
&lt;li&gt;Understand Database Concepts: Grasp the fundamentals of relational databases and their design principles, including normalization and indexing.&lt;/li&gt;
&lt;li&gt;Real-world Practice: Gain practical experience in data manipulation using SQL by working on personal projects or analyzing open datasets on sites like Kaggle.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. The Jedis: When Software Engineers Use The Force&lt;/h2&gt;
&lt;p&gt;Next, we&#39;ve got the coders turned data Jedis, who use the Force aka software engineering principles to build data-intensive platforms. With a coding background, they thrive in utilizing technologies like Apache Spark or Apache Airflow to tackle complex tasks.&lt;/p&gt;
&lt;p&gt;The fundamental difference between these engineers and the SQL-driven DEs is the ability to use application development tools like docker, logging, microservices, and APIs to implement domain-driven solutions.&lt;/p&gt;
&lt;h3&gt;Strengths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Proficient in coding and software engineering practices.&lt;/li&gt;
&lt;li&gt;Skilled in building robust data pipelines and automating ETL processes.&lt;/li&gt;
&lt;li&gt;Comfortable with building complex data architectures and services.&lt;/li&gt;
&lt;li&gt;Adaptive in integrating modern tech stacks and AI/ML algorithms into data workflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Weaknesses&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;May lack in-depth knowledge of SQL querying and modeling techniques.&lt;/li&gt;
&lt;li&gt;Might be overkill in certain environments where no/low code or SQL based is preferred.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Skills Needed&lt;/h3&gt;
&lt;p&gt;Coders looking to transition into data engineering can leverage their programming skills to become Data Jedis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Programming languages: Create data pipelines using programming languages like Python or Java, integrating them with data sources and storage solutions.&lt;/li&gt;
&lt;li&gt;Learn Data Engineering Tools: Familiarize yourself with popular data engineering frameworks like Pandas/Polars, Apache Airflow, and Prefect. Online tutorials and documentation can be valuable resources.&lt;/li&gt;
&lt;li&gt;Embrace Big Data Technologies: Dive into distributed computing software like Apache Spark, Apache Flink, Dask, and storage technologies like Hadoop and Amazon S3, which are crucial in handling large-scale data.&lt;/li&gt;
&lt;li&gt;Explore Cloud Platforms: Familiarize yourself with cloud services like AWS, Google Cloud, or Azure, as they offer robust data engineering tools and infrastructure. Also learn Docker, Kubernetes, etc to deploy your code there.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. The Ninjas: No-Code or Low-Code Tools Instead of Katanas&lt;/h2&gt;
&lt;p&gt;These data engineers may not be hardcore coders or SQL junkies, but they can amaze you with their GUI-based tools that make data workflows a breeze. Often coming from non-technical backgrounds like finance or business, they&#39;ve picked up data engineering skills through BI tools or drag-and-drop ETL platforms. Their main focus is to get the job done as soon as possible, be fast just like a ninja.&lt;/p&gt;
&lt;h3&gt;Strengths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Excel in using GUI-based tools and low-code platforms for building data workflows quickly and efficiently.&lt;/li&gt;
&lt;li&gt;Ideal for business-oriented teams or individuals with non-technical backgrounds seeking to engage in data engineering tasks.&lt;/li&gt;
&lt;li&gt;Rapid adoption and ease of use make them valuable assets for fast-paced projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Weaknesses&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;May lack the flexibility and customization options of traditional coding approaches.&lt;/li&gt;
&lt;li&gt;Some GUI tools may not support complex data engineering tasks or scale well with growing data volumes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Skills needed&lt;/h3&gt;
&lt;p&gt;No-code and low-code platforms empower non-technical individuals to participate in data engineering. Aspiring Wizards can follow these steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Discover No-Code Tools: Explore user-friendly platforms like Microsoft Power Automate, Zapier, or Google Cloud Data Fusion, which enable data workflows without coding.&lt;/li&gt;
&lt;li&gt;Data Integration: Learn how to connect various data sources and automate data transformations using drag-and-drop interfaces.&lt;/li&gt;
&lt;li&gt;Master Data Transformation: Utilize GUI tools to cleanse, enrich, and prepare data for downstream analytics and reporting.&lt;/li&gt;
&lt;li&gt;Practice with Business Use Cases: Work on real-world business scenarios, creating data workflows that cater to specific business needs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4. The Chameleon: Hybrid Data Engineers&lt;/h2&gt;
&lt;p&gt;Last but not least, we got Hybrid Data Engineers who are essentially the chameleons of the data world. As data engineering practices have evolved, a hybrid role has emerged that combines software engineering expertise with a strong focus on data processes and business needs. These data engineers understand the technical aspects of data engineering while also aligning solutions with the organization&#39;s broader goals. Just like how chameleons adapt to any environment depending on the requirement, these engineers can encompass data/business analysis, ETL pipeline development, visualization, etc.&lt;/p&gt;
&lt;p&gt;In comparison to software developers turned data engineers, these folks take just the bare minimum required skills from software engineering and focus the rest of their attention on understanding the business.&lt;/p&gt;
&lt;h3&gt;Strengths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Effective translators between technical teams and stakeholders, navigating both software engineering and data management challenges.&lt;/li&gt;
&lt;li&gt;Proficient in crafting data solutions that align with specific business needs and requirements.&lt;/li&gt;
&lt;li&gt;Valuable problem solvers, capable of navigating both software engineering and data management challenges.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Weaknesses&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Striking the right balance between technical best practices and business agility can be a delicate challenge.&lt;/li&gt;
&lt;li&gt;May require a diverse skill set, making their learning curve potentially steeper compared to specialized roles.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Skills needed&lt;/h3&gt;
&lt;p&gt;Hybrid Data Chameleons combine technical skills with business acumen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Develop Data and Business Skills: Master SQL querying, data modeling, and programming languages while also enhancing your understanding of business operations and requirements.&lt;/li&gt;
&lt;li&gt;Communication and Collaboration: Hone your communication skills to effectively translate technical concepts to non-technical stakeholders and vice versa.&lt;/li&gt;
&lt;li&gt;Infrastructure: Learn different IaC tools such as Docker Compose, Terraform, and Pulumi to maintain reproducible data infrastructure to help with setting up&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Challenges and Opportunities in Data Engineering&lt;/h2&gt;
&lt;p&gt;From what I have seen, I believe the data engineering landscape will keep changing in the next 5 years, branching into distinct specializations within the field. Some key points to consider:&lt;/p&gt;
&lt;h3&gt;1. Legacy vs. Modern Tech Stacks&lt;/h3&gt;
&lt;p&gt;Many data engineering teams face the challenge of dealing with legacy technologies and processes that might not align with modern software engineering practices. Transitioning from traditional BI-focused platforms to modern data stacks can be a bumpy road, especially if the team lacks a strong software development background.&lt;/p&gt;
&lt;h3&gt;2. The Human Element: Embracing Change&lt;/h3&gt;
&lt;p&gt;Change is hard, and this holds true in data engineering too. Introducing new technologies, best practices, and workflows can sometimes meet resistance from team members who prefer sticking to familiar methods. Building a culture of openness to change and continuous learning is crucial for successful data engineering teams.&lt;/p&gt;
&lt;h3&gt;3. Balancing Flexibility and Best Practices&lt;/h3&gt;
&lt;p&gt;Striking a perfect balance between business pressure and software engineering principles is essential. While serving the pressing needs of the stakeholders is our foremost priority, it is important that we adopt modern software dev practices like TDD, version control, and log management. This ensures the data infrastructure is something that can be recreated from scratch again and again, making it the resilient data backbone of the organization.&lt;/p&gt;
&lt;h2&gt;Into The Looking Glass: The Future of Data Engineering&lt;/h2&gt;
&lt;p&gt;With the rise of machine learning and AI, data engineers will play an even more pivotal role in extracting meaningful insights from the vast ocean of data. With that in mind, more and more teams will adopt cloud-centric products for cost-effective solutions with better ML integration. DataOps practices and DataOps engineering teams will emerge, leading to greater collaboration between data engineers, data scientists, and other stakeholders.&lt;/p&gt;
&lt;p&gt;As data privacy and security become paramount concerns, data engineers will embrace practices that prioritize data governance and compliance. These are pure speculations, however, the future is bright for data engineers. The more AI and ML get embedded in our data-driven decision-making process, the need for clean and reliable data pipelines becomes more important.&lt;/p&gt;
&lt;p&gt;Data engineering is an exciting and ever-evolving domain with diverse roles and backgrounds shaping its landscape. From SQL Wizards to software Jedis and no-code Ninjas, every type of data engineer has a place in the world of data.&lt;/p&gt;
&lt;p&gt;Thank you for reading my analysis of the data engineering role in the year 2023. Feel free to hit me up through my email address or DM me on Twitter @ratulotron.&lt;/p&gt;
</content>
  </entry>
</feed>