teleren/devto huggingface dataset:
build up a documentation site from markdown files
Tags: javascript, html, markdown, document
Published: 2021-10-06 09:56:41

Finally done for this stage. Now I can keep one copy of document in markdown format for github, web documents and local documentation.

Just a simple [index.html](https://github.com/casualwriter/powerpage-document/blob/main/index.html) page, to build up a documentation site from markdown files. 

Simply copy the following  file to web server, then everything is DONE!. 

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ddy0klo2plah08uadmae.png)

 
layout of [Documentation Site](https://pingshan-tech.com/powerpage/doc)


![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8d5c6ourlxyc9mrtlp2s.png)
 

[index.html](https://github.com/casualwriter/powerpage-document/blob/main/index.html) is a simple document framework for showing markdown files with auto-TOC navigation. It is a single html page in **pure javascript without dependence**. 

The program also include a **simple markdown parser** (55 lines js code) and a simple TOC (table-of-content) in pure javascript. 


a little rush, kindly advise,

have a nice day,


-------------
* github [powerpage-document](https://github.com/casualwriter/powerpage-document)
* source code : [index.html](https://github.com/casualwriter/powerpage-document/blob/main/index.html)
* sample site: [Powerpage Documentation](https://pingshan-tech.com/powerpage/doc)
* document of [supported markdown syntax](https://pingshan-tech.com/powerpage/doc/?file=pp-document.md)
Online Video Interview Software For Hiring
Tags: career, recruiter, recruiting
Published: 2021-10-06 12:13:44

Video recruiting software has increasingly become popular among businesses due to its ability to bring recruitment automation into the recruitment process. It helps the hiring managers to connect with the worldwide talent from afar and makes hiring faster, automated, and convenient than ever before. Online video interviewing tools allows you to record interview questions once for all. And let the candidates record themselves answering the interview questions from wherever and whenever they want.  Best of all, pre-recorded video interview brings recruitment automation to your HR team with modern and advanced digital technology and helps you hire the most suitable candidates for the position. Besides, integrating digital hiring solutions in your HR team helps you improve hiring efficiency and make your recruitment process comprehensive. Try a free demo now: https://www.jobma.com/
淺談 Jamstack
Tags: jamstack
Published: 2021-10-06 16:20:13

本文解釋本人對 Jamstack 與相關的技術名詞以及與傳統 CMS 架構的異同的理解。

我們從已經為人熟知的 CMS 開始說起。

## CMS

CMS（內容管理系統，content management system）就是一般認知的網站系統，所謂的「內容」泛指網頁本身、網頁內的欄位（標題、作者、內文、品名、金額、標籤、時間等等等等等）、網頁的階層關係、網頁的外觀與樣式，CMS 不是只用於描述形像類網站，也包含功能型網站，因為不論何種網站，都只是內容、外觀、業務邏輯上的差異，所以它們的管理系統一概以 CMS 泛稱之。

最知名的 CMS 就是那 WordPress，以數量龐大的外掛與佈景著稱，常用於架設 blog、形像、購物網站。WordPress 通常搭配 MySQL 一起工作，同時 WordPress 也管理了從資料庫、後端管理以及前端網頁的全部工作，而與之對比的就是 headless CMS。

## Headless CMS

Jamstack 的 J A M 分別代表 JavaScript、API、Markup，其實可以簡單的理解為前後端分離的架構，在 Jamstack 這種前後端業務分離下的 CMS，只專注於內容的管理，並透過 API 與前端溝通，CMS 並不涉及前端頁面的呈現，這種不管前端外觀的 CMS，我們稱為 **headless CMS**，就是沒頭沒臉的 CMS，只專注於內容的管理與資料的供應。

用 headless CMS 有幾項好處：

- 減少前後端的耦合程度，降低 CMS 系統的複雜度。
- 可以有多種前端，web、app 都可以，因為前端是透過 API 與 headless CMS 溝通，所以一個 CMS 可以供給多平台前端，滿足現今多元平台的市況。
- 易於橫向擴展，當單台 headless CMS 遇到性能滿載時可搭配雲端平台的機制動態擴展應付突發流量。

也有缺點：

- 開發人員必須熟悉至少兩套框架：headless CMS 與前端框架。

Headless CMS 以整體專案的角度來看系統的複雜度反而是變高的，有可能要分成兩組人作業，並且必須考慮到 API 的 schema 規格，反之在 WordPress 下幾乎完全不用考慮前後端資料拋接的事情（但有客製化外掛的話還是會碰到）。

## 為何前後端分離？

大前端時代已經是不可擋的趨勢，在前端框架大爆發的時代，幾乎都已經把能搬的業務邏輯都搬到前端去做，後端就專注於管理資料與提供 API 給前端用而已，而再往前追朔其實也就是因應 iPhone 帶起的行動 app 的趨勢，開發者為了能夠有統一的 API 供應多平台使用，傳統的統包型 CMS 逐漸被 Jamstack 風格的 headless CMS 所取代。

再回頭看 WordPress，雖然 WordPress 本身不是 headless CMS，但 WordPress 是有提供 API 的，所以想拿 WordPress 做為純後端其實是可行，但問題是 WordPress 自己的前後端高度耦合，難以拆分，所以喜歡 Jamstack 風格的開發者就不太喜歡拿 WordPress 做為後端系統使用。

相較於 WordPress，另外一套較年輕的 Ghost 也是知名的 CMS，Ghost 最初也是設計成全包型 CMS，在 Jamstack 興起後，或許是歷史包袱不像 WordPress 那麼重的關係，Ghost 逐漸把前後端的耦合度降低，目前 Ghost 也可以是 headless CMS，用戶可以自由選擇要用 Ghost 自己的前端框架或是其它的前端框架。

不論是 WordPres 或是 Ghost，它們都是需要搭配資料庫才能運作的系統，而資料庫系統本身也會佔用主機資源（$$$），所以對於小規模專案的需求又有人發展出不用搭配資料庫的 CMS，這樣的 CMS 被稱為 flat-file CMS。

## Flat-file CMS

望文生義，所謂的 flat-file CMS 即用檔案當資料源的 CMS，相較於 WordPress、Ghost 必須搭配資料庫使用，flat-file CMS 的內容都是以檔案的形式存在於主機內，檔案格式通常會是 Markdown 或 JSON 或 HTML，當然這些檔案內的 schema 也是要經過適當定義的才能被 CMS 正確讀取。

其實 flat-file CMS 與 WordPress 相當類似，只有在資料儲存層上有差異。

一些 flat-file CMS 的特點：

- 資料以檔案方式儲存，不以資料庫儲存。
- 通常不會是 headless CMS，而是像 WordPress 那樣是前後端全包型的 CMS，因為檔案作為資料源不比資料庫，難以提供高效能的 API 服務（此點非絕對）。
- 雖然資料源是檔案，但最終前端頁面也是由檔案＋模板動態產生的，所以雖然主機不用跑資料庫，但還是要跑 PHP 或其它語言程式。

## Headless CMS & flat-file CMS

綜合前文所述，flat-file CMS 的「flat-file」是對底層資料儲存面的形容；而 Jamstack 風格的 headless CMS 的「headless」是對前端模組的形容，是不同面向的描述，因此兩者之前並不存在比較關係，容易讓人（我）疑惑的原因只是它們都剛好在同個年代興起而已。

Headless CMS 沒有前端模組，它的資料儲存可以是用資料庫或檔案；flat-file CMS 沒有用資料庫，它可以有前端模組或沒有前端模組。

## Static site generator

來到最後一關，static site generator，靜態網站產生器，簡稱 SSG。

SSG 更單純，SSG 只負責把模板檔和內容檔（通常是 Markdown 或 HTML）組合起來並輸出成美美的 HTML 檔案，當然還有一些額外的工作，例如幫我們產出 sitemap.xml、依我們設計的目錄結構去產生、圖片縮放、幫我們更新索引清單等周邊工作。

因為 SSG 最後產出的都是靜態的 HTML 檔案，因此只要放到某個最便宜的網頁空間即可讓人訪問。

更複雜一點的 SSG，把前端框架摻進來做 SSG，就幾乎有無限的可能性，即便是靜態檔案，只要透過 JavaScript 與瀏覽器的 Web API 再加上網路上一大堆 API-based 的服務，即可變出各種花式 web app，什麼 blog、形象網站、購物站都沒問題，靜態檔案也可以跑的很動態。

## Jamstack

回頭談主題 Jamstack，headless CMS 意味著 Jamstack 前後端分離之後端；SSG、前端框架意味著 Jamstack 前後端分離之前端，而後端其實也不一定要自己架 CMS，拿網路上現成的 API-based 的服務作為後端也是可行的，甚至像 blog 或形像網站，本身並不需要後端的存在。

另外一個個人觀點是，在大前端時代，前後端分離已是常態，Jamstack 這個用於描述這種分離後的架構的詞彙也會隨著成為常態而消失，就像以前電腦剛能播影音的時代，微軟定義了 MPC 的規格，然而隨著多媒體播放成為常態，又有誰會特地說自己的電腦是「多媒體電腦」呢？:p
6 tips for mentoring junior engineers
Tags: engineering, career, productivity, beginners
Published: 2021-10-06 17:07:12

The acclimation process as a new engineer may be daunting for some. And since I’ve been through the process myself, I’d like to share these tidbits to help you - as the mentor - help out your mentee.

1. **Writing my own documentation specific to the project and tech**. It helps the junior engineer get acclimated to the context they will be working in and gives them a bigger picture of what’s going on. Things like specific Slack channels, email lists to join, repositories to download, helpful software additions, et cetera.

2. **Forwarding them to the right people**. Introductions or forwarding them names of the people they will need info from (example: a web engineer needing information from the backend engineer).

3. **Don’t assume that they know**! I err on the side of giving as much information as possible to a new engineer so that they understand the full context. If they already know, great - but still, it’s good to check-in beforehand to see what they know.

4. **Share your tips that you know and use often**. If you know a shortcut for a workflow, or how to debug more easily, share that with the engineer! I had to discover a lot of shortcuts on my own (sifting through Slack channels for example) and had to waste countless hours when someone else had a simple command for it.

5. **Keep internal company-only acronyms to a minimum.** Business jargon may confuse newcomers, so lighten up on that. There’s been countless times I’ve been in meetings with new hires and they have no clue what is going on due to acronym usage.

6. **Open up the floor**. I want my mentee to feel as comfortable as possible coming to me with questions. If I don’t know, I’ll ask someone else or forward them to the right person. As someone that had a challenging case of impostor syndrome, this one could have a profound effect on newly minted engineers.

A major component to mentoring, overall, is to be **communicative**. Although it may feel like more effort to explain or give additional context, it is likely appreciated by the mentee, and can save a lot of unneeded frustration.

Have any other additions to the list? Feel free to comment your own!
September: Forem Twitch Events Roundup 👾
Tags: twitch, opensource, meta
Published: 2021-10-06 20:24:26

In September, Nick Taylor and I were joined by 4 awesome guests! This is a round up of all the wonderful guests who joined us.



## Walkthrough Wednesday with Chris Coyier
[Chris Coyier](https://twitter.com/chriscoyier), co-founder of CodePen, creator of CSS-Tricks, and co-podcaster at ShopTalk, joinedus to talk about front-end development, CodePen, ShopTalk, banjos and more.🪕 

{% youtube ZncQIITVOPI %}

**Places to follow Chris:**
[Twitter]()
[CSS-Tricks](https://css-tricks.com/)
[ShopTalk](https://shoptalkshow.com/)
[CodePen](https://codepen.io/)

## Walkthrough Wednesday with Virtual Coffee Community
Bekah Hawrot Weigel, Kirk Shillingford, and Dan Ott joined us to talk about the Virtual Coffee Community, Preptember, Hacktoberfest, and maintaining and/or contributing to an open source repository. 

{% youtube WFp48oPBil0 %}

**How to connect with Virtual Coffee:**
[Main site](https://virtualcoffee.io/)
[Podcast](https://virtualcoffee.io/podcast)
[Meeting Place](https://meetingplace.io/virtual-coffee)


**Places to Follow Bekah:**
[DEV](https://dev.to/bekahhw)
[Twitter](https://twitter.com/bekahhw)
[Twitch](https://www.twitch.tv/bekahhw)

**Places to Follow Kirk:**
[Twitter](https://twitter.com/kirkcodes)
[GitHub](https://github.com/tkshill)

**Places to Follow Dan:**
[Twitter](https://twitter.com/danieltott)

Thanks to all our viewers who joined the streams and chatted with us this month! 

Be sure to follow the [ThePracticalDev Twitch](https://www.twitch.tv/thepracticaldev) channel to be notified when future streams begin and check out all the great guests we have joining us every Wednesday this month. 


**Our October guests are:**
- [Brian Douglas](https://twitter.com/chriscoyier) on October 6th
- [Andrew Brown](https://twitter.com/andrewbrown) on October 13th
- [Jonathan Creamer](https://twitter.com/jcreamer898) on October 20th
- [Will Johnson](https://twitter.com/willjohnsonio) on October 27th
Namespacing keys in Kredis
Tags: ruby, rails, redis
Published: 2021-10-06 22:23:00

[Kredis](https://github.com/rails/kredis) is a library that provides an abstraction of higher level data structures for [Redis](http://redis.io). It's really useful and will be included in Rails 7.   
  
I like to namespace all my keys in Redis because it prevents clashes between keys from multiple apps in development locally. It also opens the door to sharing a single Redis instance between multiple apps in production. That's usually not a good idea but for a few side projects, it might be a viable and economical choice.  
  
At first glance it seems like it's really easy to add a namespace to keys in Kredis. There's a [`Kredis.namespace=`](https://github.com/rails/kredis/blob/main/lib/kredis/namespace.rb) method. However it's primarily meant to prevent clashes in parallel testing. If you look at the implementation, it looks like:  
  
```ruby
def namespace=(namespace)
  Thread.current[:kredis_namespace] = namespace
end
```

It only sets the namespace on the current thread. That's fine when using a single threaded process like the Rails Console. But in a multi-threaded process like [Sidekiq](http://github.com/mperham/sidekiq/), you're going to be in trouble.
  
One approach to solve this could be setting the namespace on every thread. However that's pretty messy.  
  
# The redis-namespace gem

A clean way to namespacing Kredis is to install the [redis-namespace](https://github.com/resque/redis-namespace) gem. It provides a namespaced proxy to an underlying Redis connection.  
  
To configure Kredis to use this proxy instead of creating its own connection; we need to add the following line in `application.rb`:  
  
```ruby
config.kredis.connector = ->(config) { 
  Redis::Namespace.new("my_app:kredis", redis: Redis.new(config)) 
}

```
    
Now all keys we set with Kredis will be namespaced with "my\_app:kredis". This also makes it easier to filter keys if you're using a GUI tool like [Medis](https://getmedis.com) to view your Redis data.
Handle/Raise Exceptions with Little to No Further Processing [RE#10]
Tags: productivity, javascript, coding, patterns
Published: 2021-10-19 13:00:11

---
title: Handle/Raise Exceptions with Little to No Further Processing [RE#10]
published: true
date: 2021-10-19 13:00:00 UTC
tags: productivity, javascript, coding, patterns
canonical_url: https://babakks.github.io/article/2021/10/19/re-010-handle-raise-exceptions-with-little-to-no-further-processing.html
series: Regular Encounters
---

Exceptions may occur anywhere, even inside a `catch` (or `except` in Python) block. It’s not a wrong presumption that people expect them less in there. Anyway, beware of the code you put in these blocks because when an exception occurs you just don’t want to make things worse.

One safe approach to prevent faulty codes in those blocks is to ensure that you are not doing any further processing or data manipulation there. In other words, if you’re re-raising the exception (or logging something) try to use raw data.

For instance, look at this listing:

```js
class Student {
  getCourses() {
    // Query student courses from repository
  }
  makeStudentIdentifier() {
    return `${this.lastname.trim()} ${this.firstname.trim()} (#${this.studentNo.trim()})`;
  }

  doSomeProcess() {
    try {
      const courses = this.getCourses();
    }
    catch (e) {
      console.log("Process failed for %s: %s", this.makeStudentIdentifier(), e);
    }
  }
}
```

What if, due to some bug somewhere else, `Student.studentNo` assigned with a `number` value instead of a `string`. Calling `trim()` on a `number` object causes another exception, terminating the handling you had in mind (here, logging) and returning the control to the first `catch` block up on the call stack. Not to mention that the original exception, which should be the actual issue to investigate, got masked and you may easily miss it; though somewhere in the middle of the stack trace will be a faint hint to that. So, it’s safer to appreciate raw values and do things with less processing:

```js
console.log("Process failed for %s %s (%s): %s", this.lastname, this.firstname, this.studentNo, e);
```

* * *

**_About Regular Encounters_**  
_I’ve decided to record my daily encounters with professional issues on a somewhat regular basis. Not all of them are equally important/unique/intricate, but are indeed practical, real, and of course,_ **_textually minimal._**
Hacktoberfest 2021 is here.
Tags: hacktoberfest, flutter, opensource, android
Published: 2021-10-07 05:20:28



What is Hacktoberfest ?

A month-long celebration from October 1st - 31st sponsored by Digital Ocean and GitHub to get people involved in Open Source. Create your very first pull request to any public repository on GitHub and contribute to the open source developer community.

Contribute to open-soucre and grab your Hacktoberfest swags ( Free T-Shirt & Goodies).

You need to create 4 Pull Request (PR) to grab goodies.

Are you Flutter dev and looking for beginner friendly repositories?

Don't worry I got you covered.
Here are some repositories where you can submit your Pull Request

1) Flutter web app : https://github.com/viveeeeeek/1stHacktoberfest
2) Flutter BMI calculator app : https://github.com/viveeeeeek/flutter-bmi-calculator
#10 Best YouTube Channels  for become Developer..✔️
Tags: devops, beginners, webdev, tutorial
Published: 2021-10-07 07:14:32

#Introduction
I will tell you the best 10 you tube channels to learn about the Developer and other things of the technology,
Also I will provide to you there channel link..
####follow the point
#1.[Code with Harry]( https://youtube.com/c/CodeWithHarry)
Channel about JavaScript, React, React-Native, Next.js, Node.js, Express, GraphQL, serverless functions, working with databases and much more!

#2.[Web Dev Simplified](https://youtube.com/c/WebDevSimplified)
Web Dev Simplified also deep dives into advanced topics using the latest best practices for you seasoned web developers.

#3.[LevelUpTuts](https://youtube.com/c/LevelUpTuts)
Here you will find videos from the usual videos on CSS, JS, Python and Django to blockchain and microservices.

#4.[Java Brian ](https://youtube.com/c/JavaBrainsChannel)
On this channel how to create a slider, animation when scrolling, adaptive website design and also a lot of different elements using React.js

#5.[DevTips](https://youtube.com/c/DevTipsForDesigners)
There are also videos where conversations with other developers are conducted. how to make CSS animation with physics simulation or how to work with legacy code, as well as many interesting videos on CSS animations and React lessons.

#6.[Fireship](https://youtube.com/c/Fireship)
There are also a number of videos on the topic of layout and animation creation. 

#7.[dcode](https://youtube.com/c/dcode-software)
HTML, CSS & JavaScript tutorials, PHP tutorials, Node.js tutorials and Rust tutorials, as well as many other topics covered in web development.

#8.[Joma Tech](https://youtube.com/c/JomaOppa)
Very interesting, videos are posting on the daily basis

#9.[William Candillon](https://youtube.com/c/wcandillon)
Also on the channel there are many interesting conversational videos on the topic React.js.

#10.[Freecodecamp](https://youtube.com/c/Freecodecamp)
Learning various APIs, React, JS, GIT, browsers, and much more. It will help to build your knowledge.
.
.
.
Conclusion
I hope you found this article useful, if you need any help please let me know in the comment section.💯

Thanks for reading, See you next time.
Free Responsive Ecommerce Website Template with Animations
Tags: html, css, javascript, webdev
Published: 2021-10-07 13:01:44

## You can get the template from the link proivided in the description of the video.

### Technologies Used :-
+ HTML
+ CSS
+ JAVASCRIPT
+ SASS

### Libraries and Assets Used :- 
+ jQuery
+ Scroll Reveal
+ Google Fonts

### Sections Given in Template :- 
+ Navbar
+ Hero Section
+ Services Section
+ Deals Section
+ Recent Products Section
+ Recent Posts Section
+ Newsletter Section
+ Footer

## To learn how to create this template watch the complete video. You can get the template for free from the link provided in the description of the video.

{% youtube QyKMrve8Yio %}

## Please do like the video and subscribe to the channel. It helps and motivates me to create more content like this.
Mental  Health and Personal Goals During Quarantine 2021
Tags: discuss, career
Published: 2021-10-07 18:45:14

I've been dissecting about my personal and professional progress over 2021 and I realized that I was just trying to survive and recover my past life through these months. To be honest I want to feel alive and focused again, and sometimes is too hard, life is more like a giant stack of hard work to do. 

How did you recovered the motivation to continue with your projects?

During the 2020 quarantine I didn't aim a lot but at least I used my time to improve myself and study harder.
How to Cancel a Payment on Chime? 
Tags: chimetransfer
Published: 2021-10-08 05:54:55

Chime has made it simple to send and receive money to and from contacts. Fast Payment feature of Chime enable its users to transfer money very fastly. But sometimes it causes trouble, yes its happen due to send money to wrong person or incorrect amount. Sorry to say, Chime has no option to cancel a Payment once transaction completed. Only one condition in which you can cancel your Chime payment if its pending. So, be careful and alert while sending money. Any small mistake can lead you to lose your hard earned money.
To get more info visit : https://quickutilities.net/blog/cancel-a-payment-on-chime
Conditional state update in useEffect
Tags: react
Published: 2021-10-08 09:05:57

```
useEffect(() => {
  unsub = asyncFetch((d) => {
    setState(s => {
        if(deepEqual(d,s))
           return s
        else return d
     })
  })
  return unsub;
}, [])
```
This is what I want to do, but this code assumes that if I return s, then the state update won't trigger a rerender of the component. What's the best way to achieve this?

If I simply check against the state (conditional wrapping setState) instead of using `s` from the setState, I will always get the initial state set by `useState`. What I'm doing now is using useRef to always update a ref with the latest state so that I can access it in the callback, but I'm unsure if this can have unintended consequences as setState is asynchronous and I don't know if the effect will always run first thing after the state is updated to keep the ref in sync. What I would really need is a version of setState that allows returning a special value to abort the state update.

Thanks for your help.
Choosing Software Engineering
Published: 2021-11-09 00:08:59

Originally posted on June 27th, 2021.

This is a fairly new journey for me. The first step was the hardest. While the journey hasn’t gotten any easier, it has definitely gotten more fulfilling.

I decided to look into the world of coding back in January. My brother went to a bootcamp in 2014 and it changed his life. He has been encouraging me to look into it for a while now, but I’m stubborn and was content with where I was in life. Fast-forward to 2020, and I, like so many others, had some time to really think about where I wanted to be and what I wanted to be doing. I was happy with my job, working for my family’s machine and fabrication shop. There was never anything wrong with working there, but I needed to step away and figure out who I am outside of the family work. I’d been doing it my whole life, so, with my family’s support, it was time for a change.

I had always had an interest in tech and gadgets. That has helped in this decision to pursue software engineering. After trying out a few free courses, I fell in love with it. Even when it’s frustrating, hard, and maddening, I truly enjoy it. I appreciate the fact that there’s always more to learn in this world. There will always been new opportunities for improvement. There will always be another step to be taken. It won’t always be easy, but it will be worth it.
My learning from creating tools for developers
Tags: programming, opensource, webdev
Published: 2021-10-08 10:55:00

Once you cross the beginner's level as a developer, some questions should start arising in your head... 

1. How does a developer think?
2. Why does he need that xyz tool?
3. How does a tool solve a problem?
4. What's happening behind the scenes in that xyz tool?
5. How to think in a generic/global way from a problem-solving perspective?


Wait, don't Google these questions, because these are kinda questions where you need to realize the answer, you need to feel the answer.


So, what's the process, how will we know the answers? 
For me the answer is "creating open-source developers tools". I mean, creating open-source tools that will be used by other developers. When you start creating developer tools, your brain starts adopting millions of developers' thought processes. It's a journey where you'll learn the answers to those questions. But if you want to know more than those answers then you need to create multiple personalities in you.
Which are:
=> A problem solver,
=> An observer,
=> A person who has Childish perspective. 

.

#### Dev Tools developed by me
[BD API](https://bdapis.herokuapp.com/)
[LocalDB](https://www.npmjs.com/package/@abmsourav/localdb)
These projects are managed by my GitHub organization. Feel free to contribute on these open-source projects on [CodesVault](https://github.com/CodesVault)

.

Feeling positive energy, huh?
Now here's a trap. When you want to create a dev tool, lots of ideas will come to your brain. You will peck the most complex one and then after doing some google search, you will know that those types of tools already exist in many ways.
Then after repeating this process for multiple times you'll lose that positive energy :( 

So, the hack is don't find unique, complex ideas. Find the idea that sounds extremely easy to you, and in your thought process you already know the implementation.