IndyWatch Education Feed Archiver

Go Back:30 Days | 7 Days | 2 Days | 1 Day

IndyWatch Education Feed Today.

Go Forward:1 Day | 2 Days | 7 Days | 30 Days

IndyWatch Education Feed was generated at Community Resources IndyWatch.

Wednesday, 19 September

01:04

ELI5 Full Stack Basics: breakthrough with Django & EmberJS "IndyWatch Feed Education"

Welcome to ELI5 Full Stack: Breakthrough with Django & EmberJS. This is an introduction to full stack development for everyone, especially beginners. Well go step-by-step through the development of a basic web application. A library of sorts. Together well build a back-end to store data and a RESTful API to manage it. Then well construct a front-end user interface for users to view, add, edit, and delete the data.

This isnt meant to be a deep dive into either Django or EmberJS. I dont want us to get bogged down with too much complexity. Rather its purpose is to show the critical elements of basic full stack development. How to stitch together the back end and front end into a working application. Ill go into detail about the software, frameworks, and tools used in the process. Every terminal command run and line of code in the final application is present in this tutorial.

Ive kept each section short and to the point so that no ones head explodes. There are also indicators to mark points for reflection so you can go back and look at what weve done and save state. If you dont know what something means click through to the linked articles which will explain in detail. Remember, this is as an introduction to everyone including beginners. If you dont need the hand holding push on through to the sections relevant to you.

If youre a beginner, I that suggest you write every line of code and run each terminal command yourself. Dont copy and paste. It wont sink in. Take your time and think about what youre doing. This is a critical trait of an effective and self-sufficient programmer. You will develop this over time if you write your own code and think about what youre writing. If you mess up (look at my commit history, I definitely did) dont sweat it. Go back. This isnt a race. Youll be fine if you take your time.

Sometimes I get whiplash

Note: I developed this tutorial on a MacBook Pro running macOS High Sierra (10.3.6). Im using iTerm2 for the terminal and Sublime Text 3 as my text editor. All testing uses the Chrome browser and its built-in tools. The actual code shouldnt have any differences. You can download the final project files from the Github repository.

Table of Contents

Section 1: The Whats, How...

00:08

How to make input validation simple and clean in your Express.js app "IndyWatch Feed Education"

This tutorial requires prior knowledge of using the expressjs framework

Why do we need server-side validation?

  • Your client side validation is not enough and it may be subverted
  • More prone to Man in middle attacks, and the server should never trust the client-side
  • A user can turn off client-side JavaScript validation and manipulate the data

If you have been building web applications using an Express framework or any other Node.js framework, validation plays a crucial role in any web app which requires you to validate the request body param query.

Writing your own middleware function can be cumbersome if

  • you want to move fast while maintaining the quality of code or
  • you want to avoid using if (req.body.head) or if (req.params.isCool) in your main controller function where you define business logic

In this tutorial, youll learn how to validate input in an Express.js app using an open source and popular module called express-validator.

Introduction to express-validator

The definition on Github says:

express-validator is a set of express.js middlewares that wraps validator.js validator and sanitizer functions.

The module implements five important APIs:

  • Check API
  • Filter API
  • Sanitization chain API
  • Validation chain API
  • Validation Result API

Let's take a look at a basic user route without any validation module to create a user: /route/user.js

/**
* @api {post} /api/user Create user
* @apiName Create new user
* @apiPermission admin
* @apiGroup User
*
* @apiParam  {String} [userName] username
* @apiParam  {String} [email] Email
* @apiParam  {String} [phone] Phone number
* @apiParam  {String} [status] Status
*
* @apiSuccess (200) {Object} mixed `User` object
*/
router.post('/', userController.createUser)

Now in user con...

Go Back:30 Days | 7 Days | 2 Days | 1 Day

IndyWatch Education Feed Today.

Go Forward:1 Day | 2 Days | 7 Days | 30 Days

Tuesday, 18 September

23:57

Here are my favorite hacks for creating production level apps with React Native "IndyWatch Feed Education"

Trust me when I say this, React Native is hard. And its not the usual hard of what we think hard is. It is hard in terms of working with in general. In this blog post, Ill go over some tips and tricks and eventually the best practices Ive deployed for one of my apps coded in React Native: codedamn Android (or codedamn iOS).

Hi! My name is Mehul. Im a student, youtuber, fullstack developer, app developer and can deploy servers as well. Recently, I decided to launch a developer focused platform (you guessed it right, codedamn). To get it off the ground real quick on mobile devices, I went with React Native. Partly because Im not a huge fan of Swift and Xcode for now. But little did I know that Id be interacting more with native code than I thought. Anyway, lets begin with the information I want to mention.

Note: At the time of writing this article, React Native was at v0.57-rc4. Check if some of the things are already available/fixed in recent React Native version!

#0: Know what youre doing

Realize that the React Native world is a lonely world right now. You might get yourself into a problem which no one has faced till now (or youre not able to google it properly). Always keep VCS up with your native project and regularly commit your changes (all the cool kids call it CI). It helps you to revert back to the last working copy pretty quickly without losing a lot of code.

