Compare commits

...

19 Commits

Author SHA1 Message Date
c74b861442 add joyous bash 2025-08-26 23:03:07 +02:00
599ccd2881 refactor makefile 2025-02-14 16:23:28 +01:00
b191a9e5d4 note speedy compiles 2024-12-09 01:39:47 +01:00
e98d4ffbac place arch install instructions 2024-12-09 01:27:18 +01:00
f067b0200b fix robocop 2024-12-09 00:30:18 +01:00
e2814b08e1 Added dependencies for Debian in README 2024-12-08 00:13:18 -05:00
2f33669330 update readme 2024-12-08 22:13:46 +01:00
cee27356f6 reconfigure makefile 2024-12-06 09:18:40 +01:00
f358103f79 dependency ladder example 2024-11-25 14:28:59 +01:00
4c51ade750 PS: more Makefiles 2024-11-18 18:03:49 +01:00
0d2d466dac typo 2024-11-17 14:19:28 +01:00
8cc2a71235 note python makefile 2024-11-17 14:19:28 +01:00
fa026b7eda ending notes 2024-11-13 16:40:30 +01:00
7bc84ab8a3 finish examples 2024-11-13 16:06:46 +01:00
e59538a3bd place example makefiles 2024-11-13 14:23:44 +01:00
a9f7fd7f75 add basic makefile examples 2024-11-12 03:58:47 +01:00
3adc7ce3a7 fix typo in algebragrupe slides 2024-10-22 00:26:17 +02:00
131e9a1c3f add algebera slides and link to decentrala slide 2024-10-21 16:08:57 +02:00
Jovan Vuceljic
44871e36ff ekonomija update 2024-09-29 23:41:28 +02:00
29 changed files with 1004 additions and 86 deletions

1
.gitignore vendored
View File

@@ -1,4 +1,3 @@
*.pdf
*.epub
Makefile
*.xcf

19
Makefile Normal file
View File

@@ -0,0 +1,19 @@
help: ## Print the help message
$(info Make a single pdf by hitting the tab key a lot)
@awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z._-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) | \
sort | \
column -s ':' -t
# Search should not include slides separated by '***', as those are for mdp, not pandoc.
markdown != find slides/ -maxdepth 2 -type f -name "*.md" -exec grep -LF '***' '{}' ';'
pdfs = $(patsubst %.md, %.pdf, $(markdown))
$(pdfs): %.pdf: %.md
pandoc -t beamer -V theme:Warsaw -i $< -o $@
.PHONY: pdfs
pdfs: $(pdfs) ## Generate all pdfs (try `make -j pdfs`)
.PHONY: clean
clean: ## Delete all pdfs
$(RM) $(pdfs)

View File

@@ -1,5 +1,20 @@
# Radionice
First run ./configure to generate a Makefile using folders in this directory
Usage: `make`
## Dependecies:
### For Debian:
```bash
sudo apt update
sudo apt install pandoc
sudo apt install tikzit
```
### For Arch:
```bash
pacman -Sy pandoc texlive-binextra texlive-pictures texlive-latexrecommended texlive-fontsrecommended
```
Then you can run make to generate pdf beamer slides

13
configure vendored
View File

@@ -1,13 +0,0 @@
#!/usr/bin/bash
FOLDERS=$(cd slides/ ; echo *)
rm -f Makefile
echo -n 'all:' >> Makefile
for i in $FOLDERS ; do echo -n " $i.pdf" >> Makefile ; done
echo "" >> Makefile
for i in $FOLDERS ; do echo -e "$i.pdf:\n\tpandoc -t beamer -V theme:Warsaw -i slides/$i/$i.md -o slides/$i/$i.pdf\n" >> Makefile ; done
echo -ne "clean:\n\trm -f" >> Makefile
for i in $FOLDERS; do echo -n " slides/$i/$i.pdf" >> Makefile ; done
echo "" >> Makefile

View File

