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
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
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()
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)
}
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
Find: (:update\s.*)(_new)
Replace: $1
Given text:
foo:update example_new
foo:update word_new
foo:update also_new
Output:
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
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)
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) }
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
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
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"
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
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
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
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
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:-.*