Initial commit

This commit is contained in:
Ali Mürteza Yeşil 2020-07-11 04:51:47 +06:00
commit 9a6c298ad8
3341 changed files with 419518 additions and 0 deletions

75
Makefile Normal file
View File

@ -0,0 +1,75 @@
PY?=python3
PELICAN?=pelican
PELICANOPTS=
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif
RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
PELICANOPTS += --relative-urls
endif
help:
@echo 'Makefile for a pelican Web site '
@echo ' '
@echo 'Usage: '
@echo ' make html (re)generate the web site '
@echo ' make clean remove the generated files '
@echo ' make regenerate regenerate files upon modification '
@echo ' make publish generate using production settings '
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
@echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 '
@echo ' make devserver [PORT=8000] serve and regenerate together '
@echo ' make ssh_upload upload the web site via SSH '
@echo ' make rsync_upload upload the web site via rsync+ssh '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
@echo ' '
html:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
clean:
[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
regenerate:
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
serve:
ifdef PORT
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
else
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
endif
serve-global:
ifdef SERVER
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b $(SERVER)
else
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b 0.0.0.0
endif
devserver:
ifdef PORT
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
else
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
endif
publish:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
.PHONY: html help clean regenerate serve serve-global devserver publish

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

84
bin/activate Normal file
View File

@ -0,0 +1,84 @@
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
if [ "${BASH_SOURCE-}" = "$0" ]; then
echo "You must source this script: \$ source $0" >&2
exit 33
fi
deactivate () {
unset -f pydoc >/dev/null 2>&1
# reset old environment variables
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all
if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then
PATH="$_OLD_VIRTUAL_PATH"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
hash -r 2>/dev/null
fi
if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
PS1="$_OLD_VIRTUAL_PS1"
export PS1
unset _OLD_VIRTUAL_PS1
fi
unset VIRTUAL_ENV
if [ ! "${1-}" = "nondestructive" ] ; then
# Self destruct!
unset -f deactivate
fi
}
# unset irrelevant variables
deactivate nondestructive
VIRTUAL_ENV='/home/murteza/Virtual/Blog'
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
# unset PYTHONHOME if set
if ! [ -z "${PYTHONHOME+_}" ] ; then
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
unset PYTHONHOME
fi
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1-}"
if [ "x" != x ] ; then
PS1="${PS1-}"
else
PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1-}"
fi
export PS1
fi
# Make sure to unalias pydoc if it's already there
alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true
pydoc () {
python -m pydoc "$@"
}
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
hash -r 2>/dev/null
fi

55
bin/activate.csh Normal file
View File

@ -0,0 +1,55 @@
# This file must be used with "source bin/activate.csh" *from csh*.
# You cannot run it directly.
# Created by Davide Di Blasi <davidedb@gmail.com>.
set newline='\
'
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc'
# Unset irrelevant variables.
deactivate nondestructive
setenv VIRTUAL_ENV '/home/murteza/Virtual/Blog'
set _OLD_VIRTUAL_PATH="$PATH:q"
setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
if ('' != "") then
set env_name = ''
else
set env_name = '('"$VIRTUAL_ENV:t:q"') '
endif
if ( $?VIRTUAL_ENV_DISABLE_PROMPT ) then
if ( $VIRTUAL_ENV_DISABLE_PROMPT == "" ) then
set do_prompt = "1"
else
set do_prompt = "0"
endif
else
set do_prompt = "1"
endif
if ( $do_prompt == "1" ) then
# Could be in a non-interactive environment,
# in which case, $prompt is undefined and we wouldn't
# care about the prompt anyway.
if ( $?prompt ) then
set _OLD_VIRTUAL_PROMPT="$prompt:q"
if ( "$prompt:q" =~ *"$newline:q"* ) then
:
else
set prompt = "$env_name:q$prompt:q"
endif
endif
endif
unset env_name
unset do_prompt
alias pydoc python -m pydoc
rehash

100
bin/activate.fish Normal file
View File

@ -0,0 +1,100 @@
# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
# Do not run it directly.
function _bashify_path -d "Converts a fish path to something bash can recognize"
set fishy_path $argv
set bashy_path $fishy_path[1]
for path_part in $fishy_path[2..-1]
set bashy_path "$bashy_path:$path_part"
end
echo $bashy_path
end
function _fishify_path -d "Converts a bash path to something fish can recognize"
echo $argv | tr ':' '\n'
end
function deactivate -d 'Exit virtualenv mode and return to the normal environment.'
# reset old environment variables
if test -n "$_OLD_VIRTUAL_PATH"
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
if test (echo $FISH_VERSION | head -c 1) -lt 3
set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH")
else
set -gx PATH "$_OLD_VIRTUAL_PATH"
end
set -e _OLD_VIRTUAL_PATH
end
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
set -gx PYTHONHOME "$_OLD_VIRTUAL_PYTHONHOME"
set -e _OLD_VIRTUAL_PYTHONHOME
end
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
and functions -q _old_fish_prompt
# Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
set -l fish_function_path
# Erase virtualenv's `fish_prompt` and restore the original.
functions -e fish_prompt
functions -c _old_fish_prompt fish_prompt
functions -e _old_fish_prompt
set -e _OLD_FISH_PROMPT_OVERRIDE
end
set -e VIRTUAL_ENV
if test "$argv[1]" != 'nondestructive'
# Self-destruct!
functions -e pydoc
functions -e deactivate
functions -e _bashify_path
functions -e _fishify_path
end
end
# Unset irrelevant variables.
deactivate nondestructive
set -gx VIRTUAL_ENV '/home/murteza/Virtual/Blog'
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
if test (echo $FISH_VERSION | head -c 1) -lt 3
set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH)
else
set -gx _OLD_VIRTUAL_PATH "$PATH"
end
set -gx PATH "$VIRTUAL_ENV"'/bin' $PATH
# Unset `$PYTHONHOME` if set.
if set -q PYTHONHOME
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
set -e PYTHONHOME
end
function pydoc
python -m pydoc $argv
end
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
# Copy the current `fish_prompt` function as `_old_fish_prompt`.
functions -c fish_prompt _old_fish_prompt
function fish_prompt
# Run the user's prompt first; it might depend on (pipe)status.
set -l prompt (_old_fish_prompt)
# Prompt override provided?
# If not, just prepend the environment name.
if test -n ''
printf '%s%s' '' (set_color normal)
else
printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV")
end
string join -- \n $prompt # handle multi-line prompts
end
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
end

60
bin/activate.ps1 Normal file
View File

@ -0,0 +1,60 @@
$script:THIS_PATH = $myinvocation.mycommand.path
$script:BASE_DIR = Split-Path (Resolve-Path "$THIS_PATH/..") -Parent
function global:deactivate([switch] $NonDestructive) {
if (Test-Path variable:_OLD_VIRTUAL_PATH) {
$env:PATH = $variable:_OLD_VIRTUAL_PATH
Remove-Variable "_OLD_VIRTUAL_PATH" -Scope global
}
if (Test-Path function:_old_virtual_prompt) {
$function:prompt = $function:_old_virtual_prompt
Remove-Item function:\_old_virtual_prompt
}
if ($env:VIRTUAL_ENV) {
Remove-Item env:VIRTUAL_ENV -ErrorAction SilentlyContinue
}
if (!$NonDestructive) {
# Self destruct!
Remove-Item function:deactivate
Remove-Item function:pydoc
}
}
function global:pydoc {
python -m pydoc $args
}
# unset irrelevant variables
deactivate -nondestructive
$VIRTUAL_ENV = $BASE_DIR
$env:VIRTUAL_ENV = $VIRTUAL_ENV
New-Variable -Scope global -Name _OLD_VIRTUAL_PATH -Value $env:PATH
$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH
if (!$env:VIRTUAL_ENV_DISABLE_PROMPT) {
function global:_old_virtual_prompt {
""
}
$function:_old_virtual_prompt = $function:prompt
if ("" -ne "") {
function global:prompt {
# Add the custom prefix to the existing prompt
$previous_prompt_value = & $function:_old_virtual_prompt
("" + $previous_prompt_value)
}
}
else {
function global:prompt {
# Add a prefix to the current prompt, but don't discard it.
$previous_prompt_value = & $function:_old_virtual_prompt
$new_prompt_value = "($( Split-Path $env:VIRTUAL_ENV -Leaf )) "
($new_prompt_value + $previous_prompt_value)
}
}
}

46
bin/activate.xsh Normal file
View File

@ -0,0 +1,46 @@
"""Xonsh activate script for virtualenv"""
from xonsh.tools import get_sep as _get_sep
def _deactivate(args):
if "pydoc" in aliases:
del aliases["pydoc"]
if ${...}.get("_OLD_VIRTUAL_PATH", ""):
$PATH = $_OLD_VIRTUAL_PATH
del $_OLD_VIRTUAL_PATH
if ${...}.get("_OLD_VIRTUAL_PYTHONHOME", ""):
$PYTHONHOME = $_OLD_VIRTUAL_PYTHONHOME
del $_OLD_VIRTUAL_PYTHONHOME
if "VIRTUAL_ENV" in ${...}:
del $VIRTUAL_ENV
if "VIRTUAL_ENV_PROMPT" in ${...}:
del $VIRTUAL_ENV_PROMPT
if "nondestructive" not in args:
# Self destruct!
del aliases["deactivate"]
# unset irrelevant variables
_deactivate(["nondestructive"])
aliases["deactivate"] = _deactivate
$VIRTUAL_ENV = r"/home/murteza/Virtual/Blog"
$_OLD_VIRTUAL_PATH = $PATH
$PATH = $PATH[:]
$PATH.add($VIRTUAL_ENV + _get_sep() + "bin", front=True, replace=True)
if ${...}.get("PYTHONHOME", ""):
# unset PYTHONHOME if set
$_OLD_VIRTUAL_PYTHONHOME = $PYTHONHOME
del $PYTHONHOME
$VIRTUAL_ENV_PROMPT = ""
if not $VIRTUAL_ENV_PROMPT:
del $VIRTUAL_ENV_PROMPT
aliases["pydoc"] = ["python", "-m", "pydoc"]

32
bin/activate_this.py Normal file
View File

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
"""Activate virtualenv for current interpreter:
Use exec(open(this_file).read(), {'__file__': this_file}).
This can be used when you must use an existing Python interpreter, not the virtualenv bin/python.
"""
import os
import site
import sys
try:
abs_file = os.path.abspath(__file__)
except NameError:
raise AssertionError("You must use exec(open(this_file).read(), {'__file__': this_file}))")
bin_dir = os.path.dirname(abs_file)
base = bin_dir[: -len("bin") - 1] # strip away the bin part from the __file__, plus the path separator
# prepend bin to PATH (this file is inside the bin directory)
os.environ["PATH"] = os.pathsep.join([bin_dir] + os.environ.get("PATH", "").split(os.pathsep))
os.environ["VIRTUAL_ENV"] = base # virtual env is right above bin directory
# add the virtual environments libraries to the host python import mechanism
prev_length = len(sys.path)
for lib in "../lib/python3.8/site-packages".split(os.pathsep):
path = os.path.realpath(os.path.join(bin_dir, lib))
site.addsitedir(path.decode("utf-8") if "" else path)
sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]
sys.real_prefix = sys.prefix
sys.prefix = base

8
bin/chardetect Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from chardet.cli.chardetect import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/chardetect-3.8 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from chardet.cli.chardetect import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/chardetect3 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from chardet.cli.chardetect import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/distro Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from distro import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/distro-3.8 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from distro import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/distro3 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from distro import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/easy_install Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from setuptools.command.easy_install import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/easy_install-3.8 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from setuptools.command.easy_install import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/easy_install3 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from setuptools.command.easy_install import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/markdown_py Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from markdown.__main__ import run
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(run())

8
bin/pelican Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pelican.__main__ import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/pelican-import Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pelican.tools.pelican_import import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/pelican-quickstart Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pelican.tools.pelican_quickstart import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/pelican-themes Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pelican.tools.pelican_themes import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/pip Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/pip-3.8 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/pip3 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/pip3.8 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/pygmentize Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pygments.cmdline import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

1
bin/python Symbolic link
View File

@ -0,0 +1 @@
/usr/bin/python3

1
bin/python3 Symbolic link
View File

@ -0,0 +1 @@
python

1
bin/python3.8 Symbolic link
View File

@ -0,0 +1 @@
python

23
bin/rst2html.py Executable file
View File

@ -0,0 +1,23 @@
#!/home/murteza/Virtual/Blog/bin/python
# $Id: rst2html.py 4564 2006-05-21 20:44:42Z wiemann $
# Author: David Goodger <goodger@python.org>
# Copyright: This module has been placed in the public domain.
"""
A minimal front end to the Docutils Publisher, producing HTML.
"""
try:
import locale
locale.setlocale(locale.LC_ALL, '')
except:
pass
from docutils.core import publish_cmdline, default_description
description = ('Generates (X)HTML documents from standalone reStructuredText '
'sources. ' + default_description)
publish_cmdline(writer_name='html', description=description)

26
bin/rst2html4.py Executable file
View File

@ -0,0 +1,26 @@
#!/home/murteza/Virtual/Blog/bin/python
# $Id: rst2html4.py 7994 2016-12-10 17:41:45Z milde $
# Author: David Goodger <goodger@python.org>
# Copyright: This module has been placed in the public domain.
"""
A minimal front end to the Docutils Publisher, producing (X)HTML.
The output conforms to XHTML 1.0 transitional
and almost to HTML 4.01 transitional (except for closing empty tags).
"""
try:
import locale
locale.setlocale(locale.LC_ALL, '')
except:
pass
from docutils.core import publish_cmdline, default_description
description = ('Generates (X)HTML documents from standalone reStructuredText '
'sources. ' + default_description)
publish_cmdline(writer_name='html4', description=description)

35
bin/rst2html5.py Executable file
View File

@ -0,0 +1,35 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf8 -*-
# :Copyright: © 2015 Günter Milde.
# :License: Released under the terms of the `2-Clause BSD license`_, in short:
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.
# This file is offered as-is, without any warranty.
#
# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause
#
# Revision: $Revision: 8410 $
# Date: $Date: 2019-11-04 22:14:43 +0100 (Mo, 04. Nov 2019) $
"""
A minimal front end to the Docutils Publisher, producing HTML 5 documents.
The output also conforms to XHTML 1.0 transitional
(except for the doctype declaration).
"""
try:
import locale # module missing in Jython
locale.setlocale(locale.LC_ALL, '')
except locale.Error:
pass
from docutils.core import publish_cmdline, default_description
description = (u'Generates HTML 5 documents from standalone '
u'reStructuredText sources '
+ default_description)
publish_cmdline(writer_name='html5', description=description)

26
bin/rst2latex.py Executable file
View File

@ -0,0 +1,26 @@
#!/home/murteza/Virtual/Blog/bin/python
# $Id: rst2latex.py 5905 2009-04-16 12:04:49Z milde $
# Author: David Goodger <goodger@python.org>
# Copyright: This module has been placed in the public domain.
"""
A minimal front end to the Docutils Publisher, producing LaTeX.
"""
try:
import locale
locale.setlocale(locale.LC_ALL, '')
except:
pass
from docutils.core import publish_cmdline
description = ('Generates LaTeX documents from standalone reStructuredText '
'sources. '
'Reads from <source> (default is stdin) and writes to '
'<destination> (default is stdout). See '
'<http://docutils.sourceforge.net/docs/user/latex.html> for '
'the full reference.')
publish_cmdline(writer_name='latex', description=description)

26
bin/rst2man.py Executable file
View File

@ -0,0 +1,26 @@
#!/home/murteza/Virtual/Blog/bin/python
# Author:
# Contact: grubert@users.sf.net
# Copyright: This module has been placed in the public domain.
"""
man.py
======
This module provides a simple command line interface that uses the
man page writer to output from ReStructuredText source.
"""
import locale
try:
locale.setlocale(locale.LC_ALL, '')
except:
pass
from docutils.core import publish_cmdline, default_description
from docutils.writers import manpage
description = ("Generates plain unix manual documents. " + default_description)
publish_cmdline(writer=manpage.Writer(), description=description)

30
bin/rst2odt.py Executable file
View File

@ -0,0 +1,30 @@
#!/home/murteza/Virtual/Blog/bin/python
# $Id: rst2odt.py 5839 2009-01-07 19:09:28Z dkuhlman $
# Author: Dave Kuhlman <dkuhlman@rexx.com>
# Copyright: This module has been placed in the public domain.
"""
A front end to the Docutils Publisher, producing OpenOffice documents.
"""
import sys
try:
import locale
locale.setlocale(locale.LC_ALL, '')
except:
pass
from docutils.core import publish_cmdline_to_binary, default_description
from docutils.writers.odf_odt import Writer, Reader
description = ('Generates OpenDocument/OpenOffice/ODF documents from '
'standalone reStructuredText sources. ' + default_description)
writer = Writer()
reader = Reader()
output = publish_cmdline_to_binary(reader=reader, writer=writer,
description=description)

67
bin/rst2odt_prepstyles.py Executable file
View File

@ -0,0 +1,67 @@
#!/home/murteza/Virtual/Blog/bin/python
# $Id: rst2odt_prepstyles.py 8346 2019-08-26 12:11:32Z milde $
# Author: Dave Kuhlman <dkuhlman@rexx.com>
# Copyright: This module has been placed in the public domain.
"""
Fix a word-processor-generated styles.odt for odtwriter use: Drop page size
specifications from styles.xml in STYLE_FILE.odt.
"""
# Author: Michael Schutte <michi@uiae.at>
from __future__ import print_function
from lxml import etree
import sys
import zipfile
from tempfile import mkstemp
import shutil
import os
NAMESPACES = {
"style": "urn:oasis:names:tc:opendocument:xmlns:style:1.0",
"fo": "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
}
def prepstyle(filename):
zin = zipfile.ZipFile(filename)
styles = zin.read("styles.xml")
root = etree.fromstring(styles)
for el in root.xpath("//style:page-layout-properties",
namespaces=NAMESPACES):
for attr in el.attrib:
if attr.startswith("{%s}" % NAMESPACES["fo"]):
del el.attrib[attr]
tempname = mkstemp()
zout = zipfile.ZipFile(os.fdopen(tempname[0], "w"), "w",
zipfile.ZIP_DEFLATED)
for item in zin.infolist():
if item.filename == "styles.xml":
zout.writestr(item, etree.tostring(root))
else:
zout.writestr(item, zin.read(item.filename))
zout.close()
zin.close()
shutil.move(tempname[1], filename)
def main():
args = sys.argv[1:]
if len(args) != 1:
print(__doc__, file=sys.stderr)
print("Usage: %s STYLE_FILE.odt\n" % sys.argv[0], file=sys.stderr)
sys.exit(1)
filename = args[0]
prepstyle(filename)
if __name__ == '__main__':
main()

23
bin/rst2pseudoxml.py Executable file
View File

@ -0,0 +1,23 @@
#!/home/murteza/Virtual/Blog/bin/python
# $Id: rst2pseudoxml.py 4564 2006-05-21 20:44:42Z wiemann $
# Author: David Goodger <goodger@python.org>
# Copyright: This module has been placed in the public domain.
"""
A minimal front end to the Docutils Publisher, producing pseudo-XML.
"""
try:
import locale
locale.setlocale(locale.LC_ALL, '')
except:
pass
from docutils.core import publish_cmdline, default_description
description = ('Generates pseudo-XML from standalone reStructuredText '
'sources (for testing purposes). ' + default_description)
publish_cmdline(description=description)

24
bin/rst2s5.py Executable file
View File

