I initially checked the official documentation for installing .NET on Linux but there were no mention of arch-based systems instructions, although
]]>I have recently been exploring C# at work and decided to set up a development environment on my personal workstation, which is currently running Manjaro Ornara 21.0.7.
I initially checked the official documentation for installing .NET on Linux but there were no mention of arch-based systems instructions, although it included a snap package as an option for operating systems which were not listed, but I opted not to install it that way in case it doesn't play well with other development tools. I tend to stay away from snap packages in general anyway.
As a result I chose to install the packages that were needed manually. According to the documentation, all we need to have to build .NET applications is the .NET SDK. The SDK contains all the tools needed to develop applications as well as the runtime, which is needed to run those applications. However in Arch, the SDK and the runtime engine are shipped as separate packages, so we can't just install the SDK and expect to have a full working setup.
The packages we need are dotnet-sdk
, dotnet-runtime
and aspnet-runtime
. They can be easily installed using pacman:
To verify which SDK and runtimes have been installed, run the following command:
Once the packages are installed, check whether the dotnet executable is located at /usr/bin/dotnet
by running whereis dotnet
, otherwise some issues may arise.
If it's not located there, create the file /etc/profile.d/dotnet.sh
as suggested by this thread and add the following contents:
Then add the following to your bash profile - (~/.bashrc
by default) :
You should now be able to create and execute .NET apps. To make sure everyting is working properly, let's initialize a basic .NET app.
Create a new directory for the app, cd
into it and run dotnet new console
. This will generate a basic hello world console application which includes a Program.cs
file.
To run the program generated, run the command:
dotnet run Program.cs
If it outputs Hello World!
without any errors then you are good to go!
At last, I got the opportunity to wear that weird cap 🎓 and the fancy gown. After all the struggles I went through for the past 3 years, the idea that I am no longer stuck into what seemed like an endless loop of failures still feels very much dreamlike, just like one of those anxiety episodes that some of us are too familiar with.
It's been 4 years since I received veegish.com as my 19th birthday gift from my parents but I have never really blogged about my life as a university student. Back then I had just completed my A-Levels and I knew I wanted to get into software development, but the idea of going to university was never a significant thought since I was really into self-learning and believed that I was going to figure out a way to get into the industry by working small jobs once I left school and work my way into a software development job. Start small and keep grinding, that was the mantra.
Once the A-Levels results were out and I realized I could pursue tertiary education, I was at a crossroads. On one hand my parents wanted me to go to university and on the other I wanted to take a less traditional path but still had the idea of going to university in back of my mind. That's when I did the weirdest thing(or bravest?) an introvert like me would have never thought of doing. I applied for a job. That version of me went into panic mode whenever his phone would start ringing and yet, there I was, getting out of my comfort zone. I applied for a junior web developer position at La Sentinelle Digital, a news publishing company. I remember thinking I had nothing to lose, absolutely no experience other than some pet projects with Wordpress and Laravel, so why not go ahead.
To my surprise I got called in for an interview. It was a technical interview which was mostly about Git commands and PHP. After that one was done I got called in for another interview where I was tasked with implementing a page design using HTML5 and Bootstrap. That's when I had some sound advice from my interviewer encouraging me to take the opportunity and go to uni. He also encouraged me to attend DevCon 2017, which I did, and that changed everything. It was around that time that I had made my first contribution to a public repository(devcon2017) on Github which wasn't just a typo fix. While presenting at DevCon 2017 Logan noticed me taking conference notes, which led him to reach out to me and the rest is history.
Like almost every other student out there, I occasionally had to face some struggles with my studies. One of the core modules I had in my course was Mathematics for Computing, and I sucked at it. Ever since I had joined the University of Mauritius, I kept telling myself that I would study just enough such that I could get an average grade. As a result, that would leave me with adequate time to work on side projects and learn things on my own. That strategy didn't work exactly as I intended, at least not for that module. I failed that class and that took a huge hit on me.
I let that failure undermine me and missed some really unique opportunities. I delayed my applications for a mandatory internship during my second year because I was afraid of being rejected. This made things even worse as my friends were able to secure internships while I wasn't getting any offers, until the very end when a small company managed by two people contacted me. To be honest, It was disappointing at first, but I eventually started appreciating the work I was doing there. The most significant impact however was that I started losing interest in everything I was studying at school and I started doubting myself more than ever. I was suddenly feeling excluded. All that motivation I used to have was gone. I felt constantly tired and lost all passion for self learning. The thought that I might have made a mistake going to university was stuck in my head.
Although this was a seriously depressing period of my life, in the end I managed to make it through and even got an "A" in that module. When I saw the results it felt pretty unreal but still realistic. A small part of that can be attributed to hard work and ambition but a lot of the initial effort and motivation came from watching Youtubers like Matt D'Avella which made me realize that I needed to come up with an efficient routine that works for me instead of trying to fit other peoples' routine into my life. That's when I switched from a goal-oriented mindset to a process-oriented one, from grinding to hustling. I started to identify inefficiencies in my daily life and replaced them with a well-balanced mix of studying, exercising, gaming and side projects. I stopped all social media except reddit and snapchat to keep up with headlines and my close friends. In the end, it was certainly rewarding, albeit tedious.
As my time as a university student was coming to an end, things weren't exactly looking good. Covid-19 had reached Mauritius and there was a total lockdown imposed throughout the island. I was still working on my thesis and the deadline, as well as my final exams were approaching fast. The routine that I had almost perfected was suddenly completely disrupted. On the other hand, with all the uncertainty brought by the lockdown, my hopes of getting a job once I would be done with university were starting to decline. Little did I know that I was again going to have one of those moments where things just change completely.
Just about 1 month before the lockdown, a couple of my close friends encouraged me to drop a CV at a company's booth during the annual campus job fair. This was one of the top three companies where I really wanted to get an internship but due to my late applications I never got a response. Three weeks later, after having a very casual interview and induction with the staff, right in the middle of the lockdown, Proximity BBDO Indian Ocean, which is now known as Hangar Worldwide, offered me a position as a Front End engineer. No need to explain how much of a delight and relief this was for my family and me. I started this new role just two days after finishing my finals. By then I had already submitted my thesis and had no other commitments concerning school.
A lot of things have changed since then. I have graduated university with a sense of satisfaction and no longer have any doubts about my time there. Thanks to the fast-paced environment I currently work in and the talented people that I work with, I have found all the motivation I had once lost. There is so much to learn, but I don't feel overwhelmed or lost anymore. Learning is once again fun. I am now embracing Jamstack and Golang by experimenting with small projects when I get back home from work, because I keep weekends to disconnect from the office.
So far, It may seem that I have faced all my hurdles alone, but the truth is, I was surrounded by amazing friends all this time. Together we took initiatives, like coming up with our own notes and sharing them in an organized manner on OneNote or staying up late at night and revising together via our very own Discord server(even got our own discord bot,*cough* shameless plug *cough*). Those late night calls were the best. The friends that I made along the way are the only reason I need to say that my time at uni was definitely worth it.
]]>As is tradition, every year the cyberstorm.mu team takes part in the IETF hackathons. This time we had more newcomers who joined us for the hackathon, namely Yashveer Jadoo,
]]>Edit[28 JAN 2020]: The patch has been added to OpenSSH 8.2: https://github.com/openssh/openssh-portable/commit/4594c7627680c4f41c2ad5fe412e55b7cc79b10c
As is tradition, every year the cyberstorm.mu team takes part in the IETF hackathons. This time we had more newcomers who joined us for the hackathon, namely Yashveer Jadoo, Bruno Bernard and Rahul Kumar Shivadan.
This year, I teamed up with Yashveer to work on implementing the latest draft for A Lower Effort Per-Hop Behavior(draft: https://tools.ietf.org/html/draft-ietf-tsvwg-le-phb-10) in OpenSSH.
Lower effort(LE) is one of the many codepoints which can be specified in the differentiated services/DiffServ field(formerly known as ToS) of an IP packet. DiffServ is a technique which is used to enforce Quality of Service(QoS) in a network by providing packet classification methods to identify latency-critical traffic such as VoIP and other real-time streaming media applications. To implement packet classification, DiffServ provides a defined list of 6 bits codes(Differentiated Services Code Points - DSCP) which can be applied to a network traffic.
Our task was to implement a new code point, called Lower Effort in OpenSSH. It took us about a whole day to set up everything properly. We had encountered several compilation issues and a few hiccups with our Virtual Machines, which froze from time to time during compilation. At some point my display server wouldn't even start due to compatibility issues related to nvidia drivers. Luckily I got some help from Nitin(https://tunnelix.com) who was also present for the hackathon and together we managed to identify this issue and revert back to intel drivers on Ubuntu 18.04.
[Nitin and Loky]
Yashveer had quite some trouble with his VM crashing frequently but together we managed to locate the files that needed to be updated with the new codepoint and successfully compiled OpenSSH. A patch was then sent to OpenSSH's issue tracker. During this process we learnt quite a few new things, such as using wireshark to detect the different code points that were being sent along packets. We also learnt how to use netcat, which is a cool tool to establish TCP/UDP connections.
The cyberstorm.mu team also worked on other cool projects from different working groups like deprecating RC4 in SSH, adding Post Handshake Authentication in some applications, HTTP451 and even developing a modern Android application for the IETF! It was great to see new faces joining the world of rough consensus and running code. Looking forward to more ambitious projects and participants for IETF105!
Feel free to check out the blog posts of newcomers and other members below:
Yashveer Jadoo: https://medium.com/@yashveer1726/my-initiation-at-cyberstorm-mu-422b5795a821,
Bruno Bernard: https://busymind101.wordpress.com/2019/03/24/ietf-104-hackathon-ietf-mobile-app/,
Rahul Kumar Shivadan: https://medium.com/@rahulshivadan14/ietf-104-hackaton-a4a823e78a5f
Rahul Golam: https://securenetweb.wordpress.com/2019/03/23/ietf-104-hackathon-tls-1-3/,
Avi Soomirtee: https://avisoomirtee.blogspot.com/2019/03/ietf104-day-0-2-tls13.html
Jeremie Daniel: https://medium.com/@jeremiedaniel48/ietf-104-remote-from-mauritius-3695504c8ba4
Loganaden Velvindron:
Day 0: https://medium.com/@loganaden/ietf-104-day-0-73c62bbca9ae,
DAy 1: https://medium.com/@loganaden/ietf-104-day-1-51d745dd39e0,
Day 2: https://medium.com/@loganaden/ietf-104-day-2-1f43b128c220
Last july I was invited to participate in IETF 102 hackathon by a group of hackers who share a passion for finding solutions to problems and a common vision, a vision where more and more Mauritians are contributing towards open source software and internet security. It was a first for me as i've never been presented with such an opportunity.
I still remember Logan's(Loganaden Velvindron) words, he was the one who reached out to me. "This is an opportunity you don't want to miss.", he said. Having nothing to lose, I took the challenge, even though I didn't believe I would be able to come up with a working solution for the hackathon. A few days after the hackathon, after coming up with a working solution for a task which I was assigned, I realized something. There are a lot of things which we tend to believe are impossible to accomplish. But the thing is, we have to try at least.
Fast forward to today, the 22nd of September 2018, we are launching CyberStorm.mu . CyberStorm.mu is a group of developers/engineers who have contributed to many open source projects and particpated in several hackathons including IETF 102. We want to give the same opportunity that I was given to more people and get more mauritians involved in open source projects. As of now the team consists of Loganaden Velvindron,Nitin Mutkawoa, Codarren Velvindron, Kifah Meeran, Jeremie Daniel, Heervesh Lallbahadur, Nathan Sunil Mangar, Jagveer Loky, Nigel Yong and myself.
This is the beginning of a new adventure with lots of new opportunities awaiting. We are going to meet more people interested and passionate about technology and participate in more hackathons. This means more pair programming and fun. Collaborating on projects is cool as problems are tackled from different point of views and thus we can come up with better solutions.
For now this is just the beginning, so stay tuned for more.
veegish [at] cyberstorm.mu
https://twitter.com/@CyberstormMu
https://m.facebook.com/groups/334512603778198/
https://medium.com/@loganaden/cyberstorm-mu-a-new-adventure-3cf585cabddc
https://medium.com/@jagveer.loky/cyberstorm-mu-new-story-begins-6f90c38f0a25
https://medium.com/@jeremiedaniel48/a-new-start-for-a-new-group-cyberstorm-mu-b3a95e8da78e
Cover Photo: Unsplash.com
]]>You have just finished working on a software for a client that is to be delivered in a few days and everything is working as they should, or so you thought. Fast forward to a week later, you start receiving complaints from your client about your software which has started
]]>You have just finished working on a software for a client that is to be delivered in a few days and everything is working as they should, or so you thought. Fast forward to a week later, you start receiving complaints from your client about your software which has started to fail under certain circumstances. Anxiety starts to kick in and you are already regretting that decision you made to skip writing tests as an excuse to speed up the development process.
Well this is just an imaginary scenario to illustrate that things do not always go as planned. In the real world, assuring software quality through tests is an integral part of the software development process. There are a range of tests that can be carried out at different levels but this article will focus solely on unit testing in java using the JUnit test framework. But before we start, lets look at what we are dealing with here.
Unit Testing, as the name implies, are tests written for testing small snippets of code, like function/procedure blocks or classes in isolation. They have an important role in the Agile development proccess and are very low-level as they deal with components close to the source of an application.
Have you ever come across a small piece of code that looked like this:
import org.junit.Test;
import static junit.framework.TestCase.fail;
import static org.junit.Assert.*;
public class Tests {
@Test
public void Test1() {
assertEquals("42 -9", Kata.HighAndLow("8 3 -5 42 -1 0 0 -9 4 7 4 -4"));
}
}
This snippet of code was taken from codewars.com. As you can see, it includes a class called Tests
within which is written a small function called Test1
. Notice the method assertEquals
inside the function. This method is part of the JUnit API, which will be covered below. What this method is doing is simply testing that TRUE
is returned when the HighAndLow function from the Kata
class is presented with a string of numbers, having numbers 42
as the highest number and -9
as the lowest number. Here's the code for the function HighAndLow:
import java.util.Arrays;
public class Kata {
public static String HighAndLow(String numbers) {
int min = Arrays.stream(numbers.split(" "))
.mapToInt(i -> Integer.parseInt(i))
.min()
.getAsInt();
int max = Arrays.stream(numbers.split(" "))
.mapToInt(i -> Integer.parseInt(i))
.max()
.getAsInt();
return String.format("%d %d", max, min);
}
}
JUnit is a popular open source framework for writing unit tests in java. It provides a set of annotations which we can use to specify how we want our tests to be carried out. You can find a list of them in JUnit's official documentation(JUnit 5).
Let's get started by writing a small Calories Calculator program which will output the amount of calories a vegetable contains to a text file. To keep things well structured we will define our main class and our tests in two separate packages.
We are going to test the four methods of our Vegetable class, which are:
getCalories()
getPercentProtein()
getPercentFat()
getPercentCarbo()
Here's the full code:
package vegetables;
public class Vegetable {
String veg_name;
double veg_protein_cal, veg_fat_cal, veg_carbo_cal;
public Vegetable() {
this.veg_name = "";
this.veg_protein_cal = 0.0;
this.veg_fat_cal = 0.1;
this.veg_carbo_cal = 0.0;
}
public Vegetable(String veg_name, double veg_protein_cal, double veg_fat_cal, double veg_carbo_cal) {
this.veg_name = veg_name;
this.veg_protein_cal = veg_protein_cal;
this.veg_fat_cal = veg_fat_cal;
this.veg_carbo_cal = veg_carbo_cal;
}
public double getCalories() {
return this.veg_protein_cal + this.veg_fat_cal + this.veg_carbo_cal;
}
public double getPercentProtein() {
return getCalories() / 100;
}
public double getPercentFat() {
return (veg_fat_cal / 100) * getCalories();
}
public double getPercentCarbo() {
return ((veg_carbo_cal / 100) * getCalories() * 10000d) / 10000d;
}
public String toSring() {
return (veg_name + ", " + getCalories() + "%, " + getPercentProtein() + "% " + getPercentFat() + "%, " + getPercentCarbo() + "%");
}
}
package vegetables;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Scanner;
public class VegetableMain {
public static Vegetable inputVegetable() {
Scanner input = new Scanner(System.in);
System.out.print("Enter vegetable name: ");
String name = input.next();
System.out.print("Enter amount of protein: ");
double protein = input.nextDouble();
System.out.print("Enter amount of fat: ");
double fat = input.nextDouble();
System.out.print("Enter amount of carbohydrates: ");
double carbohydrates = input.nextDouble();
Vegetable vegetableDetails = new Vegetable(name, protein, fat, carbohydrates);
return vegetableDetails;
}
public static void printVegetables(Vegetable[] vegArr) {
PrintWriter stdOut = null;
try {
stdOut = new PrintWriter(new FileOutputStream("VegCalories.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.print("Error! File VegCalories could not be created. Data not saved.");
}
stdOut.print("Vegetable" + "\t" + "\t" + "\t" + "\t");
stdOut.println("Nutrition Info");
stdOut.println("------------------------------------------------");
for (int i = 0; i < vegArr.length; i ++) {
stdOut.println(vegArr[i].veg_name);
stdOut.print("% Protein: " + "\t" + "\t" + "\t" + "\t");
stdOut.println(vegArr[i].getPercentProtein());
stdOut.print("% Fat: " + "\t" + "\t" + "\t" + "\t" + "\t");
stdOut.println(vegArr[i].getPercentFat());
stdOut.print("% Carbohydrates: " + "\t" + "\t");
stdOut.println(vegArr[i].getPercentCarbo());
stdOut.print("Total Calories: " + "\t" + "\t");
stdOut.println(vegArr[i].getCalories());
stdOut.println("------------------------------------------------");
}
stdOut.close();
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter number of vegetables: ");
int num = input.nextInt();
Vegetable[] vegArr = new Vegetable[num];
for (int i = 0; i < num; i++) {
vegArr[i] = inputVegetable();
}
printVegetables(vegArr);
}
}
Now that out main program has been written it's time to write the unit tests to see if our methods/classes are working as they should. We start by importing the JUnit framework into our VegetableTest.java
class like this:
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
In case JUnit doesn't come bundled with your IDE, you'll have to download it from the Maven repo.
[IntelliJ IDEA]
[IntelliJ IDEA]
Optionally you can also import DisplayNames from the API to assign custom names to your tests.
import org.junit.jupiter.api.DisplayName;
Once JUnit has been loaded we can finally start writing our tests.
@DisplayName("Vegetable Class Tests")
public class VegetableTest {
// Write Tests here
}
Lets start by creating a VegetableTestClass
which will reference our main Vegetable class
@DisplayName("Vegetable Class Tests")
public class VegetableTest {
Vegetable vegetableTestClass = new Vegetable("Carrot" , 0.6, 0.3, 5.7);
}
After our class has been declared and initialized we are going to write a test for each method. To declare a basic test case, we use the @Test
annotation. Since we want to test that the Vegetable
class methods are returning expected values, we use the assertEquals
method which was explained above. It takes two
parameters; the second
parameter is the method we are testing and the first
parameter is the value we are expecting from that method.
@Test
public void vegetableCaloriesTest() {
assertEquals(6.6, vegetableTestClass.getCalories());
}
@Test
public void vegetablProteinTest() {
assertEquals(0.066, vegetableTestClass.getPercentProtein());
}
@Test
public void vegetableFatTest() {
assertEquals(0.0198, vegetableTestClass.getPercentFat());
}
@Test
public void vegetableCarboTest() {
assertEquals(0.3762, vegetableTestClass.getPercentCarbo());
}
Now that we have written our tests we need to run them. Different IDEs have different ways of running these tests. You can read about how to run them here
Here are the results of the tests:
As you can see they are all successful. Now let's see what happens if we change the expected value for vegetableFatTest
from 0.198
to 0.197
Eventually the vegetableFatTest
fails and you can see why in the error logs.
This is a very simple example. There are many more concepts involved in writing unit tests, like object mocking for instance. Besides, in this example we wrote tests for every methods of our class. A Real-world software may have a few million lines of code. You can't write tests for testing every functionality. This is why it's important to identify what you want to test first, focus on important pieces of code rather than trival ones.
EDIT: This work was mentioned in The Register(Thanks Logan!): https://www.theregister.co.uk/2018/11/02/ssh_rc4_security
If you are not familiar with the Internet Engineering Task Force(IETF), it is essentially the governing body regulating the implementation of new standards on the internet. They organise
]]>EDIT: This work was mentioned in The Register(Thanks Logan!): https://www.theregister.co.uk/2018/11/02/ssh_rc4_security
If you are not familiar with the Internet Engineering Task Force(IETF), it is essentially the governing body regulating the implementation of new standards on the internet. They organise frequent hackathons to improve standards and interoperability on the internet.
Having never participated in an international event, it came off as a surprise when Logan(cyberstorm.mu) contacted me to join the team at Pointe Aux Piments to remotely participate in the IETF102 Hackathon.
The team was divided into 2 small teams - Implementation and Interoperability. I was part of the implementation team and my task was to make a Drupal module which would implement HTTP451(RFC 7725). Since I had never worked with Drupal before, I spent quite a lot time going through Drupal's documentation before starting to code. The event was scheduled for the 14th and 15th of July but we started working on our tasks 2 days prior so I had some time to familiarize myself with Drupal's environment which is completely different from what I expected at first.
I even encountered some issues especially concerning parsing of json files in php. My module was creating valid json but as soon as it was appending data to the files it broke the structure. Luckily thanks to a nice json formatter tool which I found online, I managed to identify and debug the issue.
Result of a censored page using the http451module
Meanwhile the InterOp team who were tasked with working on TLS 1.3 were testing for session resumption and 0-RTT on some popular open source libraries. They had some issues as well but in the end everyone managed to achieve their goal.
On the last day of the hackathon everyone made a one minute video to explain what they've been working on and what was their opinions on the hackathon. I definitely wasted some time preparing for this one since i'm not used to that kind of thing. The hackathon finally came to an end. The only thing left was to watch the presentations live from Montreal which were scheduled for 22:00(Mauritius time).
Throughout these 4 days of hacking code we didn't only spend time in front of our screens. We went for walks along the beach and some of us even went for a swim in the swimming pool that came with the villa where we were staying at. We spent lots of time together and had a decent amount of fun. It an unprecedented experience for me I must say. I got the opportunity to get to know some people better and meet new ones as well. On top of that I got familiar with Drupal and I look forward to improving the http 451 module I made as right now It lacks some features like geolocation.
On an ending note, I'm eager to take part in more IETF Hackathons and I hope to see more people from Mauritius involved in these types of projects.
Here are some more blog posts from other members of the team:
Jagveer - https://medium.com/@jagveer.loky/my-first-ieft-102-hackathon-remotely-in-mauritius-1b69114fd0bb
Rahul - https://securenetweb.wordpress.com/2018/07/14/ietf-102-hackathon-implementing-tls-1-3-in-nrpe/
Nigel - https://www.niyon.me/2018/07/ietf-102-implementing-tlsv13-to-nagios.html
Codarren - https://codarren.com/2018/07/ietf-102-a-fun-tls-1-3-hackathon/
Presentation Slides: https://github.com/IETF-Hackathon/ietf102-project-presentations/blob/master/hackathon_presentation_tls13.pptx?raw=true
]]>#IETF102 #hackThon remotely from #Mauritius pic.twitter.com/ERMVKLsnMt
— JMutkawoa (@TheTunnelix) July 15, 2018
I'm a bit late on this post but here it is 😊, a small summary about MoHack Mauritius 2k17, a Local Hack Day hosted by GitHub at Collège du Saint-Esprit.
MoHack was organised by cyberstorm.mu on the 2nd of December 2017 as part of the
]]>I'm a bit late on this post but here it is 😊, a small summary about MoHack Mauritius 2k17, a Local Hack Day hosted by GitHub at Collège du Saint-Esprit.
MoHack was organised by cyberstorm.mu on the 2nd of December 2017 as part of the 4th annual MLH Local Hack Day.
It's finally here! December 2nd, 2017 marks the 4th annual MLH Local Hack Day - a worldwide celebration of learning, building, and sharing. Over 275 communities around the world are hosting simultaneous 12 hour hackathons where developers, designers, and makers will join forces to bring their crazy ideas to life. ~ localhackday.mlh.io
While the event was due to start at 08:00, we got there 20 mins earlier. Hans who was attending the hackathon along with me bought a 1GB data plan since it was already announced beforehand that wifi connectivity might be very limited. Once we got there, we confirmed our presence by registering and we were then given a shirt for the event.
Getting ready
Git Basics
The opening of the event was a bit off schedule but after our hosts made sure that everyone had access to wifi and power for our laptops/PCs, the hackathon was smoothly kicked off by Kifah who was one of the organisers and speakers. He started by explaining the idea behind MoHack before transitioning into the basics of popular versioning software, Git.
Opening of MoHack
Kifah explaining the basics of git and how to apply a patch
Lunch
After an interactive tutorial surrounding the presentation on git, it was already time for lunch, which consisted of sandwiches, some sort of chocolate pie and deliciously refreshing lemonade(I think it was lemonade 🤣). Anyway, lunch was nice. We walked around and had some chit chat with other participants. That's when I met Nythiennzo and Bruno. I had actually met Nythiennzo before the event had started but we didn't get to speak that much until lunch.
Developing Extensions for Chrome
About an hour later, lunch is over and it's now Codarren's turn to take the stage. Before starting his presentation on Developing Extensions for Chrome, he spoke a bit about his contributions to open source projects and most importantly as a passionate coder with a particular liking for bug-hunting.
Codarren mentioning his notable contributions to Open Source Software and IETF hackathons
Codarren, having developed some extensions in the past, such as Week Ly, shared his experience with us by giving a throughout explanation of the structure of an extension and its essential component, which is the manifest.json file.
The manifest.json file explained using a pizza delivery guy as analogy
OSS contribution competition and Google Code-in
Once again, Kifah took the stage to announce a competition concerning contributing to Open Source Software on Github for university students. This consisted of solving issues from a handpicked list of software found on GitHub. These issues were then presented in the form of tasks and posted on the Bitrix24 web platform for easier management and collaboration. This involved following general contribution guidelines and writing quality code that would be used in production.
As for secondary students who were present, Kifah gave them more details about the Google code-in competition which is organised yearly by Google.
We then had a small tea-break where we enjoyed some snacks and lemonade while chatting with people around and looking at the task list.
End of Event
The event ended at around 16:30 with the distribution of sponsored goodies being the last item on the agenda. We got a few stickers, a poster and free .tech and .com domains. This was the first hackathon that I took part in and it was pretty fun. I had the opportunity to meet new people who share the same passion for technology and make friends. Looking forward to more hackathons next year!
Also, congratulations to @Nythiennzo for winning the university competition through his contributions to OSS! You can check out his post about the event here.
]]>#LocalHackDay is awesome!
— Nythiennzo (@Nythiennzo) December 2, 2017
The goodies too! @hackersdotmu @MLHacks @github @jetbrains pic.twitter.com/xP9QRWqDvJ
Following the first community meetup organised last week by Internet users of dodoland at the University of Mauritius, where Internet users of dodoland community members introduced GitHub to university students and the importance of exposing one's work online through GitHub, a more practical session was organised on this Saturday, 25th of November 2017.
This time, Logan Loganaden Velvindron talked a bit about github workflow and how it can be useful to manage university assignments especially when working in teams. He helped students properly set up their GitHub accounts starting with updating their profile page with relevant information that could help potential employers looking at their GitHub accounts.
He then proceeded with a brief explanation on OpenSSH and how it is used as an authentication method with remote servers and services like GitHub and explained some of it's advantages such as not having to enter a password each time you are trying to login into a service or connecting to a remote server. On top of using SSH for authentication, he explained a bit about how it can be used to remotely run GUI applications. After doing a small demo about generating ssh keys, he helped students generate their own public and private keys which they would use to further enforce their GitHub account security.
The public key is used by servers and services with which you want to use ssh authentication. This public key, also known as an 'authorized key', will encrypt traffic between you and the services/servers if a corresponding private key is found on your machine.
The private key, which is also known as the 'identity key', is stored on your machine and as mentioned above, will establish a secure connection if a corresponding public key is found on the remote servers.
To demonstrate this process, Logan connected to a private webserver through SSH in verbose mode.
This is done using the -v
argument, like this: ssh -v user@hostname/ip
Generating a key pair can be done by simply running: ssh-keygen
or running it along with some arguments.
By default, the ssh keys generated are found in the .ssh
directory. You can check for your keys by running ls ~/.ssh
if you are on linux.
Once we generated our keys, Logan showed us how to use them with our GitHub accounts to add an extra layer of security. GitHub makes it pretty straight forward to add keys. You just need to copy your newly-generated public key and paste it into the textbox provided and give it a name.
One way to copy the key is to output it to your terminal display using the cat
command, like this: cat ~/.ssh/id_rsa.pub
and copy it directly from there.
After some of us had managed to set up SSH authentication on GitHub, Logan proceeded with the basics of uploading code using git
and helped some students upload their assignments to Github.
Now that everyone was introduced to the concept of versioning using git and GitHub, it was time for part two of the session: Setting up a SOCKS proxy using OpenSSH.
As explained during the meetup, browsing the web on public networks, like the university public WIFI for instance, can be insecure or very restrictive. In this case you might consider using a VPN. However the ports used by your VPN software may be blocked by the public network firewall. One way to get around this is to use a SOCKS proxy.
Logan did a short demo on how to setup the SOCKS proxy using OpenSSH and configure Firefox to use it.
So here's how it's done:
First of all you need to have an OpenSSH Server. In my case i'm using a small VPS hosted on Digital Ocean's cloud.
Once your server has been setup and is ready to accept ssh connections, you can start the tunnel using this command:
ssh -D <port> <optional arguments> user@hostname/ip
.
Example using port 7676:
ssh -D 7676 [email protected]
This is the basic command. For a list of arguments you can use when creating a SSH tunnel, check out this manual.
Note: If you want to use a privileged port i.e, any port below 1024, you need to start the tunnel as root using sudo
If you are having trouble connecting using a certain port, you could run a port scan or try out some of the commonly open ports reported on this list.
In case you are having trouble using SSH on port 22, you can add a new port directive to your ssh config. Open your SSH configuration file with sudo nano /etc/ssh/sshd_config
. You should see something like this:
Package generated configuration file
See the sshd_config(5) manpage for details
#What ports, IPs and protocols we listen for
Port 22
#Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Just add a new listening port on the next line after Port 22, as shown below:
Package generated configuration file
See the sshd_config(5) manpage for details
#What ports, IPs and protocols we listen for
Port 22
Port 25 <---- Added port 25
#Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Then restart the SSH daemon using sudo service ssh restart
. You should now be able to use SSH on port 25:
To avoid locking yourself out, its better to do it in a new terminal window
ssh -D 7676 [email protected] -p 25
Once the tunnel is working, you need to configure Firefox to use the proxy. Go to your Firefox preferences and open the Network Proxy settings. In the SOCKS Host, specify your port, then click ok.
Now to test if your proxy is working, use an IP addres lookup service like ipfingerprints or whatismyip.
No Proxy
Using SOCKS Proxy
To end the session, Jagveer Loky, Moderator of IT and Internet Users of Dodoland talked a bit about the newly-launched mailing list and how it could be beneficial to university students.
So that was it for the second IT and Internet Users of Dodoland community meetup. This was a pretty cool one. It gave us a some insights on OpenSSH and it's uses. There are definitely going to be more interesting topics to be discussed during the upcoming meetups so check out the the mailing list to stay tuned.
Presentation Slides
Slides
A great feature with platforms such as GitHub and Bitbucket is that they can be integrated into popular chat clients such as Slack or HipChat. If you are a student who happens to be a gamer(like me :p) as well, you have probably heard of Discord. Discord is a chat client tailored for gamers. One cool feature about Discord is that it supports webhooks. Webhooks are basically a way to deliver data to an external server when an action is performed. Discord support GitHub webhooks out of the box. So if you collaborate with teammates who happen to be gamers as well, you can easily use Discord to chat as well as collaborate on projects hosted on GitHub. Check out this tutorial to get started.
Today marked the 2nd day for the 10th edition of the University of Mauritius(UoM) Research week, a whole week dedicated to academics from different faculties to present their research work and findings. Compared to the Rs 4M grant the university received last year, the Rs 16M allocated this year
]]>Today marked the 2nd day for the 10th edition of the University of Mauritius(UoM) Research week, a whole week dedicated to academics from different faculties to present their research work and findings. Compared to the Rs 4M grant the university received last year, the Rs 16M allocated this year may help the university to make major breakthroughs in research and innovation focused on improving the Mauritian economy. In fact, this year’s theme is “Connecting research to the industry and community”.
Today’s research sessions, which were about Transformative Technologies, started with an opening keynote by Mr Vidia Moonegan, Senior Vice President and Managing Director at Ceridian HCM Mauritius. Mr Moonegan started by addressing the current economic status of Mauritius and the slow adoption of new technologies by local companies. National labour productivity rate has significantly decreased compared to previous years along with the supply of software engineers onto the market. This could be attributed to the lack of investment in technology by both public and private enterprises in Mauritius. In addition to that fewer students are taking STEM subjects in High School and therefore there are less students opting for a degree in a Computer Science or Engineering field.
On a different note he mentioned how blockchain technology could reshape the banking sector and completely overhaul financial services in Mauritius. He briefly spoke about how artificial intelligence is becoming more and more popular nowadays, citing the IBM Watson as an example of the use of AI in the health sector. He also emphasized on why businesses should be investing more into research and development of new products as well as analyse the current technological trends in the industry in order for Mauritius to grow as a healthy economy.
To end the keynote, Mr Moonegan spoke about research in the business context, how it differs from academic research and his work at Ceridian.
An IoT based home automation system overview displayed outside
There were about twenty sessions, with most of them being run simultaneously. Obviously I couldn’t attend all of them so I had to be pretty selective about which ones to attend. I have been pretty interested in Big Data and cloud computing lately so I chose to attend all the sessions related to these topics. Apart from Big Data and Cloud Computing there were topics such as Biometric Data Storage, design and implementation of a UDP tunnel for OpenSSH, gene expression profiling, erasure coding etc.
An accessibility app for smartphones
With the advent of ‘smart cities’ in Mauritius it is possible that in the future more research will be oriented towards Machine to Machine(M2M) Communication, which involves monitoring systems, wireless sensors and all sorts of connected devices. Hopefully such research will actually be relevant and useful to the industry in Mauritius, ultimately improving our economic status.
]]>So this is it, the last day of MSCC DevCon 2017, and probably the most interesting day. I met with my friend Hans like before, except this time we reached there quite early. We spent 15 mins chatting before we got to the hotel lounge where we got access to
]]>So this is it, the last day of MSCC DevCon 2017, and probably the most interesting day. I met with my friend Hans like before, except this time we reached there quite early. We spent 15 mins chatting before we got to the hotel lounge where we got access to wifi which was as slow as a dial up network, probably due to a lot of people browsing facebook. The sessions kicked off at 09:30 as usual.
The idea of game development seems to appeal to a great deal of people. The room was overcrowded since the beginning of the session and eventually quite a lot of attendees had to sit on the floor. The demo which consisted of developing a 2D breakout-style game was presented by Microsoft Student Partner(MSP) Akasha Rojee. The demo was based off a MDN guide which can be found here.
Akasha Rojee presenting 2D breakout game using pure JavaScript.
Throughout the demo, different basic aspects of game development were explained such as collision detection, computer graphics coordinates(with a downward facing y axis – read more here), score tracking system, and game over conditions. To demonstrate how using frameworks can speed up a workflow the game was recreated using Phaser. An advantage of a framework like Phaser over vanilla js is that you don’t need to draw objects using canvas. Instead you can just draw your game assets and directly import them into your game project. Moreover Phaser has a preloader library for preloading assets like sprites, images and audio.
Another game development demo presented by MSPs but this time using Unreal Engine 4 to create a 3d third person person game with random terrain generation, a bit like like Temple Run. You can use can blueprints or c++ with Unreal Engine but for the sake of the demo c++ was used.
Tashween Seegoolam(MSP)
The duo covered some topics like camera postioning, coordinate system, mesh colliders and floor/terrain generation among others.
This was undoubtedly the most animating session. The panel consisted of developers from two different development backgrounds – web development and software engineering. The session started off with a fake interview to demonstrate red flags that could eliminate the chances of getting a job. Factors like attitude towards others were discussed. Communication was also part of the agenda. Being part of a community and collectively contributing towards building better products is something every developer should be concerned with. This helps to keep up with the latest trends in technologies and be aware of what is going on in the industry.
One really fun topic was about tabs vs spaces…yep
Richard freaking out over spaces
Reddit discussion: Tabs vs spaces
Back to some seriousness, Sundeep Ramgoolam brought up the Drunning Kruger effect which basically refers to an illusion which makes people perceive their abilities more superior than they actually are, thus making them think they are experts at what they are doing. The opposite applies to those who are more experienced.
Photo credits: twitter.com/ianbremmer
Be stupid so you can learn.
A small and pretty fast presentation by Codarren Velvindron from hackers.mu about the attitude needed towards problems in order to solve them efficiently. This one was quite fun and like other members from <cyberstorm.mu> he encouraged OSS and contributions.
Can’t understand a line of code? Delete it and see what happens next.
😂
Overall devconmru 2017 was a great experience as a first timer attendee. Needless to say you get to interact with the professionals in the industry and ask them about the tools and technologies that they are using in their everyday life. Given the fact that you get an insight about what is going on in the industry, something not usually taught at academia, it is definitely worth attending!
]]>The third edition of the Developers Conference Mauritius, organised by the Mauritius Software Craftmanship community(MSCC), officially kicked off today at Voilà Bagatelle Hotel. Being a first time attendee I decided not to go alone and take some friends along 😅.
We met at 09:15 and reached the
]]>The third edition of the Developers Conference Mauritius, organised by the Mauritius Software Craftmanship community(MSCC), officially kicked off today at Voilà Bagatelle Hotel. Being a first time attendee I decided not to go alone and take some friends along 😅.
We met at 09:15 and reached the venue 5 minutes later where to wait another 5 minutes to collect our badges since the room was quite crowded.
Badge, a recruiting ad from a sponsor and a folder
Inside the folder: Surprise! Some swag – Free stickers, a notebook & a pen
The keynote was presented by Jochen Kirstätter and Vidia Moonegan. It started by addressing some of the changes the world is currently facing, which were referred to as ‘disruptive forces’, such as an ageing population, industrialisation and urbanisation.
With an ageing population economic growth will slow down and innovation may be halted. Therefore it is important to train young graduates so as to provide better human capital to the job market and promote investment, technological growth and innovation.
Vidia Moonegan
Jochen Kirstätter
You are not here just to develop new products, but for much more
| Probably referring to cough cough ACM Code of Ethics cough
Next focus was on the FinTech industry – how software is transforming the financial sector globally, especially in developing countries. Mauritius being a financial hub in Africa itself may want to adopt the latest financial technologies like blockchains if it wants to retain and improve its position as an international player.
Finally Jochen closed the keynote by talking about the importance of girls in the tech industry, how they can contribute and mentioned that 20% of the sessions were going to be presented by women.
This session was about introducing the MSCC and its aims to developers and potential members. Jochen talked about the benefits of attending local meetups along with some current members who shared their stories about the group. An important point addressed during the session was about contribution. Jochen emphasised on the need to contribute to Open Source Software(OSS) using platforms like Github, even if it’s about fixing a small typo in a piece of code. He added that we shouldn’t let the feeling of being a beginner get in our way and prevent us from contributing to OSS because at the end of the day we are all beginners, always learning the latest technologies which are constantly emerging on the market.
non scholæ sed vitæ discimus
| Translates to: We do not learn for school, but for life.
Building a successful IT industry takes more than just good marketing. In this session Loganaden Velvindron from hackers.mu spoke about the factors influencing the IT industry both from a local and global standpoint. In order to layout the weaknesses Mauritius has in it’s IT industry, he compiled some data from Google Public Data and Github. One of the comparisons was about the difference between the amount of developers from Mauritius and Singapore who owned a Github account. The difference was quite significant with Mauritius being quite far behind singapore in terms of OSS contributions. The reason this comparison was carried out based on Github data was because nowadays having an online persona greatly increases the potential of being recruited by companies in the IT industry. It’s easier and more efficient for companies to recruit employees from a country where the majority of developers have an online identity. Otherwise they would have to carry out extensive research about the human capital they are being offered by a country since very little information can be found online about it’s labour force. Therefore being active online greatly helps towards bringing inward invesment.
Presenting comparison data between Mauritius and Singapore
Loganaden Velvindron
Avinash Meetoo, who was also present, seized the opportunity to speak about how automation is currently changing the landscape of the job market and why we need a young population that can compete on international grounds in order to meet future demands.
Avinash Meetoo speaking about automation
Your online persona needs to be controlled by you
| Literally what it means: build a distinguishable online identity to improve visibility
Loganaden also spoke about how hackers.mu has been contributing towards patching software vulnerabilities in OSS being used by millions of people and encouraged others to do the same.
Hackers.mu presentation on scribd:
https://www.scribd.com/document/343510322/Hackers-mu-building-a-successful-IT-industry
There were more sessions that followed after of course but we chose not to attend them. It’s not the end however. There are two more days to go! Oh, another thing they encouraged was blogging. So here’s my new blog and this being my first post…in ages.
]]>