What’s the answer to most of your coding questions? Some will say it’s Stackoverflow, while some will say it’s a co-programmer. What if we had a combination of both? Life would have been simple, right? So Github Copilot is here for you.
Introduction
Github Copilot is an AI (Artificial Intelligence) pair programmer that gives autocomplete style suggestions. This software is like a co-programmer friend next to you who can suggest the code. AI has been our support in our daily lives. It assists us in writing emails by completing sentences with suggestions, automatically generating photo albums, and how can we forget Google Assistant, the digital assistant that assists you in a variety of tasks. But developing software is still a manual job. Hence, to change this, Github introduced Github Copilot.
What exactly does it do and how?
Github Copilot is built by Github, one of the most prominent open-source platforms, where people contribute to various projects. Hence, a lot of code is available on GitHub, which is accessible to all. Meanwhile, an AI is a program that takes a large dataset and an algorithm to learn from patterns and features in the data that they analyze.
To explain it further, let’s assume that Github Copilot is a very senior developer who has seen billions of functions in code and a lot of projects. So if you ask him/her a query in your code, then there’s a high probability of getting a correct answer.
Github Copilot uses its large sets of data to give suggestions and autocomplete code.
For instance, you want to write a function in Python that takes two numbers and returns their sum.
If you write a comment, “ Function to print the sum of two numbers,” then GitHub copilot may suggest you :
def total(a,b) :
result = a+b
print ( a, “+”, b,”=”,result)
Isn’t that very cool? Surely it will be and will save a lot of time and effort to write code.
But it has some disadvantages also. Let’s dive into it.
Disadvantages
Many people think that this program has the potential to replace human developers, which means there’s a probability that it will take away the jobs. And with time, when it gets better and better, there is a high chance that this program will replace developers who don’t have logic-building jobs.
Is it credible? Maybe not right now. It’s still at the beginner stage and users have experienced wrong code suggestions.
Available to all developers but generally at $10/month or $100/year which might be unaffordable for some people.
It’s free for verified students, so if students get used to Copilot and start to rely on it then that could be harmful to their future.
Conclusion
Github Copilot is software that enhances the coding experience of users and makes it easier for them to develop software. It gives suggestions and can help coders get faster results. It also has some disadvantages that are mentioned above. Overall, it is a very innovative and useful piece of software, but only if used appropriately.
This Blog Series is meant for everyone willing to grab a look underhood the Blockchain and Security system. Doesn’t matter you are a freshman or a senior, do a diligent reading and try to comprehend whatever is written.
This is especially to show a “Road not Taken” usually by the undergrads of the college. Hope this insight helps!!!
In case of any query, shoot an email to aman0902pandey(@)gmail.com
author: aman Blog I – Part I – Day 01 Hey guys, I was just sitting an thinking to what else can be initiated in CEV, as an attempt to show my college people something “Cutting-Edge” and that can actually share with the undergrads here, to what is called as “The Road not taken!” With that I came up with a thought to start a series of micro-blogs on “Why?”…
author: aman Blog I – Part II – Day 02 At CEV, we basically focus on creating inquisitiveness rather than teaching a lot. After all we all are an autodidact, searching for motivation and peers around to learn, to what we call as “Classrooms”. Considering that, I am adding a subpart to the list below, which will be telling about a few very “well-known” CVE registered bugs. Prerequisites a basic…
author: aman Blog I – Part III – Day 03 As you have already seen, how critical the small bugs could be. The fatal injury they can cause to your data privacy can’t be overlooked. Creating a fault free system, is extremely tough, and this is what the world or your own startup demands from you. There has been a boom in AI startups. As simple as that, create an…
author: aman Blog I – Part IV – Day 04 The process to create a secure system, requires the knowledge of almost every domain in periphery of the application you are making, and the conjunction of that every technology. For eg. working on a Blockchain systems requires you to have an idea about what goes on in the Distibuted networks, the data structures, the contract flow, the cryptographic key generation,…
author: aman Blog I – Part V – Day 05 The challenges faced while creating a secure software is quite straight, and so straight are the solutions. This blog covers the very two terms to tell about how to measure the realiability of a secure system. Plus, after covering a lot of scenarios, I will try to connect the dots for you people, to be able to comprehend the further…
author: aman Blog I – Part VI – Day 06 This blog will cover the motivation to what lead me write this blog series. I will be covering a few intriguing bugs(in the very next BLOG), which could seriously be enlightening to the people reading, and yeah, may serve the target of this blog series, of showing the people to what is called as “The road not taken” Let’s go…
Blockchain is often described as merely the technology behind the “Cryptocurrencies” and people fail to perceive the avenues it opens for the greater good of mankind. In reality, Blockchain is to cryptocurrency as to what the Internet is to email. You never thought about applying blockchain in different domains for the upliftment of the society because you were too busy trading in Bitcoins and ether to mint money since that’s…
author: aman Blog II – Part I – Day 08 The last blog was written by Kaushik, the Applied Physics Freshman student, beautifully covered the diverse applications of Blockchain and the challenges/risks involved with the use of the current form of Blockchain technology.. This blog will cover straight definitions and their super intuitive explanations(as far as I can make), about the FORMAL METHODS & VERIFICATIONS. What are they? and Why…
author: aman Blog III – Part I – Day 11 Hope the blogs are going pretty well. In this very blog, divided into several micro-blogs, I’ll be explaining about the Hyperproperties. This particular thing will take you to the most obvious level of understanding the computer systems. And in this particular micro-blog, I’ll tell about hyperproperties, directly. Most of the work will be taken from the teachings of my mentor…
author: aman Blog III – Part II – Day 12 In this blog, we’ll vaguely discuss the Hyperproperties and Information Flow thing. As continued, this blog will contain the understandings from the Teachings of Dr Pramod, from SAT SMT Winter School 2018[1]. I will try to portray my understanding from his teachings and is working with him closely on Blockchain, I suppose it earned me a proper understanding. Let us…
author: aman Blog III – Part III – Day 13 Understanding Hyperproperties and Blockchain together. And how this could be so big! Let’s get in…. In this micro-blog Let us check this vaguely 2-trace property Hyperproperties Safety and Liveness – Another 2 very Important terms Blockchain & Hyperproperties How this could be so big? Safety and Liveness – Another 2 very Important terms As already explained, Property is a set…
author: aman Blog IV – Part I – Day 14 Let us get some dirty hands on Solidity, to exploit some very dangerous Ethereum – Solidity bugs. 2 Bugs/vulenrabilities in this very micro-blog. Covering bugs like, Denial of Service with Block Gas Limit, where the attacker exploits the bug by taking benefit from limited GAS available for each transaction, and unchecked_send() bug, which when made by mistake, could be a…
author: aman Blog IV – Part II – Day 15 Let us get some dirty hands on with some more Solidity code and exploit a few more Ethereum – Solidity bugs. Here we’ll discuss about the famous DAO attack, caused by the reentrancy bug. Let us do it… In this micro-blog delegatecall (the proxy calls) (SWC-112) (Inclusion of Functionality from Untrusted Control Sphere) DoS With Block Gas Limit (SWC –…
author: aman Blog V – Part I – Day 16 Hey People, I have been a little busy for last few days. Plus it took me some time to find the correct stuff that should fir right in the series. So now, after so many micro-blogs, it is possible that you must be wondering on How an attacker can even do this? For that I’ll be giving you people an…
author: aman Blog V – Part II – Day 17 Hey People, I have given a gist of how the EVM stores the smart contracts on its machine. In this I will directly discuss some technical things about, how deep you can dive into using just the information told about in the previoud micro-blog. Will try to give a glimpse, rest you can think of autonomously. Let’s do it… In…
Hey guys, in this Blog I will be discussing the Integration of Blockchain with IoT (Internet of Things). So, let’s proceed with what IoT actually is. What is Iot? Internet of things is an environment of connected physical devices embedded in various systems and accessible on the Internet, thus rendering these devices to become autonomous and can be controlled through their digital representation. The whole idea behind IoT is based on the…
author: aman Blog VII – Part I – Day 19 So, towards an end of this series. I was quite busy in some other blog so couldn’t write this one quickly. In this blog I’ll take up a case of a Security tool used in Ethereum Smart Contract bug discovery, ECHIDNA. I’ll try to unwrap a few things about how a security can be used to analyse a “script”, that…
author: amanBlog VIII – Part I – Day 20Hey there, Sorry for time being away. In the complete series the main focus was to get the undergrads of my college to a kind of “ROAD” that is not taken “usually”. This was something out of the world of Competitive Coding and Machine Learning. Since the Internet is Changing, and Blockchains are the one who is the Lead Changer of this…
We all have witnessed this technology for downloading our favorite movie which wasn’t available elsewhere. It is one of the most impeccable techs in the world of data sharing ever thought and brought to reality by a human.
Definition
“BitTorrent is a communication protocol for peer-to-peer file sharing (P2P) which is used to distribute data and electronic files over the Internet in a decentralized manner.”
The protocol came into existence in 2001(thanks to Bram Cohen) and is an alternative to the older single source, multiple mirrors (user) sources technique for distributing data.
A Few terms
BitTorrent or Torrent: Well, BitTorrent is the protocol as per its definition, whereas Torrent is the initiating file which has the metadata(source) of the file.
BitTorrent clients: A computer program that implements the BitTorrent Popular clients include μTorrent, Xunlei Thunder, Transmission, qBittorrent, Vuze, Deluge, BitComet, and Tixati.
Seed: To “seed” the file denotes to “download” the file.
Seeding: Uploading the file by a peer after their downloading is finished.
Peer: (The downloader) Peer can refer either to any client in the swarm or specifically to a downloader, a client that has only parts of the file.
Leecher: Similar to peer, but these guys have poor share ratio i.e. they doesn’t contribute much in uploading but only download the files.
Swarm: The group of peers.
Endgame: an applied algorithm for downloading the last pieces of any file. (Not the Taylor swift’s Endgame).
Distributed Hash Tables(DHTs): A decentralized distributed system. In layman language, hash tables are used to provide encryption using something similar to lock and key model.
Working
Let’s have the gist of what happens while torrenting.
The following GIF explains this smoothly.
First, the server sends the pieces(colored dots) of the files to a few users(peers). After a successful download of a piece of the file, they are ready to act as a seeder to upload the file to other users who are in need of that file.
As each peer receives a new piece of the file, it becomes a source (of that piece) for other peers i.e., the user becomes seeder, giving a sigh of relief to the original seed from having to send that piece to every computer or user wishing a copy.
In this way, the server load is massively reduced and the whole network is boosted as well.
Once a peer is down with downloading the complete file, it could in turn function as a seed i.e. start acting as a source of file for other peers.
Speed comparison: Regular download vs BitTorrent Download
Download speed for BitTorrent increases with an increase in peers joining to form the swarm. It may take time to establish connections, and for a node to receive sufficient data to become an effective uploader. This approach is particularly useful in the transfer of larger files.
Regular download starts promptly and is preferred for smaller files. Max speed is achieved promptly too.
Benefits over regular download
Torrent networking doesn’t depend on the server being distributed among the peers. Data is downloaded from peers which eventually become seeds.
Torrent files are open source and ad-free. An engrossing fact about the same is that TamilRockers use torrent to act as the Robin hood for pirated movies and songs, which is apparently an offensive act.
Torrent judiciously uses the upload bandwidth to speed up the network: after downloading, the peers’ upload bandwidth is used for sending the file to other peers. This reduces the load on the main server.
A File is broken into pieces that helps in resuming the download without any kind of data loss, which in turn makes BitTorrent certainly useful in the transfer of larger files.
Torrenting or infringing?
Using BitTorrent is legal. Though, Downloading copyrighted material isn’t. So torrenting isn’t infringing.
Most BitTorrent clients DO NOT support anonymity; the IP address of all peers is visible in the firewall program. No need to worry though, Indian govt. has clarified that streaming a pirated movie is not illegal.
Talking about the security concerns, each piece is protected by a cryptographic hash contained in the torrent descriptor. This ensures that modification of any piece can be reliably detected, and thus prevents both accidental and malicious modifications of any of the pieces received at other nodes. If a node starts with an authentic copy of the torrent descriptor, it can verify the authenticity of the entire file it receives.
Further Reading:
IPFS is not entirely new but is still not widely used. Read it here on medium.
In simple words, Intelligent Automation (IA), can be defined as the unification of the two most widely-used technologies, Artificial Intelligence (AI) and Robotic Process Automation (RPA), to bring about the digital transformation and extend the automation process in the business industry.
In case you are wondering what automation is, it is the application of technology to maximize the efficiency of a process with minimum human intervention. It relies on the prescriptive instructions and the structured data inputs given by the humans. This traditional automation has been utilized by companies for a long time.
WHAT ARE THE TECHNOLOGIES USED BY INTELLIGENT AUTOMATION?
Business Process Management (BPM)
It ensures the efficient coordination of the people, system, and data. Its main objective is to provide a solid operational process for the business tasks that requires decision making, data generation, data exchanging, calculations, and storage from the beginning to the end.
Robotic Process Automation (RPA)
The primary work of the RPA includes taking over repetitive tasks that have no exceptions, thereby reducing the human workload. This fast technology mainly replaces humans doing the simple work in business processes and that’s what makes it a robot. Due to this, people get more free time to focus on higher thinking skills and improve customer services.
Artificial intelligence (AI)
I am sure most of you are aware of this technology. This has enabled us to create systems and machines that can think and self-learn just like us. It embraces many concepts like Machine Learning (ML), Natural Language Processing (NLP), Big Data, Deep Learning, etc. Machines can now decipher patterns, analyze data, perform predictive analysis, and can implement decision making from previous experiences. This is how our Netflix and Youtube recommendations work.
RPA can only handle back-end business functions, while Intelligent Automation can handle the complex front-end tasks too. Adding Intelligence and BPM to the RPA, can increase the automating of complex business tasks and contribute to the incredible workflow, thereby improving the productivity of the company.
THE WORKING OF INTELLIGENT AUTOMATION
IA assists in the entire journey of automation, right from discovery to automation tasks to its optimization including all the front-end and back-end business complexities.
Initially, it observes the work carried out by the people, analyzes and identifies the optimal workflow, and then proposes a path for automation of the business process using AI technology.
Next, the AI tools are applied to the unstructured data including audio, video, and chat information to analyze the patterns in the data, reduce the repetitive tasks and make accurate predictions about productivity gains in the future.
Let’s take an example of emails and invoices to understand Intelligent Automation. The RPA is used for retrieving and downloading the files. On the other hand, AI is used to “read” the documents, extract the required information, and accordingly work upon it. The key advantages of using AI along with RPA, are accurate results and faster output with minimum human intervention.
In a nutshell, IA has expanded our abilities in Automation for the business process.
BENEFITS OF INTELLIGENT AUTOMATION
Organizing Complex Data – IA stores, analyzes, manipulates, and retrieves the data from inputs and sources and runs appropriate processes on them.
Eliminating Errors – IA improves the accuracy of the complex tasks and with time reduces the exceptional errors caused by self-learning.
Reducing Operational Obstacles – It can operate on unstructured data, optimizes the human-digital workforce, and boosts up the productivity by giving consistent results.
Increasing Cybersecurity – Manages to address the potential threats to the security by analyzing the network of data.
Liberate Employees – It eliminates the repetitive tasks and hence the human concentration is shifted to thinking of innovative and creative tasks.
APPLICATIONS OF INTELLIGENT AUTOMATION
More than 80% of business firms are already using this technology. Due to this, they have observed a significant increase in their ROI (Return On Investment).
FINANCIAL SERVICES
The digital workers can handle almost all the tasks from transfers to payment processes. It can also help the customers in office reconciliation in the back-end and customer-experience in the front-end.
HEALTHCARE SERVICES
Implementation of check-ups for surgery, record retention, post-surgery administration are some of the things that the IA is capable of, hence significantly reducing the manual processes and overhead costs.
TELECOMMUNICATION SERVICES
The IA offers great telecom services such as maintenance, installation, minimizing the downtime, and brings about customer satisfaction.
IA has succeeded in making our ideal Business Management a reality. The hybrid decisions of the human and the automation with intelligence have given a new definition to the digital transformation. It has proposed real solutions for our complex processes while simultaneously reducing our time, energy, and costs.
Thanks for reading, and will feel appreciated if followed by questions.
Landed here surfing through various amazing websites, wondering how they are designed? Interested in front-end development, but just a beginner? You are at the right place! It’s never too late to start. So let’s get started.
1 Introduction to HTML, CSS and BOOTSTRAP
1.1 HTML
Hyper Text Markup Language was created by Tim Berners-Lee in 1991, is a markup language used for structuring and presenting content on Web.
Created to build the structure of the website.
Consists of several elements represented by tags.
These elements are rendered on the browsers in form of viewable content.
1.2 CSS
Cascading Style Sheets (CSS) is a simple language created to style the HTML elements.
Styling can be done using tag names, class names and id’s assigned to various elements in our HTML document.
1.3 BOOTSTRAP
Bootstrap is a very popular and useful framework of HTML, CSS and JS for creating responsive website designs.
It has inbuilt HTML, CSS based designs for different elements like button, divisions, images, lists, tables and many more; which can be directly used to create a responsive design very fast.
2 BOOTSTRAP basics
2.1 Bootstrap GRID
Bootstrap gridding system divides the page into 12 identical columns and multiple rows, which you can use to place HTML elements. More than 1 column(s) can be combined to achieve more width.
The gridding system consists of 4 classes: xs – for screens less than 768px width sm – for screens equal to or greater than 768px width md – for screens equal to or greater than 992px width lg – for screens equal to or greater than 1200px width
example:
<divclass="row"><divclass="col-sm-4">...</div><divclass="col-sm-8">...</div></div>
here you can verify there are two columns having a
span on 4 and 8 columns of the bootstrap grid system adding up to 12
2.2 Bootstrap classes
Contextual inbuilt classes can be used on different HTML elements to style them without having to write CSS code ourselves(you can assume that CSS is already written for the classes we are using). In this section we will discuss some important contextual classes provided by bootstrap.
Classes for div containers .container and .container-fluid are the bootstrap classes which can be assigned to a container div .container sets the division width less than screen width by rendering left and right margins. .container-fluid sets the division width= screen width.
Classes for background color .bg-primary, .bg-success, .bg-info, .bg-warning, .bg-danger background color will automatically appear for the particular element when you assign any of these classes for it.
Classes for text color .text-muted, .text-primary, .text-success, .text-info, .text-warning, .text-danger text color will automatically appear for the particular element when you assign any of these classes for it.
Classes for button .btn,.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger,.btn-link button color will automatically appear for the particular button, when you assign any of these classes for it..btn-lg, .btn-sm, .btn-xs any of these classes when assigned to a button, resizes the button.
These are some of the important classes we discussed. Bootstrap provides many more classes for many other elements. We will be using these classes and introduce other classes further.
2.3 Modifying style using CSS
After use of contextual classes that bootstrap provides, you might be feeling limited in no. of options. For example; for text coloring using class, the range of colors that bootstrap provides is very less (red(danger) ,yellow(warning) ,green(success) … etc). also, the other styling is very particular, like the button border, border-radius, font etc. The question is, do we have to work with these restrictions? This way, all the websites made using bootstrap will look identical with just changes in the content. Fortunately this doesn’t happen. We can do all types of styling changes using CSS. We just have to assign a different class(not bootstrap classes) to the target element and set/update any CSS property of our choice. The CSS will be rendered on the target element.
example:
<divclass="container"><p>we are modifying CSS of a button.</p><buttonclass="btn btn-lg btn-danger colorchange"></button></div><style>
.colorchange{
background-color: #000000;
border-radius: 20px;
}
.colorchange:hover{
background-color: green;
transition:0.7s;
}
</style>
After a brief intro to the languages and frameworks we will be using further and learning bootstrap basics, lets get our hands on and start making a beautiful static responsive website.
3 Let’s start building 😉
Prerequisites
Basics of HTML and CSS
Some theory about bootstrap that we discussed above
3.1 Setting up environment to start off
Directory structure will be like-
Project folder
index.html
style.css
assets folder (containing images to be used)
To start off, all you need is a text editor. I prefer Brackets text editor because it comes along with autocomplete feature, which saves time and I’ll be using Brackets throughout. There are several alternatives to brackets like sublime text editor, atom etc.
<html><head><metacharset="utf-8"><metaname="viewport" content="width=device-width, initial-scale=1"><linkrel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"><scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script><scriptsrc="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script><linkrel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"><linkrel="stylesheet" href="./style.css"><title>
My first Bootstrap Template.
</title></head><body></body></html>
meta tag is used for proper zooming and rendering during the first load of the page on browser. Test run index.html once. Now we have set up the environment required for making our website. Don’t forget to link your CSS file to this in head tag.
3.2 Making different sections
The sections we will be building will be:
HOME
GALLERY
TEAM
CONTACT
Now, I’ll provide you the source code used. Notice the Bootstrap classes being used. Also watch the styling changes that I’m making in the CSS file to change the designs of the target elements. All sections here, are child elements of body tag. You can use my source code given below. Feel free to work around with your own ideas and tweaking.
HOME
This section will contain the page which first loads on user’s screen. This will contain Logo, Menu, Text in middle, Background image.
index.html:
<divclass="container-fluid home" id="home"><navclass="navbar"><divclass="container"><divclass="navbar-header"><aclass="navbar-brand" href="#">LOGO</a></div><ulclass="nav navbar-nav navigation" ><li><ahref="#home">HOME</a></li><li><ahref="#gallery">GALLERY</a></li><li><ahref="#team">TEAM</a></li><li><ahref="#contact">CONTACT</a></li></ul></div></nav><divclass="row"><divclass="col-sm-3"></div><divclass="col-sm-6"><h1>QUOTE:</h1><H3>"Dreams of great dreamners are always transcended,<br><br> - A.Kalam"</H3></div><divclass="col-sm-3"></div></div></div>
This section in our page will contain an image carousel with left and right swipe controls to view different images of gallery.
index.html
<divclass="container-fluid gallery" id="gallery"><divclass="container-fluid"><h1>Gallery</h1><center><p>Galleries are pages which contain large numbers of media content—almost always, images—with little or no supporting
text. Large numbers of galleries have been deleted from Wikipedia per WP:NOT. This is usually cited in this context as
WP:NOT an image gallery, which is a paraphrase of the official policy that Wikipedia articles are not mere collections
of photographs or media files. There are, therefore, very few gallery-articles left on Wikipedia in the main article
namespace (see [1]). This page defines how, when, and where gallery-articles should and should not be used. It is not
concerned with the use of the gallery feature within pages that are predominantly text-based articles</p></center><divid="myCarousel" class="carousel slide" data-ride="carousel"><!-- Indicators --><olclass="carousel-indicators"><lidata-target="#myCarousel" data-slide-to="0" class="active"></li><lidata-target="#myCarousel" data-slide-to="1"></li><lidata-target="#myCarousel" data-slide-to="2"></li></ol><!-- Wrapper for slides --><divclass="carousel-inner"><divclass="item active"><center><imgsrc="https://hrexecutive.com/wp-content/uploads/2018/10/GettyImages-869538734broken700-700x450.jpg"></center></div><divclass="item"><center><imgsrc="https://kubesystems.com/wp-content/uploads/2016/05/bg-dark-3-700x450.jpg"></center></div><divclass="item"><center><imgsrc=""></center></div></div><!-- Left and right controls --><aclass="left carousel-control" href="#myCarousel" data-slide="prev"><spanclass="glyphicon glyphicon-chevron-left""></span></a><aclass="right carousel-control" href="#myCarousel" data-slide="next"><spanclass="glyphicon glyphicon-chevron-right""></span></a></div></div></div>
This section of our page will display 3 team members in form of cards. The cards will contain personal information about each member.
index.html
<divclass="container-fluid team" id="team"><divclass="container"><h1>Our Team</h1><divclass="row"><divclass="col-sm-4"><center><divclass="shift s1"><imgsrc="https://biobaseddelta.com/wp-content/uploads/2018/08/person-450x340.jpeg" />
<h3>Member 1</h6><span>Designation</span><br><br><iclass="fa fa-facebook"></i><iclass="fa fa-twitter"></i><iclass="fa fa-google-plus"></i><iclass="fa fa-instagram"></i><center><p>
A team is a group of individuals (human or non-human) working together to achieve their goal.
As defined by Professor Leigh Thompson of the Kellogg School of Management, "[a] team is a group of people who are
interdependent with respect to information, resources, knowledge and skills and who seek to combine their efforts to
achieve a common goal".[1]
Team members need to learn how to help one another, help other team members realize their true potential, and create an
environment that allows everyone to go beyond their limitations.[4]
</p></center></div></center></div><divclass="col-sm-4"><center><divclass="shift s1"><imgsrc="https://biobaseddelta.com/wp-content/uploads/2018/08/person-450x340.jpeg" />
<h3>Member 1</h6><span>Designation</span><br><br><iclass="fa fa-facebook"></i><iclass="fa fa-twitter"></i><iclass="fa fa-google-plus"></i><iclass="fa fa-instagram"></i><center><p>
A team is a group of individuals (human or non-human) working together to achieve their goal.
As defined by Professor Leigh Thompson of the Kellogg School of Management, "[a] team is a group
of people who are
interdependent with respect to information, resources, knowledge and skills and who seek to
combine their efforts to
achieve a common goal".[1]
Team members need to learn how to help one another, help other team members realize their true
potential, and create an
environment that allows everyone to go beyond their limitations.[4]
</p></center></div></center></div><divclass="col-sm-4"><center><divclass="shift s1"><imgsrc="https://biobaseddelta.com/wp-content/uploads/2018/08/person-450x340.jpeg" />
<h3>Member 1</h6><span>Designation</span><br><br><iclass="fa fa-facebook"></i><iclass="fa fa-twitter"></i><iclass="fa fa-google-plus"></i><iclass="fa fa-instagram"></i><center><p>
A team is a group of individuals (human or non-human) working together to achieve their goal.
As defined by Professor Leigh Thompson of the Kellogg School of Management, "[a] team is a group
of people who are
interdependent with respect to information, resources, knowledge and skills and who seek to
combine their efforts to
achieve a common goal".[1]
Team members need to learn how to help one another, help other team members realize their true
potential, and create an
environment that allows everyone to go beyond their limitations.[4]
</p></center></div></center></div></div></div></div>
And our first bootstrap website design is ready! Hope you enjoyed it. You can now create more such designs using even more variety of elements and classes provided by bootstrap. Try experimenting different combinations of styling and make your design attractive to the viewer. Thank you! keep learning, keep growing.
I assume you already know about the key concepts of DLTs before you start reading this blog. If this is the case, let’s know more about Hyperledger Fabric.
What is Hyperledger Fabric and does it suits your use-case or application?
Hyperledger Fabric is a private and permissioned 🔐 DLT or a Blockchain to be precise, which comes under the umbrella of Linux Foundation.
As it is permissioned, one can not join or leave the network at any time. The members 👨 of a Hyperledger Fabric network enrol through a trusted Membership Service Provider (MSP), which we will discuss later.
The reason why it gains a mass adoption in Blockchain Marketplace is its modularity & flexibility. It allows to plug in different consensus algorithms, different database to save the data in ledger, and even allow to use different MSP to enrol users.
Hence, if you are looking for a Modular Permissioned-Blockchain Enterprise solution, Fabric can be the choice which you will definitely like.
Architectural Components of Fabric:
Like any permissioned blockchain network, Hyperledger Fabric has various actors & components like orders, peers, client applications, MSPs, CAs, etc. Let’s discuss them one by one.
1. Membership Service Provider:
Any of the actor 👨 in Fabric has an identity & according to the identity, the exact permissions and role of the actor are decided. So, from where do these identities come from and who decide the permissions? Yes, the MSP is the entity that defines rules, permissions and roles of different actors, whose identities have been issued by a valid CA(Certificate Authority). The documentation says:
MSPs turn verifiable identities issued by CAs into the members of a blockchain network.
Summing up, an MSP abstracts away the protocols behind issuing certificates, validating certificates, and user authentication with all the cryptographic mechanisms, handled by CAs.
Note: Fabric comes with a built-in CA component, called Fabric-CA to allow you to create CA on the blockchain network. However, this component is pluggable and you still have to options to choose from other available CAs.
2. Peers A peer is a node that hosts instances of the ledger and chaincode in the blockchain network. So, if an application or an admin wants to query the ledger or update the ledger then a connection with a peer is required.
A peer in the fabric network can hold more than one ledgers, which can be governed by one or more chaincodes.
A peer hosting multiple ledgers. Peers host one or more ledgers, and each ledger has zero or more chaincodes that apply to them. In this example, we can see that the peer P1 hosts ledgers L1 and L2. Ledger L1 is accessed using chaincode S1. Ledger L2 on the other hand can be accessed using chaincodes S1 and S2.
3. Orderer
An orderer node packages the transactions into a block 📦, which is then sent to peers, and after verification ✔️ appended to the ledger.
In a fabric network, there are various provisions for the configuration of orderer nodes. We can use a single orderer node (SOLO, deprecated from v2.0) or also a group of orderer nodes can be used to order the transaction and form a block, and this forms an ordering service.
As Fabric is a permissioned blockchain, and real message passing can take place between the nodes, so it doesn’t depend on probabilistic consensus algorithm for ordering of transactions like in the case of Bitcoin and Ethereum. So, all you have to do is to use the consensus algorithm provided by fabric, or you can plug in your own implementation.
4. Channel
Channel provides a mechanism for the peer to communicate & transact privately. Conceptually, each of the ledger in the network is associated with a channel and the peers which have joined the channel can view and transact on that ledger only.
In the above case, three channels C1, C2 &C3 exists, conceptually shown by black, blue, & orange rectangle. Peer P1 & P3 have joined blue channel(C2) and black channel(C1) and P2 & P4 have joined the orange channel(C3) and black channel(C1). So, the Blue ledger is maintained by P1 and P3, whereas Orange Ledger is maintained by P2 and P4, but black ledger is maintained by P1, P2, P3 and P4.
Here is another reference from Fabric’s Documentation:
P1 & P2 have joined channel C1 and thus can access the ledger L1. P2 & P3 have joined channel C2, thus can access ledger L2. The interesting part is peer P2 have joined both the channels, thus can access both the ledgers.
5. Ledger
Fabric’s Ledger 📒 is a distributed database with two components –
World State — the state of the ledger at a given point in time. So, world state stores the most recent value of assets in the form of key-value pairs. Transaction Log — records all transactions which have resulted in the current value of the world state; it’s the update history for the world state.
A Ledger L comprises blockchain B and world state W, where blockchain B determines world state W. We can also say that world state W is derived from blockchain B.
A Simple Transaction:
Whenever a transaction is performed, it modifies the world state and the record of the transaction is made in the log of the ledger.
Note:
In Fabric, the database associated with the world state is pluggable and comes with two choices LevelDB & CouchDB.
Transaction log doesn’t need to be pluggable.
6.Smart Contract & Chaincode
Smart Contracts are the codes that contain the business logic in the fabric-network. It defines the business cycle of an asset in the world state. So the business logic inside the smart contracts governs all the transactions.
Here is a pseudo-code smart contract from the documentation:
Smart Contracts are packaged into the Chaincode for deployment on the blockchain-network.
Think of smart contracts as governing transactions, whereas chaincode governs how smart contracts are packaged for deployment.
There are also some chaincodes which work on lower-level, to perform the necessary tasks in the blockchain-network, and they are called system chaincodes.
It is better to cover the chaincodes & transaction life-cycle in a different blog, later on 😺.
In the complete series the main focus was to get the undergrads of my college to a kind of "ROAD" that is not taken "usually". This was something out of the world of Competitive Coding and Machine Learning. Since the Internet is Changing, and Blockchains are the one who is the Lead Changer of this internet revolution. I guess, transformation would be the right word.
We have discussed about a lot of things, let's put them together.
In this micro-blog
Connecting the Dots
Connecting the Dots
So, we've talked about a lot of things in the series of the Blogs. However, I must say that I couldn't cover everything I knew in detail, but here I'll try to connect the dots for you.
Let me list the blogs with the topics they covered. (You are free to skip through the list, just come back if you want to grab a look at what has been already done.)
We talked about various sotware attacks, attacks on Blockchains, how terminologies(soundness, completeness) could mean so much, vulnerabilities, specs/invariants, bugs in few of the most trusted spaces. We also had 2 guest lectures in the series. Let me now end up with a complex case in case of Bitcoin.
The case leaves a possibility for an attacker to Partiotion the Bitcoin network into multiple parts, creating a possibility to fork bitcoin into 2 parallel chains. Let's see how it works:
BGP Highjacking attack on Bitcoin
The Bitcoin network is highly centralised, even after known to be a decentralised network. And even if the Blockchain is completely encrypted the routing of messages is still very much open. The routes are easily deductible to the adversaries.
To explain it more, the complete Bitcoin network is spread to multiple ISPs (Internet Service Providers), which are again built up of multiple network clusters, called as Autonomous Systems(ASes). To communicate some messages between these ASes uses a protocol called the Border Gateway Protocol(BGP). This complete complete procedure is termed as Internet Routing.
~13 ASes host about 30% of the entire network, while 50 ASes host the 50% of the Bitcoin Network
Any attacker with accesss to the routing infra, can Highjack the BTC network. As a result of attacking mentality they can partition the BTC network in several parts. Probably bringing a major network towards their side.
Now they can add as many blocks in their side, and broadcast the chain in the network. By the general rule of Bitcoin network, "the longest chain is considered to be the final chain", the malicious one gets updated in the real etwork.
"hese attacks, commonly referred to as BGP hijacks, involve getting a router to falsely announce that it has a better route to some IP prefix."
"50% of Bitcoin mining power is hosted in only 39 prefixes (i.e., in 0.007% of all Internet prefixes). This allows an attacker to isolate ~50% of the mining power by hijacking only these 39 prefixes. Much larger BGP hijacks (involving orders of magnitude more IP prefixes) are routinely seen in the Internet today."
You see this is a big thing. The Internet Routing has a developing history of more than 35 years, and the BGPs are still considered to be stable. It is said that, Bitcoin has already gone through hundreds of BGP routing attacks, and the attacks are still not deductible.
So turning back and seeing the dots to be connected, we find,
a 100% secure system isn't possible
not a lot of people are aroung the security of these systems
the higher institutes are still hustling to create an environment of secure information exchange
developing techniques to check a system for its security is extremely difficult, and this is the place where actual computer science comes in
the attack surfaces are open in Hardware devices as well,
the Finance field is already being exploited for its vulnerabilities and application for the Blockchain tech
One thing to notice is that, even if the Blockchain tech fails, there will be a definite transformation in the internet we will be using tomorrow.
The security is everything. For a world running on Data, User's privacy, access to the systems comes in first.
So, that should be a lot of motivation I guess. I don't have any pre compiled list of the things, one can work on in the future, but BLOCKCHAIN + SECURITY, is surely the most citable area of work.
I'll try to cover more in details sometime. And yeap, I never read the Blogs twice, so pardon for the errors.
Hello devs!🎮 Let us continue with the game👾 Now we need to implement these functionalities to complete the game:
Collide bullets with aliens
Healthbar for the player
Respawning of aliens
Background
Score calculation and game over
Let’s do it! 🚀
Phase 4
So we will begin with the code we left last time. If you don’t already have it, you can download it from : HERE So we will follow the order of functionalities given above.
Bullet alien collision💥:
So the alien should die if the bullet touches the alien’s body. To do this we will implement a distance() function which will take the coordinates of the alien and the bullet in consideration and check if any collisions occur. We will be iterating through the array Aliens and the array Bullets to check for each pair of {alien , bullet} to check for a collision. Let’s code!
We are traversing through both the arrays and checking for 4 conditions :
Absolute distance between bullet and alien in x axis is less than or equal to 18 (as the aliens are almost 36px in width).
The y coordinate of the bullet is less than the y coordinate of the alien.
The y coordinate of the bullet is greater than ( alien.y - 20 ).(as the aliens are almost 40px in height)
The y coordinate of the space shuttle (center) is at least 38px below the aliens center.(this ensures that the alien and space shuttle are not )
If these conditions are satisfied, we :
Update number of kills (variable kills++)
Send the bullet out of the screen (y = -10)
Add a new alien in place of the dead alien.
Source Code : Code Link Location in repository : \Phase 4\BulletCollisions
Try and run this code yourself to see the output.
Healthbar❤️:
For this we define a new variable called healthBarHeight. So out health bar height will depend on the health variable, which is initially valued 90. As the aliens touch the shuttle, or the aliens *pass beyond the screen *, the shuttle’s health is reduced. Turning it into code :
//Drawing the health bar
c.beginPath();if(health ==90){
c.fillStyle ="green";
healthbarHeight =90*6;}elseif(health ==60){
c.fillStyle ="orange";
healthbarHeight =60*6;}elseif(health ==30){
c.fillStyle ="red";
healthbarHeight =30*6;}else{
healthbarHeight =0;}
c.fillRect(20,20,20, healthbarHeight );
c.closePath();
c.fill();
Note : All this is written inside the draw() function.
Well we also need to handle the cases where the player loses health. Write this inside the draw() function :
Note : As soon as any of the conditions are satisfied, we have also killed the alien. Try removing the last 2 lines inside the if statement and then run the code and see the outcome.
The healthbar would looks something like this :
Source Code : Code Link Location in repository : \Phase 4\Health
Note : We still need to add the “Game Over” condition. We will do that at the end.
Before moving forward, let us code to increase the difficulty with score. I.e. as kills increase, so will the speed of the aliens and the number of aliens:
var level =0;//Declare this at the top //Increase difficulty with kills //Add this inside "Checking for bullet kill" after Aliens[j] = addAlien; if(kills %10==0){
alienSpeed +=0.1;}if(kills %20==0){
level++;var levelupAlien =newalien(Math.random()*(window.innerWidth-100)+60, Math.random()*(window.innerHeight/2-300),Math.floor(Math.random()*2));
Aliens.push(levelupAlien);
maxAliens++;}
At every 15 kills we add a new alien, and at every 10 kills we increase the speed. Source Code : Code Link Location in repository : \Phase 4\LevelUp
Background✴️:
The game is set in outer space, so whats missing? Right! Stars! Lets code this separately first:
var maxStars =150;//Stars on the screen var starSpeed =5;//Star object varstar=function(x,y ,rad){this.x = x;this.y = y;this.rad = rad;}
Stars =newArray();//Array of stars //Filling the array for(a =0; a<maxStars ; a++){var temp =newstar(Math.random()*(window.innerWidth-20), Math.random()*(window.innerHeight-20),Math.random()*3);
Stars.push(temp);}
Now we will be drawing these stars, but every time a star leaves the screen we will place it back on the top. Hence it will be like a single screen just repeating itself. This is how most of the infinite runner games like temple run and subway surfers take up just a few MB of space. So here goes the draw function :
functiondraw(){//Clear window
c.clearRect(0,0,window.innerWidth, window.innerHeight);//Draw stars for(j =0;j<maxStars ; j++){
c.beginPath();
c.fillStyle ='rgba(255,255,255,0.7)';
c.arc(Stars[j].x,Stars[j].y,Stars[j].rad ,0, Math.PI *2,false);
Stars[j].y += starSpeed;//This part send the star back to the top if(Stars[j].y >= window.innerHeight-20){
Stars[j].y =0;}
c.closePath();
c.fill();}requestAnimationFrame(draw);}draw();
Result:
Source Code : Code Link Location in repository : \Phase 4\Background
Now we need to add this to the game . The background will be drawn regardless of what’s going on in the game so let us straightaway merge the code in the game code, resulting in :
Source Code : Code Link Location in repository : \Phase 4\BackgroundMerged
Its time to wrap it up by calculating the score and handling the game over condition.
Game 0ver🎌:
To calculate the score there may be different ways. It totally depends on you how do you want to calculate the score. I personally feel it is best to check the Accuracy and Level Reached:
var alive =1;//1 alive 0 dead ....functiondraw(){//Enter code to draw Stars ....if(alive){//Rest of the game ....//Check if alien touches shuttle or crosses screen to reduce health ....if(health ==0)//Check if health is 0
alive =0;....}else{//Score screen
c.beginPath();
c.fillStyle ='rgba(255,255,255,0.5)';
c.font ="30px Calibri";
c.fillText("GAME OVER!",(window.innerWidth-20)/2-55,(window.innerHeight-20)/2-30);
c.fillText("Kills : "+ kills ,(window.innerWidth-20)/2-15,(window.innerHeight-20)/2);
c.fillText("Accuracy : "+(kills*100/totalBullets).toFixed(2),(window.innerWidth-20)/2-55,(window.innerHeight-20)/2+30);}requestAnimationFrame();}draw();....
This is how the game over screen will look:
So we are now ready with the final game: Source Code : FINAL GAME Location in repository : \Phase 4\Final
I’ve added a flickering effect to the alien as it looks cool. 😉 Enjoy playing and share it with your friends too! You can now experiment with the code to add your own effects, functionalities, audio, video and much more.
So let’s discuss them one by one, with the situations in which they can be used.
Finding Regression Error using ‘git bisect’:
‘git bisect’ will work as a life-saver spell if you need to find a regression bug introduced in your software accidentally. Such type of errors are common in group projects or open-source, in which some contributor unintentionally changes certain important piece of code, which breaks some other functionality, and it remains unnoticed for a long period of time. So, when such bug comes under notice, the main task of the maintainer is to track when this bug/breakage is introduced or to say before which commit, all things were working correctly.
So, the general approach to this problem would be to find a commit at which things were working correctly, and perform a binary search between the good commit and the latest commit to find the commit at which things were broken. This will narrow down the consideration window with few rounds of compiling.
Of course, it is a perfect approach, but doing it manually and keeping an eye on the good and bad commit makes the process cumbersome. So here comes the ‘git bisect’ for rescue.
To find the bug, firstly checkout to master and handover the git the responsibility to find the regression bug by firing:
git bisect start
By the above command, before the git starts the process you need to give a reference to a bad-commit and a good commit.
Assuming things are bad at the current HEAD, for giving reference to a bad commit use:
git bisect bad HEAD
After that, to perform a binary search, a reference to a commit, where things were working as expected, is needed. So, just take the hash of good-commit and use:
git bisect good <git-hash>
After this stage, git will start the process to find the breakage point. It will automatically checkout to the intermediate commits. All you need to do is to mark the checked-out commit as good or bad by:
git bisect good
git bisect bad
Let’s see this with example. Consider the file:
In this file, at line-4 the correct word was ‘Blockchain’, but accidentally it has been changed. So let’s find out the commit, before which everything was good.
Here is the git-log for reference:
Let’s start the git bisect and as things were good at ‘add Blockchain’ commit. So let’s take it as a good commit and take the latest commit as bad commit.
You can see that git take over the task of divide and conquer, and also displays the rough steps remaining in finding the regression point. So, all you have to do now is to mark the current checked out commit as good or bad.
After seeing the file at ‘add compiler design’ commit, we can conclude it as a good commit, as the spelling is correct there. So, let’s mark it as good commit.
The next bisect point is a bad commit, so let’s mark it.
Again, it’s a bad commit.
Whoops, we just found the commit at which things the word was misspelt. It is the commit with the message ‘add MP’.
In the same way, you can find regression bugs very easily in big projects :).
It saved me many hours, so will also save yours.
Finding the culprit for breaking the code by ‘git blame’:
The official documentation says, git blame-
Annotates each line in the given file with information from the revision which last modified the line. Optionally, start annotating from the given revision.
So in short, it is used to find the person in a group project, who changed the line and responsible for breaking the project.
So, git blame command will give you the information about the latest commit that changed the line, for all the lines accompanied by the author of the commit.
Command:
So let’s try this out by :
git blame <path-to-file>
Clearly, you can see the latest commit hash which changed the Line-4. Although the author in these commits are same. But if it is a team project, you can also judge which person broke the code, so that you can blame him, to have a coffee :).
You can also use GitHub to find the git blame for a line:
Similarly, GitLab also has the option to view blames:
That’s all for this article and Don’t forget to ‘Clap’, if you have found it useful.
Hey, devs!🎮 So we are all set to begin creating the game👾. Let’s do it!
Phase 3
Before we jump into coding, let us plan things. Objects we will need :
Player (The space shuttle)🚀
Alien👾
Bullets
Let us define these objects :
//Shuttle objectvarshuttle=function(x,y){this.x=x;this.y=y;}//Alien objectvaralien=function(x,y){this.x=x;this.y=y;}//Bullet objectvarbullet=function(x,y){this.x=x;this.y=y;}//Since we will handle multiple bullets and AliensvarBullets=newArray();varAliens=newArray();
Other variables that we will need to define are :
vartotalBullets=0;//bullets on screenvarhealth=90;//health of playervarkills=0;//total aliens killedvarmaxAliens=5;//Max aliens on the screenvarbulletSpeed=7;//Speed of the bulletvaralienSpeed=0.2;//Speed of the aliens
Note : These values are selected by hit and trial. Now we will need alien and shuttle sprites. I have already made these using fillRect() functions. Download code from this link : Code Link Location in repository : \Phase 3\Sprites Note : It is ok if you don’t try to understand drawShuttle() and drawAlien() as it isn’t very important, those are just figures made using rectangles. You will be using images for sprites in the future mostly. Result :
Space Shuttle will be positioned at the bottom center. Alien will have a constrained random position at approximately the top part of the screen. Now we will work on the same code that you’ve downloaded. Let us add an event listener to enable the space shuttle to move using the arrow keys. (As we did in the previous post)
varkeys=[];//Add this before the draw() definitionwindow.addEventListener("keydown",keysPressed,false);functionkeysPressed(e){// store an entry for every key pressedkeys[e.keyCode]=true;window.addEventListener("keyup",keysReleased,false);}functionkeysReleased(e){// mark keys that were releasedkeys[e.keyCode]=false;}
So we need to adjust the position of the space shuttle before re-drawing it on the canvas. Inside the draw() function, before drawing the space shuttle :
//Handling arrow key presses and shuttle movement boundaries// leftif(keys[37]){if(player.x >= 70)player.x-=shuttleSpeedh;}// rightif(keys[39]){if(player.x <= window.innerWidth-50)player.x+=shuttleSpeedh;}// downif(keys[38]){if(player.y >= window.innerHeight/2)player.y-=shuttleSpeedv;}// upif(keys[40]){if(player.y <= window.innerHeight-baseBottomh-midBottomh-cannonh)player.y+=shuttleSpeedv;}
Run this code to check what are the constraints to the movement of the space shuttle. Note : shuttleSpeedh and shuttleSpeedv respresent horizontal and vertical velocity. These have been defined in the file at the top. Result : Here’s the source code : Code link Location in repository : \Phase 3\MovingShuttle
Now let us fill the array of aliens:
//Initial array of aliensfor(a=0;a<maxAliens;a++){vartemp=newalien(Math.random()*(window.innerWidth-100)+60,Math.random()*(window.innerHeight/2-300));Aliens.push(temp);//We already defined this array}
To draw all these aliens we need to make changes in out draw() function. Just add a loop where we are drawing a single alien:
for(a=0;a<Aliens.length;a++)drawAlien(Aliens[a]);
Result : Here’s the source code : Code Link Location in repository : \Phase 3\SpawnAliens
Moving on, we now need to make the space shuttle launch bullets. This will happen on pressing spacebar. But only 1 bullet will be launched on pressing spacebar once. So the event we use will be keyRelease. Remember we have already defined it? Let us add more functionality to it. js function keysReleased(e) { if(e.keyCode==32){ //keycode of spacebar var temp = new bullet(player.x , player.y - midBottomh - cannonh); totalBullets++; Bullets.push(temp); } } Now let us draw all the bullets on the canvas;
Last but not the least lets draw these bullets on the canvas and make them move . This should be added inside draw():
//Check bullets that left the screen and remove them from arrayfor(a=0;a<Bullets.length;a++){if(Bullets[a].y <=0){Bullets.splice(a,1);//Removes 1 element from the array from index 'a'}}//Update bullet coordinates to make it move and draw bulletsfor(a=0;a<Bullets.length;a++){Bullets[a].y-=bulletSpeed;//Already defined at the topdrawBullet(Bullets[a]);}
Result : Here’s the source code : Code link Location in repository : \Phase 3\Bullets
Moving on to the last thing that we will be doing in this phase. Make the aliens move.
Aliens[a].y+=alienSpeed;//Add this inside the loop//where we use drawAlien();
So we have set the aliens in motion!👾
Final source code for this phase : Code Link Location in repository : \Phase 3\Final
We are almost done with the game. This phase was about the aesthetics of the game. Next phase will be the final phase where we will add the game logic and a final touch with a good background and a visible healthbar. Do leave comments/suggestions if any. Cheers!🍺