An app with Trie tree and Breve search Implementation CLI and HTTP both 🥳

Introduction

LifeLongLearner project consists of two different parts.

  • My English Vocabulary
  • My Technical Book Notes

All of them provided by me within my Google Account. This app can utilize all information the more readable, searchable way.

I'm currenty use

  • Google-Tables for English Vocabulary
  • Google-Documents for Technical Book Notes

Integration With Google Sheet

Google sheet is based on API_KEY, you must create using google console.

In order to implement sdk correctly you must follow https://developers.google.com/sheets/api/quickstart/go this guide.

In this project's vocabulary module, you have to export

export SHEETS_API_KEY=AIza.....
export SPREADSHEET_ID=1T1hg5....

before running the application.

Integration With Google Doc

Google doc is not based on API KEY unfortunately you must create oauth client on google console, download the related credentials.json file.

You can implement SDK using this guide https://developers.google.com/docs/api/quickstart/go

In this project's technical book module, you have to export

export DOC_ID=1m4LO-...

Demo

  • You can use this project as CLI or HTTP Server.

If you want to use as CLI

Learn CLI With Vocabulary

asciicast

Learn CLI With Technical Book Notes

asciicast

If you want to use as API

Example Request with prefix ma: curl localhost:8080/vocabulary/suggest/ma

Example Response:

[
  {
    "word": "magic wand",
    "meaning": "sihirli deÄŸnek",
    "sentence": "Okay, guys, you have the magic wand."
  },
  {
    "word": "make a fuss about",
    "meaning": "aşırı kaygı duymak, mesele yapmak, son derece endişelenmek",
    "sentence": ""
  },
  {
    "word": "make such a declaration",
    "meaning": "böyle bir beyanda bulunmak",
    "sentence": "it’s easy to make such a declaration, but some times are certainly better than others to consider external funding"
  },
  {
    "word": "manifest",
    "meaning": "açıkca göstermek, beyan etmek",
    "sentence": "Memory leaks often manifest"
  },
  {
    "word": "massive undertaking",
    "meaning": "büyük bir girişim",
    "sentence": "Writing a whole book was still a massive undertaking."
  }
]

Technical Notes API

Example Request with keyword scalability: curl localhost:8080/technicalnotes/scalability

Example Response:

{
  "totalTime": 2546892,
  "totalResult": 6,
  "results": [
    "Use Expires headers to reduce requests and improve the scalability and performance of your system.",
    "If we design to allow for concurrency, we can more easily meet scalability or performance requirements when the time comes",
    "Performance measures how long it takes to process a request or to perform a certain task, whereas scalability measures how much we can grow (or shrink).",
    "For ultimate scalability we recommend avoiding sessions altogether. However, this isn’t always possible. In these cases we recommend storing the session data in the user’s browser",
    "Overengineering is one of the many enemies of scale. Developing a solution beyond that which is useful simply wastes money and time. It may further waste processing resources, increase the cost of scale, and limit the overall scalability of the system (how far that system can be scaled). Building solutions that are overly complex has a similar effect. Systems that work too hard increase your cost and limit your ultimate size. Systems that make users work too hard limit how quickly you are likely to increase the number of users and therefore how quickly you will grow your business. Systems that are too complex to understand kill organizational productivity and the ease with which you can add engineers or add functionality to your system.",
    "From this point-of-view, synchronous dependencies between services imply that the calling service blocks the execution and waits for a response from the called service before continuing. Very similar to the concepts of Connascence of Execution Order and Connascence of Timing, this kind of dependency is very strong, tightly coupling the caller with the called. It does not scale very well, and the calling service may be impacted by errors in the called service. In systems with high availability as one of the non-functional requirements, this kind of communication is not desired. A powerful alternative to the synchronous approach is asynchronous communication using a publish/subscribe messaging system. In this scenario, the calling service simply publishes its message about a domain event occurring and continues with other work (unrelated to this request). It is not blocking and waiting for a response after it sends a request, and this improves scalability. Problems in another service do not break this service, and when other services are temporarily broken, the calling service might not be able to complete a process completely, but the calling service is not broken itself. Thus, using asynchronous messaging, the services are more decoupled, preserving more autonomy. The downside of the asynchronous messaging solution is that it increases the infrastructural complexity of the system because it requires mechanisms to send and handle messages. Furthermore, the design of the flow of domain events becomes essential when this pattern is used heavily, and this can move complexity into an area that is very difficult to monitor, opening the door for unwanted risks"
  ]
}