@ -0,0 +1,24 @@
#!/home/murteza/Virtual/Blog/bin/python
# $Id: rst2s5.py 4564 2006-05-21 20:44:42Z wiemann $
# Author: Chris Liechti <cliechti@gmx.net>
# Copyright: This module has been placed in the public domain.
"""
A minimal front end to the Docutils Publisher, producing HTML slides using
the S5 template system.
"""
try:
import locale
locale.setlocale(locale.LC_ALL, '')
except:
pass
from docutils.core import publish_cmdline, default_description
description = ('Generates S5 (X)HTML slideshow documents from standalone '
'reStructuredText sources. ' + default_description)
publish_cmdline(writer_name='s5', description=description)

27
bin/rst2xetex.py Executable file
View File

@ -0,0 +1,27 @@
#!/home/murteza/Virtual/Blog/bin/python
# $Id: rst2xetex.py 7847 2015-03-17 17:30:47Z milde $
# Author: Guenter Milde
# Copyright: This module has been placed in the public domain.
"""
A minimal front end to the Docutils Publisher, producing Lua/XeLaTeX code.
"""
try:
import locale
locale.setlocale(locale.LC_ALL, '')
except:
pass
from docutils.core import publish_cmdline
description = ('Generates LaTeX documents from standalone reStructuredText '
'sources for compilation with the Unicode-aware TeX variants '
'XeLaTeX or LuaLaTeX. '
'Reads from <source> (default is stdin) and writes to '
'<destination> (default is stdout). See '
'<http://docutils.sourceforge.net/docs/user/latex.html> for '
'the full reference.')
publish_cmdline(writer_name='xetex', description=description)

23
bin/rst2xml.py Executable file
View File

@ -0,0 +1,23 @@
#!/home/murteza/Virtual/Blog/bin/python
# $Id: rst2xml.py 4564 2006-05-21 20:44:42Z wiemann $
# Author: David Goodger <goodger@python.org>
# Copyright: This module has been placed in the public domain.
"""
A minimal front end to the Docutils Publisher, producing Docutils XML.
"""
try:
import locale
locale.setlocale(locale.LC_ALL, '')
except:
pass
from docutils.core import publish_cmdline, default_description
description = ('Generates Docutils-native XML from standalone '
'reStructuredText sources. ' + default_description)
publish_cmdline(writer_name='xml', description=description)

25
bin/rstpep2html.py Executable file
View File

@ -0,0 +1,25 @@
#!/home/murteza/Virtual/Blog/bin/python
# $Id: rstpep2html.py 4564 2006-05-21 20:44:42Z wiemann $
# Author: David Goodger <goodger@python.org>
# Copyright: This module has been placed in the public domain.
"""
A minimal front end to the Docutils Publisher, producing HTML from PEP
(Python Enhancement Proposal) documents.
"""
try:
import locale
locale.setlocale(locale.LC_ALL, '')
except:
pass
from docutils.core import publish_cmdline, default_description
description = ('Generates (X)HTML from reStructuredText-format PEP files. '
+ default_description)
publish_cmdline(reader_name='pep', writer_name='pep_html',
description=description)

8
bin/unidecode Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from unidecode.util import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/wheel Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from wheel.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/wheel-3.8 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from wheel.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/wheel3 Executable file
View File