It is equally important to know what youre doing. You might end up breaking your project completely if youre unaware. If you did not use a VCS, well then you are in trouble.

#1: Upgrade your JSC

JSC (JavaScriptCore) is a webkit based JavaScript engine used by React Native on Android platforms to evaluate your JavaScript code. Dont tell me you thought that React Native converts JavaScript into native code. It doesnt! ;-)

I learned it the hard way after wasting a day of debugging. There was an unknown random fatal error in between app execution. After studying the logs for quite some time, I came to a conclusion that the app was crashing somewhere where [Symbol.iterator] is...

23:49

How to write a super fast link shortener with Elixir, Phoenix, and Mnesia "IndyWatch Feed Education"

This is our stage, though behind the scenes is where the real action is.

Let's start this months tutorial with two statements that are going to get me in trouble:

  1. Elixir is the most productive language out there.
  2. Bit.ly charges way much for their paid plan

Elixir, the Phoenix framework, and the Erlang VM allows us to make production ready systems fast, easily, and with very few moving parts. At this point, you can see where were going with this. Lets use what comes out of the box with Elixir to create a link shortener and prevent a $500 monthly bill.

Lets dive in!

Initial Setup

Before you start

Please make sure you have the following:

  1. Elixir
  2. Phoenix

Create a new Phoenix Project

The first thing to do as always is to have Phoenix create the skeleton of the project. For this demo, we won't have a frontend so we can tell the initializer to leave those out.

In your terminal type:

mix phx.new shorten_api --no-html --no-brunch

Update your dependencies

Next, we're going to add a few dependencies to mix.exs. Go ahead and update the deps/0 function in that file to look like this:

https://medium.com/media/6da17270cb4f7c03002a353f0a1b37b5/href

Logic!

Ok basic set up out of the way. That means were into setting up the logic that will:

  1. Allow us to save URLs
  2. Reference these URLs by a unique HashId (ex. abc123)
  3. Navigate to /abc123 and it redirects to the URL that it references

First up, creating a way to store these links.

Creating a way to store these links

Let's use Phoenixs built-in generators to do this for us. In your terminal run:

mix phx.gen.json Links Link links hash:string:unique url:string:unique

This will create the

  1. Links context
  2. Link model
  3. Link controller
  4. Database migration

Thats honestly the end of that step. It will ask you to put a few lines in your router.ex file but for now, you can skip that if you want as we will touch on it later. Let's move onto how we can modify wha...

23:42

The Blessing of Rejection (or Growing Past the No) "IndyWatch Feed Education"

traffic light in red by Erwan Hesry on Unsplash

I feel almost guilty to admit that its taken me just shy of 3 weeks to write this post. If youve followed my developer journey so far, youve read about my coding challenges and triumphs, the safety Ive felt from committed, compassionate mentorship, and the lessons Ive learned from teamwork.

All those stories emanated from the secure cocoon of being a coding bootcamper. Since graduating, Ive now begun to experience the big wide world of job hunting, where Im gingerly testing my developer wings barely dry from my 6-month Firehose Project tenure.

Ive wrestled with whether and how to continue documenting my journey. A part of me wishes that my glass-slipper-fits youre hired! moment would happen almost immediately, so that I could write a glowing story of how I went from emailing my resume out, to sitting at my new work desk in record time and with minimal effort. With an embarrassed smile, I realize how validated and authentic such an outcome would make me feel.

I juggle phone screens, lengthy email threads, personal dev projects, open-source contributions, algorithm practice and further education, determined to present my best self to that hiring manager appointed to extend my first pro dev opportunity.

man and woman doing handshake by rawpixel on Unsplash

I thought that moment had arrived when I had my first onsite interview about 2 weeks ago. According to the hiring manager, I did better on the first-round coding exercise than some senior applicantsa revelation that sent warm ripples of pride through my being.

The next round was an hour-long conversation with one of the companys founders, during which I expressed genuine interest in the companys purpose and goals, and they further elaborated on company culture and priorities.

When I received the email inviting me to the final-round, 3-hour onsite interview, my stomach twisted into knots reinforced by nerves a-haywire.

What will they ask me? How intense will the white-boarding session be? Will I freeze? Will I crash?

...

23:35

How to understand any programming task "IndyWatch Feed Education"

The day has finally arrived. Is it your first day on your job, or have you been doing this for ten years? It doesnt matter. We all eventually find ourselves with a task that we simply do not understand.

So what should you do? Should you just get started and hope it works? Should you immediately tell your boss that you cant do this because you dont understand?

I imagine that you know the answer is neither!

In programming, as with any other profession, I have found that its almost impossible to go through a week (and sometimes not even a day) without finding some problem that I dont understand.

But dont fret! I have great news. Not only can you fix this problem, but it can also be a good thing.

It means that in some way you are expanding your skill and knowledge beyond what youve done and known before.

In the next few paragraphs Im going to detail how you can bridge the gap between the requirements youve been handed, and the knowledge you need to complete the task youve been given.

About requirements

You may have noticed that I used the word requirements. That word might have certain connotations depending on where you work.

In my experience, big companies love requirements and small companies sometimes dont do requirements. I think this is perfectly fine for our purposes here.

Thats because in the end all were doing as software engineers is solving problems.

You could receive an extensive one hundred page report on how to solve that problem (I once had an hour long meeting about the text for a button). Or maybe your CEO will meander over to your desk and casually ask if you can solve the problem by Friday.

Either wayyouve been given a task, and you need to be sure you fully understand that problem in order to address it correctly!

About the steps

Not all of the steps given below are needed for every problem. Only the hardest problems to understand may require you to carefully proceed through all the steps that will be discussed in this article.

Many of the questions may not be answerable through the requirements that youve been given, or through your personal experience alone.

You may have to ask other developers, your team lead, product owner, business analyst, or even your grandma. Maybe youll have to ask all of them by the time youre done!

Thats fine though. It means youll be taking scattered knowledge and condensing it to reside in one place....

17:14

Computer Science: A Career as Broad as Your Imagination "IndyWatch Feed Education"

U.S News & World Report has named Arizona State University the most innovative school in America for three years in a row. Now on Coursera, their Master of Computer Science pushes the envelope in computing and covers advanced topics like AI, cybersecurity, blockchain and big data. Read on to discover how a CS degree can broaden your career opportunities, written by the experts at ASU.  

The computer science field continues to expand its demand for skilled employees to fill positions in multiple specializations, with increasing salaries for educated employees.

Arizona State University Professor Andrea Richa works in a field that is only bordered by the reaches of her imagination. Through the use of computer systems, Richas imagination is running wild thinking about the possible application of nano sensor systems that could do everything from stop blood flow out of the body in the case of an emergency, to curing diseases. Computer science continues to expand at a rapid rate into uncharted territory, making computer science careers and research and exciting place to be, Richa said.

My passion is an ever-evolving area, she said. If you think about it, computation is everywhere. Even without a computer were always computing and analyzing everything we do, even when were going to the grocery store and making a list and minimizing the steps we have to take in the grocery store.

Where computer science was once reserved for the few bifocaled, pocket-protector wearing students in class, now computer science skills are ubiquitous across all markets from sales to the sciences. Specialized skills are explored in the ASU Online Master of Computer Science Degree Program, where students can prepare for nearly any career involving computer science....

16:54

How to use the position property in CSS to align elements "IndyWatch Feed Education"

Photo by Sai Kiran Anagani on Unsplash

Positioning elements in web development isnt as easy as it seems. Things can get complicated as more elements come to the page. Therefore, it is essential to know how to use CSS for aligning elements. It will also save our time while coding.

There are different ways/methods for positioning elements. Using Bootstrap is a good way, for example, but not all projects use Bootstrap. So I will explain one of the ways of aligning elements with pure CSS: the position property.

CSS Position & Helper Properties

There are 5 main values of CSS Positions:

position: static | relative | absolute | fixed | sticky

and properties for setting the coordinates of an element (I call them helper properties):

top | right | bottom | left AND z-index

Note: Helper properties dont work without a declared position, or with position: static.

What is this z-index?

We have height and width (x, y) as 2 dimensions. Z is the 3rd dimension. An element comes in front of other elements as its z-index value increases. Z-index also doesnt work with position: static or without a declared position.

Elements are ordered from back to front, as their z-index increase

Now lets explain the CSS: position values in detail.

1. Static

position: static is the default value. Whether we declare it or not, elements are positioned in normal order on the webpage. Lets give an example:

First, we define our HTML structure:




Then, we create 2 boxes and define their positions:

.box-orange {          // without any position declaration
background: orange;
height: 100px;
width: 100px;
}
.box-blue {
background: lightskyblue;
height: 100px;
width: 100px;
position: static; // Declared as static
}
same result with & without...

16:36

The Hitchhikers Guide to React Router v4: [match, location, history] your best friends! "IndyWatch Feed Education"

assorted texts wall signages by Bruno Martins on Unsplash

Hey! Welcome to the Hitchhikers Guide to React Router v4, Part II!

Now that weve set the ball rolling with our first small App, lets focus on your three travel mates: match, location and history.

What happens if you get inside your Home Component code and put a console.log there to check the props?

console.log(props) inside Component

Router introduces into your component the following objects:

console.log(props) result in Chrome console

Wow! Where does that came from? 

Well, every view, component, or whatever thats wrapped by Router has these objects. does its job as an Higher Order Component and wraps your components or views and injects these three objects as props inside them.

So why are they there and what use can I make of them? 

Theyll be your best friends! Trust me! 

Match

The match object contains information about how a matched the URL.

  • params: (object), key/value pairs parsed from the URL corresponding to the dynamic segments of the path
  • isExact: (boolean), true if the entire URL was matched (no trailing characters)
  • path: (string), the path pattern used to match. Useful for building nested routes. Well take a look at this later in one of the next articles.
  • url: (string), the matched portion of the URL. Useful for building nested links.

So in the Home component we have this match object:

match object inside Home Component

isExact is true because the entire URL was matched, the params object is empty because we didnt pass anything into it, the path and the url key values are equal confirming that isExact is true.

Now lets take a look at the TopicList View:

TopicList View code...

