Compare commits
30 Commits
Author | SHA1 | Date |
---|---|---|
Sameer Rahmani | c0ba724ec6 | |
Sameer Rahmani | ff00004a8b | |
Sameer Rahmani | 0c3f0e3b8b | |
Sameer Rahmani | 4ddf5abc5e | |
Sameer Rahmani | 8d3a903a48 | |
Sameer Rahmani | 6597d08a3a | |
Sameer Rahmani | 1eb9f782b6 | |
Sameer Rahmani | 35296335a1 | |
Sameer Rahmani | b512d0ca2e | |
Sameer Rahmani | cd6909176b | |
Sameer Rahmani | f11aabd79f | |
Sameer Rahmani | 606f2e7a57 | |
Sameer Rahmani | e0923bbcb8 | |
Sameer Rahmani | 7da9a11727 | |
Sameer Rahmani | 4265c4fdbc | |
Sameer Rahmani | 20d3792bdb | |
Sameer Rahmani | a0fba4fe1f | |
Sameer Rahmani | b4992104c8 | |
Sameer Rahmani | 9a1d38e205 | |
Sameer Rahmani | a55d752c10 | |
Sameer Rahmani | 39629cdf31 | |
Sameer Rahmani | f4461f3cd7 | |
Sameer Rahmani | db49effa0d | |
Sameer Rahmani | 4d5206e846 | |
Sameer Rahmani | cfb55a442f | |
Sameer Rahmani | 8821cc8fa6 | |
Sameer Rahmani | 46f3ff9714 | |
Sameer Rahmani | ff13092068 | |
Sameer Rahmani | a17a32bda6 | |
Sameer Rahmani | 157786556e |
17
Cask
17
Cask
|
@ -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")
|
13
Makefile
13
Makefile
|
@ -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
418
build.el
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
63
orgs/coh.org
63
orgs/coh.org
|
@ -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
|
||||
- Don’t betray your code of honor.
|
||||
- Don't betray your code of honor.
|
||||
- Defend your Bushido way.
|
||||
- Live life as a Honorable Man.
|
||||
- Don’t lie.
|
||||
- Live life as an Honorable Man.
|
||||
- Don't lie.
|
||||
- Honesty takes courage.
|
||||
- Don’t talk without a knowledge to support it.
|
||||
- “Don’t 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 people’s shoe before making any decision.
|
||||
- Always put your self in people's shoe before making any decision.
|
||||
- A simple smile goes a long way.
|
||||
- There’s 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. It’s 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 shouldn’t 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"
|
||||
|
|
|
@ -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."
|
|
@ -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 :)).
|
|
@ -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.
|
||||
|
|
|
@ -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."
|
|
@ -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 5–20 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.
|
|
@ -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 can’t 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, it’s far easier to do so.
|
||||
- It's straightforward to track these changes with your ticketing system.
|
||||
- It helps you mentally parse changes you’ve 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 can’t 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=.
|
||||
|
||||
|
||||
** Don’t 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 don’t
|
||||
work with line-based diff tracking as well. It is useful to add a =.gitignore= file in your
|
||||
repository’s root to automatically tell Git which files or paths you don’t want to track.
|
||||
|
||||
* Don’t 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 there’s 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.
|
||||
|
||||
** Don’t change other people’s 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, it’s fine to rebase, because it’s their code but it’s 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.
|
||||
|
||||
** Don’t 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. Don’t push your changes to a shared feature branch or the main
|
||||
branch.
|
||||
|
||||
Don’t merge upstream changes at random points. If you’re working on a shared feature branch,
|
||||
don’t 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 you’re 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
|
|
@ -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
|
||||
|
|
|
@ -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.
|
|
@ -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*
|
||||
|
||||
|
|
|
@ -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.
|
|
@ -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]]
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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~)
|
||||
|
|
|
@ -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]]
|
|
@ -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]]
|
|
@ -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>
|
|
@ -4,4 +4,4 @@
|
|||
#+PAGE: true
|
||||
#+TITLE: Categories
|
||||
|
||||
<<<links>>>
|
||||
<<<:links>>>
|
|
@ -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>>>
|
|
@ -1,7 +1,7 @@
|
|||
#+SETUPFILE: ../../config.org
|
||||
#+OPTIONS: toc:nil
|
||||
#+TITLE: <<<title>>>
|
||||
#+TITLE: <<<:title>>>
|
||||
#+PAGE: true
|
||||
|
||||
|
||||
<<<links>>>
|
||||
<<<:links>>>
|
|
@ -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>>>
|
|
@ -5,4 +5,4 @@
|
|||
#+TITLE: Tags
|
||||
|
||||
|
||||
<<<links>>>
|
||||
<<<:links>>>
|
|
@ -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>>>
|
|
@ -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
|
Loading…
Reference in New Issue