<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Databox Technologies - Medium]]></title>
        <description><![CDATA[​At DataBox Technologies, we build great brands and experiences that help solve today’s challenges. - Medium]]></description>
        <link>https://medium.com/databox-technologies?source=rss----131c55e9397a---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Databox Technologies - Medium</title>
            <link>https://medium.com/databox-technologies?source=rss----131c55e9397a---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Mon, 18 May 2026 04:34:36 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/databox-technologies" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Creating Quiz Game App Using IONIC framework.]]></title>
            <link>https://medium.com/databox-technologies/creating-quiz-game-app-using-ionic-framework-acd0798cf671?source=rss----131c55e9397a---4</link>
            <guid isPermaLink="false">https://medium.com/p/acd0798cf671</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[android-apps]]></category>
            <category><![CDATA[quiz-games]]></category>
            <category><![CDATA[ionic]]></category>
            <category><![CDATA[firebase]]></category>
            <dc:creator><![CDATA[Nuwan Abeywickrama]]></dc:creator>
            <pubDate>Tue, 16 Mar 2021 04:52:45 GMT</pubDate>
            <atom:updated>2024-10-15T05:09:36.282Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Dem4Q1m22tEtN8WfR9Uuaw.jpeg" /></figure><p>This is a journey about one of my project in my internship period which is a creating Android quiz game App using Ionic framework. I wanted to share my story of working on this app so it would help other developers who takes on the same journey. So, I hope this post helps and inspires other programmers who want to create android app using ionic.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/647/1*0aeGHg4sVKEdVSunwJf2vQ.png" /></figure><h4>Intro for quick start</h4><p>As First step, You must refer <a href="https://ionicframework.com/docs"><strong><em>Ionic Framework Documentation</em></strong></a><strong><em> </em></strong>and select one of web application framework such as <a href="https://angular.io/"><strong><em>Angular</em></strong></a>, <a href="https://reactjs.org/"><strong><em>React</em></strong></a> or <a href="https://vuejs.org/"><strong><em>Vue</em></strong></a>. In my project I used Angular with ionic and VS Code as code editor.</p><p>Using above documentation you will get idea how to setup environment for ionic development. After setup environment completely you can start continue with the article.</p><p>Before design and make logics you must create a new ionic project. You can use below command on your terminal/cli to do so.</p><p><strong><em>ionic start myApp tabs</em></strong></p><p>You can use your app name instead “myapp”. Then your terminal shows like this <strong>Type Y at the prompt <em>Would you like to integrate your new app with Cordova to target native iOS and Android? (y/N) </em></strong>in here type y and press enter key. After run command below I mentioned. You must use your app name instead “myapp” every command which has “myapp”</p><p><strong><em>cd myApp<br>ionic serve</em></strong></p><p>After run this commands, If your setup and other installations completed correctly you can show your sample app open in the browser. Some times your browser will not open automatically don’t worry about that copy link address in your terminal and past in your browser. You can see your ionic app in the browser. Now, you have ionic app and you can develop it as you need..</p><h4>Create Quiz App</h4><p>We are building this app for Android OS to start with. So first add android platform using command “<strong><em>cordova platform add android”. </em></strong>Before starting developments take few minutes to read below. <a href="https://ionicframework.com/docs/developing/android">https://ionicframework.com/docs/developing/android</a><br>It will resolve most of the problems you might get. Important thing is you must separate your project to pages, components, modules and Services.</p><p>Now you have to make specific folders to separate your code very clean. For that go to <strong>src&gt;app</strong> and create folder called “models”. In same directory go to <strong>tab1</strong> and open integrated terminal to that directory. Use commands in below</p><p><strong><em>ionic generate component start</em></strong></p><p><strong><em>ionic generate component view-question</em></strong></p><p><strong><em>ionic generate page user-level</em></strong></p><p><strong><em>ionic generate page view-quiz</em></strong></p><p>In this game I used images to levels and all of these images in assets folder. following this directory open assets folder<strong> src&gt;assets</strong> . Now you have to make folders called fonts, icon, images, quizes, levels, in this assets folder. Font folder has all of external fonts that use in app. Icon folder has images such as app icon, logo like that. Images folder has level images, background images etc. Quizes folder has json files and All of these json files have all of information related to each level questions. User folder has userData json file which has information about each level such as level id, level name, level image link.</p><p>In models folder I used different models for different tasks. It will be different from person to person within their experience.</p><p>Lets move to Service folder which is the most valuable things in this app. In service folder we can use to store our CRUD operations and any other operations which wants to different places in our application. In this application I used firebase Realtime database for store users meta data such as User’s device id, current level, completed levels with marks like that. For using firebase, we must configure app with firebase.</p><h4>1. Install Angular Fire and Firebase</h4><p>You should connect your ionic application with the firebase database. install Angular Fire and Firebase from npm by running the following command.</p><p><strong><em>npm install @angular/fire firebase - -save</em></strong></p><p>As a next step you have to config your app with firebase.</p><h4>2. Create Firebase Account</h4><p>Visit <a href="http://console.firebase.google.com/"><strong>console.firebase.google.com</strong></a> and sign in using your Gmail account.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/722/0*99PADwdtqErnuRlB.png" /></figure><p>Click on the <strong>“create a project”</strong> button then click on continue button.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/0*JPMxObCJtygu5fmV.png" /></figure><p>Next, click on the web icon as shown in the screenshot.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/688/0*le9qe37bwS8e_EcJ.png" /></figure><p>Next, add Firebase to your web app. Enter the app’s nickname and then click on the next button.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/747/0*2qV-yODQqL9b-KGN.png" /></figure><p>It will take you to the screen where you will see Firebase configuration, copy the red marked Firebase configuration keys keep it in the notepad or something else. You will need these keys to register in your Ionic project.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/673/0*2elrKioYCXIGECoH.png" /></figure><p>Next, we will click on the <strong>“database”</strong> from the left side navbar. Then, look for Realtime Database and click on the <strong>“create database”</strong> button.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/927/0*EyaGvhowistwH6a4.png" /></figure><p>It will open the security rules model popover, select “start in test mode” option. Remember we are setting up these rules for testing purpose. In real world app be careful about database rules.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/820/0*iDDEzaM--J65LhjD.png" /></figure><p>Now, we are all set to use the Firebase Real-time Database.</p><h4>3. Configure Firebase Config Keys</h4><p>In this step, we will register the Firebase config rules inside the<br><strong>environment.prod.ts </strong>and <strong>environment.ts</strong> file, you can find these files in the <strong>src &gt; environments</strong> folder.</p><p>Add the following code inside the environment.prod.ts file. In previous section I mentioned to keep this details in notepad.</p><pre>export const environment = {<br>  production: true,<br>  firebaseConfig: {<br>    apiKey: &quot;&lt;your-api-key&gt;&quot;,<br>    authDomain: &quot;&lt;your-auth-domain&gt;&quot;,<br>    databaseURL: &quot;&lt;your-database-url&gt;&quot;,<br>    projectId: &quot;&lt;your-cloud-firestore-project&gt;&quot;,<br>    storageBucket: &quot;&lt;your-storage-bucket&gt;&quot;,<br>    messagingSenderId: &quot;&lt;your-sender-id&gt;&quot;,<br>    appId: &quot;&lt;your-app-id&gt;&quot;,<br>    measurementId: &quot;&lt;your-measurement-id&gt;&quot;<br>  }<br>};</pre><p>Place the following code inside the environment.ts file.</p><pre>export const environment = {<br>  production: false,<br>  firebaseConfig: {<br>    apiKey: &quot;&lt;your-api-key&gt;&quot;,<br>    authDomain: &quot;&lt;your-auth-domain&gt;&quot;,<br>    databaseURL: &quot;&lt;your-database-url&gt;&quot;,<br>    projectId: &quot;&lt;your-cloud-firestore-project&gt;&quot;,<br>    storageBucket: &quot;&lt;your-storage-bucket&gt;&quot;,<br>    messagingSenderId: &quot;&lt;your-sender-id&gt;&quot;,<br>    appId: &quot;&lt;your-app-id&gt;&quot;,<br>    measurementId: &quot;&lt;your-measurement-id&gt;&quot;<br>  }<br>};</pre><h4>4. Import and Register Firebase in AppModule</h4><p>Finally, go to app.module.ts file. Here import and register Firebase services along with that also inject Firebase config keys with the <strong>AngularFireModule.initializeApp()</strong> method.</p><pre>//  firebase imports, remove what you don&#39;t require<br>import { AngularFireModule } from &#39;@angular/fire&#39;;</pre><pre>// environment<br>import { environment } from &#39;../environments/environment&#39;;</pre><pre>@NgModule({<br>  declarations: [AppComponent],<br>  entryComponents: [],<br>  imports: [<br>    BrowserModule,<br>    IonicModule.forRoot(),<br>    AppRoutingModule,<br>    HttpClientModule,<br>    AngularFireModule.initializeApp(environment.firebaseConfig),<br>  ],<br>  providers: [<br>    StatusBar,<br>    SplashScreen,<br>    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }<br>  ],<br>  bootstrap: [AppComponent]<br>})</pre><pre>export class AppModule { }</pre><p>Then create database in you Realtime database. Using demo data.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mZVWqQRezQJUp1X78Xc8Zw.png" /><figcaption>Realtime Database</figcaption></figure><p>Now, you can connect your Ionic app with Firebase Realtime database.</p><p>We want more plugins for our other implementations. There are implementing countdown and get user’s device id (UUID). For that following commands.</p><p><strong><em>ionic cordova plugin add cordova-plugin-device<br>npm install @ionic-native/device <br>npm install ngx-countdown — save</em></strong></p><p>At the moment now you have to define your CRUD operations and file read operations in side the service folder. First of all you have to make different service files as you need. In here I used three service file called <strong>level, quiz, userdata. </strong>You can make services like a my project using below commands in your terminal.</p><p><strong><em>ionic generate service level<br>ionic generate service quiz<br>ionic generate service userdata</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/236/1*xxA7kpjPIAUQhNgAi_O5Iw.png" /><figcaption>services folder</figcaption></figure><p>In level service, I defined get data from json file that store in inside asssets folder. Quiz service is used to get quizzes data from firebase which have all details about each level questions. User data service work with firebase which has lot of implementations such as get all users, update user, update marks, get one user’s data like that.</p><p>Let’s talk about UI and flow of this app. As a first UI I used start component which has two buttons for play and get information about app. Then user navigates to user level page while starting play game. In this page has user levels and show stars related to marks of each levels. Next user go to questions view page and has questions related to each level. Each questions has limited time. That shows top of the questions. After User completed answering all questions in that level shows the marks and provided a feature to try again or go to next level.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qMSDtuEI_YqCowhbbwmjbg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2vE68QTOqOz3UxD0Qh1YRQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*J4u-bhDeXZ0XF__YJB1d_g.png" /></figure><h4><strong><em>Flow of this App</em></strong></h4><p>After install and User open app first time, App will get user’s device id (UUID). It will help to save user data in firebase. Then user click “play now” button and go to game level screen. If user play game first time, he/she has able to play only level one and other levels are locked. Other levels will be unlock as how user win that level. Each level display three stars related to marks percentage obtained by user.</p><p>Next User clicks level and goes to the Quiz view screen. It has questions and it’s answers. Each question has time and displays it with each question. I already made admin panel for upload questions to firebase and that admin panel has features for upload all data about each game level question. After user clicks an answer then it will come next question. This process will continue until end of all questions in that level. In final step will calculate user’s total marks and will save it in firebase with it’s level and display whether if user pass or fail. If user pass the level, can go to next level but user fail the level, must try again that level. After click “next level” or “try again” button again user will go to game level screen. Now, user can look three stars in each level which are completed by user. That three stars displayed related to percentage of marks obtained by user for that level. User can complete all game levels in this game like that.</p><p>I attached my GitHub repo link below. Anyone who is interested in making an android app using ionic will be helped to refer for their practice. In this article, I explained special topics related to my app. In this journey, I used a lot of documentations which are on their official sites. I linked all of these websites beginning of this article.</p><p>GitHub Link: <a href="https://github.com/Nuwan-Abeywickrama/Quiz_App_ionic"><strong><em>https://github.com/Ramesh-Nuwan/Quiz_App_ionic</em></strong></a></p><p>Thank You.</p><p>Special Thanks to team <a href="https://www.databoxtech.com/"><strong>Databox Technologies</strong></a></p><p><em>The comment section is open for you to share special things, new updates, and mention mistakes regarding this content. I’m also learning new things from your comments. <br>I think sharing knowledge, learning new things, and helping others will help to develop a better world. Let’s share our knowledge to learn for everyone.🏆🏆🥇</em></p><p>Read more</p><p><a href="https://github.com/Nuwan-Abeywickrama/BMI_Calculator"><strong><em>How to make smart BMI Calculator App using Flutter</em></strong></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=acd0798cf671" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databox-technologies/creating-quiz-game-app-using-ionic-framework-acd0798cf671">Creating Quiz Game App Using IONIC framework.</a> was originally published in <a href="https://medium.com/databox-technologies">Databox Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Matching Game using Flutter]]></title>
            <link>https://medium.com/databox-technologies/building-a-matching-game-using-flutter-7743476fce1f?source=rss----131c55e9397a---4</link>
            <guid isPermaLink="false">https://medium.com/p/7743476fce1f</guid>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[games]]></category>
            <category><![CDATA[learning-to-code]]></category>
            <dc:creator><![CDATA[Hansi]]></dc:creator>
            <pubDate>Wed, 03 Mar 2021 10:36:01 GMT</pubDate>
            <atom:updated>2021-03-03T10:36:01.689Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*smlbqJ13yIoIBtdOU2ZqSA.jpeg" /></figure><p>About a month ago I started my job as a trainee and my first task was to build a flutter app with my own preference which includes new ideas and something interesting.so I came up with the idea of building something for kids. With the help of my mentor I decided to create a simple gaming app which will help kids to improve their memory,concentration,attention to details and more.</p><p>So the idea was to build a matching game which will probably best for 2–3 year old ,but older or younger kids may enjoy it, too.</p><p>You may have heard the word “<strong>Flutter</strong>” by now.<strong>Flutter</strong> is Google’s portable UI toolkit for crafting beautiful, natively compiled applications for mobile, web, and desktop from a single code base. <strong>Flutter</strong> works with existing code, is used by developers and organizations around the world, and is free and open source.</p><p>If you’re new to flutter you can follow this link <a href="https://flutter.dev/?gclid=CjwKCAiAyc2BBhAaEiwA44-wW5unel_dmlR4SCSiYoYz4fvOMOS6EEfB1TTf25srAmq8XMziXU3OhRoCeR4QAvD_BwE&amp;gclsrc=aw.ds"><strong>https://flutter.dev/?gclid=CjwKCAiAyc2BBhAaEiwA44wW5unel_dmlR4SCSiYoYz4fvOMOS6EEfB1TTf25srAmq8XMziXU3OhRoCeR4QAvD_BwE&amp;gclsrc=aw.ds</strong></a></p><p>Flutter provides variety of widgets which will help to create any kind of UI. So in this app it will be more than a UI that provide the user to access it.The basic thing you need to know when creating a matching game is <strong>Draggable</strong> and <strong>Drag target</strong>.</p><p><em>Lets start creating our flutter app…</em></p><p>I’m using VS code editor and you can use either android studio or VS code to create the app.Hope you have set up the environment for flutter and necessary extensions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/548/1*Dt4KZ2tLDNW2-vdpHcIAdg.png" /></figure><h3><strong>Creating a new project</strong></h3><ol><li>Open the Command Palette (Ctrl+Shift+P (Cmd+Shift+P on macOS)).</li><li>Select the <strong>Flutter: New Project</strong> command and press Enter.</li><li>Enter your desired <strong>Project name</strong>.</li><li>Select a <strong>Project location</strong>.</li></ol><p>After creating our flutter project we can continue to work on our application.As I mentioned before we need to know about draggable and drag target in flutter.Basically in a matching game user must be able to drag a picture and the matched picture should accept the dragged picture if its correct.A widget will be movable around the screen with the help of <strong>Draggable</strong>. While the draggable allows a widget to be dragged anywhere the <strong>Drag Target </strong>will provide a destination to the draggable.(<em>you can get a good idea about draggable and drag target using the above mentioned link</em>)</p><p>you can use a set of images to the draggable and the matching images as the drag target.</p><p>You can add data directly to the source code,load json data or load the data from cloud firestore using firebase. To add firebase to your project you can follow this link <a href="https://firebase.google.com/docs/flutter/setup"><strong>https://firebase.google.com/docs/flutter/setup</strong></a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1yn4XR3oxJk-gPFxp5FVNg.png" /></figure><p>I have used cloud firestore to load images and other data to the project.For the background image loading I have used firebase storage.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/216/1*E7Mx3WCqf3NPABHCRvPJmQ.png" /></figure><p>Now we can create the draggable and drag target data list inside our project and load the firebase data. Simply what happens is that the draggable image will hold a data name and the drag target will check whether the accepted data is correct and will set the state to true or will return the image if the data name is wrong. Additionally I have added something interesting to the game here.When the user get a correct answer which means the accepted data is true marks will be added to the correct match.</p><p>You won’t get tired by playing a one match.so we can add more matches to continue.After finishing a game there will be a small dialog box to continue the next game.If the user wants to go to the next game they can simply click the OK button and the data for the next game will be automatically load to the screen.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/216/1*XPlvEV4z-v0IIuNc5er7uA.png" /></figure><p><em>Lets see how that happens.</em></p><p>This part was difficult so I had to get help from my mentor to implement it.Here we have used <a href="https://pub.dev/documentation/provider/latest/provider/ChangeNotifierProvider-class.html"><strong>ChangeNotifierProvider</strong></a><strong> </strong>to render a match.According to the flutter docs <strong>changeNotifier</strong> is a simple class included in the Flutter SDK which provides change notification to its listeners.when the change notifier gets updated values, it can call a method called ‘notifyListeners()’, and then any of it’s listeners will respond with an action.</p><p>Now we can add more reaction to our app to make it look more interesting.For that I have added a GIF for every correct answer.And we can add a push up notification to remind the user to play a game.We can use cloud messaging for that.</p><p>As the final touch up we can change our app launcher icon.You can change the launcher icon by following below steps.</p><ol><li>Add your png file to the asset folder</li><li>Edit pubspec.yaml</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/679/1*_1p1N2nhEEnynWTOMVoS4A.png" /></figure><ol><li>Run the following commands</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/683/1*IXQpEQVVUwkKBMP6NVQjhQ.png" /></figure><p>If you have followed the above steps you can see your icon has been changed to the one you wanted instead of the flutter icon.</p><p>If you’re planing to publish your app to the play store you have two possible formats to release.you can either build a release app bundle or build an APK.(<strong>APK</strong> stands for <strong>Android</strong> Package Kit and <strong>is the</strong> file format that <strong>Android</strong> uses to distribute and install apps)</p><p>I have build and APK and following commands will build it.</p><p>In your terminal,</p><ol><li><em>flutter clean</em></li><li><em>flutter build apk</em></li></ol><p>Now you can place the APK file on your device to install the app.</p><p>Hope you have enjoyed this article and learned something.</p><p>You can get the full source code from here : <a href="https://github.com/House-Of-Coders/trainee_play_room"><strong>https://github.com/House-Of-Coders/trainee_play_room</strong></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7743476fce1f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databox-technologies/building-a-matching-game-using-flutter-7743476fce1f">Building a Matching Game using Flutter</a> was originally published in <a href="https://medium.com/databox-technologies">Databox Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Host your Wordpress website for free on AWS — AWS Free Tier]]></title>
            <link>https://medium.com/databox-technologies/host-your-wordpress-website-for-free-on-aws-aws-free-tier-d0d007b3babe?source=rss----131c55e9397a---4</link>
            <guid isPermaLink="false">https://medium.com/p/d0d007b3babe</guid>
            <category><![CDATA[apache]]></category>
            <category><![CDATA[wordpress]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[free]]></category>
            <category><![CDATA[php]]></category>
            <dc:creator><![CDATA[Ishan kaushalya]]></dc:creator>
            <pubDate>Tue, 29 Sep 2020 12:02:40 GMT</pubDate>
            <atom:updated>2020-09-29T13:12:45.021Z</atom:updated>
            <content:encoded><![CDATA[<h3>Host your WordPress website for free on AWS — AWS Free Tier</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*hbpQ3d1LjYfM7Wyc.jpeg" /></figure><blockquote>This article highlights the steps needed to create an Amazon AWS Free Tier account, deploy a free tier EC2 with the latest WordPress website.</blockquote><p>“The Free Tier allows users to consume minimal AWS resources free of charge for a period of 1 year.”</p><p>Ok, let’s create an AWS account.</p><h3>01. Create an AWS Account</h3><p>First, We should browse to <a href="https://www.sysadmintutorials.com/goto/https://aws.amazon.com"><strong>https://aws.amazon.com</strong></a><strong>. </strong>At the top right-hand corner click on ‘Create an AWS Account’</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AnCZ4NpIbTlVho-5xh-jjw.png" /></figure><p>To create the AWS account it will ask your email, password and give your AWS account a name. Click continue when done.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6XqEoQox0ZGWiRpEtnNcNA.png" /></figure><p>Next, it will ask you the Account type you would like to create.</p><p>There are two options to choose you, select Professional if you intend to use this AWS account within your company, educational institution, or organization. Otherwise, select Personal.</p><p>Fill in the listed fields, click to acknowledge you have read and agreed to the AWS Customer Agreement. Then click ‘Create Account and Continue’.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/774/1*MjsYl3SCG4VT6TDXIcvmaw.png" /></figure><p>you will need to enter your credit card details to able to create a free tiar AWS account. <strong>NOTE (if you use more than the Free Tier thresholds, Amazon will start to bill you.)</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/984/1*z5M2R-Gq-9drjUTta0nTow.png" /></figure><p>After payment method verification it will ask your cell phone number. AWS will confirm your identity by sending you a text message or giving you a voice call. Fill in the details and click on Send SMS.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/769/1*P3Yw_W5rUit0mPY_A5GDrA.png" /></figure><p>Then you will receive a verification code via text message or voice call (depending on what you selected in the previous step) Enter the verification code that you have received.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/770/1*Y7wyInzSfEY0ZdKRXrWxxw.png" /></figure><p>Once you have entered the verification code correctly you will appear following windows.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/768/1*TrCUyEwPL7AfEprxn78IEA.png" /></figure><p>There are 3 Support Plans you can choose. we will be selecting the Basic Plan. Click on Free.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/686/1*4dqTW5V2U_lS5ozA9WerPQ.png" /></figure><p>That’s it. Your Amazon AWS Free Tier account has now been created.</p><h3>02. launch AWS EC2 free instance</h3><p>First, sign in the account we already created <a href="http://console.aws.amazon.com/">http://console.aws.amazon.com</a>. then you can see the AWS Management Console as follows.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5TU7J8z6JfYIZ2iU4z2mWQ.png" /></figure><p>At the top left-hand corner click on ‘<strong>Services</strong>’ and select the ‘<strong>EC2</strong>’. Then click on the ‘<strong>Launch Instance’</strong> button to create a new instance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RZbOckDMG-kSUi9venFH2Q.png" /></figure><p>Now you have seen different <strong>AMI</strong>s (Amazon Machine Images). These are the snapshot of deferent VMs. We will be using<strong> Ubuntu Server 18.04 LTS (HVM).</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GW46RZvmOfwZaVxveJZwKg.png" /></figure><p>To keep things simple, look for the AWS Marketplace option on the left-hand menu. The marketplace includes hundreds of pre-built machine configurations you can use.</p><p>use the search feature to look for “WordPress” setups, you’ll find the more than 100 deferent AMIs to choose. in the list find the “WordPress Base Version” option.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mG-7_9zDoluMQ5nH_4XD_Q.png" /></figure><p>there is shown you the details for this configuration and hourly fees for different levels of instances as well. once you click on continue will show you the kind AWS instances you want to use.</p><p>We’ll select the <strong>t2.micro </strong>which is eligible for AWS free tier. Then select <strong>‘Next: Configure Instance Details’</strong> button to continue.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AZ7vHS82H_4CXe_S7Pz5oA.png" /></figure><p>after select and instance type you get to review its configuration. if this is your first time configuration don’t go to change anything at this moment. leave the default settings</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/908/1*qv2x8v8XWFHPYh3rjcSxGQ.png" /></figure><p>when you click on “next” to choose the storage you want. Your free tier will available 8 GB storage and AWS bill you for additional storages.</p><p>when you’re ready click on “<strong>Review and launch</strong>” and click on “<strong>Launch</strong>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HNbkZbkW-R2xkgdUrPB9zw.png" /></figure><p>once you click on “<strong>launch</strong>” you will be prompted to select an existing key pair or create a new one. The key pair is what you’ll use to SSH into the instance.</p><p>I’ll assume you don’t already have a key pair created so choose the Create a new key pair option. Once you do provide a name, and click on the Download Key Pair button.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*5DhybS9yFtxA7uiaYd4FlA.png" /></figure><p>Once you have downloaded the key pair, click on the <strong>Launch Instances</strong> button. This will finally be launching the EC2 instance using all of the configurations you’ve provided.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/618/1*g5DRd1N_dxbYpKUs_PehcA.png" /></figure><p>will take a few minutes while AWS gets everything ready…</p><h3>03. Access your WordPress instance and find its public IP</h3><p>after your AWS instance deployed successfully, select on the “<strong>View Instance</strong>” and there will show your instance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/703/1*hmuBI3HwuDZWS6_fjLU00w.png" /></figure><p>find your newly deployed instance. If you select it, you’ll notice it lists the instance’s public IP under its details</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qPa6gLvLzou2HYICxP5xQg.png" /></figure><p>If you enter the IP address into your navigation bar, you’ll see the Aurora Instance ID verification prompt. it will ask the Instance ID of your WordPress Deployed VM. you can find it on the above Details window beside the public IP address.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cWP4zaX460p85hg2T7GhIQ.png" /></figure><p>Past the Instance ID and click on <strong>“Continue”</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ynhJ5qxyej6zYidye2KGUA.png" /></figure><p>once you have entered the instance id as password correctly, click on the <strong>“(Optional) MySQL password”</strong> and past the instance id again.</p><p>Now you’ll see a brand new WordPress website yours.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*C61xtWtKRHK31YfDAkDWSg.png" /></figure><p>Your WordPress website is ready to use now.</p><p>To login go to your WordPress website. Add <em>/wp-admin</em> to the end of its URL, enter the default <strong>username</strong> (aurora), and the <strong>password</strong> that you just copied (EC2 instance ID).</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d0d007b3babe" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databox-technologies/host-your-wordpress-website-for-free-on-aws-aws-free-tier-d0d007b3babe">Host your Wordpress website for free on AWS — AWS Free Tier</a> was originally published in <a href="https://medium.com/databox-technologies">Databox Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Hybrid vs Native Apps. When to use what?]]></title>
            <link>https://medium.com/databox-technologies/hybrid-vs-native-apps-when-to-use-what-873a8762163b?source=rss----131c55e9397a---4</link>
            <guid isPermaLink="false">https://medium.com/p/873a8762163b</guid>
            <category><![CDATA[native-app]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[hybrid-app-development]]></category>
            <category><![CDATA[ionic]]></category>
            <category><![CDATA[react-native]]></category>
            <dc:creator><![CDATA[Prabath Perera]]></dc:creator>
            <pubDate>Thu, 17 Sep 2020 18:12:27 GMT</pubDate>
            <atom:updated>2020-09-17T18:12:26.952Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*xaytiZng3ROTuUMlhQvE6g.png" /></figure><p>Nowadays everybody wants an app for their business and so many companies and freelancers are willing to build them. However if you ever tried to get an app done, you’d notice there’s a huge price difference in certain options. Also you’d have probably herd confusing terms like “native”, “hybrid”, “PWA”. Let me walk you through these concepts so you’d know what to get next time.</p><h3>Let’s Dive In</h3><p>There are 2 main app variants,</p><h4>1. Native Apps:</h4><p>Both iOS &amp; Android has a separate app building system. Apps built primarily utilising these systems are called native apps. Don’t get confused, every app is in the end built using these tools, but native apps purely rely on these technologies to build the app. In term of programming languages for, android it java &amp; kotlin. For iOS it’s objective-c and swift. Anything else is not pure native.</p><h4>2. Hybrid Apps</h4><p>These apps uses a simple concept. Since every platform (android, iOS, blackberry, windows) can display a HTML5 website properly and HTML5 has grown to be a feature rich eco system (with even access to sensors like GPS), you can build a good app like experience inside the browser as well. Hybrid app platforms takes this bit further by providing custom build web page container native app (cordova, capacitor) which can be used to package HTML5 website as a mobile app. This combined with single page applications (SPA) we can build a pretty good native like mobile apps. You just need to code once and use it to package both iOS &amp; Android (even other platforms) as against native apps. But this flexibility comes at the cost of performance and certain limitations. Ionic &amp; Cordova are the leading frameworks of this category.</p><h3>What about Flutter, ReactNative &amp; NativeScript</h3><p>There’s an another variant. Which is between these two worlds. It’s neither native or purely hybrid. Flutter/ ReactNative/ NativeScript apps falls under this category. All these aims to provide one major thing, that’s code once and deploy everywhere (at least to all mobile platforms). Why I say it’s in between is they partially converts your code into native code rather than just embedding.</p><p>If you are familiar with tech trends you’d know how amazing javascript has been performing over last few years. ReactNative is build upon this. ReactNative does not give you 100% portable codebase. What it does is, it uses a javascript engine to run all the application logic and converts UI code in to respective native version. The native UI communicates with javascript code (logic) via WebSockets.</p><p>Flutter takes a different approach. Rather than using javascript it uses dart, which finally converts in to native code.Which is amazing and very promising. It also uses a graphic engine(skia) to render the UI. Which makes sure app looks similar on all platforms. Flutter has another added advantage, which is it can build web application from the same code base, however this is still in beta.</p><p>Flutter Architecture : <a href="https://flutter.dev/docs/resources/architectural-overview">https://flutter.dev/docs/resources/architectural-overview</a></p><h3>PWA</h3><p>PWA is the new kid, which isn’t really an app. PWA is a web application which you can add to your home screen. It’s again a web application built using HTML/ Javascript and CSS with a small different of service worker. This service worker caches required assets locally and serves as needed to render the page. This ability let the web page render even without connectivity, essentially similar to mobile app, but much simpler to build and truly cross platform, it even works on desktops and laptops. But this is relatively new and people are still getting used to it. Most websites already supports this feature like Starbucks, Spotify, Pinterest, Outlook, Twitter. So we can safely assume this tech is here to stay.</p><p>Now to the tricky part,</p><h3>What should I use?</h3><p>I’ll tell you how I decide. I ask myself few questions.</p><ol><li>Is this a very early stage of the product, which is done to see market response or to act as a prototype? If Yes, Hybrid(HTML5) is the best bet since it comes with the lowest cost and fastest shipping time.</li><li>Is it a very mature product (/concept), with enough funding and you are more concerned about making sure it loads even 1 second faster then pick native</li><li>If your app contains complex and lengthly computations pick native as it’s easy to optimize and provides best performance.</li><li>If your app is an audio/video related solution <strong>DO NOT USE</strong> hybrid(HTML5). It poses lots of restrictions. As an example you wouldn’t be able to do a simple auto play with audio or proper video fullscreen in certain situations. Best to do a proper study of native features you would need before start using hybrid tech.</li><li>If your app does lot of background processing and iOS is a main target, again <strong>DO NOT USE</strong> hybrid(HTML5), but you can use ReactNative/Flutter.</li><li>If you plan on using BLE/ NFC better use native.</li></ol><h3>When to use Flutter, ReactNative &amp; NativeScript?</h3><p>So you are already wondering, when should I use react native or flutter. Since there’s a huge buzz about them also. Well they suites all above scenarios, specially for cases I recommended native. They come with really good performance and can utilize almost all native functionalities. But there’s a catch, well two,</p><p>Limited dev experience: I’ve seen relatively less no of experienced react native and flutter devs out there. Also these two does let dev to pick and structure how the app is build. Which is good if the dev team is really good. If not it can lead to messy, buggy code easily compared to other techs. Also lack of devs with experience itself might increase the cost in the long run. I’d recommend this for early-mid stages of a product (to minimize cost) of if you have a good in house team to take care of the product. If outsourcing make sure they know what they are doing.</p><p>Don’t misunderstand what I’m saying. Both ReactNative and Flutter is stable enough for production. Instagram &amp; FB Ad Manager uses ReactNative, Google Ad Manager uses Flutter.</p><h3>Cost</h3><p>Native &gt; Native-Hybrid -&gt; Hybrid</p><p>If we set the backend/api cost aside, cost for hybrid version should be less than half of the native price. Native-Hybrid will come in between but much less than native price for a normal product.</p><p>This article isn’t meant for devs, or it’s not there to explain and compare these techs in depth. It’s mainly focused on providing basic idea of these platforms to non-dev users who’s looking to get apps developed.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=873a8762163b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databox-technologies/hybrid-vs-native-apps-when-to-use-what-873a8762163b">Hybrid vs Native Apps. When to use what?</a> was originally published in <a href="https://medium.com/databox-technologies">Databox Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Create a Facebook Game]]></title>
            <link>https://medium.com/databox-technologies/create-a-facebook-game-f9460e898867?source=rss----131c55e9397a---4</link>
            <guid isPermaLink="false">https://medium.com/p/f9460e898867</guid>
            <category><![CDATA[games]]></category>
            <category><![CDATA[facebook]]></category>
            <category><![CDATA[facebook-instant-games]]></category>
            <dc:creator><![CDATA[Prabath Perera]]></dc:creator>
            <pubDate>Fri, 11 Sep 2020 11:31:53 GMT</pubDate>
            <atom:updated>2020-09-12T08:33:05.257Z</atom:updated>
            <content:encoded><![CDATA[<h3>Creating a Facebook Instant Game</h3><p>Brief guide on creating Facebook Instant game that will tell you, “What animal you look like?” :D</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JS8dMaE06uiZ-MRUtyf-bg.png" /></figure><h3>Intro</h3><p>Actual app development is done using standard html, javascript and css technologies. Facebook provides a javascript sdk to perform facebook related operations such as retrieving user info, profile picture ect.</p><p>Instant app package is basically a web application with some extra tweaks to work with facebook system. I’ll use a customised version of facebooks official sample from, <a href="https://github.com/fbsamples/fbinstant-samples">https://github.com/fbsamples/fbinstant-samples</a>. Refer the repo for more advanced examples with instant game platform.</p><p>Before proceeding get the source code from, <a href="https://github.com/databoxtech/article_fb_instant_game">https://github.com/databoxtech/article_fb_instant_game</a></p><p>If you open the source code, you will see below folder structure.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/472/1*mE6R7cUvgaDk4by8jU3BvA.png" /><figcaption>Screenshot shows only the src folder, which is the folder we will be working in.</figcaption></figure><p>Template does few things to make our life easier,</p><ol><li>Mock facebook SDK: we need to use facebook sdk to get users name and other details. But as we develop it’s a tedious task if we had to run this inside facebook always. What mock sdk does is it emulates how the actual sdk works and give us dummy responses where necessary.</li><li>Gulp Build System: Gulp automates most of the manual work like replacing mock sdk in production build. You can include more options like minifying, obfuscating into the mix (little advance topic)</li></ol><h3>Coding Time</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/561/1*4rGfh8xOaOvMrWlvGtCKQw.png" /><figcaption>This is what we are gonna implement</figcaption></figure><p>First you need to install node dependencies. Goto the source code folder using terminal/ command line and run npm install. If you don’t have npm (node package manager) installed, refer this link to do so <a href="https://www.npmjs.com/get-npm">https://www.npmjs.com/get-npm</a></p><p>Once installed run npm run mock, this will start dev server and serve the game. Whenever you make any modification stop and run above command again (until I fix live reload)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/866/1*gx_FefCr9FHH_GNC5ItBwA.png" /></figure><p>When you run the mock server and open the URL in browser, you will see this dialog. It’s from the mock SDK informing you game loading has completed. At this point, it will call startGame javascript function in our code</p><p>At this point we hide our splash, and get users info. Getting users info other than name is not really needed for this game. Refer below code</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x5omK4J-j2vHlN6jw94Tbw.png" /></figure><p>We also show “Play” button. When play button is clicked showMyAnimal function is invoked.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*622sG3ZUDnNnyyaxKCR1sg.png" /></figure><p>Above function simply displays a random animal image along with the name.</p><p>Run npm run mock and check whether our application works as expected. Here’s a sample video of it.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F32b8EypQrEM%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D32b8EypQrEM&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F32b8EypQrEM%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/2b30a101a73d877b34ed9afa06ab809b/href">https://medium.com/media/2b30a101a73d877b34ed9afa06ab809b/href</a></iframe><h3>Setup facebook</h3><p>so far it’s been basic coding, now we have to configure some stuff on facebook.</p><p>Goto <a href="https://developers.facebook.com/apps/">https://developers.facebook.com/apps/</a>, you might have to verify your phone no. Click on “Create App” to create a new app (don’t use an existing one with android/ios/web enabled). Select the 3rd option(For everything else) in the given dialog and provide a name for the app when asked. I’ll use “AnimalMe” as name. Once done you will see below screen.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fFbT_W8YIIUDGR2wv2JLPA.png" /></figure><p>Click on “Instant Games” =&gt; “Set Up” and confirm the acceptance conditions.</p><p>Now we can try our app for real with facebook. Note the “App ID” from top bar, open the config.json file in our code folder and paste it at “PASTE_APP_ID_HERE”. Refer below screenshot,</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AO7VI69Ft6NtGzpGJEC8Dg.png" /></figure><p>Now run npm run dist and you should see something similar to below,</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F4z-R1FIJeFE%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D4z-R1FIJeFE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F4z-R1FIJeFE%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/5fe4b42e878366b98a5271a6d8579358/href">https://medium.com/media/5fe4b42e878366b98a5271a6d8579358/href</a></iframe><p>It should display your account information. If it works upto this point, it’s ready to be uploaded. Run the command npm run archive. This will create a zip file under the “archives” directory.</p><p>Now goto “Web Hosting” section, and click on “Upload Version” as shown below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LtnXnXtgeNBVLVpoY4wGaw.png" /></figure><p>Then select the latest zip file on the archives folder and upload. Once done it will appear like this.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OtpkJvRa-p1fGDIMz5cX_g.png" /></figure><p>Now you can mouse over the “Status” area and push the build to production.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eDlxyvZbRqn8MNt-C3TKdQ.png" /></figure><p>Once done visit the link “https://fb.gg/play/APP_ID_HERE” to try your game. Remember to replace APP_ID_HERE with your app id.</p><p>You are basically done with the basic process. However now you need to enable the live mode. To do that fill the required app details and provide necessary icons/ banners. Once complete flip the switch in top bar,</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZnsWkeFeYp3UKdCstKOBPg.png" /><figcaption>Enable Production Mode</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vf1J8KuqmF7QIKyx7UeaWw.png" /><figcaption>Fill App Information</figcaption></figure><p>Entire workflow can be reviewed from below video. Good Luck!</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fg3_uW4yMXS8%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dg3_uW4yMXS8&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fg3_uW4yMXS8%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/f68394fc94b642a537fab408575eca21/href">https://medium.com/media/f68394fc94b642a537fab408575eca21/href</a></iframe><p>Github Repo: <a href="https://github.com/databoxtech/article_fb_instant_game">https://github.com/databoxtech/article_fb_instant_game</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f9460e898867" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databox-technologies/create-a-facebook-game-f9460e898867">Create a Facebook Game</a> was originally published in <a href="https://medium.com/databox-technologies">Databox Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Free Services to get your mobile/ web project started]]></title>
            <link>https://medium.com/databox-technologies/free-services-to-get-your-mobile-web-project-started-946bc52c4de5?source=rss----131c55e9397a---4</link>
            <guid isPermaLink="false">https://medium.com/p/946bc52c4de5</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[tech]]></category>
            <dc:creator><![CDATA[Prabath Perera]]></dc:creator>
            <pubDate>Tue, 08 Sep 2020 06:16:09 GMT</pubDate>
            <atom:updated>2020-09-08T04:41:32.017Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zPIEL9JcnCeHHW8bY-hslg.jpeg" /></figure><p>Most small tech entrepreneurs struggle with different costs related to putting out an online product. However there are plenty of services out there which can be utilised as you are starting up. Some tools can even be used long term as well.</p><p>Trying to outlines most of the free stuff I’ve utilised to get projects started and during POC. Information on how to use these can be easily found on the web.</p><ol><li>AWS: AWS free tier runs for one year. Plenty of time to start earning from your solution. I have deployed over dozens of web applications in AWS Free tier VMs &amp; RDS for different clients. Apart from VM they have many other products with free usage up to one year such as RDS (database as a service). Consider these when you are designing your solution technically. <em>Google Cloud and Azure also comes with a fairly good free tier. Better to explore this as well.</em></li><li>Google Firebase: Firebase also has a very attractive free tier. It’s a usage bound modal. Unless you grow beyond a point you can use it for free. Firebase offers hosting, real-time offline database, push notifications, analytics, a-b testing and many more under their free tier. Highly recommend for mobile apps</li><li>Google API: Most of google apis comes with a fairly large free usage tier. There are ton of api services including famous location &amp; maps apis. Refer <a href="https://developers.google.com/apis-explorer">https://developers.google.com/apis-explorer</a></li><li>OneSignal: Free push notification service with fairly good admin interface. Under free plan you get unlimited mobile app push notifications and 60k web push notifications.</li><li>Adobe XD: I found this extremely useful when designing UI/UX. As it can link UIs and let you experience clicks and page transitions (easy to setup) its a very useful tool to have. Usually I ask my designer to use it to do the UI design (even when I’m outsourcing). There are other similar solutions out there.</li><li>Trello: Trello is a card based board to organise tasks. I use it to document, break things into tasks, track developments, report bugs. Even the free version is highly customisable. If you are dealing with a third party developer, better use this instead of simple excel sheets to track progress.</li><li>Bitbucket/ Github: To manage your source code efficiently. If you are a developer, source code management is a must. Git is the undoubted winner for source code management at the moment.</li><li>Azure DevOps: If you have a in house devs, this is a great toolkit. Which comes with unlimited free repos, simple boards for task organising, 20,000 free build minutes (CI/CD). Don’t ignore CI/CD as it can save lots of developer hours going into builds. Also it’s great to have frequent builds to see how things are progressing</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=946bc52c4de5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databox-technologies/free-services-to-get-your-mobile-web-project-started-946bc52c4de5">Free Services to get your mobile/ web project started</a> was originally published in <a href="https://medium.com/databox-technologies">Databox Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Understanding the Project Objective]]></title>
            <link>https://medium.com/databox-technologies/understanding-the-project-objective-f967697f55fe?source=rss----131c55e9397a---4</link>
            <guid isPermaLink="false">https://medium.com/p/f967697f55fe</guid>
            <category><![CDATA[business-analysis]]></category>
            <category><![CDATA[product-ownership]]></category>
            <category><![CDATA[product-delivery]]></category>
            <category><![CDATA[best-practices]]></category>
            <category><![CDATA[stakeholder-management]]></category>
            <dc:creator><![CDATA[Thilina Somasiri]]></dc:creator>
            <pubDate>Thu, 02 Apr 2020 10:18:57 GMT</pubDate>
            <atom:updated>2020-04-02T17:58:39.169Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*m_xbmxQekxenyd3XlWBvLA.jpeg" /><figcaption><a href="https://www.freepik.com/free-photos-vectors/arrow">Arrow vector created by rawpixel.com — www.freepik.com</a></figcaption></figure><p>This is a very common issue which everyone have faced at-least once in their career as <strong>a Business Analyst </strong>or<strong> a Product Owner</strong>. This also may have caused the responsible people for a project be really embarrassed and cost more than the project budget and caused extended timelines. So, how can we successfully identify a business or a project objective? Prior to answering that, we will see how it can go wrong.</p><p>Let’s say you are assigned to a new project and you get the project details from the sales team or the management of the company which you are working for. Now this will typically be an email or a phone call which can be summarized as below.</p><blockquote>“Company ABC wants a new system with these features and they want it completed by this date.”</blockquote><p>Then as a Business Analyst, you will be getting some more details from the sales team, then immediately start setting up meetings with the stakeholders, interviewing different users, understanding project scope, gathering and defining requirements and documenting them.</p><p>You will be working back and fourth with users and the development team to make sure you have captured all the requirements and to work on the design.</p><p>Once everything is finalized and accepted, the development will get started. However, depending on the Software Development Life Cycle methodology which you are practicing within the company, you may have intermediate deliveries, demos and whatnot.</p><p>Now you’re ready to complete the project. Let’s say you are doing a demo to the stakeholders and going through the features and what your team has developed.</p><p>During the demo, the stakeholders will go through the system with you. They will probably be impressed with what you have done. However, towards the end, you will get a question like “Everything looks good. But, how does the system address this certain issue we have for years now?” from a key stakeholder.</p><p>Immediately you will know that this is a new requirement and your response will probably be that this was not in the requirements which you have identified earlier. Then the stakeholder will say,</p><blockquote>“Well, that was the main reason why we needed this system, to solve this certain issue”.</blockquote><p>You now know this isn’t going to end well.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CgvmMKQkww6_okouw0k62w.jpeg" /><figcaption><a href="https://www.freepik.com/free-photos-vectors/background">Background vector created by rawpixel.com — www.freepik.com</a></figcaption></figure><p>Because of this, you will not be able to complete the project then and all the time and effort you and the development team put on the project might be a waste. This will have many consequences.</p><p>So, what do you need to do? Before going right in to the requirements, you need to understand the objective of the project or why there is even a project like this. Once you understand that, your life will be much easier. This needs to be done at the very beginning.</p><p>To do that, you need to know about the following of the project.</p><ol><li>The purpose</li><li>The objectives</li><li>The method of determining the success</li></ol><h3><strong>The purpose</strong></h3><p>You need to know the purpose of the project. To get to know the purpose, you need to go back to the project details you got at the beginning.</p><blockquote>“Company ABC wants a new system with these features and they want it completed by this date.”</blockquote><p>You must ask <strong>WHY </strong>and understand why they need such a system before exploring the features. The firsthand information from the client will certainly help. An example can be as follows.</p><blockquote>Company ABC is a small local business that provides printing solutions to the nearby area. They have been in the business for last two years and have a marginally profitable business going on. They are catering to about 25 customers daily. They noticed that the customers usually wait inside the shop premises for a prolonged periods of time to get the job done due to a limitation presented in the internal system, which allows only one computer to perform a specific function, and this is leading to customer dissatisfaction.</blockquote><h3>The objectives</h3><p>Now need to understand the objectives of the project. You must break-down the utmost critical issues/ components which are trying to be solved here. Let’s see an example.</p><blockquote>The implemented system must reduce the time that a customer spends inside the shop premises. By doing this, it is expected to see an increase in customer satisfaction, the number of daily customers and profit.</blockquote><h3>The method of determining the success</h3><p>You must know how the success is seen after implementing the system. If not, you don’t know what you are looking for. Increase in number of daily customers can be any number.</p><blockquote>Once the system is implemented, Company ABC must accommodate 50 customers daily, doubling the amount which can be accommodated now.</blockquote><p>Above statement clearly defines how the increment in number should be. If you don’t know how it is determined, you can’t design, plan and implement a system effectively and it will ultimately leads to failure.</p><p>Knowing the answers to these questions will prevent time and money from going to waste, while probably saving you from embarrassment. Make sure you know and understand the project objective before you start gathering requirements. There will probably be lots of other requirements attached to the project but your <strong>priority should be to solve the issue that the project is supposed to solve.</strong></p><p>Hope this helps you and good luck as a Business Analyst or a Product Owner!</p><p>Don’t forget to give a clap if you like this article.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f967697f55fe" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databox-technologies/understanding-the-project-objective-f967697f55fe">Understanding the Project Objective</a> was originally published in <a href="https://medium.com/databox-technologies">Databox Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Protected HLS using ffmpeg and openssl]]></title>
            <link>https://medium.com/databox-technologies/protected-hls-using-ffmpeg-and-openssl-953f8d0de7b8?source=rss----131c55e9397a---4</link>
            <guid isPermaLink="false">https://medium.com/p/953f8d0de7b8</guid>
            <category><![CDATA[streaming]]></category>
            <category><![CDATA[hls]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[ffmpeg]]></category>
            <category><![CDATA[encryption]]></category>
            <dc:creator><![CDATA[Prabath Perera]]></dc:creator>
            <pubDate>Thu, 02 Apr 2020 09:48:38 GMT</pubDate>
            <atom:updated>2020-04-02T09:48:25.529Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/560/0*Hm4LrrDf0_pm4r6E.jpg" /></figure><p>This will walk you through creating Protected/ Encrypted hls stream using ffmpeg and openssl.</p><p><a href="https://www.google.lk/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=0CC0QFjAA&amp;url=http%3A%2F%2Fwww.ffmpeg.org%2F&amp;ei=6Pw7U8uaNYmSiAfCg4CIAg&amp;usg=AFQjCNESZXezwXQswop2kfslQt7yWuz87w&amp;sig2=62QT0ZJ7sA8KNWJfgnqacw&amp;bvm=bv.63934634,d.aGc"><strong>ffmpeg</strong></a> is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec — the leading audio/video codec library.</p><p><a href="https://www.google.lk/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=0CDsQFjAA&amp;url=https%3A%2F%2Fwww.openssl.org%2F&amp;ei=9vw7U73XKqjriAfM4oGICQ&amp;usg=AFQjCNHWDla7BkVr7NW27QiIalWAjPQ6AQ&amp;sig2=6Yh-PFNqYLE2wtytvhQzMA&amp;bvm=bv.63934634,d.aGc"><strong>openssl</strong></a><strong> : </strong>The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and Open Source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library.</p><p>Protected HLS : is encrypted apple hls. It’s not a complete DRM solution. In this method segment files are encrypted using AES-128 bit</p><p>Im using a ubuntu 13.10 box.</p><h3>Step 1 : Install openssl and ffmpeg</h3><blockquote><em>apt-get install openssl ffmpeg</em></blockquote><h3>Step 2 : segment your video file for hls playback.</h3><blockquote><em>ffmpeg -i $input -vcodec libx264 -acodec libvo_aacenc -b:v 128k -flags -global_header -map 0:0 -map 0:1 -f segment -segment_time 4 -segment_list_size 0 -segment_list list.m3u8 -segment_format mpegts stream%d.ts</em></blockquote><p><em>Here $input is input video file. This command will create a list of stream</em><strong><em>xx</em></strong><em>.ts files and list.m3u8 file. You can open this m3u8 file in a hls supported player or on a android/ios devices through a web service to confirm segments are working. (Note: segments should be on the same folder as m3u8 file)</em></p><h3>Step 3 : encrypt the segments. Create following bash script in the same folder and execute it to encrypt segments.</h3><blockquote>#!/bin/bash</blockquote><blockquote>keyFile=”video.key”<br>openssl rand 16 &gt; $keyFile<br>encryptionKey=`cat $keyFile | hexdump -e ’16/1 “%02x”‘`</blockquote><blockquote>splitFilePrefix=”stream”<br>encryptedSplitFilePrefix=”enc/${splitFilePrefix}”</blockquote><blockquote>numberOfTsFiles=`ls ${splitFilePrefix}*.ts | wc -l`</blockquote><blockquote>for (( i=1; i&lt;$numberOfTsFiles; i++ ))<br>do<br>initializationVector=`printf ‘%032x’ $i`<br>openssl aes-128-cbc -e -in ${splitFilePrefix}$i.ts -out ${encryptedSplitFilePrefix}$i.ts -nosalt -iv $initializationVector -K $encryptionKey</blockquote><blockquote>done</blockquote><p>This will create a ‘enc’ folder and create encrypted segments in that folder.</p><h3>Step 4 : move/copy video.key and list.m3u8 to enc folder and modify the list.m3u8 as follow (use gedit or notepad),</h3><blockquote>#EXT-X-MEDIA-SEQUENCE:0<br>#EXT-X-ALLOW-CACHE:YES<br><strong>#EXT-X-KEY:METHOD=AES-128,URI=”video.key”</strong><br>#EXT-X-TARGETDURATION:9</blockquote><p>Just insert the bold line and leave the rest as it is.</p><p>All done, now simply open the m3u8 file using a supported player or iphone/android device. I tested this successfully on Android 4.3+ and iOS 9+. Good Luck.</p><p>Feel free to ask any questions you have</p><p><em>Originally published at </em><a href="https://dryize.wordpress.com/category/media-streaming/hls/"><em>dryize.wordpress.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=953f8d0de7b8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databox-technologies/protected-hls-using-ffmpeg-and-openssl-953f8d0de7b8">Protected HLS using ffmpeg and openssl</a> was originally published in <a href="https://medium.com/databox-technologies">Databox Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Things to remember when building a new software product]]></title>
            <link>https://medium.com/databox-technologies/things-to-remember-when-building-a-new-software-product-7d65c7d38dac?source=rss----131c55e9397a---4</link>
            <guid isPermaLink="false">https://medium.com/p/7d65c7d38dac</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[product]]></category>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[enterpreneurship]]></category>
            <dc:creator><![CDATA[Prabath Perera]]></dc:creator>
            <pubDate>Thu, 02 Apr 2020 09:48:08 GMT</pubDate>
            <atom:updated>2020-01-18T20:24:08.462Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*85aUU5W3Mpg1y0-ty-9xPQ.jpeg" /></figure><p>First of all, this article is intended for those who are not really developers, but want to start off a new software product.</p><p>Let’s assume you have a super awesome idea, that you are willing to invest and build. Which hopefully will make you millions one day. So how would you start building it.</p><ul><li>Where would you start?</li><li>How much will you spend on it?</li><li>What technologies to use?</li></ul><p>What I’m about to explain applies to solutions that’s not gonna scale to millions of user within 1 or 2 months. Well being optimistic is good, but do you wanna spend tens of thousands of valuable funds targeting a usage you are gonna get in months. When you can spend those money on other important stuff, until that level of scalability is required.</p><p><strong>Rule 1:</strong> Build a solution that’s sufficient for now, but scalable to a certain extent. Do not over target scalability. Because scalability is not free. It will cost you a-lot more to build and maintain. Start simple which can cater your target for initial <strong>x months</strong>. But do discuss with your developer and have provision. You can always spend more and re-engineer it to cater millions when you are earning/ getting enough funds.</p><p><strong>Rule 2: </strong>Keep things simple. Don’t over complicate with different or complex technologies. For users your solution just need to work. They don’t worry about whether it’s java or php or javascript. Pick technology stack that works, easy to implement and maintain. Don’t forget in early days you will be making lots of changes based on feedback, so be ready to adopt fast.</p><p><strong>Rule 3: </strong>Keep maintenance free &amp; cheap as possible. Solution is not everything. You need your funds to do marketing, sales and brand awareness. So make sure to utilize what’s free out there as much as possible (without losing above 1 &amp; 2). Ex:</p><ul><li>AWS Free tier (EC2, RDS etc)</li><li>Azure Bizpark</li><li>Google Free usage (firebase hosting/ database)</li></ul><p>All above are fairly enough to keep a decent solution running with almost no cost, until you scale to serve more users. Since all above are cloud, you can always scale as you need.</p><p>Over the years I have helped build solutions which ran 3–12months maintenance cost free, until they were getting enough usage to start paying actually. Can you imagine the relief it gives for a startup with limited funds.</p><p>So this is what I have learned and what I give out as my first advice when anybody talks to me about starting/ developing a product.</p><p>Always open for discussion, leave your comments in the comment section.</p><p>Good Luck to all entrepreneurs!!!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7d65c7d38dac" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databox-technologies/things-to-remember-when-building-a-new-software-product-7d65c7d38dac">Things to remember when building a new software product</a> was originally published in <a href="https://medium.com/databox-technologies">Databox Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Web socket authentication with nodejs, socket.io, Angular]]></title>
            <link>https://medium.com/databox-technologies/web-socket-authentication-with-nodejs-socket-io-angular-b3c25e0862c6?source=rss----131c55e9397a---4</link>
            <guid isPermaLink="false">https://medium.com/p/b3c25e0862c6</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[socketio]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[authentication]]></category>
            <category><![CDATA[ionic]]></category>
            <dc:creator><![CDATA[Prabath Perera]]></dc:creator>
            <pubDate>Thu, 02 Apr 2020 09:47:59 GMT</pubDate>
            <atom:updated>2020-03-27T14:05:04.412Z</atom:updated>
            <content:encoded><![CDATA[<h3>Web socket authentication with nodejs, socket.io &amp; Angular</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SCxRd2x2DqZjb0KYHPPU4Q.jpeg" /><figcaption>Background vector created by freepik — <a href="http://www.freepik.com">www.freepik.com</a></figcaption></figure><p>Web socket, nodejs and socket.io are 3 of top topics/ buzz words. So you’d expect lots of articles, how to’s and guides on this. Surprisingly it seems not. I’m new to all three and wanted them for a project. So as usual to figure out best practices and common patterns I started searching. Apart from few hint in the direction articles and stuff I barely found anything.</p><p>So I’ve figured out things on my own and converged on two best possible methods per my opinion.</p><ol><li>Authenticate on connecting using query param</li><li>Authenticate after connecting</li></ol><p>Both have pros and cons of their own. Will get to that later after doing some perf as well.</p><p>I’ll walkthrough both methods using a angular 9 client as well. I assume you have basic knowledge on all these topics, if not you can refer the complete github code for more clarity.</p><p>I’m using Typescript for nodejs application as well.</p><h3>1. Authenticate on connecting using query param</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/641/1*fLhEpQdWUig4TevPs_ZiWw.png" /></figure><p>Below is the code snippet (ChatService)</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/374eb495c70133a28fe432d007d25ecc/href">https://medium.com/media/374eb495c70133a28fe432d007d25ecc/href</a></iframe><p><strong>Line 5:</strong> I have a separate auth service which does the temporary ws token validation. After my application authenticates, Its create short lived (&lt;5min)access token for web socket authentication. For additional security you can bind IP address to the token also. This token is used in the query param when initiating web socket connection.</p><p>I use below code snippet to initiate web socket connection on Angular end.</p><blockquote>const socket: Socket= new Socket({ url: `http://localhost:3000?token=${tokenData.token}`, options: {} });</blockquote><p><strong>Line 9/10: </strong>Inside the constructor I setup onConnection and onDisconnect handlers. onConnection is where the magic happens.</p><p><strong>Line 15–23: </strong>Inside on connection if socket.conn.request._query[‘token’] is specified, user is authenticated using token and start listening to socket messages.</p><p><strong>Line 25:</strong> If token is not specified, connection is immediately terminated</p><p><strong>Line 32–35:</strong> This function setup message listener for specific socket and stores the connection in a dictionary for later communications.</p><p>That’s it. It’s simple and straightforward. However it’s bad practice and insecure to use security tokens in the URL. They are logged/ monitored by many intermediates. So avoid them much as possible.</p><p>Sending the token in the header is a option. But per my knowledge headers only works if polling as transport (<a href="https://socket.io/docs/client-api/#With-extraHeaders">https://socket.io/docs/client-api/#With-extraHeaders</a>). I don’t want to restrict myself like that. Do you?</p><h3>2. Authenticate after connecting</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/801/1*Xglclp51TuTiBeku6sBkcg.png" /></figure><p>This is the interesting approach. What we do here is,</p><ol><li>When client connects, we add it to a pending queue and schedule a auth grace period. Client should authenticate within this grace period. However until authenticate server will neither listen or response to any other events.</li><li>Once connection is established, client sends an auth request with the token. Server then validates the token and start listening to socket events (messages).</li><li>If client fails to authenticate within the grace period server terminates the connection.</li></ol><p>Refer below code snippet</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/1da3ac34f911ec4c7cf29d5bf20ef0a7/href">https://medium.com/media/1da3ac34f911ec4c7cf29d5bf20ef0a7/href</a></iframe><p>The code is mostly self explanatory. Key to notice,</p><p>Line 21–27: Setting grace period for auth by utilizing setTimeout</p><p>Line 30: Listen for ‘auth’ event</p><p>Line 46–55: Authenticate once user submits a token.</p><p>Line 36–39: Function to start listening to client event</p><p>Also notice that Im using 2 dictionaries to store authorized sockets and pending sockets. These are not essential. So shape per your requirement.</p><p>You can find entire code for this discussion along with below functionalities from the git hub.</p><ul><li>Typescript nodejs project (it was actually bit challenging to set this off even with the template I used)</li><li>Google auth configured Angular/ Ionic</li><li>JWT Token for http authentication</li></ul><p><a href="https://github.com/dryize/nodejs-socket.io-angular-auth">dryize/nodejs-socket.io-angular-auth</a></p><p>Finally, Im just getting into writing articles and I expect to publish the journey of learning as I learn different technologies. So please leave any pointers if there’s nay.</p><p>Don’t forget to clap if you like the article. Keeps me motivated. 🙂</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b3c25e0862c6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databox-technologies/web-socket-authentication-with-nodejs-socket-io-angular-b3c25e0862c6">Web socket authentication with nodejs, socket.io, Angular</a> was originally published in <a href="https://medium.com/databox-technologies">Databox Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>