15:06

Lib Ed articles "IndyWatch Feed Education"

A teacher with students

An account of an open-minded school for children with major educational and social problems.

Dr. Alex Gray

Lib Ed articles "IndyWatch Feed Education"

A clock

A modest proposal from an ex-inspector.

Derry Hanham

Lib Ed articles "IndyWatch Feed Education"

Phoenix Education Trust Logo

There are more really free schools in the UK than you might think.

Danny Whitehouse

Lib Ed articles "IndyWatch Feed Education"

Image of an escape

Some unfortunate results of friendly fire, but a continued attack on hope.

Lib Ed articles "IndyWatch Feed Education"

David Gribble

David Gribble tells us what he learned at Eton. What did you learn?

05:03

How To Create an Interactive Flex Layout Designer In JavaScript "IndyWatch Feed Education"

The best tutorials come from finishing real projects. When the project is done, I like sharing what I learned.

[Check out CSS Visual Dictionary with all CSS properties explained visually.]

This time, the project is my CSS flex layout designer. I will explain how I created it from start to finish and provide example source code below.

Open Flex Layout Designer

This is the instance of flex class were going to code in this tutorial.

Thats what were building in this tutorial. You can also spawn multiple instances of it at will on the same page with different default parameters.

Here is the Open Flex Layout Designer < click to try it live again:

Open Flex Layout Designer

I think its a fun project because the built-in CSS flex functionality cuts out most of the work for us. The most difficult thing here is writing the drag and drop code, but still, its not that hard.

To create this flex layout designer we will briefly use jQuery for cross-browser click events and jQuery.css method to dynamically set CSS properties to our flex items while they are being resized.

FIRST THINGS FIRST. Why are you creating your application? Why is it needed? (Is it?)

Its fine if you get excited about ideas. But to write effective software that people actually need, you must never write a line of code without first asking if there is a need for what you are about to create.

You always start in the same way.

Find an existing problem that needs to be solved. In my case, I was able to answer this question. Thats because most flex tutorials I found online were either too limited or contained explanations using static images.

I mean, come on. This is flex. The name itself alludes to the fact that things will be flexing. That is, resizing, scaling, changing. So why all the static image tutorials for flex?

This didnt sit well with me. I knew that to create a truly useful tool that has high educational value, an interactive approach was overdue.

Your applic...

02:10

How I got my first paid software developer job within 11 months of self-learning "IndyWatch Feed Education"

by Trust "Tru" Katsande on Unsplash

Ive always wanted to learn how to program since my university days, but I didnt have enough financial resources to facilitate that dream (or so I thought). Every time Id go to an information technology institute to enquire about a programming course, Id get slapped with sky high price tags that would put me off and make me doubt the possibility of learning how to program.

But, shortly after graduating from university, I had 8 months before I had to start compulsory national youth service in my country, Nigeria. So I decided to use the free time to learn software development. I finally managed to raise the exact fee required by an institute that teaches web development in my area. But, I had another problem. I didnt have a personal computer.

The leap of faith

I watched as months passed and the time came for the one year compulsory national youth service. I knew I had to think of another plan and take another stab at fostering a career in software development. So, I decided to find a software development firm that would let me intern with them during my service year.

Luckily, I found a job opening on HotNigerianJobs.com that advertised a vacancy for an intern willing to learn software development. I knew that it was the opportunity I was waiting for, so I applied instantly. After a few tests, I got invited to an interview and my prospective employer, after assessing me, decided to give me an offer on the spot. There was just one condition.

I wouldnt be paid throughout my service year. But, at the end of the year, they would decide to retain me and offer me a contract if I proved myself. I nodded my head in agreement after telling myself that I could do it. 

The Self-Learning Path

I started the internship, and on my first day, I was shown the learning plan that I was supposed to follow. It turned out that the stack was ASP.NET (with VB.NET), but before that, I had to start with the fundamentals which were learning HTML and CSS.

I was also shocked when I heard that nobody would spoon feed me throughout the whole learning process. 

I expected a classroom setting, and I was given a link to W3Schools to read, practice, and ask questions where I found ambiguities.

I was asked to build a simple website about myself as an output from learning HTML and CSS in my first week. I almost gave up because I didnt understand some concepts and everyone seemed busy.

After my first day, I knew...

01:13

How to containerise a Spring Data Cassandra application "IndyWatch Feed Education"

Hong Kong Skyline by skeeze

In this post, Ill be continuing my journey of learning Docker. I am still keeping it simple at this point. This time around, I am going to tackle converting a Spring and Cassandra application to use containers instead of running locally on the host machine. More precisely, using Spring Data Cassandra to sort out the application.

I wish I looked at doing this a while ago. I have written a fair amount of posts on Cassandra. Each time I had to cd to the correct directory or have a shortcut to start it up. I guess its not that big of a deal, but there were a few other things involvedsuch as dropping and recreating keyspaces so I could test my application from scratch. Now, I delete the container and restart it. To me, anyway, this is helpful!

This post will be different from my previous post, Using Docker to shove an existing application into containers. Instead, I will focus more here on the application side and remove the intermediate steps of using only Docker. I will jump straight into Docker Compose.

