Skip to content

Instantly share code, notes, and snippets.

Avatar

Nilesh nileshtrivedi

View GitHub Profile
@nileshtrivedi
nileshtrivedi / README.md
Created Aug 15, 2022
Self-hosting Tutorial 2022
View README.md

Why self-host?

Not only does it give you control of your own data, it also enables you to explore the amazing possibilities of computation, free from restricted environments like mobile/tablet/desktop/laptop operating systems. As you increase your technical skills and capabilities, you can then use those to solve problems for your own communities.

What do you need?

Familiarity with English language, willingness to learn, and a credit/debit card.

Steps

@nileshtrivedi
nileshtrivedi / puzzle.rb
Created Jun 25, 2022
"I don't know the numbers": a math puzzle
View puzzle.rb
# My solution to a cool math puzzle
# Two numbers are chosen randomly, both are positive integers smaller than 100. Sandy is told
# the sum of the numbers, while Peter is told the product of the numbers.
# Then, this dialog occurs between Sandy and Peter:
# Peter: I don’t know the numbers.
# Sandy: I don’t know the numbers.
@nileshtrivedi
nileshtrivedi / web-components-are-not-ready.html
Last active May 3, 2022
Web Components are not yet ready
View web-components-are-not-ready.html
<!-- I will consider web components ready for use when this piece of HTML works -->
<!-- Here we import two different WC frameworks and mix custom input elements in a single form -->
<!-- Like regular HTML forms, we expect this form to work without writing any custom Javascript code for data plumbing -->
<!-- Some context: This will be possible in future with ElementInternals api which works in Chrome & Firefox, but not in Safari -->
<!-- See this conversation: https://twitter.com/nileshtrivedi/status/1521395909535404032 -->
<!-- Chrome team's blog post announcing ElementInternals from 2019: https://web.dev/more-capable-form-controls/ -->
<!-- Importing shoelace.style for the sl-rating element used below -->
@nileshtrivedi
nileshtrivedi / ncert.rb
Created Apr 24, 2022
Ruby script to download all NCERT book PDFs
View ncert.rb
# NCERT books are excellent but being altered for political or other reasons
# See: https://twitter.com/SouthAsiaIndex/status/1518062204058103809
# To download the entire current set, run this script with Ruby
require 'httparty'
source = HTTParty.get('https://ncert.nic.in/textbook.php').force_encoding("ISO-8859-1").encode("utf-8", replace: nil)
# book names are like aeen1dd.zip
# First letter tells the class number a to l is class 1 to class 12. m stands for class 11 and 12 combined
@nileshtrivedi
nileshtrivedi / Caddyfile
Created Nov 14, 2021
Caddy on fly.io as reverse proxy to services on Tailscale network
View Caddyfile
log stdout
errors stdout
auto_https off
http://myapp.fly.dev {
reverse_proxy 100.120.108.62:8000
}
@nileshtrivedi
nileshtrivedi / parrondo.rb
Created Jan 2, 2021
Simulation of Parrondo's Paradox
View parrondo.rb
def coin(win) = rand(1000) > (1000 - win) ? 1 : -1
def a(capital) = coin(495) # 49.5% chance of winning
def b(capital) = (capital % 3 != 0) ? coin(745) : coin(95)
def simulate(strategy, count)
(strategy * count).reduce(100) do |capital,game|
capital + send(game, capital)
end
end
@nileshtrivedi
nileshtrivedi / chatbot.rb
Last active Oct 27, 2020
A stateful chatbot to capture data in 50 lines of Ruby
View chatbot.rb
# https://medium.com/cleartax-engineering/a-simple-rule-based-stateful-chatbot-for-data-capture-ebfad9271388
require 'ostruct'
# Track the current state of the conversation
state = {pointer: ""}
# Metadata is used to fill the outgoing templates AND store the captured data from conversation
metadata = {name: "Calvin"}
View html-mocker.js
/*
This is an idea for mocking HTML data that lets you test whether your layout breaks on any screen size for any
unexpected dynamic data.
This script scans the document for class names with a specific pattern and periodically randomizes the content
of those elements while meeting the constraints specified in the class name. This can let you quickly test
whether your layout breaks for any dynamic content that you may not have thought about. This should ideally be used
with a responsive design testing tool such as DevTools or Sizzy/Bizzy.
@nileshtrivedi
nileshtrivedi / web-identity.md
Last active Jun 10, 2020
Light-weight Identity for the Web using Browser Sync and Push
View web-identity.md

Light-weight Identity for the Web using Browser Sync and Push

(This is just a rough idea intended to trigger a discussion. Details need to be fleshed out for a proper evaluation.)

Signing up and logging into website continues to be painful. For a while, there were attempts like the Mozilla Persona project but those were discontinued and that has led to social logins gaining prominence, with all the concerns of centralization, privacy, surveillance etc as valid as ever. In fact, more and more websites are now adopting Google's One Tap login because the convenient UX is giving them better conversions.

However, some things have changed in recent years:

  • Push notifications are now widely supported in browsers. This is relevant because one of the main reasons why websites insist on user registration is so that they can communicate with the users via email or phone when they are offline.
@nileshtrivedi
nileshtrivedi / worldview.md
Created May 12, 2020
WorldView : A personal beliefs management system
View worldview.md

WorldView

This is the idea for an app I have wanted to build for many years. This would be a database of personal beliefs (also known as a "Propositional Knowledge Base"), connected via logical arguments of various kinds: deductive, inferential and Bayesian. Any new facts you learn should update the certainties of the involved beliefs and propagate that through the graph. You could build a social network around it, giving all users a chance to learn from each other's worldview. This would also help one detect inconsistencies and contradictions. The challenge here is to allow local contradictions without blowing up the system as Principle of Explosion implies.

Related links: