Compare commits

...

30 Commits
org ... master

Author SHA1 Message Date
Sameer Rahmani c0ba724ec6
Finish up the preface of 'on mathematics' 2023-03-27 16:34:40 +01:00
Sameer Rahmani ff00004a8b Update the footer 2023-01-26 20:55:11 +00:00
Sameer Rahmani 0c3f0e3b8b Update the GPG key fingerprint 2023-01-26 19:02:29 +00:00
Sameer Rahmani 4ddf5abc5e Add a draf post for mathematics 2022-11-10 11:34:18 +00:00
Sameer Rahmani 8d3a903a48 Add the rss org file 2022-09-05 16:08:04 +01:00
Sameer Rahmani 6597d08a3a Add RSS to the mix 2022-08-29 15:44:02 +01:00
Sameer Rahmani 1eb9f782b6 Add the rss link to the header 2022-08-28 17:41:15 +01:00
Sameer Rahmani 35296335a1 Move the docs deps to docs.el 2022-07-04 17:33:57 +01:00
Sameer Rahmani b512d0ca2e Fix the templates to match FG42's build system 2022-07-04 16:35:54 +01:00
Sameer Rahmani cd6909176b Setup the basic fs structure in orgs dir 2022-07-04 15:50:00 +01:00
Sameer Rahmani f11aabd79f Move the templates dir to the orgs dir 2022-07-04 15:49:10 +01:00
Sameer Rahmani 606f2e7a57 Fix the missing org-element bug 2022-07-03 23:45:32 +01:00
Sameer Rahmani e0923bbcb8 Change a word in anti-matter thought post 2022-06-09 09:51:07 +01:00
Sameer Rahmani 7da9a11727 Fix the copyright range 2022-06-09 09:45:21 +01:00
Sameer Rahmani 4265c4fdbc Add the anti-matter-and-time post 2022-06-08 23:29:03 +01:00
Sameer Rahmani 20d3792bdb Update the Git etiquette post to fix a typo 2022-02-19 19:56:20 +00:00
Sameer Rahmani a0fba4fe1f Update the first paragraph of Git etiquette post 2022-02-19 19:11:36 +00:00
Sameer Rahmani b4992104c8 Update the first paragraph of Git etiquette post 2022-02-19 19:10:46 +00:00
Sameer Rahmani 9a1d38e205 Update the git tag 2022-02-19 19:02:28 +00:00
Sameer Rahmani a55d752c10 Update the single purpose on the git etiquette 2022-02-19 19:00:17 +00:00
Sameer Rahmani 39629cdf31 Add the git etiquette post 2022-02-19 18:51:06 +00:00
Sameer Rahmani f4461f3cd7 Fix few typos 2021-12-17 14:59:55 +00:00
Sameer Rahmani db49effa0d update the index and faq pages 2021-09-13 14:04:07 +01:00
Sameer Rahmani 4d5206e846 Add the quote from socrates to coh 2021-08-29 12:33:39 +01:00
Sameer Rahmani cfb55a442f Add Josep Pouyol's quote to coh 2021-07-25 10:19:10 +01:00
Sameer Rahmani 8821cc8fa6 Update the recent posts on serene 2021-04-14 00:33:30 +01:00
Sameer Rahmani 46f3ff9714 Update the coh with the note to myself 2021-02-25 11:11:40 +00:00
Sameer Rahmani ff13092068 Fix couple of typos 2021-02-24 16:23:11 +00:00
Sameer Rahmani a17a32bda6 Add the old posts 2021-02-24 13:54:23 +00:00
Sameer Rahmani 157786556e Add opengraph header tags 2021-02-17 11:32:25 +00:00
40 changed files with 759 additions and 477 deletions

17
Cask
View File

@ -1,17 +0,0 @@
(source gnu)
(source melpa)
(package-file "build.el")
(development
(depends-on "f")
(depends-on "ecukes")
(depends-on "ert-runner")
(depends-on "el-mock"))
(depends-on "mustache")
(depends-on "ht")
(depends-on "org")
(depends-on "ox-publish")
(depends-on "htmlize")
(depends-on "dracula-theme")

View File

@ -1,14 +1,15 @@
clean:
rm -rf build
rm -rf ./orgs/index.org ./orgs/categories/index.org ./orgs/tags/index.org
rm -rf `find . -iname "*~"`
dev-build:
./build.el
./build.el :d docs
build:
LXHOME_PROD=t ./build.el
build: clean
./build.el docs
serve: build
npx http-server -p 3003 ./build
npx http-server -p 3003 ./build/site-build
deploy: clean build
rsync -vlcr --delete-after ./build/site-build/* lxsameer@core.lxsameer.com:/home/lxsameer/lxsameer.com/home/

418
build.el
View File

@ -1,375 +1,85 @@
:;exec cask emacs --no-site-file --no-site-lisp --batch -L ./ -l "$0" -f main "$(cd "$(dirname "$0")/." >/dev/null 2>&1 ; pwd -P)" "$@"
;;; build.el --- The build script of my personal website
:;exec `echo $EMACS_PATH` --no-site-file --no-site-lisp --batch -L ./ -l "$0" -f main "$(cd "$(dirname "$0")/." >/dev/null 2>&1 ; pwd -P)" "$@"
;;; Build.el --- The build script of my personal website -*- lexical-binding: t; -*-
;;
;; Copyright (c) 2020-2022 Sameer Rahmani & Contributors
;;
;;; Version: 0.1.0
;;; Package-Version 0.1.0
;;
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with thnis program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Commentary:
;;; Code:
(require 'org)
(require 'seq)
(require 'ox-html)
(require 'ox-latex)
(require 'ox-publish)
(require 'dracula-theme)
(require 'lisp/ox-template)
(require 'lisp/utils)
(setq debug-on-error t)
(defvar author-name "Sameer Rahmani"
"Set this variable to your fullname.")
(setenv "FG42_HOME" (concat (getenv "HOME") "/.fg42/"))
(defconst fg42/CORE_DIR (concat (getenv "FG42_HOME") "core"))
(setq user-emacs-directory (concat (getenv "FG42_HOME") "emacs.d"))
(defvar author-email "lxsameer@gmail.com"
"Set this varibale to your email address.")
(add-to-list 'load-path fg42/CORE_DIR)
(defvar project-root nil
"Root directory of the website source code.")
(require 'fg42/build/utils)
(require 'fg42/build/core)
(defvar orgs-files-dir "/orgs/"
"Path to the directory containing all the renderable org files.")
(defconst build/usage "
Usage:
build.el [PARAMS] COMMAND [...]
COMMANDS:
docs - Build the documents and convert them to HTML
PARAMS:
:d - Turns on the debug mode.
:e expr - Run the given `expr' before any operation.
")
(defun from-root (path)
"Return the full path of the given PATH in the project root."
(concat project-root path))
(defproject lxsameer.com
project-root (nth 2 command-line-args-left)
docs-root "/orgs"
usage build/usage
prod-base-url "https://lxsameer.com"
docs-pages-dir "/essays"
docs-actions '(copy-necessary-files)
docs-ignore-category-check '("thoughts.org")
docs-title "lxsameer.com"
docs-desc "The little nest of mine")
(defun all-org-files ()
"Return a list of all the org files in the orgs directory."
(mapcar (lambda (x) x)
(split-string
(shell-command-to-string (format "find %s -iname \"*.org\"" org-directory))
"\n" t)))
(defun copy-necessary-files (build-dir base-url)
"Copy the top level pages to the BUILD-DIR with BASE-URL."
(copy-file (expand-file-name "orgs/coh.org" fg42/build-project-root)
(expand-file-name "site/coh.org" build-dir))
(comment
(all-org-files))
(copy-file (expand-file-name "orgs/faq.org" fg42/build-project-root)
(expand-file-name "site/faq.org" build-dir))
(copy-file (expand-file-name "orgs/gpg.org" fg42/build-project-root)
(expand-file-name "site/gpg.org" build-dir))
(copy-file (expand-file-name "thoughts.org" fg42/build-project-root)
(expand-file-name "thoughts.org" build-dir)))
(defun get-all-tags ()
"Return a list of all the tags in the org files."
(seq-reduce
;; all-tags is in (tags . tags->files) form
(lambda (all-tags file)
(if (get-file-global-props file "PAGE")
;; Ignore pages
all-tags
(with-temp-buffer
(insert-file-contents file)
(let ((tags (mapcar #'car (org-get-buffer-tags))))
(seq-reduce
(lambda (result tag)
(let ((tag-list (car result))
(tag->file (cdr result)))
(cons
;; Tag list
(if (member tag tag-list) tag-list (sort (cons tag tag-list) 'string<))
;; tag->file
(cons (cons tag
;; Current value of the the given tag (all the files
;; that contain that tag)
(append (list file) (cdr (assoc tag tag->file))))
tag->file))))
tags
all-tags)))))
(all-org-files)
'()))
(defun get-all-posts ()
"Return all the post org files.
Not pages."
(let ((files (all-org-files)))
(seq-reduce
(lambda (result file)
(let ((is-page? (string= (get-file-global-props file "PAGE") "true")))
(if (not is-page?)
;; It's a post
(cons
(list
;; This is not effecient since we parse the file
;; on each query, but who cares :D ?
(->epoch (get-file-global-props file "DATE"))
(get-file-global-props file "TITLE")
(replace-regexp-in-string "\\.org" ".html"
(file-name-nondirectory file)))
result)
result)))
files
'())))
(defun get-all-sorted-posts ()
"Return all posts in sorted order."
(sort
(get-all-posts)
(lambda (x y) (> (car x) (car y)))))
(comment
(get-all-sorted-posts))
(defun get-all-categories ()
"Return all the categories of the org files."
(seq-reduce
;; all-cats is in (cats . cat->files) form
(lambda (all-cats file)
(let ((is-page? (string= (get-file-global-props file "PAGE") "true"))
(cat (get-file-global-props file "CATEGORY"))
(cat-list (car all-cats))
(cat->file (cdr all-cats)))
(if (not is-page?)
(cons
;; Category list
(if (member cat cat-list) cat-list (sort (cons cat cat-list) 'string<))
;; cat->file
(cons (cons cat
;; Current value of the the given cat (all the files
;; under that category)
(append (list file) (cdr (assoc cat cat->file))))
cat->file))
all-cats)))
(all-org-files)
'()))
(comment
(get-file-global-props "./orgs/essays/serene-blah.org" "CATEGORY")
(get-all-categories))
(defun extra-headers ()
"Retun a list of extra header html tags."
(concat
"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"))
(defun category-org-list ()
"Return a list of links to the categories in org format."
(let ((categories (get-all-categories)))
(mapconcat
(lambda (cat)
(let ((count (length (cdr (assoc cat (cdr categories))))))
(format " - [[./%s.html][%s(%s)]]" cat cat count)))
(car categories)
"\n")))
(defun tags-org-list ()
"Return a list of links to the tags in org format."
(let ((tags (get-all-tags)))
(mapconcat
(lambda (tag)
(let ((count (length (cdr (assoc tag (cdr tags))))))
(format " - [[./%s.html][%s(%s)]]" tag tag count)))
(car tags)
"\n")))
(defun latest-org-list (base-url)
"Return a list of links (using BASE-URL) to the tags in org format."
(let ((posts (get-all-sorted-posts)))
(mapconcat
(lambda (post)
(format " - [[%s/essays/%s][%s]]" base-url (nth 2 post) (nth 1 post)))
posts
"\n")))
(comment
(latest-org-list))
(defun pair-file-with-date (file)
"Return a pair for the given FILE with date as car and file as cdr."
(cons
(->epoch (get-file-global-props file "DATE"))
file))
(defun create-tag-pages (project-dir)
"Create all the tag files in the PROJECT-DIR."
(let ((tags (get-all-tags)))
(mapcar
(lambda (tag)
(let ((out (format "%s/orgs/tags/%s.org" project-dir tag))
(files (cdr (assoc tag (cdr tags)))))
(copy-template
(format "%s/templates/links_template.org" project-dir)
out
(mapconcat
(lambda (file-pair)
(format "- [[file:..%s][%s]]"
(replace-regexp-in-string (regexp-quote (from-root "/orgs")) "" (cdr file-pair) nil 'literal)
(get-file-global-props (cdr file-pair) "TITLE")))
(sort
(mapcar #'pair-file-with-date files)
(lambda (x y) (> (car x) (car y))))
"\n")
tag)))
(car tags))))
(defun create-category-pages (project-dir)
"Create all the category files in the PROJECT-DIR."
(let ((tags (get-all-categories)))
(mapcar
(lambda (tag)
(let ((out (format "%s/orgs/categories/%s.org" project-dir tag))
(files (cdr (assoc tag (cdr tags)))))
(copy-template
(format "%s/templates/links_template.org" project-dir)
out
(mapconcat
(lambda (file-pair)
(format "- [[file:..%s][%s]]"
(replace-regexp-in-string (regexp-quote (from-root "/orgs")) "" (cdr file-pair) nil 'literal)
(get-file-global-props (cdr file-pair) "TITLE")))
(sort
(mapcar #'pair-file-with-date files)
(lambda (x y) (> (car x) (car y))))
"\n")
tag)))
(car tags))))
(defun main ()
"The entry point to the build script."
;; Setup the emacs theme so htmlize can actually setup
;; the code highlighter
(load-theme 'dracula t)
(enable-theme 'dracula)
(setq project-root (car command-line-args-left))
;; We will use the org-agenda to extract all the tags
(setq org-directory (from-root orgs-files-dir))
(setq org-agenda-files (all-org-files))
(setf user-full-name author-name)
(setf user-mail-address author-email)
;; Disable default header links (top, next)
(setf org-html-home/up-format "")
(setf org-html-link-up "")
(setf org-html-link-home "")
(setf org-html-scripts "")
;; (org-babel-do-load-languages
;; 'org-babel-load-languages
;; '(
;; (emacs-lisp . t)
;; (org . t)
;; (shell . t)
;; (C . t)
;; (python . t)
;; (clojure .t)
;; (lisp . t)
;; (js . t)
;; (awk . t)))
;; ;; Never export the code block evaluation
;; (setq org-babel-default-header-args '((:eval . "never-export")))
;; (setq org-src-fontify-natively t)
(let ((build-dir (from-root "/build/"))
(base-url (if (prod-p) "https://lxsameer.com" "http://localhost:3003")))
(copy-template (from-root "/templates/index.org")
(from-root "/orgs/index.org")
(latest-org-list base-url))
(copy-template (from-root "/templates/categories.org")
(from-root "/orgs/categories/index.org")
(category-org-list))
(copy-template (from-root "/templates/tags.org")
(from-root "/orgs/tags/index.org")
(tags-org-list))
(create-tag-pages project-root)
(create-category-pages project-root)
(setq org-html-preamble #'preamble-fn)
(setq org-html-htmlize-output-type nil)
(setq org-latex-listings t)
(setq org-publish-project-alist
`(("lxsameer.com"
:base-directory ,(from-root "/orgs")
:root-directory ,project-root
:recursive t
:base-extension "org"
:publishing-directory ,build-dir
;; Exclude the blog archive index autogenerated below
;; Note that the regexp is relative to :base-directory
;; :exclude "^index.org"
:section-numbers nil
:with-author t
:with-drawers t
:html-format-drawer-function custom-drawer-format
:with-properties t
:with-tags t
:with-timestamps t
:with-toc nil
:base-url ,base-url
:html-link-home "/"
:html-head-extra ,(extra-headers)
:html-template ,(from-root "/templates/blog.html")
:html-page-preamble-template ,(from-root "/templates/page-preamble.html")
:html-post-preabmle-template ,(from-root "/templates/post-preamble.html")
:html-tags-template ,(from-root "/templates/tags.html")
:publishing-function org-html-publish-to-templated-html
:auto-sitemap t
:htmlized-source nil
:sitemap-folders ignore
:sitemap-style list
:sitemap-title "lxsameer's nest"
:sitemap-filename "sitemap.inc"
:sitemap-sort-files anti-chronologically
:html-format-headline-function headline-format
:makeindex nil)
("org->html"
:base-directory ,(from-root "/orgs")
:base-extension "org"
:publishing-directory ,build-dir
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4
;; :html-preamble ,(use-html "templates/header.html")
;; :html-postamble ,(use-html "templates/footer.html")
:html-link-home "/"
:html-head-include-default-style nil
:html-head-include-scripts nil
:html-head-extra ,(extra-headers)
:makeindex nil)
("pdfs"
:base-directory ,(from-root "/orgs/essays")
:root-directory ,project-root
;;:publishing-directory ,(concat build-dir "/essays/")
:recursive t
:base-extension "org"
:publishing-directory ,build-dir
:publishing-function org-latex-publish-to-pdf)
("statics"
:base-directory ,project-root
:base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|svg"
:publishing-directory ,build-dir
:recursive t
:publishing-function org-publish-attachment)
("build" :components ("lxsameer.com" "statics"))))
(org-publish-project "build" t nil)
(message "Build complete.")))
(command-> command args
((string= command "docs")
(do-command
(require 'fg42/build/docs)
(fg42/build-docs build-dir))))
(provide 'build)

View File

@ -1,5 +1,5 @@
;;; ox-template.el --- A HTML exporter via templates for org-mode
;; Copyright (C) 2021 Sameer Rahmani
;; Copyright (C) 2021-2022 Sameer Rahmani
;; Author: Sameer Rahmani <lxsameer@gnu.org>
;; URL: https://devheroes.codes/lxsameer/lxhome
;;
@ -120,6 +120,9 @@ call `org-html-render-tag-template' otherwise will call ORIG-FN."
("head" (plist-get info :html-head-extra))
("base-url" (plist-get info :base-url))
("preamble" (org-html--build-pre/postamble 'preamble info))
("title" (get-file-global-props (plist-get info :input-file) "TITLE"))
("description" (or (get-file-global-props (plist-get info :input-file) "DESC")
""))
("postamble" (org-html--build-pre/postamble 'postamble info)))))
(mustache-render (use-html template-name) ctx)))
@ -133,6 +136,7 @@ call `org-html-render-tag-template' otherwise will call ORIG-FN."
(defun custom-drawer-format (name content)
"Return the drawer format for the given drawer NAME and CONTENT."
(format "<section class='%s-drawer'><p>%s</p>%s</section>"
(downcase name)
(capitalize name)

View File

@ -4,6 +4,8 @@
;;; Commentary:
;;; Code:
(require 'org-element)
(defmacro comment (&rest body)
"Ignore the given BODY."
nil)
@ -30,7 +32,7 @@
"Return the value of the given global PROP in the given org FILE."
(with-temp-buffer
(insert-file-contents file)
(message (get-buffer-global-props prop))))
(get-buffer-global-props prop)))
(comment

View File

@ -28,3 +28,13 @@ pre.src {
border-radius: 6px;
font-size: 1em;
}
.footdef {
display: flex;
flex-direction: row;
align-items: start;
}
p.footpara {
margin: 2px 5px;
}

View File

@ -4,29 +4,39 @@
#+DATE: 2021-02-11
#+TITLE: Code of Honor
#+PAGE: true
#+DESC: A man is nothing without his honor
I always try to live by my code of honor. A man is nothing without his honor. “A sin is to betray your beliefs”.
I always try to live by my code of honor. A man is nothing without his honor. "A sin is to betray your code".
* Honorable life
- Dont betray your code of honor.
- Don't betray your code of honor.
- Defend your Bushido way.
- Live life as a Honorable Man.
- Dont lie.
- Live life as an Honorable Man.
- Don't lie.
- Honesty takes courage.
- Dont talk without a knowledge to support it.
- “Dont argue with the crazy guy”.
- Don't talk without a knowledge to support it.
- "Don't argue with the crazy guy".
- Always follow your sense of Justice
- Feel the pain of others.
- Always put your self in peoples shoe before making any decision.
- Always put your self in people's shoe before making any decision.
- A simple smile goes a long way.
- Theres no honor in winning by cheating.
- “If you fall down 7 times make sure to get up 8 times.”
- There's no honor in winning by cheating.
- "If you fall down 7 times make sure to get up 8 times."
- Protect your promises.
- “For a samurai everywhere is Japan.”
- "For a samurai everywhere is Japan."
- Holding back is disrespectful to your opponent.
- Live life in your way.
- “Respect is earned, not given”, So earn it.
- “A man is much more than the job he holds and clothes he wears.”
- "Respect is earned, not given", So earn it.
- "A man is much more than the job he holds and clothes he wears."
- "If fail and you return home coz you're not good enough, you are welcome here. But if you come back because
you didn't give your all, find another home."
#+BEGIN_QUOTE
The only true wisdom is in knowing you know nothing. I am the wisest man alive, for I know one thing,
and that is that I know nothing.
- Socrates
#+END_QUOTE
* Science
@ -47,6 +57,29 @@ I always try to live by my code of honor. A man is nothing without his honor.
- [[https://en.wikipedia.org/wiki/Ibn_al-Haytham][Ibn al-Haytham]]
#+END_QUOTE
#+BEGIN_QUOTE
Wonder is the beginning of wisdom.
- Socrates
#+END_QUOTE
** Five basic principles of a scientist
- Question Authorities, No idea is true just because someone says so, *Including me*.
- Think for yourself. Question yourself.
- Don't believe anything just because you want to, believing something doesn't make it so. Test ideas
by evidence gained from observation and experiments. If a favorite idea failed a well designed test,
*It's wrong, get over it*.
- Follow the evidence, where ever it leads. If you have no evidence, reserve judgment.
- And *the most important* of all, remember you could be wrong, even the best scientists have been wrong
about something. every great scientist in the history made mistake. Of course they did, we are only human.
Science keeps us from fooling ourselves and *each other*
** To myself
- Being a scientist means to be underestimated or misunderstood by others. When you come across people who
ignore you, or don't take you seriously just stick to your scientific principals. Science is absolute but
people's opinion are not. Think of those scientists who had to suffer in the past for the same reason,
you're not alone.
* Software Engineering
- Simplicity over Complexity
@ -59,9 +92,9 @@ I always try to live by my code of honor. A man is nothing without his honor.
- Docs before new features
** Library design
Major releases can contain backward incompatible changes. Its better to use a different code name
Major releases can contain backward incompatible changes. It's better to use a different code name
instead of a major version number change to indicate that there going to be backward incompatible changes.
Minor releases shouldnt break the dependency versions. E.g: X(0.6.0) depends on Python(3.5.x), X(0.7.0)
Minor releases shouldn't break the dependency versions. E.g: X(0.6.0) depends on Python(3.5.x), X(0.7.0)
should depends on the same version python
** New Feature Checklist
@ -80,4 +113,4 @@ I always try to live by my code of honor. A man is nothing without his honor.
+ Network
+ External storage
+ Database
+ “The Cloud”
+ "The Cloud"

View File

@ -0,0 +1,31 @@
#+SETUPFILE: ../../config.org
#+TAGS: Physics(p) Thoughts(t)
#+CATEGORY: Science
#+DATE: 2022-06-07
#+TITLE: Anti-matter and time
#+DESC: My random thoughts on Positron, time and negative energy
#+INCLUDE: ../../thoughts.org
*** I was thinking ... :Physics:Thoughts:
Since [[https://en.wikipedia.org/wiki/Positron][Positron]] has a negative energy according to [[https://en.wikipedia.org/wiki/Paul_Dirac][Dirac]] and it can be interpreted as an
[[https://en.wikipedia.org/wiki/Electron][Electron]] going back in time, what would happen to the [[https://en.wikipedia.org/wiki/Entropy][entropy]] of a system made out of
anti-matter?
Positron is the counterpart or the anti-particle of Electron, it has the same mass but the opposite
electric charge and negative energy. According to [[https://en.wikipedia.org/wiki/Richard_Feynman][Feynman]] we can think of Positron as an Electron
moving backward in time. Or we can think that Electron and Positron are the same thing, an Electron
that is bouncing forward in time and backward again. Bouncing between an Electron and Positron
characteristics. Anyway, according to the [[https://en.wikipedia.org/wiki/General_relativity][general relativity]], time is relative and not absolute and
two observers of the same phenomena might have different perception of time relative to their state
in spacetime. But another way of thinking about time in my head is entropy. According to the
[[https://en.wikipedia.org/wiki/Second_law_of_thermodynamics][second law of thermodynamics]] entropy of system increase overtime (to put it simply). Therefore,
future is the time with more entropy than today or simply the movement vector of time is in the same
direction as the entropy vector in our perception of time.
So, If Positron is moving back in time, does it mean that Positron's relative vector of time is
pointing the opposite direction of the entropy vector thus, entropy decreases relative to Positron's
time ??? If there's a universe made out of anti-matter, would it be just the past relative to present of
our matter based universe ???
"As always these thoughts baffles me. I have to look into it."

View File

@ -0,0 +1,31 @@
#+SETUPFILE: ../../config.org
#+TAGS: Physics(p) Thoughts(t) Astrophysics(a)
#+CATEGORY: Science
#+DATE: 2021-04-04
#+TITLE: Beyond the big bang
#+DESC: My random thoughts on before the big bang
#+INCLUDE: ../../thoughts.org
*** I was thinking ... :Physics:Thoughts:Astrophysics:
Today, [[https://pouyacode.net/][Pouya]] and I were talking randomly about the Doppler Effect on light and whether it causes
color shift or not (Spoiler alert, [[https://www.thoughtco.com/doppler-effect-in-light-red-shift-and-blue-shift-2699033][it does]]) and how the universe was before the big bang.
After our discussion and during my workout and the post workout shower I couldn't stop thinking
about the universe before the big bang. What if the big bang is just another event in the universe,
a big big one, some thing that makes an ultra nova like zit pop in the scale of the universe ?
I mean what if there are more galaxies an objects in the universe, way way further out from the visible
universe of the stuff resulted from the big bang ? what if their gravitational forces are the reason
the universe as we know it is expanding ? If such entities exist, how they came to exist ? Do they
follow the same principles as our universe ? What a sec, is that the multiverse with no boundaries ?
Some people believe that the universe is on the surface of sphere, which means one day the light from out
own past will reach us by cycling around the giant sphere. In that case what makes the inside of the sphere ?
Who says that the universe has to have only 4 dimensions ? Many theories suggest higher dimensions. What if
the big bang is just a big big event in our visible dimensions which gave birth to our world but the universe
used to exist in other dimensions ? What if the dark energy is in fact the gravitational pull caused by entities
in other dimensions which we can't see. What if the vacuum effect in the quantum field theory is the ripples
made from event or objects in other dimensions ????
Well I just stood in the shower under the downfall of hot water and lost into my thoughts till the water started
to get cold and ruined my chain of thoughts :)).

View File

@ -3,6 +3,7 @@
#+CATEGORY: Engineering
#+DATE: 2019-12-07
#+TITLE: Choosing the target platform
#+DESC: What platform is suitable for Serene ?
After wrapping my head around the [[file:rational-and-a-name.org][rational]] of [[file:my-new-programming-language.org][My new programming language]], I have
a big decision to make. Choose a platform.

View File

@ -0,0 +1,27 @@
#+SETUPFILE: ../../config.org
#+TAGS: Physics(p) Thoughts(t)
#+CATEGORY: Science
#+DATE: 2021-03-16
#+TITLE: Dark matter and other life forms
#+DESC: My random thoughts on dark matter
#+INCLUDE: ../../thoughts.org
*** I was thinking ... :Physics:Thoughts:
about dark matter a bit earlier today. We know that the ordinary matter counts for
~5% of the mass of the universe and the rest is kinda on dark matter's shoulders. It doesn't
interact with light and in our knowledge almost with anything else as well yet it's there and
it's massive. We know that neutrinos which are very weakly interacting, electrically neutral particles
are part of the entity or thing that we call the "dark matter". But since it has very little mass
it would only take a relatively small amount of mass to account for all the dark matter out there.
Anyway, I was thinking that we exist because of the asymmetry of matter and anit-matter and the
matter that creates us and the entire 4.5 billion years history of the earth is just about 5% of the
universe. Galaxies that look like a disk to us in fact are more like spheres that the rest of the sphere
is fill with the dark matter. What if the rest of a galaxy that we can't see is no just random dark
matter, I mean what if there are more to a galaxy rather that the starts that we see? what if there are
planetary systems made out of the dark matter ? What if these planetary systems grew their own life form
via evolution? A life form that doesn't interact with ordinary matter (ordinary to us) and light ?
How they might be ? How we might ever learn about them ?
"As always these thoughts baffles me. I have to look into it."

View File

@ -0,0 +1,69 @@
#+SETUPFILE: ../../config.org
#+TAGS: Life(l) Health(h)
#+CATEGORY: Life
#+DATE: 2013-10-29
#+TITLE: Fatty Liver
#+DESC: My findings on a fatty liver
#+BEgIN_QUOTE
*Disclaimer*: In no way, I'm an expert in medicine or medical science. I wrote this informal essay based
on my research in order to help myself. Read it with a grain of salt. Consult a doctor and do you own research
as well.
#+END_QUOTE
#+BEGIN_QUOTE
This post has survived several rewrites of my website. Sadly, I've lost the references for my research.
#+END_QUOTE
Years ago I used to be a professional basketball player, playing as a point guard. Some day, I broke my foot
in a match and I had to stay home for about 6 month. Back then, I thought eating more food equals to a
faster recovery from my injury ( Yeah I know I was young ). Before the injury, I was about 73Kg, and
after, I turned into a 117Kg ( Wow I knooww) monster.
Long story short afterward I tried really hard to lose weight, I couldn't lose a considerable amount of weight.
As may most of you experienced before, might lose weight in while we're on a diet, but the lost weight will find
its way back when the diet finishes.
After 3 years of that incident, I started *Kyokushin Karate*, one of the most brutal, heavy and tough sports
possible. Also I was in a diet most of the time. I lost weight a lot but as soon as I ended the diet, I
gained that lost weight again. I always was curious why is that ? Why as soon as I end the diet I gain weight
again even though I'm trying really hard. A week ago I found out the truth behind this problem.The liver,
is the most important body part responsible for storing extra energy of food as fat, and burn fat and
produce energy when body needs it. In this era, when people eat fast foods, breath poisonous air pollution
instead of clean air and lots of other reasons, Most of us are suffering from a fatty liver in different
levels. A fatty liver can't do its job perfectly, So it can't burn fat correctly and that's because
after a diet people gains weight again. No matter how hard they try.
* OK, now what's can we do ? :Life:Health:
First of all, physical workout and training is very helpful for your liver and help you burn more fat.
Second of all fatty liver have much more fat stored in its cells which causes huge damage to the liver.
In order to heal the damaged cells, there are several drugs and medicines which you should take, For example:
- Vitamin E
- Selenium
- Betaine
- Metformin
- Rosiglitazone
- Pioglitazone
Using these medicines we can easily heal our liver cells within a 3 month period. Also there is an other
material which has a really incredible effect. [[https://en.wikipedia.org/wiki/Silybum_marianum][Silybum marianum]] is a kinda rare plant which grows mostly in
dry places. Silybum marianum is one of the well known rich sources for milk thistle.
Research suggests that milk thistle extracts both prevents and repairs damage to the liver from toluene and/or
xylene. Workers who had been exposed to vapors from toluene and/or xylene for 520 years were given either
a standardized milk thistle extract (80% silymarin) or placebo for 30 days. The workers took the milk thistle
extract, showed significant improvement in their liver function tests (ALT and AST) and platelet counts vs
the placebo group.
LiverGol is a commercial supplement which contains a great deal of Silybum marianum. There isn't any known
side effect for this supplement[fn:1][fn:2]. I easily healed my liver using.
I tried to summarize everything and avoid blabbing, So long story short the key to a successful diet
is to have a healthy liver.
-----
[fn:1] At least I couldn't find any side effect.
[fn:2] I don't have any affiliation with the company behind LiverGol.

View File

@ -0,0 +1,272 @@
#+SETUPFILE: ../../config.org
#+TAGS: Git(g)
#+CATEGORY: Engineering
#+DATE: 2022-02-19
#+TITLE: Git Etiquette
#+DESC: A rather long essay on how to use Git in a civilized way
* Rational :Git:
The ability of making tools and using them is one of the many things that makes us special
and the skills to use tools properly is what makes some of us
elites.
As software engineers, interacting with [[https://git-scm.com/][Git]] is an important part of our daily life. These days
*Git* is the de facto standard of version control systems and almost everyone uses it. *Git* is
of one those special tools that every engineer has to be familiar with, since it's widely spread
in the tech world. It will be a big surprise if you find a new project or company that is not using
*Git*.
As a free software contributor, I spend all my professional career in FOSS communities and projects
and proper use of *Git* seems so natural to me. But to my surprise, every now and the I witness
how some "commercial engineers" (air quote) uses git and it makes me sad that in a commercial space
which you get paid to build technology people do so poorly. After a lot of these type of incidents
I've decided to put together a document to help improving my team's *Git* workflows. While there
are plenty of reading materials up on the internet dedicated to *Git best practices*, I thought it
might be useful to publish that document publicly to help others as well. For the lack of a better
word I've chose the title *"Git Etiquette"*. Following Git etiquette help teams to get more out of
their git workflows and avoid frustration.
I'll try to keep it short and refer to essays from others who explained it much better that me. I
borrowed some of the words from the others and I included most of them in the resources section to
best of my ability, but since I wrote the original document so long ago and that suppose to be a
private doc for few people some of the resources might have been lost.
Also, I'll add more items to the least overtime.
* Git Commits
Commits are the building blocks of version controlling via Git. It's obvious that improving the commit
quality will result in improvement in the overall quality of the repository.
** Single purpose commits
Oftentimes engineers working on something get sidetracked into doing too many things when working on
one particular thing like when you are trying to fix one particular bug and you spot another one,
and you cant resist the urge to fix that as well. And another one. Soon, it snowballs and you end
up with so many changes all going together in one commit.
This is problematic, and it is better to keep commits as small and focused as possible for many
reasons, including:
- It makes it easier for other people in the team looking at your change, making code reviews
more efficient.
- If the commit has to be rolled back completely, its far easier to do so.
- It's straightforward to track these changes with your ticketing system.
- It helps you mentally parse changes youve made using git log.
A commit should be a wrapper for related changes. For example, fixing two different bugs should
produce two separate commits. Small commits make it easier for other team members to understand
the changes and roll them back if something went wrong. With tools like the staging area and the
ability to stage only parts of a file, Git makes it easy to create very granular commits.
** Commit Messages
On many occasions we need to inspect the *Git* history to find something. A commit, specific changes,
find clues about errors or even to find the engineer who made a certain change. I have bittersweet
experience when it comes to dealing with commit messages in the Git history of projects. Let me
demonstrate with real examples.
I saw it many times in commercial teams that engineers don't bother with writing a proper and useful
Git commit message. For some reason that is beyond my understanding, they think having *"I hate my
life!"* as commit message for a commit with ~1200 lines of change in a repository with more than
~300k commits (at the time) that is used by about 200 engineers is a cool thing to do. I came across
this commit message long ago when I was trying to figure out why a service malfunctions. This commit
message wasn't helpful at all and I had to read through the diff to figure out whether or not that
commit is the root of the issue. I can tell so many stories like this one but for the sake of this
essay one would be enough.
But let's have a look at real Git history of a repository that I don't like at all (using =--one-line=
flag):
#+BEGIN_SRC
2683332a333a Update tests
3315442a4983e Remove icon from manage header
aa234e8aa83f8 test fix
29c35ba3adcee Class migration
fbde3a265ab3f Migrate header styles
01eaac4b4cc13 tests
8d004a970eef7 fix tests
d2890dfdc360 add tests
91c2aa31720f2 add test for notice variable
135a2df25e86a fix tests
3aa4101546a93 refactor
0eaae58006f51 add test for global variable
3ae7ee7297104 remove unnecessary check
#+END_SRC
These commits are taken from a repository with more than 400k commits and many active contributors
in a commercial space (Don't worry, the SHAs are not the original SHAs).
In the other hand, few weeks ago I pulled from the [[https://llvm.org/][LLVM]] repository and built in again (I do this weekly)
and tried to build the [[https:://serene-lang.org][Serene compiler]] (a programming language that I'm working on) against that.
But the compilation failed with an error like "Identifier is unknown". I grepped the Git logs of LLVM
repository and saw a commit and all of a sudden smiled and praised the author in my mind. Here is
the commit message (I removed the commit details):
#+BEGIN_SRC
Date: Wed Jan 12 11:20:18 2022 -0800
[mlir] Finish removing Identifier from the C++ API
There have been a few API pieces remaining to allow for a smooth transition for
downstream users, but these have been up for a few months now. After this only
the C API will have reference to "Identifier", but those will be reworked in a followup.
The main updates are:
* Identifier -> StringAttr
* StringAttr::get requires the context as the first parameter
- i.e. `Identifier::get("...", ctx)` -> `StringAttr::get(ctx, "...")`
#+END_SRC
It was so obvious how to fix my issue by looking at this fantastic commit message.
Which one would you rather read? Which one helps you understand what happened in any specific commit ?
According to [[https://cbea.ms/git-commit/][Chris Beams]], A well-crafted Git commit message is the best way to communicate the context
about a change to other engineers (and our future selves). A diff will tell you what changed,
but only the commit message can properly tell you why.
Peter Hutterer [[https://who-t.blogspot.com/2009/12/on-commit-messages.html][makes this point]] well:
#+begin_quote
Re-establishing the context of a piece of code is wasteful. We cant avoid it completely, so our
efforts should go to [[https://www.osnews.com/story/19266/wtfsm/][reducing it]] [as much] as possible. Commit messages can do exactly that and
as a result, a commit message shows whether a developer is a good collaborator.
#+end_quote
If you ever used =git log= or any other Git sub command that requires interactions with commits
(which many of them do), you'll understand what a valuable asset, a well written commit message
is.
The Git history is just bunch of commits in a certain order. It's up to the engineers to make the
most of it. With the growth of any project, maintenance becomes an issue and the messier your history
is the harder it is to maintain the project. Also it would be painful for other to be involved in the
project too.
There are seven easy rules that you can follow to rock your commit messages:
1. Separate subject from body with a blank line
2. Limit the subject line to 50 characters
3. Capitalize the subject line
4. Do not end the subject line with a period
5. Use the imperative mood in the subject line
6. Wrap the body at 72 characters
7. Use the body to explain what and why vs. how
I highly recommend to read the [[https://cbea.ms/git-commit/][How to Write a Git Commit Message]] post from Chris Beams that
explain these rules in depth.
** Commit early, commit often
Git works best, and works in your favor, when you commit your work often. Instead of waiting to
make the commit perfect, it is better to work in small chunks and keep committing your work. Personally,
I have found it much easier to have smaller commits that group together related changes. This way
you can easily revert commits that you don't like and cherry pick those that you want and avoid dealing
with un-necessary changes that comes in a commit.
If you are working on a feature branch that could take some time to finish, it helps you keep
your code updated with the latest changes so that you avoid conflicts.
Also, Git only takes full responsibility for your data when you commit. It helps you from losing work,
reverting changes, and helping trace what you did when using =git-reflog=.
** Dont commit generated files
This one is fairly obvious, but many times I had to look at the history to figure out who has committed
an auto generated file or a massive file into the repository.
Generally, only those files should be committed that have taken manual effort to create, and cannot
be re-generated. Files can be re-generated at will, can be generated any time, and normally dont
work with line-based diff tracking as well. It is useful to add a =.gitignore= file in your
repositorys root to automatically tell Git which files or paths you dont want to track.
* Dont alter published history
Once a commit has been merged to an upstream default branch (and is visible to others), it is strongly
advised not to alter history. Git and other VCS tools to rewrite branch history, but doing so is
problematic for everyone who has access to the repository. While =git-rebase= is a useful feature,
it should only be used on branches that only you are working with (Private branches).
One of the key aspects of Git is its distributed nature. Meaning that everyone can have their own
repositories and push their commits to their own fork and send pull requests to others to pull from
their repositories. This process is centralized these days via Git hosting services (While the
provide the forking functionality, that is not a common thing to do in a commercial and closed source
project) specially in the commercial space that causes engineers to share feature branches. It
happens to me many time in different roles that some one force pushed to a public (within the org)
branch and screwed everyone's workflow. For your the sake of your peace of mind and others sanity,
*DO NOT CHANGE THE PUBLIC HISTORY*.
It's kind of a joke, but if you are a public force pusher, I'll end my friendship with you.
Having said that, there would inevitably be occasions where theres a need for a history rewrite
on a published branch. Extreme care must be practiced while doing so.
* Merge VS Rebase
The golden rule is to never rebase on public branches and always merge to public branches.
When it comes to merge vs rebase, there are two simple rules.
*Note:* It's better to use squash and merge instead of normal merge because in projects with
many contributors, it is easier to maintain a Git history on the main branch that contains
one commit per feature.
** Dont change other peoples history
You must never ever destroy other peoples history. You must not rebase commits other people did.
Basically, if it is not your branch you can't rebase it. Notice that this really is about other
people's history, not about other people's code. If you want to pull down some changes from other
developers into your branch, its fine to rebase, because its their code but its your history.
So you can go wild on the rebase thing on it, even though you didn't write the code, as long as
the commit itself is your private one.
Minor clarification: once you've published your history in a public branch, other people may be
using it, and so now it's clearly not your private history anymore. So the minor clarification
really is that it's not just about *your commit*, it's also about it being private to your tree,
and you haven't pushed it out and announced it yet.
** Dont expose your unfinished work to public
Keep your own history readable. Some people do this by just working things out in their head first,
and not making mistakes. but that's very rare, and for the rest of us, we use =git rebase= etc
while we work on our problems. So =git rebase= is not wrong. But it's right only if it's
*YOUR VERY OWN PRIVATE* git tree.
If you're still in the =git rebase= phase, you don't push it out. If it's not ready, you don't
tell the public at large about it. Dont push your changes to a shared feature branch or the main
branch.
Dont merge upstream changes at random points. If youre working on a shared feature branch,
dont pull down the changes when they are not verified and finalized. It will put your history
in an inconsistent state because your history will contain some changes which might get
removed upstream and later on when you push your changes youre going to put back those removed
changes again.
* Conclusion
This essay was just a superficial try to explain some of the etiquette of Git that we need to
follow when we're collaborating on a project with others. At the end of the day we are looking
to make it easier for ourselves to develop software and following certain rules will help us to
get there faster and makes the process more pleasant.
* References and Resources
- https://www.kernel.org/doc/html/v4.10/process/submitting-patches.html
The kernel community is one of the biggest communities of paid and volunteer contributors
that are using Git intensively with a really high traffic. In order to manage the development
process and keep the productivity that has really strict guidelines which some of them can
be useful for us.
- https://chris.beams.io/posts/git-commit/
Chris Beams made a research about the best practices around the commit messages
By reviewing many projects, his article is one the most referenced articles in this field.
- https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
Another short but widely referenced article on best practices around Git commit messages
- https://yarchive.net/comp/linux/commit_messages.html
Who can be better to follow on Git best practices rather than Linus Torvalds himself?
- https://lwn.net/Articles/328438/
A famous email from Linus Torvalds describing how to maintain a git tree from merge vs
rebase perspective
- https://www.atlassian.com/git/tutorials/merging-vs-rebasing
Atlasians guidelines on merge vs rebase

View File

@ -3,6 +3,7 @@
#+CATEGORY: Engineering
#+DATE: 2019-11-25
#+TITLE: My new programming language
#+DESC: This is the story of my journey through the world of programming languages
As a software engineer, one of my joys in life is to learn new things. I can't describe the
pleasure of learning a new technology or stepping forward in the world of science. If you experienced

View File

@ -0,0 +1,39 @@
#+SETUPFILE: ../../config.org
#+TAGS: Mathematics(m) series(s)
#+CATEGORY: Science
#+DATE: 2022-09-07
#+TITLE: On Mathematics - Preface
#+DESC: Often, we avoid things that are unknown to us and surprisingly mathematics is one of them.
* Preface :Mathematics:series:
In this long essay, I will explore the wonderful world of mathematics in hope of drawing a more clear
picture of what mathematics really is and emphasis the importance of mathematical thinking as a skill
that can drastically change one's life for the better.
Throughout school, I was an average student. Or better to say I started school strongly and finished
up university poorly (just above the failure line). Many factors were involved in such a process.
When I think back, probably the most important reason was that I was interested in subjects which
I could understand the applications of it in real life. As I grew older, the true purpose and
application of different subjects moved away from my understanding, and gradually I have lost
interest in them. For example, even though I always like maths because of its puzzle like nature,
I couldn't understand why I'm learning about calculus and in what way it is useful for me? At the
same time, I found my interest in programming and since I could understand and directly see the
application and usefulness of it in my daily activities, I grew to like more and more.
It was only a few years after graduating from the university that I began to understand mathematics
and science truly. I took me several years and to be frank, I think I have more to understand still.
But the bright side of things was that, everything fell in place, things started to click and the
cloud of confusion and distortion were cleared from my vision. Regret found its way to my heart,
and I wished I knew all this while I was in high school or university. I thought, I'm late to the
game and everyone else already knows about all this. It turned out that I was wrong.
Most of us live our lives without the need to resort to mathematics, or at least that is what we
think. We don't see the need to use mathematics in different aspects of our daily life. Usually,
there is no gap that requires mathematics to fill it. To someone with a basic understanding of
mathematics, it might sound normal. But it puts cringe on the faces of those who understand the
way of mathematics and science.
The way of science and mathematics is what that makes the difference. It helps us to think better,
avoid common pitfalls in life, and live better in general. In this series of essays, I will explore
“the way of science and mathematics” and will do my best to help you gain a clear understanding of
what mathematical thinking means and how to achieve such a skill.

View File

@ -3,6 +3,7 @@
#+CATEGORY: Engineering
#+DATE: 2019-12-01
#+TITLE: Rational and a name
#+DESC: The rational behind Serene
*This post is a draft and I'll finish it gradually*

View File

@ -0,0 +1,81 @@
#+SETUPFILE: ../../config.org
#+TAGS: Serene Languages
#+CATEGORY: Engineering
#+DATE: 2021-04-13
#+TITLE: Serene on the LLVM
#+DESC: The rational behind Serene
As you may know, I'm trying to build [[./my-new-programming-language.org][my new programming language]], after a ton of study and many experiments, I finally made
the decision on what platform I'll target for *Serene*. Here are the history and the
rational behind this decision.
* A little bit of history :Languages:Serene:
After the initial effort on [[./choosing-the-target-platform.org][choosing the right platform]]. I studied a bit about the
GraalVM and experiment with it. While it's a nice tool and I see a bright future for
it, I wasn't happy with some aspects of it. The most important one being the fact
that Oracle is behind it (Why? Well, don't open that door :D) and some other technical
reasons which I get to them later. So I looked around again and re-evaluated my
choices. I came across the [[https://llvm.org][LLVM]]. Previously I didn't pay much attention to the LLVM because
I was blinded by the *GraalVM* and the fact the both work the same theoretically. I mean
using both, we need to create the compiler frontend and they would take care of the
backend for us (more or less). Initially, one of the reasons why I've picked the *GraalVM*
over *LLVM* was due to its support for the *LLVM* itself, and it seemed obvious that
later on we can bridge the LLVM world to *Serene*'s world via *GraalVM*. But It was
quite the opposite.
This time, I looked into the *LLVM* more thoroughly and boy I was (still am) Impressed,
well designed tools and libraries to build a compiler. In compare to the *GraalVM* it
is very mature, well documented and quite modular. Aaand using the *LLVM* I still can
use *GraalVM* via its support for LLVM IR. Long story short the more I've read
about *LLVM* the more I got obsessed with it. So I've decide to move away from *GraalVM*
and start playing with *LLVM*.
* The challenge of the language again
With moving away from the *GraalVM*, I had to choose a host language again. While the
official language of the **LLVM* is *C++* I tried to avoid it, since I'm not skilled
enough in *C++*, So after a series of experiments (which all of them are available
in dedicated branches on the repo) I tried, *Rust*, *C*, *C++* (First attempt) and *Golang*.
I wrote the parser and an interpreter as an experiment and also to evaluate the
facilities of the language when it comes to working with the **LLVM API**. After many
iterations, I ended up using *Golang* to create an interpreter with a *FFI* interface
so we can write the compiler in *Serene* itself.
At the same time I started a journey into mathematics to learn more about the
different type systems in theory and different options that we might have for *Serene*
(I'll write about that separately in the future). Most of my day went to my studies
and I felt really good. But I always had a voice in my head that kept bugging me about
[[https://mlir.llvm.org][MLIR]]. I kinda watched a few introductory talks on it before and I had a rough idea
about what it is and what it does. In order to shut that voice up, I've decided to
look it up and read more about it, while I'm blocked by my math study and to my surprise,
it totally blew me away. MLIR is such a brilliant tool, made out of the experience
gained in making several languages and compilers, and follows some conventional and
well designed principles to build intermediate representation languages.
After I read more and more about the *MLIR* which by the way it's a sub project
of the *LLVM*, I still firmly believed that using *Golang* with should create
an interpreter as a bootstrap language an then provide a FFI interface via
the interpreter to use *MLIR*'s *C API* to interact with it. How naive I was.
During the course of my study on *MLIR*, I came across a beautiful thing called
[[https://llvm.org/docs/TableGen/][TableGen]]. It's part of the LLVM and designed to generate *C++* based on some
description in general. It's a generic tool which developers write backends
for, in order to generate code for specific purposes and in the case of
*MLIR* to generate IR [[https://mlir.llvm.org/docs/Dialects/LLVM/][dialects]]. The way MLIR utilizes the TableGen to generate
dialects and a majority of the operations and types is truly amazing. It makes
the cumbersome task of making a multi-layer IR quite straightforward. *MLIR*
singlehandedly changed my mind about the approach I want to take to build
the compiler. All of a sudden *C++* seemed like a reliable option. So I've
decided to give it a go. I revived the old C++ branch, forked into a branch
called =mlir= and started to work with it a bit. Made a prototype and enhanced it.
After a lot of consideration I finally decided to merge the =mlir= branch into the
=master= and move the *Golang* implementation into its own branch =golang-impl=.
I'm cleaning up the C++ implementation at the moment and I'll be adding a semantic
analysis phase to the compiler and I'll be aiming for a minimal lambda calculus
implementation to wire up everything in their most minimal state as the foundation
and build upon it.
Also I'll write another essay dedicated to the technical aspects of why LLVM and
MLIR are great for our use cases in more detail.

View File

@ -3,6 +3,7 @@
#+CATEGORY: Engineering
#+DATE: 2020-01-03
#+TITLE: Serene (simple versoin)
#+DESC: Overview of the simple version of Serene
As you might already know I'm working on [[file:my-new-programming-language.org][my own programming language]]
for a while now. I'm still on early stages and working on [[file:choosing-the-target-platform.org][choosing the right platform]]

View File

@ -4,6 +4,7 @@
#+CATEGORY: Engineering
#+DATE: 2019-04-26
#+TITLE: Transaction Variants
#+DESC: A quick overview of different transaction variants in a RDBM
In this post I want to talk about different variants of [[https://en.wikipedia.org/wiki/Database_transaction][database transactions]], I assume you already
know about database transactions. So, let's cut to the chase.

View File

@ -47,7 +47,7 @@ Here is a list of questions people usually ask me.
advise. Whatever you do, try to be scientificly literate.
** Where is your hang out place up on the internet ?
I'm an [[https://en.wikipedia.org/wiki/Internet_Relay_Chat][IRC]] user and I usually hang out in the irc://freenode.net/#5hit channel.
I'm an [[https://en.wikipedia.org/wiki/Internet_Relay_Chat][IRC]] user and I usually hang out in the irc://libera.chat/#5hit channel.
* Science

View File

@ -5,11 +5,4 @@
#+TITLE: GPG Information
#+PAGE: true
I use GPG heavily. There might be some expired or fake keys of mine on key servers but here is [[https://dl.lxsameer.com/lxsameer.pub.gpg][My Current Key:]]
#+BEGIN_SRC
pub rsa4096 2020-01-03 [SC] [expires: 2022-01-02]
75B126C50711BF7F4816D451B775967058BB835C
uid [ unknown] Sameer Rahmani (For more info refer to: lxsameer.com) <lxsameer@gnu.org>
sub rsa4096 2020-01-03 [E] [expires: 2022-01-02]
#+END_SRC
I use GPG heavily. There might be some expired or fake keys of mine on key servers but here is [[https://dl.lxsameer.com/lxsameer.pub.gpg][My Current Key]] (Fingerprint ~6F3F A93B 4BD9 C3CA EF38 77E6 384A 12C3 1023 3CC5~)

View File

@ -1,23 +0,0 @@
#+SETUPFILE: ../config.org
#+OPTIONS: toc:nil
#+EXPORT_FILE_NAME: index.html
#+DATE: 2021-02-11
#+TITLE: The little nest of mine
#+PAGE: true
Welcome to my little piece of the world. I'm a software engineer by day and an armature scientist by night
who lives by his [[./coh.org][Code of Honor]]. I write about my thoughts and researches. The views expressed here are my
personal views and not of those organizations that I might be associated with. Most of my time goes to developing
free software either by contributing to other projects or by working on my own stuff which you can find
them on [[https://devheroes.codes][devheroes]].
If you're interested in my work and research feel free to contact me to have a friendly chat Or share you thoughts
with me via email (check my [[./gpg.org][GPG]] info page). If you have a question for me, you might be able to find the answer to it
in the [[./faq.org][FAQs]] page.
* Recent updates:
- [[http://localhost:3003/essays/serene-simple-version.html][Serene (simple versoin)]]
- [[http://localhost:3003/essays/choosing-the-target-platform.html][Choosing the target platform]]
- [[http://localhost:3003/essays/rational-and-a-name.html][Rational and a name]]
- [[http://localhost:3003/essays/my-new-programming-language.html][My new programming language]]
- [[http://localhost:3003/essays/transaction-variants.html][Transaction Variants]]

View File

@ -1,23 +0,0 @@
#+TITLE: lxsameer's nest
- [[file:thoughts.org][Inner world]]
- [[file:essays/serene-simple-version.org][Serene (simple versoin)]]
- [[file:essays/choosing-the-target-platform.org][Choosing the target platform]]
- [[file:essays/rational-and-a-name.org][Rational and a name]]
- [[file:tags/Serene.org][Serene]]
- [[file:tags/Languages.org][Languages]]
- [[file:essays/my-new-programming-language.org][My new programming language]]
- [[file:categories/Engineering.org][Engineering]]
- [[file:tags/Databases.org][Databases]]
- [[file:essays/transaction-variants.org][Transaction Variants]]
- [[file:faq.org][FAQ]]
- [[file:gpg.org][Code of Honor]]
- [[file:coh.org][Code of Honor]]
- [[file:categories/nil.org][<<<title>>>]]
- [[file:categories/SLA.org][SLA]]
- [[file:tags/ASDK.org][ASDK]]
- [[file:tags/BD.org][BD]]
- [[file:tags/ABD.org][ABD]]
- [[file:tags/index.org][index]]
- [[file:categories/index.org][index]]
- [[file:index.org][blah]]

View File

@ -1,16 +1,25 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{title}}</title>
<meta name="description" content="lxsameer's nest">
<meta name="keywords" content="software engineering, physics, computer science, lisp, compilers">
<meta name="author" content="Sameer Rahmani">
<meta property="og:title" content="{{title}}" />
<meta property="og:description" content="{{description}}" />
{{{head}}}
<link rel="stylesheet" href="{{base-url}}/assets/styles/dark.css?1">
<link rel="stylesheet" href="{{base-url}}/assets/styles/main.css?1">
<link rel="stylesheet" href="{{base-url}}/assets/styles/arta.css?1">
<link rel="stylesheet" href="{{base-url}}/assets/styles/dark.css?{{version}}">
<link rel="stylesheet" href="{{base-url}}/assets/styles/main.css?{{version}}">
<link rel="stylesheet" href="{{base-url}}/assets/styles/arta.css?{{version}}">
</head>
<body>
<header>
<nav style="text-align: center;">
<a href="/">HOME</a> | <a href="/categories/">Categories</a> | <a href="/tags/">Tags</a> | <a href="/coh.html">Code of Honor</a>
<a href="/">HOME</a> | <a href="/categories/">Categories</a> | <a href="/tags/">Tags</a> | <a href="/coh.html">Code of Honor</a> | <a href="/rss.xml">RSS</a>
</nav>
<hr/>
</header>
@ -24,7 +33,7 @@
</main>
<footer>
<span>© 2010-2021 Sameer Rahmani</span><br/>
<span>© 2008-2023 Sameer Rahmani</span><br/>
<span>Built with <a href="https://www.gnu.org/software/emacs/">Emacs Lisp</a> and <a href="https://orgmode.org/">org-mode</a>.</span><br/>
<span><a href="https://devheroes.codes/lxsameer/lxhome">https://devheroes.codes/lxsameer/lxhome</a></span>
</footer>

View File

@ -4,4 +4,4 @@
#+PAGE: true
#+TITLE: Categories
<<<links>>>
<<<:links>>>

30
orgs/templates/index.org Normal file
View File

@ -0,0 +1,30 @@
#+SETUPFILE: ../config.org
#+OPTIONS: toc:nil
#+EXPORT_FILE_NAME: index.html
#+DATE: 2021-02-11
#+TITLE: The little nest of mine
#+PAGE: true
#+DESC: All about lxsameer's experience in science and engineering
#+MACRO: buymebook @@html:<a href="$1" target="_blank"><img src="$2" alt="Buy Me A Book" style="height: 60px !important;width: 217px !important;"></a>@@
Welcome to my little piece of the world. I'm a software engineer by day and an amateur scientist by night
who lives by his [[./coh.org][Code of Honor]]. I write about my thoughts and researches. The views expressed here are my
personal views and not of those organizations that I might be associated with. Most of my time goes to developing
free software either by contributing to other projects or by working on my own stuff which you can find
them on [[https://devheroes.codes][devheroes]]. I spend the majority of my time these days working on the [[https://serene-lang.org/][Serene compiler]] and I have
a video series on my [[https://www.youtube.com/c/lxsameer][Youtube channel]].
If you're interested in my work and research feel free to contact me to have a friendly chat or share your thoughts
with me via email (check my [[./gpg.org][GPG]] info page) orrrr you can [[https://www.buymeacoffee.com/lxsameer][buy me a book]] :P.
# {{{buymebook(https://www.buymeacoffee.com/lxsameer,https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png)}}}
If you have a question for me, you might be able to find the answer to it
in the [[./faq.org][FAQs]] page.
* Recent updates:
<<<:links>>>

View File

@ -1,7 +1,7 @@
#+SETUPFILE: ../../config.org
#+OPTIONS: toc:nil
#+TITLE: <<<title>>>
#+TITLE: <<<:title>>>
#+PAGE: true
<<<links>>>
<<<:links>>>

10
orgs/templates/rss.org Normal file
View File

@ -0,0 +1,10 @@
#+SETUPFILE: ../config.org
#+OPTIONS: toc:nil
#+EXPORT_FILE_NAME: index.html
#+DATE: 2021-02-11
#+TITLE: The little nest of mine
#+HTML_LINK_HOME: <<<:base-url>>>
#+PAGE: true
#+DESC: All about lxsameer's experience in science and engineering
<<<:posts>>>

View File

@ -5,4 +5,4 @@
#+TITLE: Tags
<<<links>>>
<<<:links>>>

View File

@ -1,19 +0,0 @@
#+SETUPFILE: ../config.org
#+OPTIONS: toc:nil
#+EXPORT_FILE_NAME: index.html
#+DATE: 2021-02-11
#+TITLE: The little nest of mine
#+PAGE: true
Welcome to my little piece of the world. I'm a software engineer by day and an armature scientist by night
who lives by his [[./coh.org][Code of Honor]]. I write about my thoughts and researches. The views expressed here are my
personal views and not of those organizations that I might be associated with. Most of my time goes to developing
free software either by contributing to other projects or by working on my own stuff which you can find
them on [[https://devheroes.codes][devheroes]].
If you're interested in my work and research feel free to contact me to have a friendly chat Or share you thoughts
with me via email (check my [[./gpg.org][GPG]] info page). If you have a question for me, you might be able to find the answer to it
in the [[./faq.org][FAQs]] page.
* Recent updates:
<<<links>>>

7
thoughts.org Normal file
View File

@ -0,0 +1,7 @@
#+begin_quote
I think a lot when I have a bit of time to spare. I like to write them down and
research about them if possible. These are just my thoughts, wrong or right, doesn't
matter. It doesn't matter, I think a lot...
This post is a part of my thoughts series.
#+END_quote