Containers, containers, containers

I think its best to start on the container side of the project. The application depends on the configuration of the Cassandra container.

Lets go!

https://medium.com/media/5eb5a67e100a66086df55bdebcef300a/href

Theres not much going on here. This Dockerfile builds the Spring application image that will be put into a container in a few moments.

Next up is the docker-compose file. This will build both the Spring application and Cassandra containers:

https://medium.com/media/017e789743b8c534ffaf1c511cf9222e/href

Again, there isnt too much here. The app container builds the Spring application using the Dockerfile defined previously. The cassandra container instead relies on an existing image, appropriately named cassandra.

One thing that stands out is that the restart property is set to always. This was my lazy attempt to get past how long Cassandra takes to start. Plus all the containers started with docker-compose start at the same time. This lead to a situation where the application is trying to connect to Cassandra without it being ready. Unfortunately, this leads to the application dying. I hoped that it would have some retry capability for initi...

01:03

Heres what you need to know as a new developer "IndyWatch Feed Education"

Hackathon I recently went to

If youve started to learn programming and have decided to get seriousor youre fresh out of school with no job experiencethis is the perfect article for you.

I will address key points and hidden truths Ive accumulated over time working as a developer.

Its not youCoding is difficult

No one said coding was easyif it was easy, everyone would be doing it. If you can code on a basic levelcongratulations! You are in a club with very few members.

We all have been there facing a new roadno matter the subject. A senior developer is a junior developer who never gave up. A Brazilian jiu-jitsu black belt is a white belt who never gave up.

Embracing what youre doing is difficult and very few can do itso enjoy and have fun with it!

person's hand burst out of box holding assorted-color pens by Lucas Sankey on Unsplash

A river cuts through rock, not because of its power, but because of its persistence.

Persistence, persistence, persistence! I cant stress this enough. Find what you love doing and stick with it.

The universal truth to mastering skills is simple: keep doing it and never give up. Its completely natural and human to feel burned out, stressed or lethargic. But neverevergive upunless you really want to.

Learning to code on a very basic level can take years, and many more to become prolific. Keep learning, coding and reading everydayat least 1 hour. Make it a part of your life and habits.

Make friends and find mentors

Me with coders at a hackathon (sorry for the blurry image!)

The coding road is hardand its almost impossible alone. Find people you like and get together. Easier said than done, I know. The trick to this is going to gatherings aimed primarily at developers.

Find a meetup near you and join it. I literally just go to random events and explore as much as possible. A great way to do that is check out meetup, type your location and interests, and voil! You have tons of events in front of you. Meeting new people might be out of your comfort zone. Its not as intuitive for everyone, but youd be surprised how friendly the developer community is.

Find balance in life and outside of coding; study smart...

Monday, 17 September

21:51

How to create a Django server running uWSGI, NGINX and PostgreSQL on AWS EC2 with Python 3.6 "IndyWatch Feed Education"

Getting a server up and running for a new project every time might be time-consuming or difficult for new developers. So I thought Id write a step-by-step guide that will ease the deployment process.

If youre in no mood to read, you can copy paste each step as described (replace values) and get your server up and running 

Prerequisites:

  1. Amazon Linux EC2 instance up and running with the associated key pair (ssh access to it).
  2. Port 22, 80 must be open for this instance.
  3. Django application that you want to deploy.
  4. Database settings are configured to use PostgreSQL.
  5. requirements.txt is present in your app, having dependencies list to install.
  6. Git repository for your Django app.

SSH & update ubuntu instance

You need to ssh into your EC2 instance, so make sure you have port 22 open for your instance and then do a update/upgrade.

$ ssh -i path-to-your-key.pem ubuntu@your-aws-instance-public-ip
$ sudo apt-get update && sudo apt-get upgrade -y

Installing Python3.6.x on AWS EC2 (ubuntu 16.04)

We will download the tar.xz file from official site and than manually install it. Before that we need to install some required dependencies.

Building and installing dependencies

$ sudo apt install build-essential checkinstall
$ sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

Downloading & manually installing required Python version

$ cd /opt && sudo wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz
$ sudo tar -xvf Python-3.6.6.tar.xz
$ cd Python-3.6.6/
$ ./configure
$ sudo make && sudo make install

Removing downloaded file

$ sudo rm -rf Python-3.6.6.tar.xz

Check Python version

$ python3 -V
Python 3.6.6

Setting up Ubuntu user for our application

Django itself is very secure framework, I agree. But web applications are still vulnerable. It is good practice to run your application as system users with limited privileges which has limited access to resources on your server. So in this section, we will be adding a new user & permission group to...

21:33

Command Magicks: How to Manipulate Files and Strings with the Console "IndyWatch Feed Education"

Programming will make you be amazed by the Cosmos. Source: Pixabay.

As developers, there are lots of repetitive things we do every day that take away our precious time. Finding ways to automate and optimize those processes is usually very lucrative.

Many times we find ourselves sifting through a programs output looking for the relevant bits and manually moving them into a different file, changing all the capital letters from a sentence into lowercase, or removing all non-numerical characters from a file. The kind of boring, repetitive and error-prone tasks that can pile up if we do them by hand, and turn into a big headache.

Its conventional wisdom that we should do these things programmatically not manually. Many times the problem falls into this sweet spot where coding a whole script for it, even in Python, feels like overkill. Doing the thing by hand will take too long or generate too many errors.

Luckily, many of those tasks have already been coded by people way smarter than we are. They can be accessed with just a few key presses. They are all available as shell commands, and Ill show you some of them today. If youre completely new to the terminal and have no idea how to navigate your file system or do similar tasks, I suggest you read my previous introduction to the terminal.

So without further ado, let me introduce you to the most useful spells any coding wizard should know.

echo: Make a string appear in the console

Before we can dive into the arts of divination and transformation, a real programming wizard must dominate the craft of conjuration.
The echo command, followed by a string, will simply make the console output what was given as input. For instance, running the following line:

echo hello world!

will produce the following output:

hello world!

This may seem trivial right now, but I promise it will be useful in the future.

cat: Showing the inputs true form

Calling the cat command on a file will output its contents into the terminal.
For instance, we have a directory containing the files file1.txt and file2.txt. Both files contain the text this is a file. Calling:

cat file1.txt

will output the files contents:

this is a file

Note that the argument for the cat command can be any shell style name. We can use the wildcard character *, to match any string. Th...

21:09

JavaScript Timers: Everything you need to know "IndyWatch Feed Education"

A few weeks ago, I tweeted this interview question:

*** Answer the question in your head now before you proceed ***

About half the replies to the Tweet were wrong. The answer is NOT V8 (or other VMs)!! While famously known as JavaScript Timers, functions like setTimeout and setImmediate are not part of the ECMAScript specs or any JavaScript engine implementations. Timer functions are implemented by browsers and their implementations will be different among different browsers. Timers are also implemented natively by the Node.js runtime itself.

In browsers, the main timer functions are part of the Window interface, which has a few other functions and objects. That interface makes all of its elements available globally in the main JavaScript scope. This is why you can execute setTimeout directly in your browsers console.

In Node, timers are part of the global object, which behaves similarly to the browsers Window interface. You can see the source code of timers in Node here.

Some might think this is a bad interview questionwhy does knowing this matter any...

19:48

Why You Should Learn Google Go "IndyWatch Feed Education"

UC Irvine Professor Ian Harris is an expert in computer science systems and teaches the new Programming with Google Go Specialization. We had the opportunity to chat with him about the Specialization and why every programmer should learn Go.

Why did you want to create this Specialization?

We created this Specialization because there is clearly a need for Go expertise in the software marketplace today and we felt that a Specialization on Google Go would help meet that need. Software developers are continually seeking to build complex systems with high performance at low cost, and the selected programming language has a strong impact on a developers ability to do that.

The vast majority of programming courses in existence take a more conservative approach, focusing on older languages with which instructors are more comfortable. This Specialization is needed to introduce a new generation of programmers to the benefits that Go can provide.

Who is it for?

This Specialization is for someone who has some programming experience and now wants to adopt a new programming language in order to broaden their skill set. An individual might be looking for a new job which requires an understanding of Go, or he/she might want to use Go at their current workplace.

What can someone add to their resume once they complete this Specialization?

Youll be able to state that you have gained a solid foundation of Go and exercised the main features that set it apart from other programming languages.

Why should a programmer learn Go?

Go is a great tradeoff between performance and ease-of-use. Go is a compiled language, giving it a performance which is on-par with native C code. Go provides many of the high-level features which are common in interpreted languages, such as garbage-collection. Go also integrates concurrent programming concepts which a great advantage when programming for multi-threaded, multi-core platforms.

Why do you love Go?

I would say that it is the general philosophy of the language, to enable the use of high-level programming concepts in a simple way, while maintaining high performance. This philosophy is manifested in many different ways in Go which make it a unique pleasure to use.  

What advice would you give to someone interes...

18:42