@ -0,0 +1,8 @@
#!/home/murteza/Virtual/Blog/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from wheel.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -0,0 +1,55 @@
title: Privacy For The Whole Family
date: 2020-07-10 11:18
tags: privacy, nextcloud, self-hosting
category: Tech
summary: My story of learning about wounds in my privacy and my first steps to recover it, helping my family in the process.
status: published
According to my mother, we had internet in our house while I was a baby. Internet back in the day used to make iconic dial sound, was slow and would lose connection whenever someone called the landline. I grew up seeing webpages full of GIFs (I won't argue about its pronounciation, it was decided long ago) and banner ads injected by adwares. Flash and Shockwave were the fundamental building blocks of interactive webpages with animations.
All those colorful flash games sites were offering tones of free games in exchange of distributing adverts and malware in their websites. As a child attracted by colors, I believed that those games were actually free. Some of those "free" game sites are still around and powered by Google AdSense. Others moved to Facebook and started earning from Facebook Ads and in-game currencies often called "gems". Around that time my classmates started to talk about Facebook and I had to go there too.
I grew up since then. I came abroad to study computer science. I have my own laptop and smartphone. I was using my devices and all those free services to talk to my family from thousands of kilometres away. I was using those sweet and free services for backing up my data, photos, documents, contacts and more. These services are free for us because all those wonderful advertisers are paying them off their goodwill ...
#### *__So I thought__*
I was naive to upload my and my family's photos to Google Photos. I was naive to tag my friends in photos on Facebook. I was naive to use Amazon instead of taking a walk in tech market and support the independent sellers. I was feeding tech giants for convenience and damaging local economy without knowing. I didn't know any better and I confussed giving up my privacy with convenience. I am not that naive kid anymore. I learned English Language in Kenya and I learned to harness the knowledge in the internet. I learned that there are alternatives that I can use.
#### *__I learned that there is a way to gain my digital freedom__*
My first action was to switch to [![DuckDuckGo logo](https://fosstodon.b-cdn.net/custom_emojis/images/000/010/368/static/duckduckgo.png) DuckDuckGo](https://duckduckgo.com) from Google Search. I found that the most widely adopted service of Google is a text box for us to write our most intimate secrets in plain text.
![Google wants user data. Users use Google Search. Google says "It's Free Real Estate"]({static}/images/it_is_free_real_estate_1.jpg)
Dropping Google Search wasn't gonna cut it though. I still was relying on Google Contacts, Photos and Drive to backup my data. I needed something that could backup my phone properly while not giving up my data to data hungry companies.
# NextCloud to the rescue
NextCloud is a file hosting service with built-in CardDAV (contact sync), CalDAV (calendar sync) and WebDAV (file sync) servers. Not to mention, it supports adding more features by installing modules from its [apps library](https://apps.nextcloud.com/). It is [FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software "Free and Open Source Software") free as in freedom for everyone and int this case free as in price for non-enterprise users. Nice thing about NextCloud is that it offers _all of its features_ to both its enterprise and home/personal users. Enterprise users also benefit from technical maintenance support direct from the NextCloud.
The way I deployed my NextCloud instance was to rent a remote VM. I am a student who can't afford to buy a machine and run it 24/7. Renting a server seemed like the most affordable and logical idea to me. Rent costs $5/month for the cheapest tier. I am careful with my pocket money and after cancelling my Netflix subscription, I had more than enough to pay $5/month.
After renting a server, I started experimenting with different OSes. I tried Debian but its php packages were old. I tried CentOS based NethServer but default user credentials for NextCloud were wrong and I couldn't use it either. I finally settled at Ubuntu 20.04 LTS. I followed few tutorials before I found Kev's tutorial. I deviated from those tutorials because I am young and ... nevermind. I finally found Kev's tutorial and
There still was a problem though. I am not he only one sharing data about me. My family can do that too. And I felt responsible for helping my family with claiming their digital freedom too. I decided to create accounts for them and help them migrate to my NextCloud instance. It turns out my family acknowledged the privacy they were giving up for the convenience. But they didn't know any alternatives. When I invited them to use my NextCloud instance they were excited. But moving from Google Suite to NextCloud isn't done yet. It takes time to learn new systems and their quirks.
## Conclusion
I think this was a successful attempt. Of course I am not done here. I may need to introduce my family to Fediverse, free social media powered by voluntaries, or Jitsi, Open Source alternative to Zoom and WhatsApp video calls services. But for now we all made good progress I would say. I will let some time pass until they get more comfortable at using NextCloud. I don't want to overwhelm them and make them regret switching. I don't want to be another reason they stay on Google.
Meanwhile, why won't you make an attempt to gain your own digital freedom ?
I see many ways this can be achieved (Numbers in the beginning suggested how difficult they are rated out of 5):
3 - Manually install NextCloud on a remote VM
2 - Install NextCloud via Snap Package on a remote VM
4 - Manually install NextCloud on an old computer
3 - Install NextCloud via Snap on an old computer
1 - Purchase a [Synology](https://www.synology.com) NAS to serve you data backups, sync and more services
1 - Purchase a shared hosting on one of many service providers tested by NextCloud company
## Tutorials
__Installing on own server__: Kev beautifully explains both Snap Package way and manual way of installing in his [tutorial](https://kevq.uk/how-to-setup-a-nextcloud-server-in-ubuntu/).
__Installing on shared hosting__: But if you are intimidated with the idea of setting up your own server and managing it, you can use a shared hosting instead. Kev has a [tutorial](https://kevq.uk/how-to-install-nextcloud-on-shared-hosting/) for that too, albeit it aged a bit old.
__Repurposing old hardware__: If you have an old computer gathering dust in a closet, why not use it as a home server! You will find many tutorials on the internet on [how to install Ubuntu server](https://lbry.tv/@TheLinuxGuy:d/How-to-Install-Ubuntu-Server-20.04-LTS:5).
---
The only reason I followed manual method was some rookie mistake I made that caused Let's Encrypt HTTPS script to not work properly 😬️ I highly doubt you will face the same issue if you follow the tutorials carefully. Even if you do face some problems with [getting HTTPS certificate using `certbot`](https://certbot.eff.org/) command isn't difficult at all.

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

46
content/pages/about.md Normal file
View File

@ -0,0 +1,46 @@
title: About
## Ali Murteza Yesil
Mastering life through art of making mistakes.
Smart people learn from their experiences, geniuses learn from others' experiences too. This is why I appreciate constructive criticism 😃️
A computer science student who wants to live in a World where everybody respects everybody else's every rights. Everybody deserves to live in such a World. So, why not make it.
This kid is looking for his calling. He may have find it in advocating for privacy. This is not to say that he is perfect at defending it, he still makes rookie mistakes.
Nationality: Turkish
Grew up in: Kenya
Confession: I didn't know English Language when my family and I moved to Kenya. I only learned English Language in Kenya since it was my priority, not Swahili 😐️ I still would like to call myself grew up in Kenya since this is where my personality was shaped.
Confession: I also would like to use word "nigga" in friendly way Kenyans use, not in racist way American tend to use.
Favourite foods: Sarma (stuffed grape leaves/cabbage), matoke chips
Favourite drinks: Water, ayran
## Blog
This blog is where Ali Murteza Yesil's opinions embody into words. This blog is compiled into static pages to reduce its carbon footprint. Instead of running webmention or disqus based comment system, I decided to share my blog posts on Mastodon and treat messages to those toots as comments. If you want to comment to my posts, we welcome you to [Fediverse](https://en.wikipedia.org/wiki/Fediverse "Learn about Fediverse on Wikipedia").
Static pages generated from markdown using [Pelican](https://blog.getpelican.com/ "Static Site Generator").
## License
Everything on this blog is licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode "Creative Commons Attribution-ShareAlike 4.0 International License") unless otherwise stated. You can find a human readable form below for quick reference. Below reference is just a summary of your rights and responsibilities. It is not the license itself.
> You are free to
>
> > __Share__ copy and redistribute the material in any medium or format
>
> > __Adapt__ remix, transform and build upon the material for any purpose, even commercially
>
> Under the following terms
>
> > __Attribution__ You must give appropriate credit, provide link to license and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
>
> > __ShareAlike__ If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
![CC BY-SA 4.0 badge](https://licensebuttons.net/l/by-sa/4.0/88x31.png)
## IndieWeb
I didn't implement it in this blog just yet. I will work on it next.

5
content/pages/contact.md Normal file
View File

@ -0,0 +1,5 @@
title: Contact
![Fosstodon logo](https://fosstodon.b-cdn.net/custom_emojis/images/000/025/118/static/fosstodon.png) __Fosstodon__: https://fosstodon.org/@murtezayesil

64
docs/archives.html Normal file
View File

@ -0,0 +1,64 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ali Murteza Yesil - Blog</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<section id="content" class="body">
<h1>Archives for Ali Murteza Yesil - Blog</h1>
<dl>
<dt>Fri 10 July 2020</dt>
<dd><a href="https://murtezayesil.me/privacy-for-the-whole-family.html">Privacy For The Whole Family</a></dd>
</dl>
</section>
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

View File

@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ali Murteza Yesil - Blog - Ali Murteza Yesil</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<aside id="featured" class="body">
<article>
<h1 class="entry-title"><a href="https://murtezayesil.me/privacy-for-the-whole-family.html">Privacy For The Whole Family</a></h1>
<footer class="post-info">
<span>Fri 10 July 2020</span>
<span>| in <a href="https://murtezayesil.me/category/tech.html">Tech</a></span>
<span>| tags: <a href="https://murtezayesil.me/tag/privacy.html">privacy</a><a href="https://murtezayesil.me/tag/nextcloud.html">nextcloud</a><a href="https://murtezayesil.me/tag/self-hosting.html">self-hosting</a></span>
</footer><!-- /.post-info --><p>According to my mother, we had internet in our house while I was a baby. Internet back in the day used to make iconic dial sound, was slow and would lose connection whenever someone called the landline. I grew up seeing webpages full of GIFs (I won't argue about its pronounciation, it was decided long ago) and banner ads injected by adwares. Flash and Shockwave were the fundamental building blocks of interactive webpages with animations.</p>
<p>All those colorful flash games sites were offering tones of free games in exchange of distributing adverts and malware in their websites. As a child attracted by colors, I believed that those games were actually free. Some of those "free" game sites are still around and powered by Google AdSense. Others moved to Facebook and started earning from Facebook Ads and in-game currencies often called "gems". Around that time my classmates started to talk about Facebook and I had to go there too.</p>
<p>I grew up since then. I came abroad to study computer science. I have my own laptop and smartphone. I was using my devices and all those free services to talk to my family from thousands of kilometres away. I was using those sweet and free services for backing up my data, photos, documents, contacts and more. These services are free for us because all those wonderful advertisers are paying them off their goodwill ...</p>
<h4><em><strong>So I thought</strong></em></h4>
<p>I was naive to upload my and my family's photos to Google Photos. I was naive to tag my friends in photos on Facebook. I was naive to use Amazon instead of taking a walk in tech market and support the independent sellers. I was feeding tech giants for convenience and damaging local economy without knowing. I didn't know any better and I confussed giving up my privacy with convenience. I am not that naive kid anymore. I learned English Language in Kenya and I learned to harness the knowledge in the internet. I learned that there are alternatives that I can use.</p>
<h4><em><strong>I learned that there is a way to gain my digital freedom</strong></em></h4>
<p>My first action was to switch to <a href="https://duckduckgo.com"><img alt="DuckDuckGo logo" src="https://fosstodon.b-cdn.net/custom_emojis/images/000/010/368/static/duckduckgo.png"> DuckDuckGo</a> from Google Search. I found that the most widely adopted service of Google is a text box for us to write our most intimate secrets in plain text.</p>
<p><img alt="Google wants user data. Users use Google Search. Google says &quot;It's Free Real Estate&quot;" src="https://murtezayesil.me/images/it_is_free_real_estate_1.jpg"></p>
<p>Dropping Google Search wasn't gonna cut it though. I still was relying on Google Contacts, Photos and Drive to backup my data. I needed something that could backup my phone properly while not giving up my data to data hungry companies.</p>
<h1>NextCloud to the rescue</h1>
<p>NextCloud is a file hosting service with built-in CardDAV (contact sync), CalDAV (calendar sync) and WebDAV (file sync) servers. Not to mention, it supports adding more features by installing modules from its <a href="https://apps.nextcloud.com/">apps library</a>. It is <a href="https://en.wikipedia.org/wiki/Free_and_open-source_software" title="Free and Open Source Software">FOSS</a> free as in freedom for everyone and int this case free as in price for non-enterprise users. Nice thing about NextCloud is that it offers <em>all of its features</em> to both its enterprise and home/personal users. Enterprise users also benefit from technical maintenance support direct from the NextCloud.</p>
<p>The way I deployed my NextCloud instance was to rent a remote VM. I am a student who can't afford to buy a machine and run it 24/7. Renting a server seemed like the most affordable and logical idea to me. Rent costs $5/month for the cheapest tier. I am careful with my pocket money and after cancelling my Netflix subscription, I had more than enough to pay $5/month.</p>
<p>After renting a server, I started experimenting with different OSes. I tried Debian but its php packages were old. I tried CentOS based NethServer but default user credentials for NextCloud were wrong and I couldn't use it either. I finally settled at Ubuntu 20.04 LTS. I followed few tutorials before I found Kev's tutorial. I deviated from those tutorials because I am young and ... nevermind. I finally found Kev's tutorial and </p>
<p>There still was a problem though. I am not he only one sharing data about me. My family can do that too. And I felt responsible for helping my family with claiming their digital freedom too. I decided to create accounts for them and help them migrate to my NextCloud instance. It turns out my family acknowledged the privacy they were giving up for the convenience. But they didn't know any alternatives. When I invited them to use my NextCloud instance they were excited. But moving from Google Suite to NextCloud isn't done yet. It takes time to learn new systems and their quirks.</p>
<h2>Conclusion</h2>
<p>I think this was a successful attempt. Of course I am not done here. I may need to introduce my family to Fediverse, free social media powered by voluntaries, or Jitsi, Open Source alternative to Zoom and WhatsApp video calls services. But for now we all made good progress I would say. I will let some time pass until they get more comfortable at using NextCloud. I don't want to overwhelm them and make them regret switching. I don't want to be another reason they stay on Google. </p>
<p>Meanwhile, why won't you make an attempt to gain your own digital freedom ?<br>
I see many ways this can be achieved (Numbers in the beginning suggested how difficult they are rated out of 5):<br>
3 - Manually install NextCloud on a remote VM<br>
2 - Install NextCloud via Snap Package on a remote VM<br>
4 - Manually install NextCloud on an old computer<br>
3 - Install NextCloud via Snap on an old computer<br>
1 - Purchase a <a href="https://www.synology.com">Synology</a> NAS to serve you data backups, sync and more services<br>
1 - Purchase a shared hosting on one of many service providers tested by NextCloud company</p>
<h2>Tutorials</h2>
<p><strong>Installing on own server</strong>: Kev beautifully explains both Snap Package way and manual way of installing in his <a href="https://kevq.uk/how-to-setup-a-nextcloud-server-in-ubuntu/">tutorial</a>.<br>
<strong>Installing on shared hosting</strong>: But if you are intimidated with the idea of setting up your own server and managing it, you can use a shared hosting instead. Kev has a <a href="https://kevq.uk/how-to-install-nextcloud-on-shared-hosting/">tutorial</a> for that too, albeit it aged a bit old. <br>
<strong>Repurposing old hardware</strong>: If you have an old computer gathering dust in a closet, why not use it as a home server! You will find many tutorials on the internet on <a href="https://lbry.tv/@TheLinuxGuy:d/How-to-Install-Ubuntu-Server-20.04-LTS:5">how to install Ubuntu server</a>. </p>
<hr>
<p>The only reason I followed manual method was some rookie mistake I made that caused Let's Encrypt HTTPS script to not work properly 😬️ I highly doubt you will face the same issue if you follow the tutorials carefully. Even if you do face some problems with <a href="https://certbot.eff.org/">getting HTTPS certificate using <code>certbot</code></a> command isn't difficult at all.</p> </article>
<p class="paginator">
Page 1 / 1
</p>
</aside><!-- /#featured -->
</ol><!-- /#posts-list -->
</section><!-- /#content -->
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

61
docs/authors.html Normal file
View File

@ -0,0 +1,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ali Murteza Yesil - Blog - Authors</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<section id="content" class="body">
<h1>Authors on Ali Murteza Yesil - Blog</h1> <li><a href="https://murtezayesil.me/author/ali-murteza-yesil.html">Ali Murteza Yesil</a> (1)</li>
</section>
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

60
docs/categories.html Normal file
View File

@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ali Murteza Yesil - Blog - Categories</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<h1>Categories on Ali Murteza Yesil - Blog</h1>
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a> (1)</li>
</ul>
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

100
docs/category/tech.html Normal file
View File

@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ali Murteza Yesil - Blog - Tech</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li class="active"><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<aside id="featured" class="body">
<article>
<h1 class="entry-title"><a href="https://murtezayesil.me/privacy-for-the-whole-family.html">Privacy For The Whole Family</a></h1>
<footer class="post-info">
<span>Fri 10 July 2020</span>
<span>| in <a href="https://murtezayesil.me/category/tech.html">Tech</a></span>
<span>| tags: <a href="https://murtezayesil.me/tag/privacy.html">privacy</a><a href="https://murtezayesil.me/tag/nextcloud.html">nextcloud</a><a href="https://murtezayesil.me/tag/self-hosting.html">self-hosting</a></span>
</footer><!-- /.post-info --><p>According to my mother, we had internet in our house while I was a baby. Internet back in the day used to make iconic dial sound, was slow and would lose connection whenever someone called the landline. I grew up seeing webpages full of GIFs (I won't argue about its pronounciation, it was decided long ago) and banner ads injected by adwares. Flash and Shockwave were the fundamental building blocks of interactive webpages with animations.</p>
<p>All those colorful flash games sites were offering tones of free games in exchange of distributing adverts and malware in their websites. As a child attracted by colors, I believed that those games were actually free. Some of those "free" game sites are still around and powered by Google AdSense. Others moved to Facebook and started earning from Facebook Ads and in-game currencies often called "gems". Around that time my classmates started to talk about Facebook and I had to go there too.</p>
<p>I grew up since then. I came abroad to study computer science. I have my own laptop and smartphone. I was using my devices and all those free services to talk to my family from thousands of kilometres away. I was using those sweet and free services for backing up my data, photos, documents, contacts and more. These services are free for us because all those wonderful advertisers are paying them off their goodwill ...</p>
<h4><em><strong>So I thought</strong></em></h4>
<p>I was naive to upload my and my family's photos to Google Photos. I was naive to tag my friends in photos on Facebook. I was naive to use Amazon instead of taking a walk in tech market and support the independent sellers. I was feeding tech giants for convenience and damaging local economy without knowing. I didn't know any better and I confussed giving up my privacy with convenience. I am not that naive kid anymore. I learned English Language in Kenya and I learned to harness the knowledge in the internet. I learned that there are alternatives that I can use.</p>
<h4><em><strong>I learned that there is a way to gain my digital freedom</strong></em></h4>
<p>My first action was to switch to <a href="https://duckduckgo.com"><img alt="DuckDuckGo logo" src="https://fosstodon.b-cdn.net/custom_emojis/images/000/010/368/static/duckduckgo.png"> DuckDuckGo</a> from Google Search. I found that the most widely adopted service of Google is a text box for us to write our most intimate secrets in plain text.</p>
<p><img alt="Google wants user data. Users use Google Search. Google says &quot;It's Free Real Estate&quot;" src="https://murtezayesil.me/images/it_is_free_real_estate_1.jpg"></p>
<p>Dropping Google Search wasn't gonna cut it though. I still was relying on Google Contacts, Photos and Drive to backup my data. I needed something that could backup my phone properly while not giving up my data to data hungry companies.</p>
<h1>NextCloud to the rescue</h1>
<p>NextCloud is a file hosting service with built-in CardDAV (contact sync), CalDAV (calendar sync) and WebDAV (file sync) servers. Not to mention, it supports adding more features by installing modules from its <a href="https://apps.nextcloud.com/">apps library</a>. It is <a href="https://en.wikipedia.org/wiki/Free_and_open-source_software" title="Free and Open Source Software">FOSS</a> free as in freedom for everyone and int this case free as in price for non-enterprise users. Nice thing about NextCloud is that it offers <em>all of its features</em> to both its enterprise and home/personal users. Enterprise users also benefit from technical maintenance support direct from the NextCloud.</p>
<p>The way I deployed my NextCloud instance was to rent a remote VM. I am a student who can't afford to buy a machine and run it 24/7. Renting a server seemed like the most affordable and logical idea to me. Rent costs $5/month for the cheapest tier. I am careful with my pocket money and after cancelling my Netflix subscription, I had more than enough to pay $5/month.</p>
<p>After renting a server, I started experimenting with different OSes. I tried Debian but its php packages were old. I tried CentOS based NethServer but default user credentials for NextCloud were wrong and I couldn't use it either. I finally settled at Ubuntu 20.04 LTS. I followed few tutorials before I found Kev's tutorial. I deviated from those tutorials because I am young and ... nevermind. I finally found Kev's tutorial and </p>
<p>There still was a problem though. I am not he only one sharing data about me. My family can do that too. And I felt responsible for helping my family with claiming their digital freedom too. I decided to create accounts for them and help them migrate to my NextCloud instance. It turns out my family acknowledged the privacy they were giving up for the convenience. But they didn't know any alternatives. When I invited them to use my NextCloud instance they were excited. But moving from Google Suite to NextCloud isn't done yet. It takes time to learn new systems and their quirks.</p>
<h2>Conclusion</h2>
<p>I think this was a successful attempt. Of course I am not done here. I may need to introduce my family to Fediverse, free social media powered by voluntaries, or Jitsi, Open Source alternative to Zoom and WhatsApp video calls services. But for now we all made good progress I would say. I will let some time pass until they get more comfortable at using NextCloud. I don't want to overwhelm them and make them regret switching. I don't want to be another reason they stay on Google. </p>
<p>Meanwhile, why won't you make an attempt to gain your own digital freedom ?<br>
I see many ways this can be achieved (Numbers in the beginning suggested how difficult they are rated out of 5):<br>
3 - Manually install NextCloud on a remote VM<br>
2 - Install NextCloud via Snap Package on a remote VM<br>
4 - Manually install NextCloud on an old computer<br>
3 - Install NextCloud via Snap on an old computer<br>
1 - Purchase a <a href="https://www.synology.com">Synology</a> NAS to serve you data backups, sync and more services<br>
1 - Purchase a shared hosting on one of many service providers tested by NextCloud company</p>
<h2>Tutorials</h2>
<p><strong>Installing on own server</strong>: Kev beautifully explains both Snap Package way and manual way of installing in his <a href="https://kevq.uk/how-to-setup-a-nextcloud-server-in-ubuntu/">tutorial</a>.<br>
<strong>Installing on shared hosting</strong>: But if you are intimidated with the idea of setting up your own server and managing it, you can use a shared hosting instead. Kev has a <a href="https://kevq.uk/how-to-install-nextcloud-on-shared-hosting/">tutorial</a> for that too, albeit it aged a bit old. <br>
<strong>Repurposing old hardware</strong>: If you have an old computer gathering dust in a closet, why not use it as a home server! You will find many tutorials on the internet on <a href="https://lbry.tv/@TheLinuxGuy:d/How-to-Install-Ubuntu-Server-20.04-LTS:5">how to install Ubuntu server</a>. </p>
<hr>
<p>The only reason I followed manual method was some rookie mistake I made that caused Let's Encrypt HTTPS script to not work properly 😬️ I highly doubt you will face the same issue if you follow the tutorials carefully. Even if you do face some problems with <a href="https://certbot.eff.org/">getting HTTPS certificate using <code>certbot</code></a> command isn't difficult at all.</p> </article>
<p class="paginator">
Page 1 / 1
</p>
</aside><!-- /#featured -->
</ol><!-- /#posts-list -->
</section><!-- /#content -->
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

31
docs/feeds/all.atom.xml Normal file
View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Ali Murteza Yesil - Blog</title><link href="https://murtezayesil.me/" rel="alternate"></link><link href="https://murtezayesil.me/feeds/all.atom.xml" rel="self"></link><id>https://murtezayesil.me/</id><updated>2020-07-10T11:18:00+06:00</updated><entry><title>Privacy For The Whole Family</title><link href="https://murtezayesil.me/privacy-for-the-whole-family.html" rel="alternate"></link><published>2020-07-10T11:18:00+06:00</published><updated>2020-07-10T11:18:00+06:00</updated><author><name>Ali Murteza Yesil</name></author><id>tag:murtezayesil.me,2020-07-10:/privacy-for-the-whole-family.html</id><summary type="html">&lt;p&gt;My story of learning about wounds in my privacy and my first steps to recover it, helping my family in the process.&lt;/p&gt;</summary><content type="html">&lt;p&gt;According to my mother, we had internet in our house while I was a baby. Internet back in the day used to make iconic dial sound, was slow and would lose connection whenever someone called the landline. I grew up seeing webpages full of GIFs (I won't argue about its pronounciation, it was decided long ago) and banner ads injected by adwares. Flash and Shockwave were the fundamental building blocks of interactive webpages with animations.&lt;/p&gt;
&lt;p&gt;All those colorful flash games sites were offering tones of free games in exchange of distributing adverts and malware in their websites. As a child attracted by colors, I believed that those games were actually free. Some of those "free" game sites are still around and powered by Google AdSense. Others moved to Facebook and started earning from Facebook Ads and in-game currencies often called "gems". Around that time my classmates started to talk about Facebook and I had to go there too.&lt;/p&gt;
&lt;p&gt;I grew up since then. I came abroad to study computer science. I have my own laptop and smartphone. I was using my devices and all those free services to talk to my family from thousands of kilometres away. I was using those sweet and free services for backing up my data, photos, documents, contacts and more. These services are free for us because all those wonderful advertisers are paying them off their goodwill ...&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;&lt;strong&gt;So I thought&lt;/strong&gt;&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;I was naive to upload my and my family's photos to Google Photos. I was naive to tag my friends in photos on Facebook. I was naive to use Amazon instead of taking a walk in tech market and support the independent sellers. I was feeding tech giants for convenience and damaging local economy without knowing. I didn't know any better and I confussed giving up my privacy with convenience. I am not that naive kid anymore. I learned English Language in Kenya and I learned to harness the knowledge in the internet. I learned that there are alternatives that I can use.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;&lt;strong&gt;I learned that there is a way to gain my digital freedom&lt;/strong&gt;&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;My first action was to switch to &lt;a href="https://duckduckgo.com"&gt;&lt;img alt="DuckDuckGo logo" src="https://fosstodon.b-cdn.net/custom_emojis/images/000/010/368/static/duckduckgo.png"&gt; DuckDuckGo&lt;/a&gt; from Google Search. I found that the most widely adopted service of Google is a text box for us to write our most intimate secrets in plain text.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Google wants user data. Users use Google Search. Google says &amp;quot;It's Free Real Estate&amp;quot;" src="https://murtezayesil.me/images/it_is_free_real_estate_1.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Dropping Google Search wasn't gonna cut it though. I still was relying on Google Contacts, Photos and Drive to backup my data. I needed something that could backup my phone properly while not giving up my data to data hungry companies.&lt;/p&gt;
&lt;h1&gt;NextCloud to the rescue&lt;/h1&gt;
&lt;p&gt;NextCloud is a file hosting service with built-in CardDAV (contact sync), CalDAV (calendar sync) and WebDAV (file sync) servers. Not to mention, it supports adding more features by installing modules from its &lt;a href="https://apps.nextcloud.com/"&gt;apps library&lt;/a&gt;. It is &lt;a href="https://en.wikipedia.org/wiki/Free_and_open-source_software" title="Free and Open Source Software"&gt;FOSS&lt;/a&gt; free as in freedom for everyone and int this case free as in price for non-enterprise users. Nice thing about NextCloud is that it offers &lt;em&gt;all of its features&lt;/em&gt; to both its enterprise and home/personal users. Enterprise users also benefit from technical maintenance support direct from the NextCloud.&lt;/p&gt;
&lt;p&gt;The way I deployed my NextCloud instance was to rent a remote VM. I am a student who can't afford to buy a machine and run it 24/7. Renting a server seemed like the most affordable and logical idea to me. Rent costs $5/month for the cheapest tier. I am careful with my pocket money and after cancelling my Netflix subscription, I had more than enough to pay $5/month.&lt;/p&gt;
&lt;p&gt;After renting a server, I started experimenting with different OSes. I tried Debian but its php packages were old. I tried CentOS based NethServer but default user credentials for NextCloud were wrong and I couldn't use it either. I finally settled at Ubuntu 20.04 LTS. I followed few tutorials before I found Kev's tutorial. I deviated from those tutorials because I am young and ... nevermind. I finally found Kev's tutorial and &lt;/p&gt;
&lt;p&gt;There still was a problem though. I am not he only one sharing data about me. My family can do that too. And I felt responsible for helping my family with claiming their digital freedom too. I decided to create accounts for them and help them migrate to my NextCloud instance. It turns out my family acknowledged the privacy they were giving up for the convenience. But they didn't know any alternatives. When I invited them to use my NextCloud instance they were excited. But moving from Google Suite to NextCloud isn't done yet. It takes time to learn new systems and their quirks.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I think this was a successful attempt. Of course I am not done here. I may need to introduce my family to Fediverse, free social media powered by voluntaries, or Jitsi, Open Source alternative to Zoom and WhatsApp video calls services. But for now we all made good progress I would say. I will let some time pass until they get more comfortable at using NextCloud. I don't want to overwhelm them and make them regret switching. I don't want to be another reason they stay on Google. &lt;/p&gt;
&lt;p&gt;Meanwhile, why won't you make an attempt to gain your own digital freedom ?&lt;br&gt;
I see many ways this can be achieved (Numbers in the beginning suggested how difficult they are rated out of 5):&lt;br&gt;
3 - Manually install NextCloud on a remote VM&lt;br&gt;
2 - Install NextCloud via Snap Package on a remote VM&lt;br&gt;
4 - Manually install NextCloud on an old computer&lt;br&gt;
3 - Install NextCloud via Snap on an old computer&lt;br&gt;
1 - Purchase a &lt;a href="https://www.synology.com"&gt;Synology&lt;/a&gt; NAS to serve you data backups, sync and more services&lt;br&gt;
1 - Purchase a shared hosting on one of many service providers tested by NextCloud company&lt;/p&gt;
&lt;h2&gt;Tutorials&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Installing on own server&lt;/strong&gt;: Kev beautifully explains both Snap Package way and manual way of installing in his &lt;a href="https://kevq.uk/how-to-setup-a-nextcloud-server-in-ubuntu/"&gt;tutorial&lt;/a&gt;.&lt;br&gt;
&lt;strong&gt;Installing on shared hosting&lt;/strong&gt;: But if you are intimidated with the idea of setting up your own server and managing it, you can use a shared hosting instead. Kev has a &lt;a href="https://kevq.uk/how-to-install-nextcloud-on-shared-hosting/"&gt;tutorial&lt;/a&gt; for that too, albeit it aged a bit old. &lt;br&gt;
&lt;strong&gt;Repurposing old hardware&lt;/strong&gt;: If you have an old computer gathering dust in a closet, why not use it as a home server! You will find many tutorials on the internet on &lt;a href="https://lbry.tv/@TheLinuxGuy:d/How-to-Install-Ubuntu-Server-20.04-LTS:5"&gt;how to install Ubuntu server&lt;/a&gt;. &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The only reason I followed manual method was some rookie mistake I made that caused Let's Encrypt HTTPS script to not work properly 😬️ I highly doubt you will face the same issue if you follow the tutorials carefully. Even if you do face some problems with &lt;a href="https://certbot.eff.org/"&gt;getting HTTPS certificate using &lt;code&gt;certbot&lt;/code&gt;&lt;/a&gt; command isn't difficult at all.&lt;/p&gt;</content><category term="Tech"></category><category term="privacy"></category><category term="nextcloud"></category><category term="self-hosting"></category></entry></feed>

31
docs/feeds/tech.atom.xml Normal file
View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Ali Murteza Yesil - Blog - Tech</title><link href="https://murtezayesil.me/" rel="alternate"></link><link href="https://murtezayesil.me/feeds/tech.atom.xml" rel="self"></link><id>https://murtezayesil.me/</id><updated>2020-07-10T11:18:00+06:00</updated><entry><title>Privacy For The Whole Family</title><link href="https://murtezayesil.me/privacy-for-the-whole-family.html" rel="alternate"></link><published>2020-07-10T11:18:00+06:00</published><updated>2020-07-10T11:18:00+06:00</updated><author><name>Ali Murteza Yesil</name></author><id>tag:murtezayesil.me,2020-07-10:/privacy-for-the-whole-family.html</id><summary type="html">&lt;p&gt;My story of learning about wounds in my privacy and my first steps to recover it, helping my family in the process.&lt;/p&gt;</summary><content type="html">&lt;p&gt;According to my mother, we had internet in our house while I was a baby. Internet back in the day used to make iconic dial sound, was slow and would lose connection whenever someone called the landline. I grew up seeing webpages full of GIFs (I won't argue about its pronounciation, it was decided long ago) and banner ads injected by adwares. Flash and Shockwave were the fundamental building blocks of interactive webpages with animations.&lt;/p&gt;
&lt;p&gt;All those colorful flash games sites were offering tones of free games in exchange of distributing adverts and malware in their websites. As a child attracted by colors, I believed that those games were actually free. Some of those "free" game sites are still around and powered by Google AdSense. Others moved to Facebook and started earning from Facebook Ads and in-game currencies often called "gems". Around that time my classmates started to talk about Facebook and I had to go there too.&lt;/p&gt;
&lt;p&gt;I grew up since then. I came abroad to study computer science. I have my own laptop and smartphone. I was using my devices and all those free services to talk to my family from thousands of kilometres away. I was using those sweet and free services for backing up my data, photos, documents, contacts and more. These services are free for us because all those wonderful advertisers are paying them off their goodwill ...&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;&lt;strong&gt;So I thought&lt;/strong&gt;&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;I was naive to upload my and my family's photos to Google Photos. I was naive to tag my friends in photos on Facebook. I was naive to use Amazon instead of taking a walk in tech market and support the independent sellers. I was feeding tech giants for convenience and damaging local economy without knowing. I didn't know any better and I confussed giving up my privacy with convenience. I am not that naive kid anymore. I learned English Language in Kenya and I learned to harness the knowledge in the internet. I learned that there are alternatives that I can use.&lt;/p&gt;
&lt;h4&gt;&lt;em&gt;&lt;strong&gt;I learned that there is a way to gain my digital freedom&lt;/strong&gt;&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;My first action was to switch to &lt;a href="https://duckduckgo.com"&gt;&lt;img alt="DuckDuckGo logo" src="https://fosstodon.b-cdn.net/custom_emojis/images/000/010/368/static/duckduckgo.png"&gt; DuckDuckGo&lt;/a&gt; from Google Search. I found that the most widely adopted service of Google is a text box for us to write our most intimate secrets in plain text.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Google wants user data. Users use Google Search. Google says &amp;quot;It's Free Real Estate&amp;quot;" src="https://murtezayesil.me/images/it_is_free_real_estate_1.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Dropping Google Search wasn't gonna cut it though. I still was relying on Google Contacts, Photos and Drive to backup my data. I needed something that could backup my phone properly while not giving up my data to data hungry companies.&lt;/p&gt;
&lt;h1&gt;NextCloud to the rescue&lt;/h1&gt;
&lt;p&gt;NextCloud is a file hosting service with built-in CardDAV (contact sync), CalDAV (calendar sync) and WebDAV (file sync) servers. Not to mention, it supports adding more features by installing modules from its &lt;a href="https://apps.nextcloud.com/"&gt;apps library&lt;/a&gt;. It is &lt;a href="https://en.wikipedia.org/wiki/Free_and_open-source_software" title="Free and Open Source Software"&gt;FOSS&lt;/a&gt; free as in freedom for everyone and int this case free as in price for non-enterprise users. Nice thing about NextCloud is that it offers &lt;em&gt;all of its features&lt;/em&gt; to both its enterprise and home/personal users. Enterprise users also benefit from technical maintenance support direct from the NextCloud.&lt;/p&gt;
&lt;p&gt;The way I deployed my NextCloud instance was to rent a remote VM. I am a student who can't afford to buy a machine and run it 24/7. Renting a server seemed like the most affordable and logical idea to me. Rent costs $5/month for the cheapest tier. I am careful with my pocket money and after cancelling my Netflix subscription, I had more than enough to pay $5/month.&lt;/p&gt;
&lt;p&gt;After renting a server, I started experimenting with different OSes. I tried Debian but its php packages were old. I tried CentOS based NethServer but default user credentials for NextCloud were wrong and I couldn't use it either. I finally settled at Ubuntu 20.04 LTS. I followed few tutorials before I found Kev's tutorial. I deviated from those tutorials because I am young and ... nevermind. I finally found Kev's tutorial and &lt;/p&gt;
&lt;p&gt;There still was a problem though. I am not he only one sharing data about me. My family can do that too. And I felt responsible for helping my family with claiming their digital freedom too. I decided to create accounts for them and help them migrate to my NextCloud instance. It turns out my family acknowledged the privacy they were giving up for the convenience. But they didn't know any alternatives. When I invited them to use my NextCloud instance they were excited. But moving from Google Suite to NextCloud isn't done yet. It takes time to learn new systems and their quirks.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I think this was a successful attempt. Of course I am not done here. I may need to introduce my family to Fediverse, free social media powered by voluntaries, or Jitsi, Open Source alternative to Zoom and WhatsApp video calls services. But for now we all made good progress I would say. I will let some time pass until they get more comfortable at using NextCloud. I don't want to overwhelm them and make them regret switching. I don't want to be another reason they stay on Google. &lt;/p&gt;
&lt;p&gt;Meanwhile, why won't you make an attempt to gain your own digital freedom ?&lt;br&gt;
I see many ways this can be achieved (Numbers in the beginning suggested how difficult they are rated out of 5):&lt;br&gt;
3 - Manually install NextCloud on a remote VM&lt;br&gt;
2 - Install NextCloud via Snap Package on a remote VM&lt;br&gt;
4 - Manually install NextCloud on an old computer&lt;br&gt;
3 - Install NextCloud via Snap on an old computer&lt;br&gt;
1 - Purchase a &lt;a href="https://www.synology.com"&gt;Synology&lt;/a&gt; NAS to serve you data backups, sync and more services&lt;br&gt;
1 - Purchase a shared hosting on one of many service providers tested by NextCloud company&lt;/p&gt;
&lt;h2&gt;Tutorials&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Installing on own server&lt;/strong&gt;: Kev beautifully explains both Snap Package way and manual way of installing in his &lt;a href="https://kevq.uk/how-to-setup-a-nextcloud-server-in-ubuntu/"&gt;tutorial&lt;/a&gt;.&lt;br&gt;
&lt;strong&gt;Installing on shared hosting&lt;/strong&gt;: But if you are intimidated with the idea of setting up your own server and managing it, you can use a shared hosting instead. Kev has a &lt;a href="https://kevq.uk/how-to-install-nextcloud-on-shared-hosting/"&gt;tutorial&lt;/a&gt; for that too, albeit it aged a bit old. &lt;br&gt;
&lt;strong&gt;Repurposing old hardware&lt;/strong&gt;: If you have an old computer gathering dust in a closet, why not use it as a home server! You will find many tutorials on the internet on &lt;a href="https://lbry.tv/@TheLinuxGuy:d/How-to-Install-Ubuntu-Server-20.04-LTS:5"&gt;how to install Ubuntu server&lt;/a&gt;. &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The only reason I followed manual method was some rookie mistake I made that caused Let's Encrypt HTTPS script to not work properly 😬️ I highly doubt you will face the same issue if you follow the tutorials carefully. Even if you do face some problems with &lt;a href="https://certbot.eff.org/"&gt;getting HTTPS certificate using &lt;code&gt;certbot&lt;/code&gt;&lt;/a&gt; command isn't difficult at all.&lt;/p&gt;</content><category term="Tech"></category><category term="privacy"></category><category term="nextcloud"></category><category term="self-hosting"></category></entry></feed>

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

100
docs/index.html Normal file
View File

@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ali Murteza Yesil - Blog</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<aside id="featured" class="body">
<article>
<h1 class="entry-title"><a href="https://murtezayesil.me/privacy-for-the-whole-family.html">Privacy For The Whole Family</a></h1>
<footer class="post-info">
<span>Fri 10 July 2020</span>
<span>| in <a href="https://murtezayesil.me/category/tech.html">Tech</a></span>
<span>| tags: <a href="https://murtezayesil.me/tag/privacy.html">privacy</a><a href="https://murtezayesil.me/tag/nextcloud.html">nextcloud</a><a href="https://murtezayesil.me/tag/self-hosting.html">self-hosting</a></span>
</footer><!-- /.post-info --><p>According to my mother, we had internet in our house while I was a baby. Internet back in the day used to make iconic dial sound, was slow and would lose connection whenever someone called the landline. I grew up seeing webpages full of GIFs (I won't argue about its pronounciation, it was decided long ago) and banner ads injected by adwares. Flash and Shockwave were the fundamental building blocks of interactive webpages with animations.</p>
<p>All those colorful flash games sites were offering tones of free games in exchange of distributing adverts and malware in their websites. As a child attracted by colors, I believed that those games were actually free. Some of those "free" game sites are still around and powered by Google AdSense. Others moved to Facebook and started earning from Facebook Ads and in-game currencies often called "gems". Around that time my classmates started to talk about Facebook and I had to go there too.</p>
<p>I grew up since then. I came abroad to study computer science. I have my own laptop and smartphone. I was using my devices and all those free services to talk to my family from thousands of kilometres away. I was using those sweet and free services for backing up my data, photos, documents, contacts and more. These services are free for us because all those wonderful advertisers are paying them off their goodwill ...</p>
<h4><em><strong>So I thought</strong></em></h4>
<p>I was naive to upload my and my family's photos to Google Photos. I was naive to tag my friends in photos on Facebook. I was naive to use Amazon instead of taking a walk in tech market and support the independent sellers. I was feeding tech giants for convenience and damaging local economy without knowing. I didn't know any better and I confussed giving up my privacy with convenience. I am not that naive kid anymore. I learned English Language in Kenya and I learned to harness the knowledge in the internet. I learned that there are alternatives that I can use.</p>
<h4><em><strong>I learned that there is a way to gain my digital freedom</strong></em></h4>
<p>My first action was to switch to <a href="https://duckduckgo.com"><img alt="DuckDuckGo logo" src="https://fosstodon.b-cdn.net/custom_emojis/images/000/010/368/static/duckduckgo.png"> DuckDuckGo</a> from Google Search. I found that the most widely adopted service of Google is a text box for us to write our most intimate secrets in plain text.</p>
<p><img alt="Google wants user data. Users use Google Search. Google says &quot;It's Free Real Estate&quot;" src="https://murtezayesil.me/images/it_is_free_real_estate_1.jpg"></p>
<p>Dropping Google Search wasn't gonna cut it though. I still was relying on Google Contacts, Photos and Drive to backup my data. I needed something that could backup my phone properly while not giving up my data to data hungry companies.</p>
<h1>NextCloud to the rescue</h1>
<p>NextCloud is a file hosting service with built-in CardDAV (contact sync), CalDAV (calendar sync) and WebDAV (file sync) servers. Not to mention, it supports adding more features by installing modules from its <a href="https://apps.nextcloud.com/">apps library</a>. It is <a href="https://en.wikipedia.org/wiki/Free_and_open-source_software" title="Free and Open Source Software">FOSS</a> free as in freedom for everyone and int this case free as in price for non-enterprise users. Nice thing about NextCloud is that it offers <em>all of its features</em> to both its enterprise and home/personal users. Enterprise users also benefit from technical maintenance support direct from the NextCloud.</p>
<p>The way I deployed my NextCloud instance was to rent a remote VM. I am a student who can't afford to buy a machine and run it 24/7. Renting a server seemed like the most affordable and logical idea to me. Rent costs $5/month for the cheapest tier. I am careful with my pocket money and after cancelling my Netflix subscription, I had more than enough to pay $5/month.</p>
<p>After renting a server, I started experimenting with different OSes. I tried Debian but its php packages were old. I tried CentOS based NethServer but default user credentials for NextCloud were wrong and I couldn't use it either. I finally settled at Ubuntu 20.04 LTS. I followed few tutorials before I found Kev's tutorial. I deviated from those tutorials because I am young and ... nevermind. I finally found Kev's tutorial and </p>
<p>There still was a problem though. I am not he only one sharing data about me. My family can do that too. And I felt responsible for helping my family with claiming their digital freedom too. I decided to create accounts for them and help them migrate to my NextCloud instance. It turns out my family acknowledged the privacy they were giving up for the convenience. But they didn't know any alternatives. When I invited them to use my NextCloud instance they were excited. But moving from Google Suite to NextCloud isn't done yet. It takes time to learn new systems and their quirks.</p>
<h2>Conclusion</h2>
<p>I think this was a successful attempt. Of course I am not done here. I may need to introduce my family to Fediverse, free social media powered by voluntaries, or Jitsi, Open Source alternative to Zoom and WhatsApp video calls services. But for now we all made good progress I would say. I will let some time pass until they get more comfortable at using NextCloud. I don't want to overwhelm them and make them regret switching. I don't want to be another reason they stay on Google. </p>
<p>Meanwhile, why won't you make an attempt to gain your own digital freedom ?<br>
I see many ways this can be achieved (Numbers in the beginning suggested how difficult they are rated out of 5):<br>
3 - Manually install NextCloud on a remote VM<br>
2 - Install NextCloud via Snap Package on a remote VM<br>
4 - Manually install NextCloud on an old computer<br>
3 - Install NextCloud via Snap on an old computer<br>
1 - Purchase a <a href="https://www.synology.com">Synology</a> NAS to serve you data backups, sync and more services<br>
1 - Purchase a shared hosting on one of many service providers tested by NextCloud company</p>
<h2>Tutorials</h2>
<p><strong>Installing on own server</strong>: Kev beautifully explains both Snap Package way and manual way of installing in his <a href="https://kevq.uk/how-to-setup-a-nextcloud-server-in-ubuntu/">tutorial</a>.<br>
<strong>Installing on shared hosting</strong>: But if you are intimidated with the idea of setting up your own server and managing it, you can use a shared hosting instead. Kev has a <a href="https://kevq.uk/how-to-install-nextcloud-on-shared-hosting/">tutorial</a> for that too, albeit it aged a bit old. <br>
<strong>Repurposing old hardware</strong>: If you have an old computer gathering dust in a closet, why not use it as a home server! You will find many tutorials on the internet on <a href="https://lbry.tv/@TheLinuxGuy:d/How-to-Install-Ubuntu-Server-20.04-LTS:5">how to install Ubuntu server</a>. </p>
<hr>
<p>The only reason I followed manual method was some rookie mistake I made that caused Let's Encrypt HTTPS script to not work properly 😬️ I highly doubt you will face the same issue if you follow the tutorials carefully. Even if you do face some problems with <a href="https://certbot.eff.org/">getting HTTPS certificate using <code>certbot</code></a> command isn't difficult at all.</p> </article>
<p class="paginator">
Page 1 / 1
</p>
</aside><!-- /#featured -->
</ol><!-- /#posts-list -->
</section><!-- /#content -->
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

91
docs/pages/about.html Normal file
View File

@ -0,0 +1,91 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>About</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li class="active"><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<section id="content" class="body">
<h1 class="entry-title">About</h1>
<h2>Ali Murteza Yesil</h2>
<p>Mastering life through art of making mistakes.
Smart people learn from their experiences, geniuses learn from others' experiences too. This is why I appreciate constructive criticism 😃️</p>
<p>A computer science student who wants to live in a World where everybody respects everybody else's every rights. Everybody deserves to live in such a World. So, why not make it.
This kid is looking for his calling. He may have find it in advocating for privacy. This is not to say that he is perfect at defending it, he still makes rookie mistakes.</p>
<p>Nationality: Turkish<br>
Grew up in: Kenya</p>
<p>Confession: I didn't know English Language when my family and I moved to Kenya. I only learned English Language in Kenya since it was my priority, not Swahili 😐️ I still would like to call myself grew up in Kenya since this is where my personality was shaped.<br>
Confession: I also would like to use word "nigga" in friendly way Kenyans use, not in racist way American tend to use.</p>
<p>Favourite foods: Sarma (stuffed grape leaves/cabbage), matoke chips
Favourite drinks: Water, ayran</p>
<h2>Blog</h2>
<p>This blog is where Ali Murteza Yesil's opinions embody into words. This blog is compiled into static pages to reduce its carbon footprint. Instead of running webmention or disqus based comment system, I decided to share my blog posts on Mastodon and treat messages to those toots as comments. If you want to comment to my posts, we welcome you to <a href="https://en.wikipedia.org/wiki/Fediverse" title="Learn about Fediverse on Wikipedia">Fediverse</a>.</p>
<p>Static pages generated from markdown using <a href="https://blog.getpelican.com/" title="Static Site Generator">Pelican</a>.</p>
<h2>License</h2>
<p>Everything on this blog is licensed under <a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode" title="Creative Commons Attribution-ShareAlike 4.0 International License">CC BY-SA 4.0</a> unless otherwise stated. You can find a human readable form below for quick reference. Below reference is just a summary of your rights and responsibilities. It is not the license itself.</p>
<blockquote>
<p>You are free to</p>
<blockquote>
<p><strong>Share</strong> copy and redistribute the material in any medium or format</p>
<p><strong>Adapt</strong> remix, transform and build upon the material for any purpose, even commercially</p>
</blockquote>
<p>Under the following terms</p>
<blockquote>
<p><strong>Attribution</strong> You must give appropriate credit, provide link to license and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.</p>
<p><strong>ShareAlike</strong> If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.</p>
</blockquote>
</blockquote>
<p><img alt="CC BY-SA 4.0 badge" src="https://licensebuttons.net/l/by-sa/4.0/88x31.png"></p>
<h2>IndieWeb</h2>
<p>I didn't implement it in this blog just yet. I will work on it next.</p>
</section>
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

61
docs/pages/contact.html Normal file
View File

@ -0,0 +1,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Contact</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li class="active"><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<section id="content" class="body">
<h1 class="entry-title">Contact</h1>
<p><img alt="Fosstodon logo" src="https://fosstodon.b-cdn.net/custom_emojis/images/000/025/118/static/fosstodon.png"> <strong>Fosstodon</strong>: https://fosstodon.org/@murtezayesil</p>
</section>
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

View File

@ -0,0 +1,103 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Privacy For The Whole Family</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li class="active"><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<section id="content" class="body">
<article>
<header>
<h1 class="entry-title">
<a href="https://murtezayesil.me/privacy-for-the-whole-family.html" rel="bookmark"
title="Permalink to Privacy For The Whole Family">Privacy For The Whole Family</a></h1>
</header>
<div class="entry-content">
<footer class="post-info">
<span>Fri 10 July 2020</span>
<span>| in <a href="https://murtezayesil.me/category/tech.html">Tech</a></span>
<span>| tags: <a href="https://murtezayesil.me/tag/privacy.html">privacy</a><a href="https://murtezayesil.me/tag/nextcloud.html">nextcloud</a><a href="https://murtezayesil.me/tag/self-hosting.html">self-hosting</a></span>
</footer><!-- /.post-info --> <p>According to my mother, we had internet in our house while I was a baby. Internet back in the day used to make iconic dial sound, was slow and would lose connection whenever someone called the landline. I grew up seeing webpages full of GIFs (I won't argue about its pronounciation, it was decided long ago) and banner ads injected by adwares. Flash and Shockwave were the fundamental building blocks of interactive webpages with animations.</p>
<p>All those colorful flash games sites were offering tones of free games in exchange of distributing adverts and malware in their websites. As a child attracted by colors, I believed that those games were actually free. Some of those "free" game sites are still around and powered by Google AdSense. Others moved to Facebook and started earning from Facebook Ads and in-game currencies often called "gems". Around that time my classmates started to talk about Facebook and I had to go there too.</p>
<p>I grew up since then. I came abroad to study computer science. I have my own laptop and smartphone. I was using my devices and all those free services to talk to my family from thousands of kilometres away. I was using those sweet and free services for backing up my data, photos, documents, contacts and more. These services are free for us because all those wonderful advertisers are paying them off their goodwill ...</p>
<h4><em><strong>So I thought</strong></em></h4>
<p>I was naive to upload my and my family's photos to Google Photos. I was naive to tag my friends in photos on Facebook. I was naive to use Amazon instead of taking a walk in tech market and support the independent sellers. I was feeding tech giants for convenience and damaging local economy without knowing. I didn't know any better and I confussed giving up my privacy with convenience. I am not that naive kid anymore. I learned English Language in Kenya and I learned to harness the knowledge in the internet. I learned that there are alternatives that I can use.</p>
<h4><em><strong>I learned that there is a way to gain my digital freedom</strong></em></h4>
<p>My first action was to switch to <a href="https://duckduckgo.com"><img alt="DuckDuckGo logo" src="https://fosstodon.b-cdn.net/custom_emojis/images/000/010/368/static/duckduckgo.png"> DuckDuckGo</a> from Google Search. I found that the most widely adopted service of Google is a text box for us to write our most intimate secrets in plain text.</p>
<p><img alt="Google wants user data. Users use Google Search. Google says &quot;It's Free Real Estate&quot;" src="https://murtezayesil.me/images/it_is_free_real_estate_1.jpg"></p>
<p>Dropping Google Search wasn't gonna cut it though. I still was relying on Google Contacts, Photos and Drive to backup my data. I needed something that could backup my phone properly while not giving up my data to data hungry companies.</p>
<h1>NextCloud to the rescue</h1>
<p>NextCloud is a file hosting service with built-in CardDAV (contact sync), CalDAV (calendar sync) and WebDAV (file sync) servers. Not to mention, it supports adding more features by installing modules from its <a href="https://apps.nextcloud.com/">apps library</a>. It is <a href="https://en.wikipedia.org/wiki/Free_and_open-source_software" title="Free and Open Source Software">FOSS</a> free as in freedom for everyone and int this case free as in price for non-enterprise users. Nice thing about NextCloud is that it offers <em>all of its features</em> to both its enterprise and home/personal users. Enterprise users also benefit from technical maintenance support direct from the NextCloud.</p>
<p>The way I deployed my NextCloud instance was to rent a remote VM. I am a student who can't afford to buy a machine and run it 24/7. Renting a server seemed like the most affordable and logical idea to me. Rent costs $5/month for the cheapest tier. I am careful with my pocket money and after cancelling my Netflix subscription, I had more than enough to pay $5/month.</p>
<p>After renting a server, I started experimenting with different OSes. I tried Debian but its php packages were old. I tried CentOS based NethServer but default user credentials for NextCloud were wrong and I couldn't use it either. I finally settled at Ubuntu 20.04 LTS. I followed few tutorials before I found Kev's tutorial. I deviated from those tutorials because I am young and ... nevermind. I finally found Kev's tutorial and </p>
<p>There still was a problem though. I am not he only one sharing data about me. My family can do that too. And I felt responsible for helping my family with claiming their digital freedom too. I decided to create accounts for them and help them migrate to my NextCloud instance. It turns out my family acknowledged the privacy they were giving up for the convenience. But they didn't know any alternatives. When I invited them to use my NextCloud instance they were excited. But moving from Google Suite to NextCloud isn't done yet. It takes time to learn new systems and their quirks.</p>
<h2>Conclusion</h2>
<p>I think this was a successful attempt. Of course I am not done here. I may need to introduce my family to Fediverse, free social media powered by voluntaries, or Jitsi, Open Source alternative to Zoom and WhatsApp video calls services. But for now we all made good progress I would say. I will let some time pass until they get more comfortable at using NextCloud. I don't want to overwhelm them and make them regret switching. I don't want to be another reason they stay on Google. </p>
<p>Meanwhile, why won't you make an attempt to gain your own digital freedom ?<br>
I see many ways this can be achieved (Numbers in the beginning suggested how difficult they are rated out of 5):<br>
3 - Manually install NextCloud on a remote VM<br>
2 - Install NextCloud via Snap Package on a remote VM<br>
4 - Manually install NextCloud on an old computer<br>
3 - Install NextCloud via Snap on an old computer<br>
1 - Purchase a <a href="https://www.synology.com">Synology</a> NAS to serve you data backups, sync and more services<br>
1 - Purchase a shared hosting on one of many service providers tested by NextCloud company</p>
<h2>Tutorials</h2>
<p><strong>Installing on own server</strong>: Kev beautifully explains both Snap Package way and manual way of installing in his <a href="https://kevq.uk/how-to-setup-a-nextcloud-server-in-ubuntu/">tutorial</a>.<br>
<strong>Installing on shared hosting</strong>: But if you are intimidated with the idea of setting up your own server and managing it, you can use a shared hosting instead. Kev has a <a href="https://kevq.uk/how-to-install-nextcloud-on-shared-hosting/">tutorial</a> for that too, albeit it aged a bit old. <br>
<strong>Repurposing old hardware</strong>: If you have an old computer gathering dust in a closet, why not use it as a home server! You will find many tutorials on the internet on <a href="https://lbry.tv/@TheLinuxGuy:d/How-to-Install-Ubuntu-Server-20.04-LTS:5">how to install Ubuntu server</a>. </p>
<hr>
<p>The only reason I followed manual method was some rookie mistake I made that caused Let's Encrypt HTTPS script to not work properly 😬️ I highly doubt you will face the same issue if you follow the tutorials carefully. Even if you do face some problems with <a href="https://certbot.eff.org/">getting HTTPS certificate using <code>certbot</code></a> command isn't difficult at all.</p>
</div><!-- /.entry-content -->
</article>
</section>
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

100
docs/tag/nextcloud.html Normal file
View File

@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ali Murteza Yesil - Blog - nextcloud</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<aside id="featured" class="body">
<article>
<h1 class="entry-title"><a href="https://murtezayesil.me/privacy-for-the-whole-family.html">Privacy For The Whole Family</a></h1>
<footer class="post-info">
<span>Fri 10 July 2020</span>
<span>| in <a href="https://murtezayesil.me/category/tech.html">Tech</a></span>
<span>| tags: <a href="https://murtezayesil.me/tag/privacy.html">privacy</a><a href="https://murtezayesil.me/tag/nextcloud.html">nextcloud</a><a href="https://murtezayesil.me/tag/self-hosting.html">self-hosting</a></span>
</footer><!-- /.post-info --><p>According to my mother, we had internet in our house while I was a baby. Internet back in the day used to make iconic dial sound, was slow and would lose connection whenever someone called the landline. I grew up seeing webpages full of GIFs (I won't argue about its pronounciation, it was decided long ago) and banner ads injected by adwares. Flash and Shockwave were the fundamental building blocks of interactive webpages with animations.</p>
<p>All those colorful flash games sites were offering tones of free games in exchange of distributing adverts and malware in their websites. As a child attracted by colors, I believed that those games were actually free. Some of those "free" game sites are still around and powered by Google AdSense. Others moved to Facebook and started earning from Facebook Ads and in-game currencies often called "gems". Around that time my classmates started to talk about Facebook and I had to go there too.</p>
<p>I grew up since then. I came abroad to study computer science. I have my own laptop and smartphone. I was using my devices and all those free services to talk to my family from thousands of kilometres away. I was using those sweet and free services for backing up my data, photos, documents, contacts and more. These services are free for us because all those wonderful advertisers are paying them off their goodwill ...</p>
<h4><em><strong>So I thought</strong></em></h4>
<p>I was naive to upload my and my family's photos to Google Photos. I was naive to tag my friends in photos on Facebook. I was naive to use Amazon instead of taking a walk in tech market and support the independent sellers. I was feeding tech giants for convenience and damaging local economy without knowing. I didn't know any better and I confussed giving up my privacy with convenience. I am not that naive kid anymore. I learned English Language in Kenya and I learned to harness the knowledge in the internet. I learned that there are alternatives that I can use.</p>
<h4><em><strong>I learned that there is a way to gain my digital freedom</strong></em></h4>
<p>My first action was to switch to <a href="https://duckduckgo.com"><img alt="DuckDuckGo logo" src="https://fosstodon.b-cdn.net/custom_emojis/images/000/010/368/static/duckduckgo.png"> DuckDuckGo</a> from Google Search. I found that the most widely adopted service of Google is a text box for us to write our most intimate secrets in plain text.</p>
<p><img alt="Google wants user data. Users use Google Search. Google says &quot;It's Free Real Estate&quot;" src="https://murtezayesil.me/images/it_is_free_real_estate_1.jpg"></p>
<p>Dropping Google Search wasn't gonna cut it though. I still was relying on Google Contacts, Photos and Drive to backup my data. I needed something that could backup my phone properly while not giving up my data to data hungry companies.</p>
<h1>NextCloud to the rescue</h1>
<p>NextCloud is a file hosting service with built-in CardDAV (contact sync), CalDAV (calendar sync) and WebDAV (file sync) servers. Not to mention, it supports adding more features by installing modules from its <a href="https://apps.nextcloud.com/">apps library</a>. It is <a href="https://en.wikipedia.org/wiki/Free_and_open-source_software" title="Free and Open Source Software">FOSS</a> free as in freedom for everyone and int this case free as in price for non-enterprise users. Nice thing about NextCloud is that it offers <em>all of its features</em> to both its enterprise and home/personal users. Enterprise users also benefit from technical maintenance support direct from the NextCloud.</p>
<p>The way I deployed my NextCloud instance was to rent a remote VM. I am a student who can't afford to buy a machine and run it 24/7. Renting a server seemed like the most affordable and logical idea to me. Rent costs $5/month for the cheapest tier. I am careful with my pocket money and after cancelling my Netflix subscription, I had more than enough to pay $5/month.</p>
<p>After renting a server, I started experimenting with different OSes. I tried Debian but its php packages were old. I tried CentOS based NethServer but default user credentials for NextCloud were wrong and I couldn't use it either. I finally settled at Ubuntu 20.04 LTS. I followed few tutorials before I found Kev's tutorial. I deviated from those tutorials because I am young and ... nevermind. I finally found Kev's tutorial and </p>
<p>There still was a problem though. I am not he only one sharing data about me. My family can do that too. And I felt responsible for helping my family with claiming their digital freedom too. I decided to create accounts for them and help them migrate to my NextCloud instance. It turns out my family acknowledged the privacy they were giving up for the convenience. But they didn't know any alternatives. When I invited them to use my NextCloud instance they were excited. But moving from Google Suite to NextCloud isn't done yet. It takes time to learn new systems and their quirks.</p>
<h2>Conclusion</h2>
<p>I think this was a successful attempt. Of course I am not done here. I may need to introduce my family to Fediverse, free social media powered by voluntaries, or Jitsi, Open Source alternative to Zoom and WhatsApp video calls services. But for now we all made good progress I would say. I will let some time pass until they get more comfortable at using NextCloud. I don't want to overwhelm them and make them regret switching. I don't want to be another reason they stay on Google. </p>
<p>Meanwhile, why won't you make an attempt to gain your own digital freedom ?<br>
I see many ways this can be achieved (Numbers in the beginning suggested how difficult they are rated out of 5):<br>
3 - Manually install NextCloud on a remote VM<br>
2 - Install NextCloud via Snap Package on a remote VM<br>
4 - Manually install NextCloud on an old computer<br>
3 - Install NextCloud via Snap on an old computer<br>
1 - Purchase a <a href="https://www.synology.com">Synology</a> NAS to serve you data backups, sync and more services<br>
1 - Purchase a shared hosting on one of many service providers tested by NextCloud company</p>
<h2>Tutorials</h2>
<p><strong>Installing on own server</strong>: Kev beautifully explains both Snap Package way and manual way of installing in his <a href="https://kevq.uk/how-to-setup-a-nextcloud-server-in-ubuntu/">tutorial</a>.<br>
<strong>Installing on shared hosting</strong>: But if you are intimidated with the idea of setting up your own server and managing it, you can use a shared hosting instead. Kev has a <a href="https://kevq.uk/how-to-install-nextcloud-on-shared-hosting/">tutorial</a> for that too, albeit it aged a bit old. <br>
<strong>Repurposing old hardware</strong>: If you have an old computer gathering dust in a closet, why not use it as a home server! You will find many tutorials on the internet on <a href="https://lbry.tv/@TheLinuxGuy:d/How-to-Install-Ubuntu-Server-20.04-LTS:5">how to install Ubuntu server</a>. </p>
<hr>
<p>The only reason I followed manual method was some rookie mistake I made that caused Let's Encrypt HTTPS script to not work properly 😬️ I highly doubt you will face the same issue if you follow the tutorials carefully. Even if you do face some problems with <a href="https://certbot.eff.org/">getting HTTPS certificate using <code>certbot</code></a> command isn't difficult at all.</p> </article>
<p class="paginator">
Page 1 / 1
</p>
</aside><!-- /#featured -->
</ol><!-- /#posts-list -->
</section><!-- /#content -->
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

100
docs/tag/privacy.html Normal file
View File

@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ali Murteza Yesil - Blog - privacy</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<aside id="featured" class="body">
<article>
<h1 class="entry-title"><a href="https://murtezayesil.me/privacy-for-the-whole-family.html">Privacy For The Whole Family</a></h1>
<footer class="post-info">
<span>Fri 10 July 2020</span>
<span>| in <a href="https://murtezayesil.me/category/tech.html">Tech</a></span>
<span>| tags: <a href="https://murtezayesil.me/tag/privacy.html">privacy</a><a href="https://murtezayesil.me/tag/nextcloud.html">nextcloud</a><a href="https://murtezayesil.me/tag/self-hosting.html">self-hosting</a></span>
</footer><!-- /.post-info --><p>According to my mother, we had internet in our house while I was a baby. Internet back in the day used to make iconic dial sound, was slow and would lose connection whenever someone called the landline. I grew up seeing webpages full of GIFs (I won't argue about its pronounciation, it was decided long ago) and banner ads injected by adwares. Flash and Shockwave were the fundamental building blocks of interactive webpages with animations.</p>
<p>All those colorful flash games sites were offering tones of free games in exchange of distributing adverts and malware in their websites. As a child attracted by colors, I believed that those games were actually free. Some of those "free" game sites are still around and powered by Google AdSense. Others moved to Facebook and started earning from Facebook Ads and in-game currencies often called "gems". Around that time my classmates started to talk about Facebook and I had to go there too.</p>
<p>I grew up since then. I came abroad to study computer science. I have my own laptop and smartphone. I was using my devices and all those free services to talk to my family from thousands of kilometres away. I was using those sweet and free services for backing up my data, photos, documents, contacts and more. These services are free for us because all those wonderful advertisers are paying them off their goodwill ...</p>
<h4><em><strong>So I thought</strong></em></h4>
<p>I was naive to upload my and my family's photos to Google Photos. I was naive to tag my friends in photos on Facebook. I was naive to use Amazon instead of taking a walk in tech market and support the independent sellers. I was feeding tech giants for convenience and damaging local economy without knowing. I didn't know any better and I confussed giving up my privacy with convenience. I am not that naive kid anymore. I learned English Language in Kenya and I learned to harness the knowledge in the internet. I learned that there are alternatives that I can use.</p>
<h4><em><strong>I learned that there is a way to gain my digital freedom</strong></em></h4>
<p>My first action was to switch to <a href="https://duckduckgo.com"><img alt="DuckDuckGo logo" src="https://fosstodon.b-cdn.net/custom_emojis/images/000/010/368/static/duckduckgo.png"> DuckDuckGo</a> from Google Search. I found that the most widely adopted service of Google is a text box for us to write our most intimate secrets in plain text.</p>
<p><img alt="Google wants user data. Users use Google Search. Google says &quot;It's Free Real Estate&quot;" src="https://murtezayesil.me/images/it_is_free_real_estate_1.jpg"></p>
<p>Dropping Google Search wasn't gonna cut it though. I still was relying on Google Contacts, Photos and Drive to backup my data. I needed something that could backup my phone properly while not giving up my data to data hungry companies.</p>
<h1>NextCloud to the rescue</h1>
<p>NextCloud is a file hosting service with built-in CardDAV (contact sync), CalDAV (calendar sync) and WebDAV (file sync) servers. Not to mention, it supports adding more features by installing modules from its <a href="https://apps.nextcloud.com/">apps library</a>. It is <a href="https://en.wikipedia.org/wiki/Free_and_open-source_software" title="Free and Open Source Software">FOSS</a> free as in freedom for everyone and int this case free as in price for non-enterprise users. Nice thing about NextCloud is that it offers <em>all of its features</em> to both its enterprise and home/personal users. Enterprise users also benefit from technical maintenance support direct from the NextCloud.</p>
<p>The way I deployed my NextCloud instance was to rent a remote VM. I am a student who can't afford to buy a machine and run it 24/7. Renting a server seemed like the most affordable and logical idea to me. Rent costs $5/month for the cheapest tier. I am careful with my pocket money and after cancelling my Netflix subscription, I had more than enough to pay $5/month.</p>
<p>After renting a server, I started experimenting with different OSes. I tried Debian but its php packages were old. I tried CentOS based NethServer but default user credentials for NextCloud were wrong and I couldn't use it either. I finally settled at Ubuntu 20.04 LTS. I followed few tutorials before I found Kev's tutorial. I deviated from those tutorials because I am young and ... nevermind. I finally found Kev's tutorial and </p>
<p>There still was a problem though. I am not he only one sharing data about me. My family can do that too. And I felt responsible for helping my family with claiming their digital freedom too. I decided to create accounts for them and help them migrate to my NextCloud instance. It turns out my family acknowledged the privacy they were giving up for the convenience. But they didn't know any alternatives. When I invited them to use my NextCloud instance they were excited. But moving from Google Suite to NextCloud isn't done yet. It takes time to learn new systems and their quirks.</p>
<h2>Conclusion</h2>
<p>I think this was a successful attempt. Of course I am not done here. I may need to introduce my family to Fediverse, free social media powered by voluntaries, or Jitsi, Open Source alternative to Zoom and WhatsApp video calls services. But for now we all made good progress I would say. I will let some time pass until they get more comfortable at using NextCloud. I don't want to overwhelm them and make them regret switching. I don't want to be another reason they stay on Google. </p>
<p>Meanwhile, why won't you make an attempt to gain your own digital freedom ?<br>
I see many ways this can be achieved (Numbers in the beginning suggested how difficult they are rated out of 5):<br>
3 - Manually install NextCloud on a remote VM<br>
2 - Install NextCloud via Snap Package on a remote VM<br>
4 - Manually install NextCloud on an old computer<br>
3 - Install NextCloud via Snap on an old computer<br>
1 - Purchase a <a href="https://www.synology.com">Synology</a> NAS to serve you data backups, sync and more services<br>
1 - Purchase a shared hosting on one of many service providers tested by NextCloud company</p>
<h2>Tutorials</h2>
<p><strong>Installing on own server</strong>: Kev beautifully explains both Snap Package way and manual way of installing in his <a href="https://kevq.uk/how-to-setup-a-nextcloud-server-in-ubuntu/">tutorial</a>.<br>
<strong>Installing on shared hosting</strong>: But if you are intimidated with the idea of setting up your own server and managing it, you can use a shared hosting instead. Kev has a <a href="https://kevq.uk/how-to-install-nextcloud-on-shared-hosting/">tutorial</a> for that too, albeit it aged a bit old. <br>
<strong>Repurposing old hardware</strong>: If you have an old computer gathering dust in a closet, why not use it as a home server! You will find many tutorials on the internet on <a href="https://lbry.tv/@TheLinuxGuy:d/How-to-Install-Ubuntu-Server-20.04-LTS:5">how to install Ubuntu server</a>. </p>
<hr>
<p>The only reason I followed manual method was some rookie mistake I made that caused Let's Encrypt HTTPS script to not work properly 😬️ I highly doubt you will face the same issue if you follow the tutorials carefully. Even if you do face some problems with <a href="https://certbot.eff.org/">getting HTTPS certificate using <code>certbot</code></a> command isn't difficult at all.</p> </article>
<p class="paginator">
Page 1 / 1
</p>
</aside><!-- /#featured -->
</ol><!-- /#posts-list -->
</section><!-- /#content -->
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

100
docs/tag/self-hosting.html Normal file
View File

@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ali Murteza Yesil - Blog - self-hosting</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<aside id="featured" class="body">
<article>
<h1 class="entry-title"><a href="https://murtezayesil.me/privacy-for-the-whole-family.html">Privacy For The Whole Family</a></h1>
<footer class="post-info">
<span>Fri 10 July 2020</span>
<span>| in <a href="https://murtezayesil.me/category/tech.html">Tech</a></span>
<span>| tags: <a href="https://murtezayesil.me/tag/privacy.html">privacy</a><a href="https://murtezayesil.me/tag/nextcloud.html">nextcloud</a><a href="https://murtezayesil.me/tag/self-hosting.html">self-hosting</a></span>
</footer><!-- /.post-info --><p>According to my mother, we had internet in our house while I was a baby. Internet back in the day used to make iconic dial sound, was slow and would lose connection whenever someone called the landline. I grew up seeing webpages full of GIFs (I won't argue about its pronounciation, it was decided long ago) and banner ads injected by adwares. Flash and Shockwave were the fundamental building blocks of interactive webpages with animations.</p>
<p>All those colorful flash games sites were offering tones of free games in exchange of distributing adverts and malware in their websites. As a child attracted by colors, I believed that those games were actually free. Some of those "free" game sites are still around and powered by Google AdSense. Others moved to Facebook and started earning from Facebook Ads and in-game currencies often called "gems". Around that time my classmates started to talk about Facebook and I had to go there too.</p>
<p>I grew up since then. I came abroad to study computer science. I have my own laptop and smartphone. I was using my devices and all those free services to talk to my family from thousands of kilometres away. I was using those sweet and free services for backing up my data, photos, documents, contacts and more. These services are free for us because all those wonderful advertisers are paying them off their goodwill ...</p>
<h4><em><strong>So I thought</strong></em></h4>
<p>I was naive to upload my and my family's photos to Google Photos. I was naive to tag my friends in photos on Facebook. I was naive to use Amazon instead of taking a walk in tech market and support the independent sellers. I was feeding tech giants for convenience and damaging local economy without knowing. I didn't know any better and I confussed giving up my privacy with convenience. I am not that naive kid anymore. I learned English Language in Kenya and I learned to harness the knowledge in the internet. I learned that there are alternatives that I can use.</p>
<h4><em><strong>I learned that there is a way to gain my digital freedom</strong></em></h4>
<p>My first action was to switch to <a href="https://duckduckgo.com"><img alt="DuckDuckGo logo" src="https://fosstodon.b-cdn.net/custom_emojis/images/000/010/368/static/duckduckgo.png"> DuckDuckGo</a> from Google Search. I found that the most widely adopted service of Google is a text box for us to write our most intimate secrets in plain text.</p>
<p><img alt="Google wants user data. Users use Google Search. Google says &quot;It's Free Real Estate&quot;" src="https://murtezayesil.me/images/it_is_free_real_estate_1.jpg"></p>
<p>Dropping Google Search wasn't gonna cut it though. I still was relying on Google Contacts, Photos and Drive to backup my data. I needed something that could backup my phone properly while not giving up my data to data hungry companies.</p>
<h1>NextCloud to the rescue</h1>
<p>NextCloud is a file hosting service with built-in CardDAV (contact sync), CalDAV (calendar sync) and WebDAV (file sync) servers. Not to mention, it supports adding more features by installing modules from its <a href="https://apps.nextcloud.com/">apps library</a>. It is <a href="https://en.wikipedia.org/wiki/Free_and_open-source_software" title="Free and Open Source Software">FOSS</a> free as in freedom for everyone and int this case free as in price for non-enterprise users. Nice thing about NextCloud is that it offers <em>all of its features</em> to both its enterprise and home/personal users. Enterprise users also benefit from technical maintenance support direct from the NextCloud.</p>
<p>The way I deployed my NextCloud instance was to rent a remote VM. I am a student who can't afford to buy a machine and run it 24/7. Renting a server seemed like the most affordable and logical idea to me. Rent costs $5/month for the cheapest tier. I am careful with my pocket money and after cancelling my Netflix subscription, I had more than enough to pay $5/month.</p>
<p>After renting a server, I started experimenting with different OSes. I tried Debian but its php packages were old. I tried CentOS based NethServer but default user credentials for NextCloud were wrong and I couldn't use it either. I finally settled at Ubuntu 20.04 LTS. I followed few tutorials before I found Kev's tutorial. I deviated from those tutorials because I am young and ... nevermind. I finally found Kev's tutorial and </p>
<p>There still was a problem though. I am not he only one sharing data about me. My family can do that too. And I felt responsible for helping my family with claiming their digital freedom too. I decided to create accounts for them and help them migrate to my NextCloud instance. It turns out my family acknowledged the privacy they were giving up for the convenience. But they didn't know any alternatives. When I invited them to use my NextCloud instance they were excited. But moving from Google Suite to NextCloud isn't done yet. It takes time to learn new systems and their quirks.</p>
<h2>Conclusion</h2>
<p>I think this was a successful attempt. Of course I am not done here. I may need to introduce my family to Fediverse, free social media powered by voluntaries, or Jitsi, Open Source alternative to Zoom and WhatsApp video calls services. But for now we all made good progress I would say. I will let some time pass until they get more comfortable at using NextCloud. I don't want to overwhelm them and make them regret switching. I don't want to be another reason they stay on Google. </p>
<p>Meanwhile, why won't you make an attempt to gain your own digital freedom ?<br>
I see many ways this can be achieved (Numbers in the beginning suggested how difficult they are rated out of 5):<br>
3 - Manually install NextCloud on a remote VM<br>
2 - Install NextCloud via Snap Package on a remote VM<br>
4 - Manually install NextCloud on an old computer<br>
3 - Install NextCloud via Snap on an old computer<br>
1 - Purchase a <a href="https://www.synology.com">Synology</a> NAS to serve you data backups, sync and more services<br>
1 - Purchase a shared hosting on one of many service providers tested by NextCloud company</p>
<h2>Tutorials</h2>
<p><strong>Installing on own server</strong>: Kev beautifully explains both Snap Package way and manual way of installing in his <a href="https://kevq.uk/how-to-setup-a-nextcloud-server-in-ubuntu/">tutorial</a>.<br>
<strong>Installing on shared hosting</strong>: But if you are intimidated with the idea of setting up your own server and managing it, you can use a shared hosting instead. Kev has a <a href="https://kevq.uk/how-to-install-nextcloud-on-shared-hosting/">tutorial</a> for that too, albeit it aged a bit old. <br>
<strong>Repurposing old hardware</strong>: If you have an old computer gathering dust in a closet, why not use it as a home server! You will find many tutorials on the internet on <a href="https://lbry.tv/@TheLinuxGuy:d/How-to-Install-Ubuntu-Server-20.04-LTS:5">how to install Ubuntu server</a>. </p>
<hr>
<p>The only reason I followed manual method was some rookie mistake I made that caused Let's Encrypt HTTPS script to not work properly 😬️ I highly doubt you will face the same issue if you follow the tutorials carefully. Even if you do face some problems with <a href="https://certbot.eff.org/">getting HTTPS certificate using <code>certbot</code></a> command isn't difficult at all.</p> </article>
<p class="paginator">
Page 1 / 1
</p>
</aside><!-- /#featured -->
</ol><!-- /#posts-list -->
</section><!-- /#content -->
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

63
docs/tags.html Normal file
View File

@ -0,0 +1,63 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ali Murteza Yesil - Blog - Tags</title>
<link rel="stylesheet" href="https://murtezayesil.me/theme/css/main.css" />
<link href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Ali Murteza Yesil - Blog Atom Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://murtezayesil.me/">Ali Murteza Yesil - Blog </a></h1>
<nav><ul>
<li><a href="https://murtezayesil.me/pages/about.html">About</a></li>
<li><a href="https://murtezayesil.me/pages/contact.html">Contact</a></li>
</ul>
<form id="search" action"#" onsubmit="javascript:window.open('https://duckduckgo.com/?q='+document.getElementById('keywords').value+'+site:https://murtezayesil.me');">
<input id="keywords" type="text" />
</form>
</nav>
<div id="submenu">
<ul>
<li><a href="https://murtezayesil.me/category/tech.html">Tech</a></li>
</ul>
<div>
</header><!-- /#banner -->
<section id="content" class="body">
<h1>Tags for Ali Murteza Yesil - Blog</h1> <li><a href="https://murtezayesil.me/tag/nextcloud.html">nextcloud</a> (1)</li>
<li><a href="https://murtezayesil.me/tag/privacy.html">privacy</a> (1)</li>
<li><a href="https://murtezayesil.me/tag/self-hosting.html">self-hosting</a> (1)</li>
</section>
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="https://kevq.uk">Kev Quirk</a></li>
<li><a href="https://mikestone.me">Mike Stone</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://murtezayesil.me/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="https://fosstodon.org/@murtezayesil">Fostodon</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>Powered by <a href="http://getpelican.com/">Pelican</a>. Theme <a href="https://github.com/blueicefield/pelican-blueidea/">blueidea</a>, inspired by the default theme.</p>
</footer><!-- /#contentinfo -->
</body>
</html>

474
docs/theme/css/main.css vendored Normal file
View File

@ -0,0 +1,474 @@
/*
Name: blueidea
Date: Oct 2013
Description: A Pelican theme inspired by the default theme notmyidea
Version: 1.0
License: MIT <http://opensource.org/licenses/MIT>
Licensed by: Smashing Media GmbH <http://www.smashingmagazine.com/>
Original author: Enrique Ramírez <http://enrique-ramirez.com/>
Customized by : Nassim Kacha <http://www.blueicefield.com/>
*/
/* Imports */
@import url("reset.css");
@import url("pygment.css");
@import url("typogrify.css");
@import url(//fonts.googleapis.com/css?family=Yanone+Kaffeesatz&subset=latin);
/***** Global *****/
/* Body */
body {
background: #f2f3f3;
color: #000305;
font-size: 87.5%; /* Base font size: 14px */
font-family: 'Trebuchet MS', Trebuchet, 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
line-height: 1.429;
margin: 0;
padding: 0;
text-align: left;
}
/* Headings */
h1 {font-size: 2em }
h2 {font-size: 1.571em} /* 22px */
h3 {font-size: 1.429em} /* 20px */
h4 {font-size: 1.286em} /* 18px */
h5 {font-size: 1.143em} /* 16px */
h6 {font-size: 1em} /* 14px */
h1, h2, h3, h4, h5, h6 {
font-weight: 400;
line-height: 1.1;
margin-bottom: .8em;
font-family: 'Yanone Kaffeesatz', arial, serif;
}
h3, h4, h5, h6 { margin-top: .8em; }
hr { border: 2px solid #EEEEEE; }
/* Anchors */
a {outline: 0;}
a img {border: 0px; text-decoration: none;}
a:link, a:visited {
color: #008db8;
padding: 0 1px;
text-decoration: none;
}
a:hover, a:active {
text-decoration: underline;
}
/* Paragraphs */
div.line-block,
p { margin-top: 1em;
margin-bottom: 1em;}
strong, b {font-weight: bold;}
em, i {font-style: italic;}
/* Lists */
ul {
list-style: outside disc;
margin: 0em 0 0 1.5em;
}
ol {
list-style: outside decimal;
margin: 0em 0 0 1.5em;
}
li { margin-top: 0.5em;}
.post-info {
border-top: 1px solid;
text-align: right;
}
.readmore { float: right }
dl {margin: 0 0 1.5em 0;}
dt {font-weight: bold;}
dd {margin-left: 1.5em;}
pre{background-color: rgb(238, 238, 238); padding: 10px; margin: 10px; overflow: auto;}
/* Quotes */
blockquote {
margin: 20px;
font-style: italic;
}
cite {}
q {}
div.note {
float: right;
margin: 5px;
font-size: 85%;
max-width: 300px;
}
/* Tables */
table {margin: .5em auto 1.5em auto; width: 98%;}
/* Thead */
thead th {padding: .5em .4em; text-align: left;}
thead td {}
/* Tbody */
tbody td {padding: .5em .4em;}
tbody th {}
tbody .alt td {}
tbody .alt th {}
/* Tfoot */
tfoot th {}
tfoot td {}
/* HTML5 tags */
header, section, footer,
aside, nav, article, figure {
display: block;
}
/***** Layout *****/
.body {clear: both; margin: 0 auto; width: 800px;}
img.right, figure.right {float: right; margin: 0 0 2em 2em;}
img.left, figure.left {float: left; margin: 0 2em 2em 0;}
/*
Header
*****************/
#banner {
margin: 0 auto;
padding: 2.5em 0 0 0;
}
/* Banner */
#banner h1 {font-size: 3.571em; line-height: 0;}
#banner h1 a:link, #banner h1 a:visited {
color: #000305;
display: block;
font-weight: bold;
margin: 0 0 .6em .2em;
text-decoration: none;
}
#banner h1 a:hover, #banner h1 a:active {
background: none;
color: #008db8;
text-shadow: none;
}
#banner h1 strong {font-size: 0.36em; font-weight: normal;}
/* Main Nav */
#banner nav {
background: #000305;
font-size: 1.143em;
height: 40px;
line-height: 30px;
margin: 0 auto 2em auto;
padding: 0;
text-align: center;
width: 800px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#banner nav ul {list-style: none; margin: 0 auto; width: 800px;}
#banner nav li {float: left; display: inline; margin: 0;}
#banner nav a:link, #banner nav a:visited {
color: #fff;
display: inline-block;
height: 30px;
padding: 5px 1.5em;
text-decoration: none;
}
#banner nav a:hover, #banner nav a:active,
#banner nav .active a:link, #banner nav .active a:visited {
background: #008db8;
color: #fff;
text-shadow: none !important;
}
#banner nav li:first-child a {
border-top-left-radius: 5px;
-moz-border-radius-topleft: 5px;
-webkit-border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
-moz-border-radius-bottomleft: 5px;
-webkit-border-bottom-left-radius: 5px;
}
/* Search form */
#banner #search input {
background: #272822 url('../images/icons/search.png') no-repeat 165px;
border: none;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
color: #fff;
float: right;
height: 25px;
margin-top: 6px;
margin-right: 10px;
padding-left: 10px;
width: 180px;
font-size: small;
}
#banner #search input:focus {
background: #272822;
box-shadow: inset 0 0 5px #fff;
}
/* Submenu */
#banner #submenu {
background-color: #fff;
border: 0px;
border-radius: 0 0 5px 5px;
-moz-border-radius: 0 0 5px 5px;
-webkit-border-radius: 0 0 5px 5px;
height: 25px;
line-height: 20px;
margin: -2.3em auto 2em auto;
padding: 0px;
text-align: center;
width: 790px;
}
#banner #submenu ul {clear: both; list-style: none; margin: 0;}
#banner #submenu li {float: left; display: inline; margin: 0;}
#banner #submenu li a:link, #banner #submenu li a:visited {
display: inline-block;
font-size: small;
font-weight: bold;
height: 25px;
padding: 0px 1.5em;
}
#banner #submenu li a:hover, #banner #submenu li a:active {
background: #008db8;
border-top: 1px solid #008db8;
-moz-border-top: 1px solid #008db8;
-webkit-border-top: 1px solid #008db8;
color: #fff;
text-decoration: none;
}
#banner #submenu .active a:link, #banner #submenu .active a:visited {
background: #008db8;
border-top: 1px solid #008db8;
-moz-border-top: 1px solid #008db8;
-webkit-border-top: 1px solid #008db8;
color: #fff;
text-decoration: none;
}
#banner #submenu li:first-child a {
border-bottom-left-radius: 5px;
-moz-border-bottom-left-radius: 5px;
-webkit-border-bottom-left-radius: 5px;
}
/*
Featured
*****************/
#featured {
background: #fff;
margin-bottom: 2em;
overflow: hidden;
padding: 20px;
width: 760px;
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
#featured figure {
border: 2px solid #eee;
float: right;
margin: 0.786em 2em 0 5em;
width: 248px;
}
#featured figure img {display: block; float: right;}
#featured h2 {color: #008DB8; font-size: 1.714em; margin-bottom: 0.333em;}
#featured h3 {font-size: 1.429em; margin-bottom: .5em;}
#featured h3 a:link, #featured h3 a:visited {color: #000305; text-decoration: none;}
#featured h3 a:hover, #featured h3 a:active {color: #fff;}
/*
Body
*****************/
#content {
background: #fff;
/*margin-bottom: 2em;*/
overflow: hidden;
padding: 20px 20px;
width: 760px;
border-radius: 10px 10px 0 0;
-moz-border-radius: 10px 10px 0 0;
-webkit-border-radius: 10px 10px 0 0;
}
/*
Extras
*****************/
#extras {
margin: 0 auto 0 auto;
overflow: hidden;
background: #000305;
border-radius: 0 0 10px 10px;
-moz-border-radius: 0 0 10px 10px;
-webkit-border-radius: 0 0 10px 10px;
padding-bottom: 10px;
}
#extras ul {list-style: none; margin: 0;}
/*#extras li {border-bottom: 1px solid #fff;}*/
#extras li {margin-top: 0;}
#extras h2 {
color: #008db8;
font-size: 1.429em;
margin-bottom: .25em;
padding: 0 3px;
}
#extras a:link, #extras a:visited {
color: #fff;
display: block;
/*border-bottom: 1px solid #F4E3E3;*/
text-decoration: none;
padding: .3em .25em;
}
#extras a:hover, #extras a:active {background: #008db8; color: #fff;}
/* Blogroll */
#extras .blogroll {
float: left;
width: 615px;
}
#extras .blogroll li {float: left; margin: 0 20px 0 0; width: 185px;}
/* Social */
#extras .social {
float: right;
width: 175px;
}
#extras div[class='social'] a {
background-repeat: no-repeat;
background-position: 3px 6px;
padding-left: 25px;
}
/* Icons */
#extras .social a {background-size: 18px;}
#extras .social a[href*='facebook.com'] {background-image: url('../images/icons/facebook.png');}
#extras .social a[href*='github.com'],
#extras .social a[href*='git.io'] {background-image: url('../images/icons/github.png');}
#extras .social a[href*='plus.google.com'] {background-image: url('../images/icons/google-plus.png');}
#extras .social a[href*='groups.google.com'] {background-image: url('../images/icons/google-plus.png');}
#extras .social a[href*='last.fm'], .social a[href*='lastfm.'] {background-image: url('../images/icons/lastfm.png');}
#extras .social a[href*='linkedin.com'] {background-image: url('../images/icons/linkedin.png');}
#extras .social a[type$='atom+xml'], .social a[type$='rss+xml'] {background-image: url('../images/icons/rss.png');}
#extras .social a[href*='twitter.com'] {background-image: url('../images/icons/twitter.png');}
#extras .social a[href*='vimeo.com'] {background-image: url('../images/icons/vimeo.png');}
#extras .social a[href*='youtube.com'] {background-image: url('../images/icons/youtube.png');}
/*
Footer
*****************/
#contentinfo {text-align: right; font-size: x-small;}
#contentinfo a {font-weight: bold;}
/***** Sections *****/
/* Blog */
.hentry {
display: block;
clear: both;
border-bottom: 1px solid #eee;
padding: 1.5em 0;
}
li:last-child .hentry, #content > .hentry {border: 0; margin: 0;}
#content > .hentry {padding: 1em 0;}
.hentry img{display : none ;}
.entry-title {font-size: 3em; margin-bottom: 10px; margin-top: 0;}
.entry-title a:link, .entry-title a:visited {text-decoration: none; color: #333;}
.entry-title a:visited {background-color: #fff;}
.hentry .post-info * {font-style: normal;}
/* Content */
.hentry footer {margin-bottom: 2em;}
.hentry footer address {display: inline;}
#posts-list footer address {display: block;}
/* Blog Index */
#posts-list {list-style: none; margin: 0;}
#posts-list .hentry {padding-left: 10px; position: relative;}
#posts-list footer {
border-top: 1px solid;
margin-top: -1.3em;
}
/* About the Author */
#about-author {
background: #f9f9f9;
clear: both;
font-style: normal;
margin: 2em 0;
padding: 10px 20px 15px 20px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#about-author strong {
color: #C64350;
clear: both;
display: block;
font-size: 1.429em;
}
#about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;}
/* Comments */
#comments-list {list-style: none; margin: 0 1em;}
#comments-list blockquote {
background: #f8f8f8;
clear: both;
font-style: normal;
margin: 0;
padding: 15px 20px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;}
#comments-list li:nth-child(2n) blockquote {background: #F5f5f5;}
/* Add a Comment */
#add-comment label {clear: left; float: left; text-align: left; width: 150px;}
#add-comment input[type='text'],
#add-comment input[type='email'],
#add-comment input[type='url'] {float: left; width: 200px;}
#add-comment textarea {float: left; height: 150px; width: 495px;}
#add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;}
#add-comment input[type='submit'] {float: right; margin: 0 .5em;}
#add-comment * {margin-bottom: .5em;}