TODO

  • Add Repeat Planning on Technical Book Notes
  • Add Technical Patterns Module
  • Pipeline (test, lint steps)
  • Integration Test
Owner
A.Samet Ä°leri
Software Developer 🚀. When all you have is a hammer, everything looks like a nail.
A.Samet Ä°leri
Similar Resources

An immutable radix tree implementation in Golang

go-immutable-radix Provides the iradix package that implements an immutable radix tree. The package only provides a single Tree implementation, optimi

Dec 29, 2022

B-tree implementation for Go

btree btree is a Go implementation of a B-Tree. This project is intended for learning purposes so the code is relatively small (500LOC) and highly do

Dec 31, 2022

Go implementation of the van Emde Boas tree data structure: Priority queue for positive whole numbers in O(log log u) time.

vEB Go implementation of the van Emde Boas tree data structure: Priority queue for positive whole numbers in O(log log u) time. Supports the following

Mar 7, 2022

Go-merkle - Merkle tree implementation in Golang

go-merkle go-merkle implements a simple merkle tree in Golang. It allows to obta

Aug 8, 2022

A Left-Leaning Red-Black (LLRB) implementation of balanced binary search trees for Google Go

GoLLRB GoLLRB is a Left-Leaning Red-Black (LLRB) implementation of 2-3 balanced binary search trees in Go Language. Overview As of this writing and to

Dec 23, 2022

Implementation of Boyer-Moore fast string search algorithm in Go

boyermoore Implementation of Boyer-Moore fast string search algorithm in Go

Oct 7, 2022

Simple code just to try out and Binary Tree on Golang.

Character counter | ▮▮▮▮▮▮▮▮ Simple code just to try out and Binary Tree on Golang. Count characters to train openning a file and reading it, as well

May 17, 2022

watch for file changes (matching a suffix whitelist) in a directory tree and run a command when they change

watchspawn what is it? Watches for file creates and writes in and below the current directory and when any of them (matching a suffix list) change, ru

Jan 16, 2022

A tree like tool help you to explore data structures in your redis server

 A tree like tool help you to explore data structures in your redis server

Redis-view is a tree like tool help you explore data structures in your redis server

Mar 17, 2022
Hairetsu: a TRIE implementation by double array

hairetsu hairetsu is a TRIE implementation by double array. alpha quality : thin

Mar 20, 2022
Exp-tree: go library for parsing expression tree

Vinshop expression tree Exp-tree is go library for parsing expression tree Installation go get -u github.com/vinshop/exp-tree Quick start Format Expre

May 11, 2022
Double-ARray Trie System for golang

Darts This is a GO implementation of Double-ARray Trie System. It's a clone of the C++ version Darts can be used as simple hash dictionary. You can al

Nov 17, 2022
Surprisingly space efficient trie in Golang(11 bits/key; 100 ns/get).
Surprisingly space efficient trie in Golang(11 bits/key; 100 ns/get).

Slim - surprisingly space efficient data types in Golang Slim is collection of surprisingly space efficient data types, with corresponding serializati

Jan 2, 2023
A memory-efficient trie for testing the existence/prefixes of string only(for now).

Succinct Trie A memory-efficient trie for testing the existence/prefixes of string only(for now). Install go get -u github.com/nobekanai/sutrie Docume

Mar 10, 2022
A Go implementation of a radix tree, that uses binary searches to speed up insert, retrieve and delete operations on dense trees

radixs A Go implementation of a radix tree, that uses binary searches to speed up insert, retrieve and delete operations on dense trees. This implemen

Feb 14, 2022
A Merkle Tree implementation written in Go.
A Merkle Tree implementation written in Go.

Merkle Tree in Golang An implementation of a Merkle Tree written in Go. A Merkle Tree is a hash tree that provides an efficient way to verify the cont

Jan 5, 2023
A prefix tree implementation in go

Trie (Prefix tree) This library is compatible with Go 1.11+ Please refer to CHANGELOG.md if you encounter breaking changes. Motivation Introduction Us

Nov 3, 2022
An yet-another red-black tree implementation, with a C++ STL-like API.

A red-black tree with an API similar to C++ STL's. INSTALLATION go get github.com/yasushi-saito/rbtree EXAMPLE More examples can be fou

Apr 25, 2022
An R-tree implementation for Go
An R-tree implementation for Go

rtree This package provides an in-memory R-Tree implementation for Go. It's designed for Tile38 and is optimized for fast rect inserts and replacement

Dec 29, 2022