Tom Woods For President? (No.) With Tom Woods [PODCAST #577] "IndyWatch Feed Education"

In this thinly-veiled 52-minute promotion for the Contra Cruise, happening October 21-28 (tickets available at ContraCruise.com), Tom and I open talking about the cruise, highlights from previous cruises, and the origins of the Contra Krugman podcast. What's up with the title? I recently turned someone on to Tom's show, and after listening for a couple ...

18:25

Why Im not using your GitHub repository "IndyWatch Feed Education"

Your bad Github repo management disappointed this cat. You did this. Photo by FuYong Hua.

As a bioinformatician, I reside in an interesting middle ground between developers and end users. My background training is in biology, not computer science.

But in recent years, biology has moved closer to computer science. Many types of biological data are too big to analyze by hand and must be processed using computers. The ever-decreasing cost of genome sequencing has introduced vast amounts of sequence data. All this data needs to be assembled, compared, searched, and annotated.

More and more, biologists need computers.

More specifically, biologists need computer programs. Look, if Ive got a bunch of sequence data from a microbiome that I want to match up to the different species of origin, Im not going to sit down and build my own aligner tool from scratch. Im going to grab an off-the-digital-shelf tool thats been used before, pray that it is fairly straightforward to install, and plug it in.

In graduate school, I made a mistake. I allowed the fast pace of the computer world to seduce me. No more multi-week experiments at the lab bench! I declared to myself. Im going to dive headlong into the computer side of biology and become a bridge between both worldsa bioinformatician!

In theory, a bioinformatician analyzes data gathered by biologists, discovering new conclusions and forging new connections.

In practice, a bioinformatician installs a lot of programs and curses the developers who created them.

Ive given up on many programssome of which, I assume, are very good programsbecause of nonsensical instructions, bad code, or horrible documentation.

Its gotten to the point where I can glance at a GitHub repository and get a good sense of how Ill feel about your tool.

Some repos instil confidence. Others fill me with dread.

Sometimes, I find one so bad that I refuse to even attempt to install the tool (unless its demanded by my boss).

Here are the biggest issues I see, and how to avoid them.

Reason 1: No documentation

No one knows how to use your program unless you write it out for them. Photo by Beatriz Prez Moya.

Ive seen every variation of documentation:

  • Documentation written in the Readme.
  • A quick how-to in the Readme, with d...

18:18

How I built an HR Slack Bot with Node and Botkit "IndyWatch Feed Education"

Star Wars 1 Anakins building C3-PO

Why create a Slack Bot ?

I am an HR professional. More specifically I am a Human Resources Information System (HRIS) Consultant. I work with Application Tracking Systems, Learning Management Systems, and Core HR. But I have never had the opportunity to work with an HR Bot. Which may be the Future of HR.

I read a lot about bots on Slack and Messenger, and used some of them in my daily lifeProduct Hunt, GitHub and Trello. But for HR purposes, I have never had the opportunity to work with a tool tailored for my needs.

Thats why I decided to work on my own bot.

Me starting to work

My Goals

My bot should be able to manage all the needs a small company could have on Slack:

  • Onboarding
  • Putting people in touch
  • Reminders
  • Announcements
  • Birthdays /Anniversary
  • And many more

Reviewing the basics

For this program, Ill use:

  • Botkit
  • Node JS
  • Express Server
  • MongoDB
  • Slack API & of course

Botkit is:

One easy way to build bot users, especially if you already work with Node.js, is Howdys Botkit. Botkit is a framework that takes care of most these API gymnastics, so you can focus on your bots behavior.

Exactly what I was looking for :-)

Botkit provides a boilerplate for Slack. But I have chosen to start from scratch to have a better understanding of my bot. However, its a good idea to train yourself with a bot created on Glitch.

How do Slack bots work?

I am not an expert. I have read again and again Slack and Botkits official documentation. Im still not sure I understood everything. Here is my understanding of a Slack bots behavior:

Every App on Slack has a scope which is a perimeter on which an app can read or perform actions. A bot is part of an application created and installed on Slack.

Therefore, when you install an app on Slack, you give access to some information and permissions to it. For your bot, you want it to be, at least, able to send and reply to messages of other users.

There are then two cases:

...

16:54

A better versioning scheme for your React Native modules "IndyWatch Feed Education"

https://medium.com/media/d23141597b2856c93f338c618086802c/href

In this article, I will tell you about the versioning scheme we use for our React Native modules at Wix.

TL;DR: semver syntax and git commits.

Background

Get it Done

Major: manually from package.json.

"version": "2.0.0"

Minor: number of commits on the master branch.

https://medium.com/media/d05d2a0f7c8b7fb32691b9f03f41a9cd/href

Patch: number of commits in since diverged from master. On the master branch, it will be 0.

https://medium.com/media/4b46fcbfb5efe700ca474d2dae66faa8/href

Problem

Lets...

13:16

Math Teachers and Homeschool Bloggers: We Want You! "IndyWatch Feed Education"

Do you have a favorite blog post about math activities, games, lessons, or hands-on fun? The Playful Math Blog Carnival would love to feature your article!

We welcome math topics from preschool through the first year of calculus. Old posts are welcome, as long as they havent been published in past editions of this carnival.

Click here to submit your blog post

Dont procrastinate: The deadline for entries is this Friday, September 21. The carnival will be posted next week at nebusresearch blog.

Have you noticed a new math blogger on your block that youd like to introduce to the rest of us? Feel free to submit another bloggers post in addition to your own. Beginning bloggers are often shy about sharing, but like all of us, they love finding new readers.

Need an Idea-Starter?

If you havent written anything about math lately, here are some ideas to get your creative juices flowing

  • Talking Math with Kids: Children often have surprising insight. Even when theyre confused about math, their point of view can open our adult eyes to new understanding. Share your kids stories...

08:37

A Beginners Guide to GraphQL "IndyWatch Feed Education"

All you need to know about the latest buzzword thats taking the API development scene by storm.

TL;DR

GraphQL is a query language and runtime that we can use to build and expose APIs as a strongly-typed schema instead of hundreds of REST endpoints. Your clients see the schema. They write a query for what they want. They send it over and get back exactly the data they asked for and nothing more.

A schema looks like:

https://medium.com/media/9389b9eeb5287b4139c0a9a40aebaa12/href

