23
Apr
2021

Mutex example

23 Apr 2021
# 1.Without 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 # 2. With 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
go
28
Oct
2020

Find and replace

28 Oct 2020
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
15
Apr
2020

Bulk Export

15 Apr 2020
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("post") 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("post") 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) }
22
Nov
2019

KDE Dive In

22 Nov 2019
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
17
Jun
2019

Dock station D3100

17 Jun 2019
Fix slowing CPU sudo nano /etc/X11/xorg.conf.d/20-intel.conf Section "Device" Identifier "Intel Graphics" Driver "Intel" Option "AccelMethod" "sna" Option "TearFree" "true" Option "TripleBuffer" "true" Option "MigrationHeuristic" "greedy" Option "Tiling" "true" Option "Pageflip" "true" Option "ExaNoComposite" "false" Option "Tiling" "true" Option "Pageflip" "true" Option "VSync" "false" EndSection
23
Mar
2019

search lost info

23 Mar 2019
git reflog --all | grep something git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\ -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt
5
Feb
2019

regex

05 Feb 2019
select column ^.{12}\K(.){10}
9
Nov
2018

Ubuntu Dive In

09 Nov 2018
Frontend build sudo apt-get install nodejs sudo apt-get install npm sudo npm install gulp-cli -g npm install gulp all-build Switch language sudo apt-get install gnome-tweaks gnome-tweaks Keyboard & Mouse tab Additional Layout Options button Switching to another layout Ctrl + Alt + Left/Right disable ubuntu gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "['']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right "['']" Linux + Nvidia sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update ubuntu-drivers devices sudo apt install <recommended> Datagrip Data source properties -> Options tab -> Object filter: collation:-.*
8
May
2018

how to see open connections

08 May 2018
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE HOST LIKE '%192.168.0.0%';
26
Feb
2018

List git branches that can safely be deleted

26 Feb 2018
git branch --no-merged git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d