66
docs/theme/css/pygment.css vendored Normal file
View File

@ -0,0 +1,66 @@
.highlight pre
{
background: #272822;
color: #f8f8f2;
border: 1px solid #272822;
/*border-radius: 5px;*/
}
.highlight .hll { background-color: #49483e }
.highlight .c { color: #75715e } /* Comment */
.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
.highlight .k { color: #66d9ef } /* Keyword */
.highlight .l { color: #ae81ff } /* Literal */
.highlight .n { color: #f8f8f2 } /* Name */
.highlight .o { color: #f92672 } /* Operator */
.highlight .p { color: #f8f8f2 } /* Punctuation */
.highlight .cm { color: #75715e } /* Comment.Multiline */
.highlight .cp { color: #75715e } /* Comment.Preproc */
.highlight .c1 { color: #75715e } /* Comment.Single */
.highlight .cs { color: #75715e } /* Comment.Special */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .kc { color: #66d9ef } /* Keyword.Constant */
.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
.highlight .kn { color: #f92672 } /* Keyword.Namespace */
.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
.highlight .kt { color: #66d9ef } /* Keyword.Type */
.highlight .ld { color: #e6db74 } /* Literal.Date */
.highlight .m { color: #ae81ff } /* Literal.Number */
.highlight .s { color: #e6db74 } /* Literal.String */
.highlight .na { color: #a6e22e } /* Name.Attribute */
.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
.highlight .nc { color: #a6e22e } /* Name.Class */
.highlight .no { color: #66d9ef } /* Name.Constant */
.highlight .nd { color: #a6e22e } /* Name.Decorator */
.highlight .ni { color: #f8f8f2 } /* Name.Entity */
.highlight .ne { color: #a6e22e } /* Name.Exception */
.highlight .nf { color: #a6e22e } /* Name.Function */
.highlight .nl { color: #f8f8f2 } /* Name.Label */
.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
.highlight .nx { color: #a6e22e } /* Name.Other */
.highlight .py { color: #f8f8f2 } /* Name.Property */
.highlight .nt { color: #f92672 } /* Name.Tag */
.highlight .nv { color: #f8f8f2 } /* Name.Variable */
.highlight .ow { color: #f92672 } /* Operator.Word */
.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
.highlight .sc { color: #e6db74 } /* Literal.String.Char */
.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
.highlight .se { color: #ae81ff } /* Literal.String.Escape */
.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
.highlight .sx { color: #e6db74 } /* Literal.String.Other */
.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */

205
docs/theme/css/pygment.css.save vendored Normal file
View File

@ -0,0 +1,205 @@
.hll {
background-color:#eee;
}
.c {
color:#408090;
font-style:italic;
}
.err {
border:1px solid #FF0000;
}
.k {
color:#007020;
font-weight:bold;
}
.o {
color:#666666;
}
.cm {
color:#408090;
font-style:italic;
}
.cp {
color:#007020;
}
.c1 {
color:#408090;
font-style:italic;
}
.cs {
background-color:#FFF0F0;
color:#408090;
}
.gd {
color:#A00000;
}
.ge {
font-style:italic;
}
.gr {
color:#FF0000;
}
.gh {
color:#000080;
font-weight:bold;
}
.gi {
color:#00A000;
}
.go {
color:#303030;
}
.gp {
color:#C65D09;
font-weight:bold;
}
.gs {
font-weight:bold;
}
.gu {
color:#800080;
font-weight:bold;
}
.gt {
color:#0040D0;
}
.kc {
color:#007020;
font-weight:bold;
}
.kd {
color:#007020;
font-weight:bold;
}
.kn {
color:#007020;
font-weight:bold;
}
.kp {
color:#007020;
}
.kr {
color:#007020;
font-weight:bold;
}
.kt {
color:#902000;
}
.m {
color:#208050;
}
.s {
color:#4070A0;
}
.na {
color:#4070A0;
}
.nb {
color:#007020;
}
.nc {
color:#0E84B5;
font-weight:bold;
}
.no {
color:#60ADD5;
}
.nd {
color:#555555;
font-weight:bold;
}
.ni {
color:#D55537;
font-weight:bold;
}
.ne {
color:#007020;
}
.nf {
color:#06287E;
}
.nl {
color:#002070;
font-weight:bold;
}
.nn {
color:#0E84B5;
font-weight:bold;
}
.nt {
color:#062873;
font-weight:bold;
}
.nv {
color:#BB60D5;
}
.ow {
color:#007020;
font-weight:bold;
}
.w {
color:#BBBBBB;
}
.mf {
color:#208050;
}
.mh {
color:#208050;
}
.mi {
color:#208050;
}
.mo {
color:#208050;
}
.sb {
color:#4070A0;
}
.sc {
color:#4070A0;
}
.sd {
color:#4070A0;
font-style:italic;
}
.s2 {
color:#4070A0;
}
.se {
color:#4070A0;
font-weight:bold;
}
.sh {
color:#4070A0;
}
.si {
color:#70A0D0;
font-style:italic;
}
.sx {
color:#C65D09;
}
.sr {
color:#235388;
}
.s1 {
color:#4070A0;
}
.ss {
color:#517918;
}
.bp {
color:#007020;
}
.vc {
color:#BB60D5;
}
.vg {
color:#BB60D5;
}
.vi {
color:#BB60D5;
}
.il {
color:#208050;
}

52
docs/theme/css/reset.css vendored Normal file
View File

@ -0,0 +1,52 @@
/*
Name: Reset Stylesheet
Description: Resets browser's default CSS
Author: Eric Meyer
Author URI: http://meyerweb.com/eric/tools/css/reset/
*/
/* v1.0 | 20080212 */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
background: transparent;
border: 0;
font-size: 100%;
margin: 0;
outline: 0;
padding: 0;
vertical-align: baseline;
}
body {line-height: 1;}
ol, ul {list-style: none;}
blockquote, q {quotes: none;}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
/* remember to define focus styles! */
:focus {
outline: 0;
}
/* remember to highlight inserts somehow! */
ins {text-decoration: none;}
del {text-decoration: line-through;}
/* tables still need 'cellspacing="0"' in the markup */
table {
border-collapse: collapse;
border-spacing: 0;
}

3
docs/theme/css/typogrify.css vendored Normal file
View File

@ -0,0 +1,3 @@
.caps {font-size:.92em;}
.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;}
.dquo {margin-left:-.38em;}

48
docs/theme/css/wide.css vendored Normal file
View File

@ -0,0 +1,48 @@
@import url("main.css");
body {
font:1.3em/1.3 "Hoefler Text","Georgia",Georgia,serif,sans-serif;
}
.post-info{
display: none;
}
#banner nav {
display: none;
-moz-border-radius: 0px;
margin-bottom: 20px;
overflow: hidden;
font-size: 1em;
background: #F5F4EF;
}
#banner nav ul{
padding-right: 50px;
}
#banner nav li{
float: right;
color: #000;
}
#banner nav li a {
color: #000;
}
#banner h1 {
margin-bottom: -18px;
}
#featured, #extras {
padding: 50px;
}
#featured {
padding-top: 20px;
}
#extras {
padding-top: 0px;
padding-bottom: 0px;
}

15
docs/theme/images/icons/_licence.txt vendored Normal file
View File

@ -0,0 +1,15 @@
Copyright (C) 2011 Natko Hasiæ, http://www.designerschair.com
No attribution link is required, but it's greatly appreciated.
Make sure you share these icons using this link only:
http://www.designerschair.com/freebies/mono-dc-monochrome-social-icons/
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.

BIN
docs/theme/images/icons/facebook.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
docs/theme/images/icons/github.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
docs/theme/images/icons/google-plus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
docs/theme/images/icons/lastfm.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
docs/theme/images/icons/linkedin.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
docs/theme/images/icons/rss.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
docs/theme/images/icons/search.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

BIN
docs/theme/images/icons/twitter.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
docs/theme/images/icons/vimeo.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
docs/theme/images/icons/youtube.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,562 @@
A_Rog <adam.thomas.rogerson@gmail.com>
Aakanksha Agrawal <11389424+rasponic@users.noreply.github.com>
Abhinav Sagar <40603139+abhinavsagar@users.noreply.github.com>
ABHYUDAY PRATAP SINGH <abhyudaypratap@outlook.com>
abs51295 <aagams68@gmail.com>
AceGentile <ventogrigio83@gmail.com>
Adam Chainz <adam@adamj.eu>
Adam Tse <adam.tse@me.com>
Adam Tse <atse@users.noreply.github.com>
Adam Wentz <awentz@theonion.com>
admin <admin@admins-MacBook-Pro.local>
Adrien Morison <adrien.morison@gmail.com>
ahayrapetyan <ahayrapetya2@bloomberg.net>
Ahilya <ahilya16009@iiitd.ac.in>
AinsworthK <yat626@yahoo.com.hk>
Akash Srivastava <akashsrivastava4927@gmail.com>
Alan Yee <alyee@ucsd.edu>
Albert Tugushev <albert@tugushev.ru>
Albert-Guan <albert.guan94@gmail.com>
albertg <albert.guan94@gmail.com>
Aleks Bunin <github@compuix.com>
Alethea Flowers <magicalgirl@google.com>
Alex Gaynor <alex.gaynor@gmail.com>
Alex Grönholm <alex.gronholm@nextday.fi>
Alex Loosley <a.loosley@reply.de>
Alex Morega <alex@grep.ro>
Alex Stachowiak <alexander@computer.org>
Alexander Shtyrov <rawzausho@gmail.com>
Alexandre Conrad <alexandre.conrad@gmail.com>
Alexey Popravka <a.popravka@smartweb.com.ua>
Alexey Popravka <alexey.popravka@horsedevel.com>
Alli <alzeih@users.noreply.github.com>
Ami Fischman <ami@fischman.org>
Ananya Maiti <ananyoevo@gmail.com>
Anatoly Techtonik <techtonik@gmail.com>
Anders Kaseorg <andersk@mit.edu>
Andreas Lutro <anlutro@gmail.com>
Andrei Geacar <andrei.geacar@gmail.com>
Andrew Gaul <andrew@gaul.org>
Andrey Bulgakov <mail@andreiko.ru>
Andrés Delfino <34587441+andresdelfino@users.noreply.github.com>
Andrés Delfino <adelfino@gmail.com>
Andy Freeland <andy.freeland@redjack.com>
Andy Freeland <andy@andyfreeland.net>
Andy Kluger <AndydeCleyre@users.noreply.github.com>
Ani Hayrapetyan <ahayrapetya2@bloomberg.net>
Aniruddha Basak <codewithaniruddha@gmail.com>
Anish Tambe <anish.tambe@yahoo.in>
Anrs Hu <anrs@douban.com>
Anthony Sottile <asottile@umich.edu>
Antoine Musso <hashar@free.fr>
Anton Ovchinnikov <revolver112@gmail.com>
Anton Patrushev <apatrushev@gmail.com>
Antonio Alvarado Hernandez <tnotstar@gmail.com>
Antony Lee <anntzer.lee@gmail.com>
Antti Kaihola <akaihol+github@ambitone.com>
Anubhav Patel <anubhavp28@gmail.com>
Anuj Godase <godaseanuj@gmail.com>
AQNOUCH Mohammed <aqnouch.mohammed@gmail.com>
AraHaan <seandhunt_7@yahoo.com>
Arindam Choudhury <arindam@live.com>
Armin Ronacher <armin.ronacher@active-4.com>
Artem <duketemon@users.noreply.github.com>
Ashley Manton <ajd.manton@googlemail.com>
Ashwin Ramaswami <aramaswamis@gmail.com>
atse <atse@users.noreply.github.com>
Atsushi Odagiri <aodagx@gmail.com>
Avner Cohen <israbirding@gmail.com>
Baptiste Mispelon <bmispelon@gmail.com>
Barney Gale <barney.gale@gmail.com>
barneygale <barney.gale@gmail.com>
Bartek Ogryczak <b.ogryczak@gmail.com>
Bastian Venthur <mail@venthur.de>
Ben Darnell <ben@bendarnell.com>
Ben Hoyt <benhoyt@gmail.com>
Ben Rosser <rosser.bjr@gmail.com>
Bence Nagy <bence@underyx.me>
Benjamin Peterson <benjamin@python.org>
Benjamin VanEvery <ben@simondata.com>
Benoit Pierre <benoit.pierre@gmail.com>
Berker Peksag <berker.peksag@gmail.com>
Bernardo B. Marques <bernardo.fire@gmail.com>
Bernhard M. Wiedemann <bwiedemann@suse.de>
Bertil Hatt <bertil.hatt@farfetch.com>
Bogdan Opanchuk <bogdan@opanchuk.net>
BorisZZZ <BorisZZZ@users.noreply.github.com>
Brad Erickson <eosrei@gmail.com>
Bradley Ayers <bradley.ayers@gmail.com>
Brandon L. Reiss <brandon@damyata.co>
Brandt Bucher <brandtbucher@gmail.com>
Brett Randall <javabrett@gmail.com>
Brian Cristante <33549821+brcrista@users.noreply.github.com>
Brian Cristante <brcrista@microsoft.com>
Brian Rosner <brosner@gmail.com>
BrownTruck <BrownTruck@users.noreply.github.com>
Bruno Oliveira <nicoddemus@gmail.com>
Bruno Renié <brutasse@gmail.com>
Bstrdsmkr <bstrdsmkr@gmail.com>
Buck Golemon <buck@yelp.com>
burrows <burrows@preveil.com>
Bussonnier Matthias <bussonniermatthias@gmail.com>
c22 <c22@users.noreply.github.com>
Caleb Martinez <accounts@calebmartinez.com>
Calvin Smith <eukaryote@users.noreply.github.com>
Carl Meyer <carl@oddbird.net>
Carlos Liam <carlos@aarzee.me>
Carol Willing <carolcode@willingconsulting.com>
Carter Thayer <carterwthayer@gmail.com>
Cass <cass.petrus@gmail.com>
Chandrasekhar Atina <chandu.atina@gmail.com>
Chih-Hsuan Yen <yan12125@gmail.com>
Chih-Hsuan Yen <yen@chyen.cc>
Chris Brinker <chris.brinker@gmail.com>
Chris Hunt <chrahunt@gmail.com>
Chris Jerdonek <chris.jerdonek@gmail.com>
Chris McDonough <chrism@plope.com>
Chris Wolfe <chriswwolfe@gmail.com>
Christian Heimes <christian@python.org>
Christian Oudard <christian.oudard@gmail.com>
Christopher Hunt <chrahunt@gmail.com>
Christopher Snyder <cnsnyder@users.noreply.github.com>
Clark Boylan <clark.boylan@gmail.com>
Clay McClure <clay@daemons.net>
Cody <Purring@users.noreply.github.com>
Cody Soyland <codysoyland@gmail.com>
Colin Watson <cjwatson@debian.org>
Connor Osborn <cdosborn@email.arizona.edu>
Cooper Lees <me@cooperlees.com>
Cooper Ry Lees <me@cooperlees.com>
Cory Benfield <lukasaoz@gmail.com>
Cory Wright <corywright@gmail.com>
Craig Kerstiens <craig.kerstiens@gmail.com>
Cristian Sorinel <cristian.sorinel@gmail.com>
Curtis Doty <Curtis@GreenKey.net>
cytolentino <ctolentino8@bloomberg.net>
Damian Quiroga <qdamian@gmail.com>
Dan Black <dyspop@gmail.com>
Dan Savilonis <djs@n-cube.org>
Dan Sully <daniel-github@electricrain.com>
daniel <mcdonaldd@unimelb.edu.au>
Daniel Collins <accounts@dac.io>
Daniel Hahler <git@thequod.de>
Daniel Holth <dholth@fastmail.fm>
Daniel Jost <torpedojost@gmail.com>
Daniel Shaulov <daniel.shaulov@gmail.com>
Daniele Esposti <expobrain@users.noreply.github.com>
Daniele Procida <daniele@vurt.org>
Danny Hermes <daniel.j.hermes@gmail.com>
Dav Clark <davclark@gmail.com>
Dave Abrahams <dave@boostpro.com>
Dave Jones <dave@waveform.org.uk>
David Aguilar <davvid@gmail.com>
David Black <db@d1b.org>
David Bordeynik <david.bordeynik@gmail.com>
David Bordeynik <david@zebra-med.com>
David Caro <david@dcaro.es>
David Evans <d@drhevans.com>
David Linke <dr.david.linke@gmail.com>
David Pursehouse <david.pursehouse@gmail.com>
David Tucker <david@tucker.name>
David Wales <daviewales@gmail.com>
Davidovich <david.genest@gmail.com>
derwolfe <chriswwolfe@gmail.com>
Desetude <harry@desetude.com>
Diego Caraballo <diegocaraballo84@gmail.com>
DiegoCaraballo <diegocaraballo84@gmail.com>
Dmitry Gladkov <dmitry.gladkov@gmail.com>
Domen Kožar <domen@dev.si>
Donald Stufft <donald@stufft.io>
Dongweiming <dongweiming@admaster.com.cn>
Douglas Thor <dougthor42@users.noreply.github.com>
DrFeathers <WilliamGeorgeBurgess@gmail.com>
Dustin Ingram <di@di.codes>
Dwayne Bailey <dwayne@translate.org.za>
Ed Morley <501702+edmorley@users.noreply.github.com>
Ed Morley <emorley@mozilla.com>
Eitan Adler <lists@eitanadler.com>
ekristina <panacejja@gmail.com>
elainechan <elaine.chan@outlook.com>
Eli Schwartz <eschwartz93@gmail.com>
Eli Schwartz <eschwartz@archlinux.org>
Emil Burzo <contact@emilburzo.com>
Emil Styrke <emil.styrke@gmail.com>
Endoh Takanao <djmchl@gmail.com>
enoch <lanxenet@gmail.com>
Erdinc Mutlu <erdinc_mutlu@yahoo.com>
Eric Gillingham <Gillingham@bikezen.net>
Eric Hanchrow <eric.hanchrow@gmail.com>
Eric Hopper <hopper@omnifarious.org>
Erik M. Bray <embray@stsci.edu>
Erik Rose <erik@mozilla.com>
Ernest W Durbin III <ewdurbin@gmail.com>
Ernest W. Durbin III <ewdurbin@gmail.com>
Erwin Janssen <erwinjanssen@outlook.com>
Eugene Vereshchagin <evvers@gmail.com>
everdimension <everdimension@gmail.com>
Felix Yan <felixonmars@archlinux.org>
fiber-space <fiber-space@users.noreply.github.com>
Filip Kokosiński <filip.kokosinski@gmail.com>
Florian Briand <ownerfrance+github@hotmail.com>
Florian Rathgeber <florian.rathgeber@gmail.com>
Francesco <f.guerrieri@gmail.com>
Francesco Montesano <franz.bergesund@gmail.com>
Frost Ming <mianghong@gmail.com>
Gabriel Curio <g.curio@gmail.com>
Gabriel de Perthuis <g2p.code@gmail.com>
Garry Polley <garrympolley@gmail.com>
gdanielson <graeme.danielson@gmail.com>
Geoffrey Lehée <geoffrey@lehee.name>
Geoffrey Sneddon <me@gsnedders.com>
George Song <george@55minutes.com>
Georgi Valkov <georgi.t.valkov@gmail.com>
Giftlin Rajaiah <giftlin.rgn@gmail.com>
gizmoguy1 <gizmoguy1@gmail.com>
gkdoc <40815324+gkdoc@users.noreply.github.com>
Gopinath M <31352222+mgopi1990@users.noreply.github.com>
GOTO Hayato <3532528+gh640@users.noreply.github.com>
gpiks <gaurav.pikale@gmail.com>
Guilherme Espada <porcariadagata@gmail.com>
Guy Rozendorn <guy@rzn.co.il>
gzpan123 <gzpan123@gmail.com>
Hanjun Kim <hallazzang@gmail.com>
Hari Charan <hcharan997@gmail.com>
Harsh Vardhan <harsh59v@gmail.com>
Herbert Pfennig <herbert@albinen.com>
Hsiaoming Yang <lepture@me.com>
Hugo <hugovk@users.noreply.github.com>
Hugo Lopes Tavares <hltbra@gmail.com>
Hugo van Kemenade <hugovk@users.noreply.github.com>
hugovk <hugovk@users.noreply.github.com>
Hynek Schlawack <hs@ox.cx>
Ian Bicking <ianb@colorstudy.com>
Ian Cordasco <graffatcolmingov@gmail.com>
Ian Lee <IanLee1521@gmail.com>
Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
Ian Wienand <ian@wienand.org>
Ian Wienand <iwienand@redhat.com>
Igor Kuzmitshov <kuzmiigo@gmail.com>
Igor Sobreira <igor@igorsobreira.com>
Ilya Baryshev <baryshev@gmail.com>
INADA Naoki <songofacandy@gmail.com>
Ionel Cristian Mărieș <contact@ionelmc.ro>
Ionel Maries Cristian <ionel.mc@gmail.com>
Ivan Pozdeev <vano@mail.mipt.ru>
Jacob Kim <me@thejacobkim.com>
jakirkham <jakirkham@gmail.com>
Jakub Stasiak <kuba.stasiak@gmail.com>
Jakub Vysoky <jakub@borka.cz>
Jakub Wilk <jwilk@jwilk.net>
James Cleveland <jamescleveland@gmail.com>
James Cleveland <radiosilence@users.noreply.github.com>
James Firth <hello@james-firth.com>
James Polley <jp@jamezpolley.com>
Jan Pokorný <jpokorny@redhat.com>
Jannis Leidel <jannis@leidel.info>
jarondl <me@jarondl.net>
Jason R. Coombs <jaraco@jaraco.com>
Jay Graves <jay@skabber.com>
Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
Jeff Barber <jbarber@computer.org>
Jeff Dairiki <dairiki@dairiki.org>
Jelmer Vernooij <jelmer@jelmer.uk>
jenix21 <devfrog@gmail.com>
Jeremy Stanley <fungi@yuggoth.org>
Jeremy Zafran <jzafran@users.noreply.github.com>
Jiashuo Li <jiasli@microsoft.com>
Jim Garrison <jim@garrison.cc>
Jivan Amara <Development@JivanAmara.net>
John Paton <j.paton@catawiki.nl>
John-Scott Atlakson <john.scott.atlakson@gmail.com>
johnthagen <johnthagen@gmail.com>
johnthagen <johnthagen@users.noreply.github.com>
Jon Banafato <jon@jonafato.com>
Jon Dufresne <jon.dufresne@gmail.com>
Jon Parise <jon@indelible.org>
Jonas Nockert <jonasnockert@gmail.com>
Jonathan Herbert <foohyfooh@gmail.com>
Joost Molenaar <j.j.molenaar@gmail.com>
Jorge Niedbalski <niedbalski@gmail.com>
Joseph Long <jdl@fastmail.fm>
Josh Bronson <jabronson@gmail.com>
Josh Hansen <josh@skwash.net>
Josh Schneier <josh.schneier@gmail.com>
Juanjo Bazán <jjbazan@gmail.com>
Julian Berman <Julian@GrayVines.com>
Julian Gethmann <julian.gethmann@kit.edu>
Julien Demoor <julien@jdemoor.com>
jwg4 <jack.grahl@yahoo.co.uk>
Jyrki Pulliainen <jyrki@spotify.com>
Kai Chen <kaichen120@gmail.com>
Kamal Bin Mustafa <kamal@smach.net>
kaustav haldar <hi@kaustav.me>
keanemind <keanemind@gmail.com>
Keith Maxwell <keith.maxwell@gmail.com>
Kelsey Hightower <kelsey.hightower@gmail.com>
Kenneth Belitzky <kenny@belitzky.com>
Kenneth Reitz <me@kennethreitz.com>
Kenneth Reitz <me@kennethreitz.org>
Kevin Burke <kev@inburke.com>
Kevin Carter <kevin.carter@rackspace.com>
Kevin Frommelt <kevin.frommelt@webfilings.com>
Kevin R Patterson <kevin.r.patterson@intel.com>
Kexuan Sun <me@kianasun.com>
Kit Randel <kit@nocturne.net.nz>
kpinc <kop@meme.com>
Krishna Oza <krishoza15sep@gmail.com>
Kumar McMillan <kumar.mcmillan@gmail.com>
Kyle Persohn <kyle.persohn@gmail.com>
lakshmanaram <lakshmanaram.n@gmail.com>
Laszlo Kiss-Kollar <kiss.kollar.laszlo@gmail.com>
Laurent Bristiel <laurent@bristiel.com>
Laurie Opperman <laurie@sitesee.com.au>
Leon Sasson <leonsassonha@gmail.com>
Lev Givon <lev@columbia.edu>
Lincoln de Sousa <lincoln@comum.org>
Lipis <lipiridis@gmail.com>
Loren Carvalho <lcarvalho@linkedin.com>
Lucas Cimon <lucas.cimon@gmail.com>
Ludovic Gasc <gmludo@gmail.com>
Luke Macken <lmacken@redhat.com>
Luo Jiebin <luo.jiebin@qq.com>
luojiebin <luojiebin@users.noreply.github.com>
luz.paz <luzpaz@users.noreply.github.com>
László Kiss Kollár <lkisskollar@bloomberg.net>
László Kiss Kollár <lkollar@users.noreply.github.com>
Marc Abramowitz <marc@marc-abramowitz.com>
Marc Tamlyn <marc.tamlyn@gmail.com>
Marcus Smith <qwcode@gmail.com>
Mariatta <Mariatta@users.noreply.github.com>
Mark Kohler <mark.kohler@proteinsimple.com>
Mark Williams <markrwilliams@gmail.com>
Mark Williams <mrw@enotuniq.org>
Markus Hametner <fin+github@xbhd.org>
Masaki <mk5986@nyu.edu>
Masklinn <bitbucket.org@masklinn.net>
Matej Stuchlik <mstuchli@redhat.com>
Mathew Jennings <mjennings@foursquare.com>
Mathieu Bridon <bochecha@daitauha.fr>
Matt Good <matt@matt-good.net>
Matt Maker <trip@monstro.us>
Matt Robenolt <matt@ydekproductions.com>
matthew <matthew@trumbell.net>
Matthew Einhorn <moiein2000@gmail.com>
Matthew Gilliard <matthew.gilliard@gmail.com>
Matthew Iversen <teh.ivo@gmail.com>
Matthew Trumbell <matthew@thirdstonepartners.com>
Matthew Willson <matthew@swiftkey.com>
Matthias Bussonnier <bussonniermatthias@gmail.com>
mattip <matti.picus@gmail.com>
Maxim Kurnikov <maxim.kurnikov@gmail.com>
Maxime Rouyrre <rouyrre+git@gmail.com>
mayeut <mayeut@users.noreply.github.com>
mbaluna <44498973+mbaluna@users.noreply.github.com>
mdebi <17590103+mdebi@users.noreply.github.com>
memoselyk <memoselyk@gmail.com>
Michael <michael-k@users.noreply.github.com>
Michael Aquilina <michaelaquilina@gmail.com>
Michael E. Karpeles <michael.karpeles@gmail.com>
Michael Klich <michal@michalklich.com>
Michael Williamson <mike@zwobble.org>
michaelpacer <michaelpacer@gmail.com>
Mickaël Schoentgen <mschoentgen@nuxeo.com>
Miguel Araujo Perez <miguel.araujo.perez@gmail.com>
Mihir Singh <git.service@mihirsingh.com>
Mike <mikeh@blur.com>
Mike Hendricks <mikeh@blur.com>
Min RK <benjaminrk@gmail.com>
MinRK <benjaminrk@gmail.com>
Miro Hrončok <miro@hroncok.cz>
Monica Baluna <mbaluna@bloomberg.net>
montefra <franz.bergesund@gmail.com>
Monty Taylor <mordred@inaugust.com>
Nate Coraor <nate@bx.psu.edu>
Nathaniel J. Smith <njs@pobox.com>
Nehal J Wani <nehaljw.kkd1@gmail.com>
Neil Botelho <neil.botelho321@gmail.com>
Nick Coghlan <ncoghlan@gmail.com>
Nick Stenning <nick@whiteink.com>
Nick Timkovich <prometheus235@gmail.com>
Nicolas Bock <nicolasbock@gmail.com>
Nikhil Benesch <nikhil.benesch@gmail.com>
Nitesh Sharma <nbsharma@outlook.com>
Nowell Strite <nowell@strite.org>
NtaleGrey <Shadikntale@gmail.com>
nvdv <modestdev@gmail.com>
Ofekmeister <ofekmeister@gmail.com>
ofrinevo <ofrine@gmail.com>
Oliver Jeeves <oliver.jeeves@ocado.com>
Oliver Tonnhofer <olt@bogosoft.com>
Olivier Girardot <ssaboum@gmail.com>
Olivier Grisel <olivier.grisel@ensta.org>
Ollie Rutherfurd <orutherfurd@gmail.com>
OMOTO Kenji <k-omoto@m3.com>
Omry Yadan <omry@fb.com>
Oren Held <orenhe@il.ibm.com>
Oscar Benjamin <oscar.j.benjamin@gmail.com>
Oz N Tiram <oz.tiram@gmail.com>
Pachwenko <32424503+Pachwenko@users.noreply.github.com>
Patrick Dubroy <pdubroy@gmail.com>
Patrick Jenkins <patrick@socialgrowthtechnologies.com>
Patrick Lawson <pl@foursquare.com>
patricktokeeffe <patricktokeeffe@users.noreply.github.com>
Patrik Kopkan <pkopkan@redhat.com>
Paul Kehrer <paul.l.kehrer@gmail.com>
Paul Moore <p.f.moore@gmail.com>
Paul Nasrat <pnasrat@gmail.com>
Paul Oswald <pauloswald@gmail.com>
Paul van der Linden <mail@paultjuh.org>
Paulus Schoutsen <paulus@paulusschoutsen.nl>
Pavithra Eswaramoorthy <33131404+QueenCoffee@users.noreply.github.com>
Pawel Jasinski <pawel.jasinski@gmail.com>
Pekka Klärck <peke@iki.fi>
Peter Lisák <peter.lisak@showmax.com>
Peter Waller <peter.waller@gmail.com>
petr-tik <petr-tik@users.noreply.github.com>
Phaneendra Chiruvella <hi@pcx.io>
Phil Freo <phil@philfreo.com>
Phil Pennock <phil@pennock-tech.com>
Phil Whelan <phil123@gmail.com>
Philip Jägenstedt <philip@foolip.org>
Philip Molloy <pamolloy@users.noreply.github.com>
Philippe Ombredanne <pombredanne@gmail.com>
Pi Delport <pjdelport@gmail.com>
Pierre-Yves Rofes <github@rofes.fr>
pip <pypa-dev@googlegroups.com>
Prabakaran Kumaresshan <k_prabakaran+github@hotmail.com>
Prabhjyotsing Surjit Singh Sodhi <psinghsodhi@bloomberg.net>
Prabhu Marappan <prabhum.794@gmail.com>
Pradyun Gedam <pradyunsg@gmail.com>
Pratik Mallya <mallya@us.ibm.com>
Preet Thakkar <preet.thakkar@students.iiit.ac.in>
Preston Holmes <preston@ptone.com>
Przemek Wrzos <hetmankp@none>
Pulkit Goyal <7895pulkit@gmail.com>
Qiangning Hong <hongqn@gmail.com>
Quentin Pradet <quentin.pradet@gmail.com>
R. David Murray <rdmurray@bitdance.com>
Rafael Caricio <rafael.jacinto@gmail.com>
Ralf Schmitt <ralf@systemexit.de>
Razzi Abuissa <razzi53@gmail.com>
rdb <rdb@users.noreply.github.com>
Remi Rampin <r@remirampin.com>
Remi Rampin <remirampin@gmail.com>
Rene Dudfield <renesd@gmail.com>
Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
Richard Jones <r1chardj0n3s@gmail.com>
RobberPhex <robberphex@gmail.com>
Robert Collins <rbtcollins@hp.com>
Robert McGibbon <rmcgibbo@gmail.com>
Robert T. McGibbon <rmcgibbo@gmail.com>
robin elisha robinson <elisha.rob@gmail.com>
Roey Berman <roey.berman@gmail.com>
Rohan Jain <crodjer@gmail.com>
Rohan Jain <crodjer@users.noreply.github.com>
Rohan Jain <mail@rohanjain.in>
Roman Bogorodskiy <roman.bogorodskiy@ericsson.com>
Romuald Brunet <romuald@chivil.com>
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
Rory McCann <rory@technomancy.org>
Ross Brattain <ross.b.brattain@intel.com>
Roy Wellington Ⅳ <cactus_hugged@yahoo.com>
Roy Wellington Ⅳ <roy@mybasis.com>
Ryan Wooden <rygwdn@gmail.com>
ryneeverett <ryneeverett@gmail.com>
Sachi King <nakato@nakato.io>
Salvatore Rinchiera <salvatore@rinchiera.com>
Savio Jomton <sajo240519@gmail.com>
schlamar <marc.schlaich@gmail.com>
Scott Kitterman <sklist@kitterman.com>
Sean <me@sean.taipei>
seanj <seanj@xyke.com>
Sebastian Jordan <sebastian.jordan.mail@googlemail.com>
Sebastian Schaetz <sschaetz@butterflynetinc.com>
Segev Finer <segev208@gmail.com>
SeongSoo Cho <ppiyakk2@printf.kr>
Sergey Vasilyev <nolar@nolar.info>
Seth Woodworth <seth@sethish.com>
Shlomi Fish <shlomif@shlomifish.org>
Shovan Maity <shovan.maity@mayadata.io>
Simeon Visser <svisser@users.noreply.github.com>
Simon Cross <hodgestar@gmail.com>
Simon Pichugin <simon.pichugin@gmail.com>
sinoroc <sinoroc.code+git@gmail.com>
Sorin Sbarnea <sorin.sbarnea@gmail.com>
Stavros Korokithakis <stavros@korokithakis.net>
Stefan Scherfke <stefan@sofa-rockers.org>
Stephan Erb <github@stephanerb.eu>
stepshal <nessento@openmailbox.org>
Steve (Gadget) Barnes <gadgetsteve@hotmail.com>
Steve Barnes <gadgetsteve@hotmail.com>
Steve Dower <steve.dower@microsoft.com>
Steve Kowalik <steven@wedontsleep.org>
Steven Myint <git@stevenmyint.com>
stonebig <stonebig34@gmail.com>
Stéphane Bidoul (ACSONE) <stephane.bidoul@acsone.eu>
Stéphane Bidoul <stephane.bidoul@acsone.eu>
Stéphane Klein <contact@stephane-klein.info>
Sumana Harihareswara <sh@changeset.nyc>
Sviatoslav Sydorenko <wk.cvs.github@sydorenko.org.ua>
Sviatoslav Sydorenko <wk@sydorenko.org.ua>
Swat009 <swatantra.kumar8@gmail.com>
Takayuki SHIMIZUKAWA <shimizukawa@gmail.com>
tbeswick <tbeswick@enphaseenergy.com>
Thijs Triemstra <info@collab.nl>
Thomas Fenzl <thomas.fenzl@gmail.com>
Thomas Grainger <tagrain@gmail.com>
Thomas Guettler <tguettler@tbz-pariv.de>
Thomas Johansson <devnull@localhost>
Thomas Kluyver <thomas@kluyver.me.uk>
Thomas Smith <smithtg@ncbi.nlm.nih.gov>
Tim D. Smith <github@tim-smith.us>
Tim Gates <tim.gates@iress.com>
Tim Harder <radhermit@gmail.com>
Tim Heap <tim@timheap.me>
tim smith <github@tim-smith.us>
tinruufu <tinruufu@gmail.com>
Tom Forbes <tom@tomforb.es>
Tom Freudenheim <tom.freudenheim@onepeloton.com>
Tom V <tom@viner.tv>
Tomas Orsava <torsava@redhat.com>
Tomer Chachamu <tomer.chachamu@gmail.com>
Tony Beswick <tonybeswick@orcon.net.nz>
Tony Zhaocheng Tan <tony@tonytan.io>
TonyBeswick <TonyBeswick@users.noreply.github.com>
toonarmycaptain <toonarmycaptain@hotmail.com>
Toshio Kuratomi <toshio@fedoraproject.org>
Travis Swicegood <development@domain51.com>
Tzu-ping Chung <uranusjr@gmail.com>
Valentin Haenel <valentin.haenel@gmx.de>
Victor Stinner <victor.stinner@gmail.com>
victorvpaulo <victorvpaulo@gmail.com>
Viktor Szépe <viktor@szepe.net>
Ville Skyttä <ville.skytta@iki.fi>
Vinay Sajip <vinay_sajip@yahoo.co.uk>
Vincent Philippon <sindaewoh@gmail.com>
Vinicyus Macedo <7549205+vinicyusmacedo@users.noreply.github.com>
Vitaly Babiy <vbabiy86@gmail.com>
Vladimir Rutsky <rutsky@users.noreply.github.com>
W. Trevor King <wking@drexel.edu>
Wil Tan <wil@dready.org>
Wilfred Hughes <me@wilfred.me.uk>
William ML Leslie <william.leslie.ttg@gmail.com>
William T Olson <trevor@heytrevor.com>
Wilson Mo <wilsonfv@126.com>
wim glenn <wim.glenn@gmail.com>
Wolfgang Maier <wolfgang.maier@biologie.uni-freiburg.de>
Xavier Fernandez <xav.fernandez@gmail.com>
Xavier Fernandez <xavier.fernandez@polyconseil.fr>
xoviat <xoviat@users.noreply.github.com>
xtreak <tir.karthi@gmail.com>
YAMAMOTO Takashi <yamamoto@midokura.com>
Yen Chi Hsuan <yan12125@gmail.com>
Yeray Diaz Diaz <yeraydiazdiaz@gmail.com>
Yoval P <yoval@gmx.com>
Yu Jian <askingyj@gmail.com>
Yuan Jing Vincent Yan <yyan82@bloomberg.net>
Zearin <zearin@gonk.net>
Zearin <Zearin@users.noreply.github.com>
Zhiping Deng <kofreestyler@gmail.com>
Zvezdan Petkovic <zpetkovic@acm.org>
Łukasz Langa <lukasz@langa.pl>
Семён Марьясин <simeon@maryasin.name>

View File

@ -0,0 +1,20 @@
Copyright (c) 2008-2019 The pip developers (see AUTHORS.txt file)
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,71 @@
Metadata-Version: 2.1
Name: CacheControl
Version: 0.12.6
Summary: httplib2 caching for requests
Home-page: https://github.com/ionrock/cachecontrol
Author: Eric Larson
Author-email: eric@ionrock.org
License: UNKNOWN
Keywords: requests http caching web
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Internet :: WWW/HTTP
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
Provides-Extra: filecache
Requires-Dist: lockfile (>=0.9) ; extra == 'filecache'
Provides-Extra: redis
Requires-Dist: redis (>=2.10.5) ; extra == 'redis'
==============
CacheControl
==============
.. image:: https://img.shields.io/pypi/v/cachecontrol.svg
:target: https://pypi.python.org/pypi/cachecontrol
:alt: Latest Version
.. image:: https://travis-ci.org/ionrock/cachecontrol.png?branch=master
:target: https://travis-ci.org/ionrock/cachecontrol
CacheControl is a port of the caching algorithms in httplib2_ for use with
requests_ session object.
It was written because httplib2's better support for caching is often
mitigated by its lack of thread safety. The same is true of requests in
terms of caching.
Quickstart
==========
.. code-block:: python
import requests
from cachecontrol import CacheControl
sess = requests.session()
cached_sess = CacheControl(sess)
response = cached_sess.get('http://google.com')
If the URL contains any caching based headers, it will cache the
result in a simple dictionary.
For more info, check out the docs_
.. _docs: http://cachecontrol.readthedocs.org/en/latest/
.. _httplib2: https://github.com/jcgregorio/httplib2
.. _requests: http://docs.python-requests.org/

Some files were not shown because too many files have changed in this diff Show More