@@ -0,0 +1,65 @@
---
title:
- Algebra (Grupe)
theme:
- Warsaw
colortheme:
- orchid
---
# Uvod
- Skupovi
- Celi brojevi (beskonacni)
- Ostatci pre deljenju (konacne)
- Operacije
- mnozenje (binarna)
- negacija (unarna)
# Grupe
- Rezlutat ostaje unutar skupa
- Neutral
- Inverz
- Asocijativnost
- Abelove grupe (komutativnost)
- Ciklicne grupe (ostatak pri deljenju)
# Podgrupe
- Celi/Racionalni brojevi
- Red grupe
- Red podgrupe deli red grupe
# Kriptografija
- Skup poruka m odredjene velicine
- Operacija sifrovanja/potpisivanja $\oplus$
- jednosmerna (kao i hash funkcije)
- Neutral (e)
- Inverz kljuceva (k1, k2)
- $k1 \oplus k2 \equiv e$
- Sifrovanje/Potpisivanje ( $c \equiv m \oplus k1$ )
- Desifovanje/Provera ( $c \oplus k2 \equiv m$ )
- Asocijativnost
- $c \oplus k2 \equiv (m \oplus k1) \oplus k2 \equiv m \oplus (k1 \oplus k2)$
- $m \oplus (e) \equiv m$
# Kljucevi
- Jedan kljuc (simetricna)
- $k1 \equiv k2$
- $1 \oplus 1 \equiv 0 \mod 2$ (komplement)
- Dva kljuca (asimetricna)
- $2+3 \equiv 0 \mod 5$
# Razmena kljuceva
![DiffieHellman](slides/rsa/dhke.png)
# Razmena kljuceva
- DiffieHellman (DH)
- parametri (g,n,...)
- Abelova grupa (komutativnost)
- $g \oplus a \oplus b \equiv g \oplus b \oplus a$
- $(g \oplus a) \oplus b \equiv (g \oplus b) \oplus a$
- $A \oplus b \equiv B \oplus a$
# Sifrovanje/Potpisivanje
- Direktno sifrovanje (RSA)
- DH + simetcina = asimetricna (EC)

View File

@@ -10,13 +10,21 @@ colortheme:
# Uvod
- Šta je ekonomija?
- istorija
- trampa
- kovanice i papirni novac
- "slobodna" trgovina
- raspodela resursa
- efikasnost
- efikasnost i evektivnost
# Uvod
- Šta je novac?
- banke
- ponuda i traznja
- moć odlučivanja u raspodeli resursa
- likvidnost
- bruto domaci proizvod (BDP eng GDP)
# Štednja
- Štednja
@@ -47,6 +55,7 @@ colortheme:
- Brokeri
- domaći
- strani
- wall street
# Kripto
- Novac
@@ -62,10 +71,33 @@ colortheme:
- iluzija sposobnosti
- zakoni
# Uspesi sistema
- Uspesi sistema
- brz napredak u poljima interesovanja (profita)
- masovna proizvodnja
- poslovi i obucavanje naroda
-
# Neuspesi i kritika sistema
- Kritika
- planirano zastarevanje
- ciklicna potrosnja
- ekoloska katastrofa
- automatizacija
- besmisleni poslovi
- robovanje profitu
- kompetitivnost i ratovi
- sve na prodaju
- kriza u ciklusima
- najbogatijih 1%
- maltuzianizm
# Kako da se obogatim?
- Kako zaraditi?
- roditi se bogat
- krasti
- nasledstvo
- rad i štednja
- investicije
- kradja
- sreća

View File

