Artix impressions
- Openrc is sux because mpd and etc. Resolving by systemctl
- After upgrade - Chrome update problem in build
- After upgrade syslog-ng failing on boot
@blog #linux #arch
@blog #linux #arch
First
version: "3.5"
services:
proxy:
image: hello-world
ports:
- "80:80"
networks:
- proxynet
networks:
proxynet:
name: custom_network
Second
version: "2"
services:
web:
image: hello-world
networks:
- my-proxy-net
networks:
my-proxy-net:
external:
name: custom_network
From first
172.17.0.1:8500
apt install xpra xvfb
git clone https://github.com/kaueraal/run_scaled.git
cd run_scaled/
cp run_scaled /usr/local/bin
chmod +x /usr/local/bin
run_scaled <yourapp>
@blog #linux #debian
install
sudo apt install zsh
make default shell zsh:
chsh -s $(which zsh)
oh my zsh:
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
copy plugins similar:
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
all plugins enum:
plugins=(git zsh-autosuggestions zsh-syntax-highlighting fast-syntax-highlighting)
hardcode install powerlevel10k:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
Set ZSH_THEME="powerlevel10k/powerlevel10k"
in ~/.zshrc
@blog #linux #ubuntu #debian
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous
// Scale. add force-device param
spotify --force-device-scale-factor=1.5 %U
@blog
Generate reports in app with code:
CPU
cpuFile, err := os.Create("/tmp/cpuProfile.out")
if err != nil {
fmt.Println(err)
return
}
pprof.StartCPUProfile(cpuFile)
defer pprof.StopCPUProfile()
// CODE HERE
runtime.GC()
Memory
memory, err := os.Create("/tmp/memoryProfile.out")
if err != nil {
fmt.Println(err)
return
}
defer memory.Close()
// CODE HERE
err = pprof.WriteHeapProfile(memory)
if err != nil {
fmt.Println(err)
return
}
View reports with go tool pprof
package main
import "fmt"
var counter int = 0
func main() {
ch := make(chan bool)
for i := 1; i < 5; i++{
go work(i, ch)
}
for i := 1; i < 5; i++{
<-ch
}
fmt.Println("The End")
}
func work (number int, ch chan bool){
counter = 0
for k := 1; k <= 5; k++{
counter++
fmt.Println("Goroutine", number, "-", counter)
}
ch <- true
}
Output
Goroutine 3 - 1
Goroutine 3 - 2
Goroutine 3 - 3
Goroutine 3 - 4
Goroutine 3 - 5
Goroutine 2 - 1
Goroutine 2 - 6
Goroutine 2 - 7
Goroutine 2 - 8
Goroutine 2 - 9
Goroutine 1 - 1
Goroutine 1 - 10
Goroutine 1 - 11
Goroutine 1 - 12
Goroutine 1 - 13
Goroutine 4 - 1
Goroutine 4 - 14
Goroutine 4 - 15
Goroutine 4 - 16
Goroutine 4 - 17
The End
package main
import (
"fmt"
"sync"
)
var counter int = 0
func main() {
ch := make(chan bool)
var mutex sync.Mutex
for i := 1; i < 5; i++{
go work(i, ch, &mutex)
}
for i := 1; i < 5; i++{
<-ch
}
fmt.Println("The End")
}
func work (number int, ch chan bool, mutex *sync.Mutex){
mutex.Lock()
counter = 0
for k := 1; k <= 5; k++{
counter++
fmt.Println("Goroutine", number, "-", counter)
}
mutex.Unlock()
ch <- true
}
Output
Goroutine 1 - 1
Goroutine 1 - 2
Goroutine 1 - 3
Goroutine 1 - 4
Goroutine 1 - 5
Goroutine 4 - 1
Goroutine 4 - 2
Goroutine 4 - 3
Goroutine 4 - 4
Goroutine 4 - 5
Goroutine 3 - 1
Goroutine 3 - 2
Goroutine 3 - 3
Goroutine 3 - 4
Goroutine 3 - 5
Goroutine 2 - 1
Goroutine 2 - 2
Goroutine 2 - 3
Goroutine 2 - 4
Goroutine 2 - 5
The End
@blog
Find: (:update\s.*)(_new)
Replace: $1
Given text:
foo:update example_new
foo:update word_new
foo:update also_new
Output:
foo:update example
foo:update word
foo:update also
@blog #regex
SQL-Insert-Statements-Bulk-100per.sql.groovy
SEP = ", "
QUOTE = "\'"
NEWLINE = System.getProperty("line.separator")
KEYWORDS_LOWERCASE = com.intellij.database.util.DbSqlUtil.areKeywordsLowerCase(PROJECT)
KW_INSERT_INTO = KEYWORDS_LOWERCASE ? "insert into " : "INSERT INTO "
KW_VALUES = KEYWORDS_LOWERCASE ? "values" : "VALUES"
KW_NULL = KEYWORDS_LOWERCASE ? "null" : "NULL"
OUT.append(KW_INSERT_INTO)
if (TABLE == null) OUT.append("MY_TABLE")
else OUT.append(TABLE.getParent().getName()).append(".").append(TABLE.getName())
OUT.append(" (")
COLUMNS.eachWithIndex { column, idx ->
OUT.append(column.name()).append(idx != COLUMNS.size() - 1 ? SEP : "")
}
OUT.append(")").append(NEWLINE).append(KW_VALUES)
def record(columns, dataRow, close) {
OUT.append(NEWLINE).append("(")
columns.eachWithIndex { column, idx ->
def value = dataRow.value(column)
def skipQuote = value.toString().isNumber() || value == null
def stringValue = value != null ? FORMATTER.format(dataRow, column) : KW_NULL
if (DIALECT.getDbms().isMysql()) stringValue = stringValue.replace("\\", "\\\\")
OUT.append(skipQuote ? "": QUOTE).append(stringValue.replace(QUOTE, QUOTE + QUOTE))
.append(skipQuote ? "": QUOTE).append(idx != columns.size() - 1 ? SEP : "")
}
deliMeter = dataRow.last() || close ? ";" : ","
OUT.append(")").append(deliMeter)
}
count = 0
def createInsert(columns, dataRow) {
count++
if (count%100 == 0 && !dataRow.last()) {
record(columns, dataRow, true)
OUT.append(NEWLINE).append(KW_INSERT_INTO)
if (TABLE == null) OUT.append("MY_TABLE")
else OUT.append(TABLE.getParent().getName()).append(".").append(TABLE.getName())
OUT.append(" (")
COLUMNS.eachWithIndex { column, idx ->
OUT.append(column.name()).append(idx != COLUMNS.size() - 1 ? SEP : "")
}
OUT.append(")").append(NEWLINE).append(KW_VALUES)
return
}
record(columns, dataRow, false)
}
ROWS.each { row -> createInsert(COLUMNS, row) }
Apps
PHS 2019.1.4
DGP 2019.2.6 custom JDK
DGP 2019.3 + plugin Choose Runtime + 8u212-linux-x64-b1596.1
latte launcher
subl ~/.config/kwinrc
[ModifierOnlyShortcuts]
Meta=org.kde.lattedock,/Latte,org.kde.LatteDock,activateLauncherMenu
OR
kwriteconfig5 --file ~/.config/kwinrc --group ModifierOnlyShortcuts --key Meta "org.kde.lattedock,/Latte,org.kde.LatteDock,activateLauncherMenu"
qdbus org.kde.KWin /KWin reconfigure
@blog #linux #kde