So, if a client wants a user with an ID of 2, instead of doing a GET /api/v1/users/2, they would rather send a query like this:

https://medium.com/media/b38b8fc8a077cb1e8dd88faec88bdac3/href

and get a response like this:

https://medium.com/media/334f3068f39a444e33eb2597a81231f8/href

Why should REST watch its back, and why should you care?

  1. The schema is strongly-typed. The schema dictates that the id parameter must be an integer. If a client sends user(id: 2) instead, the GraphQL engine will reject the whole query.
  2. Clients pick what they need. See those braces after the query parameters? Thats how our clients tell which fields they want. Fewer fields = leaner and faster responses.
  3. Its fast. Fields not picked wont be processed, meaning less stress on the server.

And thats all there is to it, really. No magic is going on. Just a more convenient, flexible, and natural way of building your API.

But what is life without those juicy core concepts and sweet, sweet code examples?

The Big Five

Before moving onto the actual fun, there are some concepts we need to have in mind, otherwise everything else wont make any sense.

Dont worryIll keep it short.

Query

A member of the schema that reads data.

https://medium.com/media/eb197bf01f5b7bd0330329e079931c47/href

Mutat...

02:37

How to (Un)marshal JSON in Akka HTTP with spray-json "IndyWatch Feed Education"

In the previous post, we added JSON support to our Akka HTTP API using circe.

This time well do the same but using spray-json. Akka HTTP supports it by providing an official librarywe dont need a third-party party one like we did with circe.

Project setup

Well go through the same steps as the previous tutorial to set up the project.

Clone the repo, and check out the branch 3.3-repository-implementation.

We will also do the changes we did in the previous tutorial.

First, we will replace the circe dependencies with the spray-json dependency since we wont be needing it for this tutorial. Update the build.sbt file with the following contents:

Next, we will add a save function to the TodoRepository and its implementation:

import scala.concurrent.{ExecutionContext, Future}

trait TodoRepository {

def all(): Future[Seq[Todo]]
def done(): Future[Seq[Todo]]
def pending(): Future[Seq[Todo]]

def save(todo: Todo): Future[Todo]

}

class InMemoryTodoRepository(initialTodos: Seq[Todo] = Seq.empty)(implicit ec: ExecutionContext) extends TodoRepository {

private var todos: Vector[Todo] = initialTodos.toVector

override def all(): Future[Seq[Todo]] = Future.successful(todos)

override def done(): Future[Seq[Todo]] = Future.successful(todos.filter(_.done))

override def pending(): Future[Seq[Todo]] = Future.successful(todos.filterNot(_.done))

override def save(todo: Todo): Future[Todo] = Future.successful {
todos = todos :+ todo
todo
}
}

This will allow us to create a POST request to create new todos.

And finally, update the Main object to create a list of todos for testing purposes, and with the appropriate routes:

...

02:34

The Hitchhikers Guide To React Router v4: Grok React Router in 20 minutes "IndyWatch Feed Education"

A brown mug next to a MacBook with lines of code on its screen by Artem Sapegin on Unsplash

Hi fellow React Hitchhiker! Want a ride into React Router? Jump in. Lets go!

To understand the philosophy behind React Router, we need to know what a Single-Page Application (SPA) is.

What Is A Single-Page Application?

Basically its a web application or web site that interacts with the user by dynamically rewriting the current page rather than loading entire new pages from a server.

Why is this so good?!

1. avoids interruption of the user experience between successive pages

2. makes the application behave more like a desktop application

3. all the code resources are dynamically loaded and added to the page as necessary, usually in response to user actions

4. because its kewl and kewl and extra-ultra-wide-4K-level-of-kewl.

SPAs are an industry standard now, and lots of companies are in a quest to find programmers to develop their projects.

What is React Router?

React Router is a tool that allows you to handle routes.

Since youre dealing with an SPA, you need a way to trigger the contents that are loaded on the screen. React Router introduces a concept called Dynamic Routing, which is quite different from the Static Routing we are used to.

When youre dealing with Static Routing you declare your routes as part of your apps initialization before any rendering takes place (Rails, Express, Ember, Angular, and so on).

Dynamic Routing means that routing takes place as your app is rendering, not in a configuration or convention outside of a running app.

React Router v4 advocates and implements a component-based approach to routing.

It provides different Routing Components according to the needs of the application and platform.

In this specific case were going to explore because we want to use dynamic routing in a web app context and leave the other ones for other circumstances.

Who Created React Router?

These two amazing human beings, Michael Jackson and Ryan Florence. And they deserve loads, tons of claps! Together they started React Training....

Feeds

Feed RSS Last fetched Next fetched after
"IndyWatch Feed Education" XML 03:58, Saturday, 22 September 04:58, Saturday, 22 September

IndyWatch Education Feed Archiver

Go Back:30 Days | 7 Days | 2 Days | 1 Day

IndyWatch Education Feed Today.

Go Forward:1 Day | 2 Days | 7 Days | 30 Days

IndyWatch Education Feed was generated at Community Resources IndyWatch.

Resource generated at IndyWatch using aliasfeed and rawdog