diff --git a/README.md b/README.md index 44701a4..74cf71d 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,18 @@ # go-sh-manymanuals -> WIP +The idea behind this software came from the [Permacomputing Update +2021](http://viznut.fi/texts-en/permacomputing_update_2021.html), especially +chapter 7. A collapse-tolerant business which is a series of practical +guidelines. One of which reads as follows: -the idea behind this software came from Viznut Permacomputing Update 2021 -http://viznut.fi/texts-en/permacomputing_update_2021.html especially chapter 7. Collapse-tolerant business -which is a series of practical guidelines. One of which reads. +> Self-host everything you need for software work on local physical servers. +> This includes all networked applications as well as an extensive library of +> software and documentation (including repair manuals and OS distributions for +> all relevant hardware). Offer hosting services to make use of the surplus. -> Self-host everything you need for software work on local physical servers. This includes all networked applications as well as an extensive library of software and documentation (including repair manuals and OS distributions for all relevant hardware). Offer hosting services to make use of the surplus. - -which lead us to think about an application where one can up and download manuals and datasheets for everything in Varia. +Which lead us to think about an application where one can up and download +manuals and datasheets for everything in Varia. ## hacking -Proposal co-learning co-hacking protocol: - -- Building blocks & learning programs go in [`exp`](./exp/). - -- When we are happy with a thing, we bring it into [`go-sh-manymanuals.go`](./go-sh-manymanuals.go). +`go build . && ./go-sh-manymanuals` diff --git a/contrib/init.vim b/contrib/init.vim deleted file mode 100644 index 6980a8b..0000000 --- a/contrib/init.vim +++ /dev/null @@ -1,209 +0,0 @@ -scriptencoding utf-8 - -if empty(glob('~/.config/nvim/autoload/plug.vim')) - silent !curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs - \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - autocmd VimEnter * PlugInstall --sync | source ~/.config/nvim/init.vim -endif - -call plug#begin('~/.config/nvim/plugged') -Plug 'Raimondi/delimitMate' -Plug 'Shougo/deoplete.nvim', {'do': ':UpdateRemotePlugins'} -Plug 'Shougo/neosnippet-snippets' -Plug 'Shougo/neosnippet.vim' -Plug 'Xuyuanp/nerdtree-git-plugin' -Plug 'craigemery/vim-autotag' -Plug 'davidhalter/jedi-vim', {'for': 'python'} -Plug 'dracula/vim', { 'as': 'dracula' } -Plug 'ervandew/supertab' -Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries', 'for': 'go'} -Plug 'ggandor/lightspeed.nvim' -Plug 'jistr/vim-nerdtree-tabs' -Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } -Plug 'junegunn/fzf.vim' -Plug 'kien/rainbow_parentheses.vim' -Plug 'mhinz/vim-signify' -Plug 'preservim/nerdtree' -Plug 'rhysd/clever-f.vim' -Plug 'sebdah/vim-delve', {'for': 'go'} -Plug 'sheerun/vim-polyglot' -Plug 'morhetz/gruvbox' -Plug 'takac/vim-hardtime' -Plug 'tpope/vim-commentary' -Plug 'tpope/vim-fugitive' -Plug 'tpope/vim-rsi' -Plug 'tpope/vim-surround' -Plug 'tpope/vim-unimpaired' -Plug 'vim-airline/vim-airline' -Plug 'w0rp/ale' -Plug 'zchee/deoplete-jedi', {'for': 'python'} -call plug#end() - -let g:gruvbox_italic=1 -let g:gruvbox_termcolors=16 -colorscheme gruvbox -set background=dark -hi Normal guibg=NONE ctermbg=NONE -hi Comment ctermfg=grey - -let g:hardtime_default_on=1 -let g:hardtime_timeout=500 -let g:hardtime_maxcout=4 - -let g:python_host_prog='/usr/bin/python2' -let g:python3_host_prog=$PYENV_ROOT.'/versions/3.9.0/bin/python' - -let g:mapleader=';' - -let g:airline#extensions#tabline#enabled=1 - -let g:deoplete#enable_at_startup=1 -let g:deoplete#enable_ignore_case=1 - -let g:SuperTabDefaultCompletionType='' -let g:SuperTabLongestHighlight=1 - -let g:nerdtree_tabs_autoclose=1 -let g:nerdtree_tabs_open_on_console_startup=0 -let g:nerdtree_tabs_smart_startup_focus=2 -let g:nerdtree_tabs_startup_cd=1 -let g:nerdree_minimal_ui=1 - -let g:NERDTreeShowLineNumbers=1 -let g:NERDTreeShowHidden=0 - -let g:jedi#usages_command='' -let g:jedi#popup_select_first=1 -let g:jedi#use_tabs_not_buffers=1 -let g:jedi#show_call_signatures='2' -let g:jedi#auto_close_doc=1 -let g:jedi#completions_enabled=0 - -let g:ale_linters={ - \ 'python': ['flake8', 'mypy'], - \ 'sh': ['shellcheck'], - \ 'bash': ['shellcheck'], - \ } -let g:ale_fix_on_save=1 -let g:ale_fixers={ - \ '*': ['trim_whitespace', 'remove_trailing_lines'], - \ 'python': ['isort', 'black'], - \ 'go': ['gofmt'], - \ } -let g:ale_lint_delay=500 -let g:ale_lint_on_enter=0 -let g:ale_lint_on_enter=0 -let g:ale_lint_on_filetype_changed=0 -let g:ale_lint_on_insert_leave=0 -let g:ale_lint_on_save=0 -let g:ale_lint_on_save=1 -let g:ale_lint_on_text_changed=0 - -let g:go_fmt_command='goimports' -let g:go_addtags_transform='snakecase' -let g:go_snippet_engine='neosnippet' -let g:go_def_mapping_enabled=0 - -let g:fzf_tags_command='ctags -R' - -let g:delimitMate_nesting_quotes=['"', '`', "'"] - -let g:autotagTagsFile='tags' - -imap jk - -imap (neosnippet_expand_or_jump) -smap (neosnippet_expand_or_jump) -xmap (neosnippet_expand_target) - -smap neosnippet#expandable_or_jumpable() ? -\ "\(neosnippet_expand_or_jump)" : "\" - -ino a -ino A - -nn Z 1z= - -nn :tabnew - -nn n :NERDTreeToggle -nn f :Files -nn r :Rg -nn t :Tags -nn g :GoDef -nn d :GoDoc -nn D :GoDocBrowser -nn p :Git push - -nn ev :split $MYVIMRC -nn sv :source $MYVIMRC - -nn pi :PlugInstall -nn pu :PlugUpdate -nn pg :PlugUpgrade -nn pc :PlugClean - -nn j -nn k -nn l -nn h - -syntax on -filetype plugin indent on - -set spelllang=en_gb -set nopaste -set nospell -set number -set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*.pyc*,*/.venv/*,*/.ve/* -set completeopt=menuone,preview -set wrap -set incsearch -set ignorecase -set textwidth=0 -set wrapmargin=0 -set nobackup -set nowritebackup -set noswapfile -set history=999 -set backspace=indent,eol,start -set ruler -set showmode -set laststatus=2 -set scrolloff=10 -set cmdheight=2 -set hlsearch -set gdefault -set hidden -set whichwrap+=<,>,[,] -set wildmenu -set title -set virtualedit=onemore -set fileencodings=. -set spelllang=en_gb -set foldmethod=indent -set foldlevel=99 -set relativenumber -set nohlsearch -set list -set expandtab -set nosmartindent -set shiftwidth=2 -set softtabstop=2 -set tabstop=2 -set splitbelow -set splitright -set inccommand=split -set updatetime=100 -set encoding=utf8 -set clipboard+=unnamedplus - -au VimEnter * RainbowParenthesesToggle -au Syntax * RainbowParenthesesLoadRound -au Syntax * RainbowParenthesesLoadSquare -au Syntax * RainbowParenthesesLoadBraces - -augroup nerdtree - autocmd! - autocmd! FileType nerdtree setlocal relativenumber -augroup END diff --git a/exp/README.md b/exp/README.md deleted file mode 100644 index 5d2e339..0000000 --- a/exp/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# exp - -> WIP - -## `ls.go` - -Lists files in [`files`](./files/). Run with `go run ls.go`. - -## `gimmetxt.go` - -WIP of gosseract pdf OCR. its far from perfect. -* gosseract doesn't OCR pdfs only imagees -* tried using gographics imagick.v2 with imagemagick6 -* this only does one page of the PDF, its very slow and it doesn't even do the OCR yet. -* imagemagick6 has a security policy when it comes to pdf. it's not install and go. diff --git a/exp/files/74ahc138.pdf b/exp/files/74ahc138.pdf deleted file mode 100644 index 2f9f00c..0000000 Binary files a/exp/files/74ahc138.pdf and /dev/null differ diff --git a/exp/files/arrestantenhandleiding.pdf b/exp/files/arrestantenhandleiding.pdf deleted file mode 100644 index 8592422..0000000 Binary files a/exp/files/arrestantenhandleiding.pdf and /dev/null differ diff --git a/exp/files/vanwiehuurik.pdf b/exp/files/vanwiehuurik.pdf deleted file mode 100644 index 59fffae..0000000 Binary files a/exp/files/vanwiehuurik.pdf and /dev/null differ diff --git a/exp/gimmetxt/gimmetxt.go b/exp/gimmetxt/gimmetxt.go deleted file mode 100644 index d1b9001..0000000 --- a/exp/gimmetxt/gimmetxt.go +++ /dev/null @@ -1,64 +0,0 @@ -package main - -import ( - "log" - - "gopkg.in/gographics/imagick.v2/imagick" -) - -func main() { - - if err := ConvertPdfToJpg("../files/vanwiehuurik.pdf", "out.jpeg"); err != nil { - log.Fatal(err) - } - - //client := gosseract.NewClient() - //defer client.Close() - - //client.SetImage(file.Name()) - //text, _ := client.Text() - //fmt.Println(text) -} - -func ConvertPdfToJpg(pdfName string, imageName string) error { - - // Setup - imagick.Initialize() - defer imagick.Terminate() - - mw := imagick.NewMagickWand() - defer mw.Destroy() - - // Must be *before* ReadImageFile - // Make sure our image is high quality - if err := mw.SetResolution(300, 300); err != nil { - return err - } - - // Load the image file into imagick - if err := mw.ReadImage(pdfName); err != nil { - return err - } - - // Must be *after* ReadImageFile - // Flatten image and remove alpha channel, to prevent alpha turning black in jpg - if err := mw.SetImageAlphaChannel(imagick.ALPHA_CHANNEL_FLATTEN); err != nil { - return err - } - - // Set any compression (100 = max quality) - if err := mw.SetCompressionQuality(95); err != nil { - return err - } - - // Select only first page of pdf - mw.SetIteratorIndex(0) - - // Convert into JPG - if err := mw.SetFormat("jpg"); err != nil { - return err - } - - // Save File - return mw.WriteImage(imageName) -} diff --git a/exp/ls.go b/exp/ls.go deleted file mode 100644 index 20a7856..0000000 --- a/exp/ls.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "fmt" - "io/ioutil" - "log" - "path/filepath" -) - -func main() { - fpath, err := filepath.Abs("./files") - if err != nil { - log.Fatalln(err) - } - - files, err := ioutil.ReadDir(fpath) - if err != nil { - log.Fatalln(err) - } - - for _, file := range files { - fmt.Println(file.Name()) - } - -} diff --git a/exp/readtxt/readtxt.go b/exp/readtxt/readtxt.go deleted file mode 100644 index c724ae2..0000000 --- a/exp/readtxt/readtxt.go +++ /dev/null @@ -1,34 +0,0 @@ -package main - -import ( - "bytes" - "fmt" - - "github.com/ledongthuc/pdf" -) - -func main() { - pdf.DebugOn = true - content, err := readPdf("../files/74ahc138.pdf") // Read local pdf file - if err != nil { - panic(err) - } - fmt.Println(content) - return -} - -func readPdf(path string) (string, error) { - f, r, err := pdf.Open(path) - // remember close file - defer f.Close() - if err != nil { - return "", err - } - var buf bytes.Buffer - b, err := r.GetPlainText() - if err != nil { - return "", err - } - buf.ReadFrom(b) - return buf.String(), nil -} diff --git a/go-sh-manymanuals b/go-sh-manymanuals new file mode 100755 index 0000000..d9b1b93 Binary files /dev/null and b/go-sh-manymanuals differ diff --git a/go-sh-manymanuals.go b/go-sh-manymanuals.go index 2ca0d5e..8e0994a 100644 --- a/go-sh-manymanuals.go +++ b/go-sh-manymanuals.go @@ -1,9 +1,34 @@ package main import ( + "flag" "fmt" + "os" ) -func main() { - fmt.Println("Hello, World!") +const help = `go-sh-manymanuals: ??? + +??? + +Options: + -h output help +` + +var portFlag int +var helpFlag bool + +func handleCliFlags() { + flag.BoolVar(&helpFlag, "h", false, "output help") + flag.Parse() +} + +func main() { + handleCliFlags() + + if helpFlag { + fmt.Printf(help) + os.Exit(0) + } + + fmt.Printf("???") } diff --git a/go.mod b/go.mod index d1762b9..53eb173 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,14 @@ module varia.zone/go-sh-manymanuals go 1.18 require ( - github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 // indirect - github.com/otiai10/gosseract/v2 v2.3.1 // indirect - gopkg.in/gographics/imagick.v2 v2.6.0 // indirect + github.com/muesli/coral v1.0.0 + github.com/muesli/mango-coral v1.0.1 + github.com/muesli/roff v0.1.0 +) + +require ( + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/muesli/mango v0.1.0 // indirect + github.com/muesli/mango-pflag v0.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect ) diff --git a/go.sum b/go.sum index 36d8137..f4e19d3 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,18 @@ -github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 h1:6Yzfa6GP0rIo/kULo2bwGEkFvCePZ3qHDDTC3/J9Swo= -github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/gosseract/v2 v2.3.1 h1:BFy9Rru7dzqEYX7/tJuEvjVPkkJck0f+b5fYzzr6/RM= -github.com/otiai10/gosseract/v2 v2.3.1/go.mod h1:2ZOGgdTIXQzCS5f+N1HkcXRgDX6K3ZoYe3Yvo++cpp4= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.2 h1:VYWnrP5fXmz1MXvjuUvcBrXSjGE6xjON+axB/UrpO3E= -github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -gopkg.in/gographics/imagick.v2 v2.6.0 h1:ewRsUQk3QkjGumERlndbFn/kTYRjyMaPY5gxwpuAhik= -gopkg.in/gographics/imagick.v2 v2.6.0/go.mod h1:/QVPLV/iKdNttRKthmDkeeGg+vdHurVEPc8zkU0XgBk= -gopkg.in/gographics/imagick.v3 v3.4.0 h1:kSnbsXOWofo81VJEn/Hw8w3qqoOrfTyWwjAQzSdtPlg= -gopkg.in/gographics/imagick.v3 v3.4.0/go.mod h1:+Q9nyA2xRZXrDyTtJ/eko+8V/5E7bWYs08ndkZp8UmA= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/muesli/coral v1.0.0 h1:odyqkoEg4aJAINOzvnjN4tUsdp+Zleccs7tRIAkkYzU= +github.com/muesli/coral v1.0.0/go.mod h1:bf91M/dkp7iHQw73HOoR9PekdTJMTD6ihJgWoDitde8= +github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI= +github.com/muesli/mango v0.1.0/go.mod h1:5XFpbC8jY5UUv89YQciiXNlbi+iJgt29VDC5xbzrLL4= +github.com/muesli/mango-coral v1.0.1 h1:W3nGbUC/q5vLscQ6GPzteHZrJI1Msjw5Hns82o0xRkI= +github.com/muesli/mango-coral v1.0.1/go.mod h1:EPSlYH67AtcxQrxssNw6r/lMFxHTjuDoGfq9Uxxevhg= +github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe7Sg= +github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0= +github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8= +github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=