@@ -1,62 +0,0 @@
---
title:
- The Extended Mind and Licensing
author:
- Malin
theme:
- Warsaw
colortheme:
- orchid
---
# History
- Started with Clark and Chalmers
- [Chalmers at Ted](https://yt.artemislena.eu/watch?v=ksasPjrYFTg)
## Cyborg Manifesto
Or maybe Donna Haraway?
# Original Extended Minds
- Notebooks
- Counting on fingers
- Fil-o-fax
# Electronic Extended Minds
- Phones
- Computers
- Google?
- Note-apps?
# Intuition Pumps
- Proprioception and teeth
- The feeling of loss over theft
- Second brains
# Requirements
- 'to-hand'
- Repetition
- Locus
> Do you know where they live?
# Counter Requirements
> Skin and bone
Does *Ghost in the Shell* count?
# The Point and the Future
![robocop](robocop_valuse.png)
# End Notes
> Can you code in the sand?

View File

@@ -54,7 +54,7 @@ Does *Ghost in the Shell* count?
# The Point and the Future
![robocop](robocop_valuse.png)
![robocop](slides/extended_minds/robocop_values.png)
# End Notes

View File

Before

Width:  |  Height:  |  Size: 358 KiB

After

Width:  |  Height:  |  Size: 358 KiB

View File

@@ -0,0 +1,243 @@
# Shut Up!
```sh
echo blacklist pcspkr > /etc/modprobe.d/nobeep.conf
```
---
# Standard Visuals
- `cbonsai`
- `asciiquarium`
- `top`
* `ZH4W`
## Another Monday!
- `cal --reform julian`
## Weather
```sh
curl wttr.in
curl -s wttr.in/Београд
curl wttr.in/Moon
```
# `ls`
`ls -X`
---
# vim
- blog!
- seriously, just write
---
# `watch`
## Watch Differences
- `watch -d stat "$file"`
- `watch -d ip a`
## With Makefiles
```sh
watch --chgexit ping -c 1 dmz.rs && sleep 3 && unison -batch pir
```
## Check Progress
```sh
watch 'ls **/*.pdf | column'
```
---
# Watch Shell Scripts
```sh
watch -e ./script.sh
```
---
# Slow Down
```sh
function slow(){
ff=/tmp/bashpipe_$(date +%s)
mkfifo $ff 2>/dev/null
( cat $ff | perl -We 'use Time::HiRes;$|++;while(read(STDIN,$c,1)){Time::HiRes::usleep(15000);print $c;}' )& exec &> $ff
}
```
## Safety?
- no
## `htop`?
- no
## `speedtest`?
- **YES**
```
---
# Notes
```sh
alias no='$EDITOR .no.md'
function n(){
[ -z "$1" ] && cat .no.md || echo $@ >> .no.md
}
```
---
# URL Decoding
```bash
urldecode(){ : "${*//+/ }"; echo -e "${_//%/\\x}"; }
```
---
# Send Text
```sh
function sendtext(){
[ -f "$1" ] && \
cat "$1" | nc termbin.com 9999 || \
echo "$($1)" | nc termbin.com 9999
}
```
---
# Readline
Put this in `.inputrc`.
```text
set editing-mode vi
set keymap vi
```
---
# More Readline vi
```text
set editing-mode vi
set show-mode-in-prompt on
set vi-ins-mode-string " "
set vi-cmd-mode-string " "
set keymap vi
```
---
# More Readline
```text
set match-hidden-files off
set show-all-if-ambiguous on
set show-all-if-unmodified on
set colored-stats on
"\C- ": shell-expand-line
"\C-x": glob-expand-word
Control-g: "g\n"
Control-y: "| ccze\n"
Control-o: "\C-u lfcd\n\C-u"
Control-l: "\C-u clear -x && ls\n"
```
---
# Synchronization
## Syncthing
- 'Just works'
## Unison
- Fuck haskell
- But actually it's good
---
# `column`
```sh
column -ts: -H PW,GID,shell -N User,PW,UID,GID,Description,Home,shell /etc/passwd
```
##
```sh
column -J -ts: -H PW,GID,shell -N User,PW,UID,GID,Description,Home,shell /etc/passwd | jq -r .table.[].user
```
---
# Aliases
## b
```sh
b ()
{
eval "cd $(for d in $(seq 1 $1);
do
printf ../;
done)"
}
```
---
# `eval`
- Don't
---
# Clear Downloads
```sh
rm -rf ~/Downloads/*
echo "tmpfs $HOME/Downloads tmpfs defaults,size=1G 0 0" | sudo tee -a /etc/fstab
sudo systemctl daemon-reload # Only for systemd
sudo mount -a
mount | tail -1
```
# The Best: `yes`
- `yes`
- `yes no`

View File

@@ -0,0 +1,119 @@
# Generalizing Makefiles for All Occasions
- Rules are bad,
- standards are good,
- habits are better.
***
# General Standards
- `make help`
- `make check`
- `sudo make install`
**NB:** we separate `make` from `make install` so that the files are not build with the user `root` as the owner.
***
# Service Standards
- `make backup.tgz`
- `make install`
## Service Backups in Two Files
- `configs`: configuration files, all tracked in git.
- `store`: passwords and binary files, not tracked in git.
## New Abilities Unlocked
- Open Access Administration.
- Sharing admin configs with hacker spaces.
***
## BEHOLD: The Everything Makefile
***
```make
CONFIGS = $(patsubst /%,%,$(shell cat configs))
STORE = $(patsubst /%,%,$(shell cat store))
CP = mkdir -p $(dir $@) && cp -a
IGNORE_FILE = $(shell test -d .git/info && echo .git/info/exclude || echo .gitignore)
GIT_COMMIT = git commit -m"add $@" --no-gpg-sign --no-signoff
SELECTOR != command -v sk || command -v fzy || command -f fzf
.PHONY: all
all: init backup.tgz $(IGNORE_FILE)
backup.tgz: $(CONFIGS) $(STORE)
tar czf $@ $^
$(IGNORE_FILE): store
echo $(STORE) backup.tgz | tr ' ' '\n' > $@
.PHONY: init
init: configs store
configs store:
while con="$$(find /var /etc/ /sys/ -maxdepth 2 -mindepth 1 -type f 2>/dev/null | $(SELECTOR) -p "Select files for $@\nPress Ctrl+d once done")"; do \
echo "$$con"; \
done > $@
$(CONFIGS): %: /%
$(CP) $< $@
git add $@
$(GIT_COMMIT)
$(info made git commit for $@)
$(STORE): %: /%
$(CP) $< $@
clean:
$(RM) -r $(CONFIGS) $(STORE) backup.tgz
```
***
## Example: Soft Serve Makefile
<br>
The `configs` file:
```
/etc/soft-serve.conf
/var/lib/soft-serve/data/config.yaml
/var/lib/soft-serve/data/file
/etc/nginx/sites-enabled/soft.dmz.rs
/etc/nginx/sites-available/soft.dmz.rs
```
<br>
The `store` file:
```
/var/lib/soft-serve/data/lfs
/var/lib/soft-serve/data/repo
/var/lib/soft-serve/data/soft
/etc/letsencrypt/archive/soft
/etc/letsencrypt/live/soft.dm
/var/lib/soft-serve/data/ssh/
```
***
# Other Build Systems
> "*What if I want to use this other thing, instead of a makefile?"
***
# Other Build Systems (Sans Heresy)
> "*What if I want to use this other thing, instead of a makefile?"
- Easy: just use a Makefile.
```make
[ ... ]
public/: src/
python build_pages.py
```

View File

@@ -0,0 +1,34 @@
CONFIGS = $(patsubst /%,%,$(shell cat configs))
STORE = $(patsubst /%,%,$(shell cat store))
CP = mkdir -p $(dir $@) && cp -a
IGNORE_FILE = $(shell test -d .git/info && echo .git/info/exclude || echo .gitignore)
GIT_COMMIT = git commit -m"add $@" --no-gpg-sign --no-signoff
SELECTOR != command -v sk || command -v fzy || command -f fzf
.PHONY: all
all: init backup.tgz $(IGNORE_FILE)
backup.tgz: $(CONFIGS) $(STORE)
tar czf $@ $^
$(IGNORE_FILE): store
echo $(STORE) backup.tgz | tr ' ' '\n' > $@
.PHONY: init
init: configs store
configs store:
while con="$$(find /var /etc/ /sys/ -maxdepth 2 -mindepth 1 -type f 2>/dev/null | $(SELECTOR) -p "Select files for $@\nPress Ctrl+d once done")"; do \
echo "$$con"; \
done > $@
$(CONFIGS): %: /%
$(CP) $< $@
git add $@
$(GIT_COMMIT)
$(info made git commit for $@)
$(STORE): %: /%
$(CP) $< $@
clean:
$(RM) -r $(CONFIGS) $(STORE) backup.tgz

View File

@@ -0,0 +1 @@
*

View File

@@ -0,0 +1,16 @@
MONTHS != date +%B && date -d '1 month' +%B
IP != dig +short myip.opendns.com @resolver1.opendns.com
CITY != curl -s http://api.db-ip.com/v2/free/$(IP) | grep city | cut -d: -f2 | tr -d '"'
TITLES = $(MONTHS)
TITLES += $(CITY)
BOOKS = $(patsubst %,Books/%.md,$(TITLES))
$(BOOKS):
@mkdir -p $(@D)
fortune -l > $@
progs += $(BOOKS)
dross += Books/

View File

@@ -0,0 +1,10 @@
cows = $(patsubst Forts/fortune_%.md,Cows/cow-%.txt,$(wildcard Forts/fortune_*.md))
$(cows): Cows/cow-%.txt: Forts/fortune_%.md
@mkdir -p $(@D)
cat $< | cowsay > $@
progs += forts
progs += $(cows)
dross += Cows/

View File

@@ -0,0 +1,11 @@
fnums != seq 8 | sort -R | head -2
forts = $(patsubst %,Forts/fortune_%.md,$(fnums))
$(forts):
@mkdir -p $(@D)
fortune -s > $@
progs += $(forts)
dross += Forts/

View File

@@ -0,0 +1,14 @@
filter = $(shell cowsay -l | sort -R | head -1)
zoo = $(patsubst Forts/fortune_%.md,Zoo/animal-%.md,$(forts))
$(zoo): Zoo/animal-%.md: Forts/fortune_%.md
@mkdir -p $(@D)
echo '```' > $@
cat $< | cowsay -f $(filter) >> $@
echo '```' >> $@
progs += forts
progs += $(zoo)
dross += Zoo/

1
slides/makefiles/examples/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*

View File

@@ -0,0 +1,8 @@
CHECKER = command -v
.PHONY: check
check:
$(CHECKER) fortune >/dev/null
$(CHECKER) cowsay >/dev/null
file: | check
fortune | cowsay > $@

View File

@@ -0,0 +1,13 @@
forts/big_fort.txt: forts/short.txt forts/long.txt
cat forts/short.txt forts/long.txt > forts/big_fort.txt
forts/:
mkdir forts
forts/short.txt: forts/
fortune -s > forts/short.txt
forts/long.txt: forts/
fortune -l > forts/long.txt

View File

@@ -0,0 +1,21 @@
forts/big_fort.txt: forts/short.txt forts/long.txt
cat $^ > $@
README.md:
echo "For an example makefile for python" > $@
echo "check out the nd6 dice-roller at" >> $@
echo "ssh -p 2222 soft.dmz.rs -t nd6" >> $@
forts/: README.md
mkdir -p $@
forts/short.txt: forts/
fortune -s > $@
forts/long.txt: forts/
fortune -l > $@
clean:
rm -rf forts

View File

@@ -0,0 +1 @@
../PS/omni_makefile

View File

@@ -0,0 +1,18 @@
IMAGES = $(wildcard jpgs/*)
COL = $(patsubst jpgs/%,collection/%,$(IMAGES))
.PHONY: help
help:
$(info try 'show' or 'output')
.PHONY: show
show:
$(info IMAGES is $(IMAGES))
$(info Col is $(COL))
.PHONY: output
output: $(COL)
collection/%.jpg: jpgs/%.jpg
mkdir -p $(@D)
cp $< $@

View File

@@ -0,0 +1,15 @@
CP = ln -f
output: pngs/ldap.png
jpgs/ldap.jpg: ../../ldap/ldap.jpg
mkdir -p $(dir $@)
$(CP) $< $@
pngs/%.png: jpgs/%.jpg
mkdir -p $(dir $@)
$(info making $(@F) in $(@D))
magick $< $@
clean:
$(RM) -r pngs jpgs

View File

@@ -0,0 +1,10 @@
include /etc/os-release
DAY != date +%d
MESSAGE != fortune -s
motd_$(DAY):
$(info Hello $(USER))
$(info Placing message:)
echo "Welcome to $(NAME)" > $@
echo $(MESSAGE) >> $@

View File

@@ -0,0 +1,13 @@
---
title:
- Making Makefiles
author:
- Malin
theme:
- Warsaw
colortheme:
- orchid
---
(presentation in presentation.md)

View File

@@ -0,0 +1,314 @@
# Intro
The fundamental problem:
```bash
git submodule update --init soundscape
cargo build --release
install -pm755 target/release/tap /usr/local/bin/
```
*But you can't type this for each run.*
***
## First Solution
```bash
#!/bin/sh
git submodule update --init soundscape
cargo build --release
install -pm755 target/release/tap /usr/local/bin/
```
At this point, every test takes 10 minutes.
## Second Solution
```bash
#!/bin/sh
[ -f soundscape/.git ] || git submodule update --init soundscape
[ -f target/release/tap ] || cargo build --release
[ -f target/release/tap ] || \
install -pm755 target/release/tap /usr/local/bin/
```
***
# Makefile Solutions
- input, process, output.
- automatic idempotence
```bash
INSTALL_DIR = /usr/local/bin
soundscape/.git:
git submodule update --init soundscape
/usr/local/bin/tap: target/release/tap
install -pm755 target/release/tap $(INSTALL_DIR)
target/release/tap: src soundscape/.git
cargo build --release
```
***
# The Three Sigils
Readable, but slow:
```make fort_1
forts/big_fort.txt: forts/short.txt forts/long.txt
cat forts/short.txt forts/long.txt > forts/big_fort.txt
forts/:
mkdir forts
forts/short.txt: forts/
fortune -s > forts/short.txt
forts/long.txt: forts/
fortune -l > forts/long.txt
```
***
| Make this | From That | From These |
|:---------:|:---------:|:----------:|
| `$@` | `$<` | `$^` |
```make fort_2
forts/big_fort.txt: forts/short.txt forts/long.txt
cat $^ > $@
forts/: README.md
mkdir $@
forts/short.txt: forts/
fortune -s > $@
forts/long.txt: forts/
fortune -l > $@
```
***
# Gotcha: Directories
```make fort_2
forts/big_fort.txt: forts/short.txt forts/long.txt
cat $^ > $@
forts/: README.md
mkdir $@
forts/short.txt: forts/
fortune -s > $@
forts/long.txt: forts/
fortune -l > $@
README.md:
echo "Find the fortunes in the fort dir" > $@
```
***
# Variables
```make vars
include /etc/os-release
DAY != date +%d
MESSAGE != fortune -s
motd_$(DAY):
$(info Placing message:)
echo "Welcome to $(NAME)" > $@
echo $(MESSAGE) >> $@
```
### Gotcha: Hanging Quotes
> echo "Welcome to "Arch Linux""
***
## Add New Variables
```make
make -f vars -e MESSAGE="Red alert, all hands on deck!"
```
### Gotcha: Quote, or Risk Escape
```make
make -f vars -e MESSAGE="<h1> HTML Headers </h1>"
```
***
# Gotcha: Variables from Shell
This works:
```make
file:
$(info Hello $(USER))
```
...but not this:
```make
file:
user=bob
echo $user
```
Nor this:
```make
numbers:
for x in 1 2 3 4 5; do
echo $x
done > $@
```
Nor this:
```make
numbers:
for x in 1 2 3 4 5; do echo $x ; done > $@
```
***
### Ugly Fixes are Ugly
This works, but don't.
```make
file:
for x in 1 2 ;\
do echo $$x ;\
done > $@
```
***
# Phonies, and the Problems with Lies
## Clean
```make
.PHONY: clean
clean:
git clean -fdX
```
## Gotcha: Recompiling without Changes
```make
CHECKER = command -v
.PHONY: check
check:
$(CHECKER) fortune >/dev/null
$(CHECKER) cowsay >/dev/null
file: check # Needs a '|'
fortune | cowsay > $@
```
***
## Non-Compiling Checks
- `make` -n
- *Gotcha*: shell output variables.
***
# The Fourth Sigil: `%`
Create standardized rules with `%`.
```make rules
CP = ln -f
output: pngs/ldap.png
jpgs/ldap.jpg: ../../ldap/ldap.jpg
mkdir -p $(dir $@)
$(CP) $< $@
pngs/%.png: jpgs/%.jpg
mkdir -p $(dir $@)
$(info making $(@F) in $(@D))
magick $< $@
```
***
# Bling: makefile2graph
```graph
┌────────────────┐ ┌────────────────────┐
│ forts/long.txt │ ◀── │ forts/ │
└────────────────┘ └────────────────────┘
│ │
│ │
│ ▼
│ ┌────────────────────┐
│ │ forts/short.txt │
│ └────────────────────┘
│ │
│ │
│ ▼
│ ┌────────────────────┐
└──────────────────▶ │ forts/big_fort.txt │
└────────────────────┘
```
### Gotcha: The Binary is Called `make2graph`
- Works with GUI tools maybe, IDK, I don't use Windows.
- Some systems can use `graph-easy`, but it's outdated.
***
# Patsubst and Wildcards
```make pats
IMAGES = $(wildcard jpgs/*)
COL = $(patsubst jpgs/%,collection/%,$(IMAGES))
.PHONY: show
show:
$(info IMAGES is $(IMAGES))
$(info Col is $(COL))
.PHONY: output
output: $(COL)
collection/%.jpg: jpgs/%.jpg
mkdir -p $(@D)
cp $< $@
```
***
# Use Cases
- Backups
- Making Websites
* `git clone https://gitlab.com/bindrpg/blag`
- `NOT installations`
- ...but maybe installations?
- Setting

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@@ -33,7 +33,8 @@ Ekipa koju interesuje :
# Lokacije
- DC Krov hacklab
- KC Grad radionce
- Matematicki Faklutet (cekamo)
- Drugi fakulteti, skole?
- DC Krov
- KC Magacin
# Kontakt
![qrcode](slides/stajedecentrala/qrcode.png)