TGViewer
Channel Public Channel
self

self

@xaself

Subscribers
368
Photos
6
Videos
1
Links
20
Recent Posts 20 shown
Post #89 2.79K
broot — мощная альтернатива tree и ranger для просмотра и навигации по файловой системе

CLI:
• br — запустить интерактивный просмотр дерева файлов
• br <path> — открыть broot в указанной директории
• Ctrl + → — открыть preview/panel
• :gs — показать изменённые git-файлы
• :cp, :mv, :rm — встроенные операции
• F1 — показать справку по горячим клавишам

Особенности:
• Интерактивный интерфейс с фильтрацией по маске
• Предварительный просмотр файлов при навигации
• Поддержка пользовательских команд
• Интеграция с shell для быстрого перехода

#devtools #cli #linux #filemanager #productivity
  • ❤ 2
  • 👀 1
Post #88 2.95K
witr — инструмент для ответа на один важный вопрос: "Почему это запущено?" (Why is this running?)

CLI:
• witr — показать все запущенные процессы
• witr nginx — найти процесс и показать, кто и как его запустил
• witr --port 5432 — определить, какой процесс слушает порт
• witr --file /var/lib/dpkg/lock — узнать, кто держит файл или lock
• witr postgres --tree — вывести полное дерево процессов
• witr docker --warnings — показать только подозрительные моменты (env, args, parent processes)

#devtools #golang #sysadmin #monitoring #process #productivity
  • ❤ 3
  • ❤‍🔥 2
  • 👌 2
Post #87 4.1K
👩‍🦰 ripgrep — сверхбыстрая современная альтернатива grep, написанная на Rust.

CLI:
rg <pattern> — рекурсивный поиск паттерна в текущей директории
rg -i <pattern> — поиск без учета регистра
rg -w <pattern> — поиск только целых слов
rg -t <type> <pattern> — поиск только в файлах определенного типа (например, -t py для Python)
rg -T <type> <pattern> — исключить файлы определенного типа из поиска
rg -v <pattern> — инвертированный поиск (вывести строки, где нет совпадений)
rg -C <num> <pattern> — показать контекст: указанное число строк до и после совпадения
rg -z <pattern> — поиск внутри сжатых файлов (gzip, bzip2, xz и др.)
rg -uuu <pattern> — «искать всё»: игнорировать .gitignore, искать в скрытых и бинарных файлах
rg -r <text> <pattern> — замена найденного текста в выводе (не изменяет сами файлы)

#devtools #cli #linux #ripgrep #rust #Продуктивность
  • ❤‍🔥 2
  • 👍 1
  • 🔥 1
  • 👌 1
Post #86 4K
👩‍🦰 Zellij — продвинутая альтернатива tmux, написанная на Rust.

CLI:
zellij — запустить новую сессию
zellij -s <name> — создать сессию с именем
zellij attach <name> — подключиться к существующей сессии
zellij list-sessions — список активных сессий
zellij kill-session <name> — принудительно завершить сессию
zellij setup --generate-completion bash — генерация автодополнения
zellij run -- <command> — запустить команду в новом плавающем окне

Горячие клавиши (режимы):
Ctrl + P — режим управления панелями (Panes)
Ctrl + T — режим управления вкладками (Tabs)
Ctrl + N — режим изменения размера (Resize)
Ctrl + S — режим поиска (Search/Scroll)
Ctrl + Q — выход из Zellij
Alt + N — быстро создать новую панель
Alt + [] — переключение между панелями

Особенности:
• Интерфейс с подсказками клавиш в реальном времени.
• Поддержка макетов (Layouts) через KDL-конфиги.
• Плагины на WebAssembly.
• Встроенный файловый менеджер и плавающий терминал.

#devtools #cli #linux #Продуктивность
  • 🔥 3
  • ❤ 1
  • ❤‍🔥 1
  • 👏 1
  • 🐳 1
  • 💯 1
Post #85 6.35K
🐍 uv — современный менеджер пакетов и виртуальных окружений для Python

CLI:
uv init — создать новый проект с uv
uv add requests — добавить пакет в проект
uv remove requests — удалить пакет
uv update — обновить зависимости
uv install — установить зависимости из uv.lock
uv run script.py — запустить скрипт внутри окружения
uv lock — обновить lockfile зависимостей
uv export --format requirements.txt > requirements.txt — экспорт зависимостей
uv tree — показать дерево зависимостей проекта

#devtools #python #cli #packagemanager
  • ❤‍🔥 3
  • ❤ 3
  • 👍 2
  • 🕊 2
  • 💯 2
  • 🤩 1
  • 🍾 1
Post #84 7.84K
👩‍🦰 pterm — библиотека на GO для создания красивого интерфейса в терминале

Возможности:
• Цветной текст и стилизация (жирный, подчёркнутый, и т.д.)
• Спиннеры и индикаторы загрузки
• Прогресс-бары
• Таблицы
• Деревья (Tree View)
• Диалоги и подтверждения
• Хронология выполнения
• Поддержка тестирования (можно отключать цвет/анимацию)

#go #golang #tui #devtools #gopackages
  • ❤ 9
  • 👍 4
  • 🔥 2
  • 👏 1
  • 💅 1
Post #83 8.11K
👩‍🦰 ciphey — Инструмент для расшифровки и анализа зашифрованной строки

ciphey "текст" — базовая расшифровка
ciphey -a "текст" — показать все варианты
ciphey -t 60 "текст" — ограничить время поиска
ciphey -p base64,rot13 "текст" — указать конкретные шифры

#devtools #cryptography
GitHub GitHub - bee-san/Ciphey: ⚡ Automatically decrypt encryptions without knowing the key or cipher, decode encodings, and crack hashes… ⚡ Automatically decrypt encryptions without knowing the key or cipher, decode encodings, and crack hashes ⚡ - bee-san/Ciphey
  • 🔥 5
  • 👏 2
  • ❤ 1
  • 👍 1
Post #82 10.7K
👩‍🦰 atuin — продвинутая история команд с поиском и синхронизацией

CLI:
atuin stats — получение статистики по использованию команд
atuin export --format json > history.json — экспорт истории в файл (JSON)
atuin import < history.json — импорт истории из файла
atuin sync — синхронизация истории с сервером
atuin history clear — очистка всей истории команд
atuin history delete <id> — удаление определённой команды по ID
atuin search -i — интерактивный поиск
atuin search --limit 1 cargo — найти одну команду "cargo"
atuin search --after "yesterday" git — найти команды "git" после вчерашнего дня
atuin search --exit 0 --after "yesterday 3pm" cargo — найти успешные команды "cargo", выполненные после вчера в 15:00

Интерактивный режим:
↑ / ↓ — перемещение по результатам.
Enter — выбрать команду и вставить её в терминал.
Ctrl + C — выйти из режима поиска.
Ctrl + R — запустить интерактивный поиск
Ctrl + O — инспект/поиск
Tab — авто заполнение команды.
Ctrl + U — очистить строку поиска.

#devtools
  • 👍 7
  • ❤‍🔥 6
  • 🔥 2
  • 😁 1
  • 😢 1
Post #81 9.14K
👩‍🦰 lnav — навигатор по логам

Горячие клавиши (link):
F2 — режим мышки
q — выход
/ — поиск
` — меню
g / G — перейти в начало / конец
d / D — вперед / назад 24 часа
7 / 8 — предыдущая / следующая минута
CTRL + R — сброс текущего состояния сеанса (фильтры, закладки, скрытые поля)

Команды (link):
:filter-out pattern — скрыть строки содержащие паттерн
:filter-in pattern — показать только строки с данным паттерном
:delete-filter pattern — удалить фильтр
:goto line#|N%|timestamp|#anchor — перейти в указанное место (номер строки/процент строки/дата/якорь)

CLI (link):
lnav -c ':goto 10' file.log — выполнить команду

#logging #devops #devtools
  • 👍 8
  • ❤ 4
  • 👏 1
  • 👌 1
  • 😍 1
Post #80 7.95K
Установка Docker и Docker Compose

Arch Linux:
sudo pacman -S docker docker-compose
sudo systemctl start docker.service
sudo systemctl enable docker.service
sudo usermod -aG docker $USER


Ubuntu:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
sudo apt install docker-compose -y


После установки:
- Перезайти в систему
- Проверить: docker --version
- Тестовый запуск: docker run hello-world

#docker #linux
  • 🔥 6
  • 🥰 1
  • 🍓 1
Post #78 7.42K
👩‍💻 fmt в Go.

Основные методы fmt:
• Println() - вывод с переносом
• Print() - простой вывод
• Printf() - форматированный вывод
• Sprintf() - возвращает строку
• Errorf() - создание ошибки

f в конце названия метода означает, что он форматирует вывод


 go
fmt.Println("Привет, мир!")
fmt.Print("Без переноса")

name := "Санчез"
age := 30

fmt.Printf("Имя: %s, Возраст: %d\n", name, age)

userInfo := fmt.Sprintf("Пользователь %s, %d лет", name, age)
fmt.Println(userInfo)

err := fmt.Errorf("ошибка для пользователя %s", name)

// Создание ошибки
if err != nil {
log.Println(err) // Вывод ошибки
}


Форматные спецификаторы:
• %s - обычная строка
• %q - строка в кавычках
• %v - универсальный вывод

• %d - десятичное число
• %b - бинарное число
• %x - шестнадцатеричное lowercase
• %X - шестнадцатеричное uppercase
• %f - число с плавающей точкой
• %.2f - число с точностью 2 знака

• %T - тип данных
• %p - адрес памяти
• %t - булево значение
• %+v - подробный вывод структуры

 go
package main

import "fmt"

func main() {
// Строковые
fmt.Printf("%s - строка\n", "Hello") // обычная строка
fmt.Printf("%q - с кавычками\n", "Hi") // в кавычках

// Целые числа
fmt.Printf("%d - десятичное\n", 42) // 42
fmt.Printf("%b - бинарное\n", 42) // 101010
fmt.Printf("%x - hex lowercase\n", 42) // 2a
fmt.Printf("%X - hex uppercase\n", 42) // 2A

// Числа с плавающей точкой
fmt.Printf("%f - обычное\n", 3.14) // 3.140000
fmt.Printf("%.2f - округление\n", 3.14) // 3.14

// Булево
fmt.Printf("%t - булево значение\n", true)

// Указатели
x := 10
fmt.Printf("%p - адрес\n", &x)

// Специальные
fmt.Printf("%v - универсальный\n", x) // простой вывод
fmt.Printf("%+v - подробный\n", x) // с доп. инфо
fmt.Printf("%T - тип\n", x) // int
}

#golang #go #fmt
  • 🎄 6
  • 🔥 3
  • 💯 2
  • 🤝 1
Post #76 9.44K
Парочка советов обучения

• Метод первого принципа — это способ обучения, при котором сложную задачу или концепцию разбивают на составляющие части. Это позволяет лучше понять каждую деталь и затем собрать их воедино для создания более совершенного решения.

Например, автомобиль можно разделить на кузов, двигатель и ходовую часть. Изучив каждую часть по отдельности, ты лучше поймешь, как работает вся система.


• Необходимо четко понимать цель обучения. Чтобы заниматься чем-то продуктивно, нужно объяснить себе, зачем это нужно прямо сейчас, чтобы организм выделил на это энергию.

Молодому человеку легче заниматься спортом, если он понимает, что это сделает его привлекательным для окружающих, а не потому что это полезно через 10 лет. Таким образом, правильно поставленная цель должна быть актуальной и эмоционально значимой для организма в моменте.


• Обучение как игра. Процесс обучения должен быть увлекательным и свободным от давления перфекционизма. Как в видеоигре, важно получать удовольствие от каждого шага и не бояться ошибаться.

• Ошибки — это часть пути, и важно оценивать конечный результат, а не зацикливаться на неудачах. Если итог приносит больше пользы, чем потерь, значит, всё было не зря. Главное — учиться на ошибках и двигаться дальше.
  • ❤ 6
Post #75 8.45K
👩‍🦰 tmux — работа с терминалом

tmux — терминальный мультиплексор, который позволяет работать с множеством окон и панелей в одном терминале.

Команды:

Запуск сессии: tmux new -s имя_сессии
Подключение: tmux attach -t имя_сессии
Список сессий: tmux ls
Закрыть сессию: exit

Шорткаты (Ctrl + B):

Новое окно: C
Сплит панели: % (горизонтально), " (вертикально)
Переключение окон: N (следующее), P (предыдущее)
Переключение панелей: ←→↑↓
Переименовать окно: ,
Закрыть панель: X
Копировать текст: [ (режим копирования)
Отсоединиться: D

tmux упрощает работу с терминалом и позволяет держать процессы активными в фоне.
https://tmuxcheatsheet.com/

#tmux #linux #devtools #cli #Продуктивность
Tmuxcheatsheet Tmux Cheat Sheet & Quick Reference | Session, window, pane and more Master tmux with the comprehensive cheat sheet: session management, examples, installation guide and more for the ultimate terminal multiplexer.
  • ❤ 5
  • ❤‍🔥 2
Post #74 6.66K
👩‍💻 if statement в Go

Синтаксис:
if condition {
}


if condition {
} else {
}


if condition1 {
...
} else if condition2 {
...
} else {
...
}


if assignment-statement; condition {
}

#example

if age := 10; age < 5 {
ticketPrice = 0
}



В философии Go лучше избегать ненужных ветвлений и отступлений в коде
Желательно:
package main

import (
"fmt"
)

func main() {
num := 10;
if num%2 == 0 { //checks if number is even
fmt.Println(num, "is even")
return
}
fmt.Println(num, "is odd")

}


Нежелательно:
package main

import (
"fmt"
)

func main() {
if num := 10; num % 2 == 0 { //checks if number is even
fmt.Println(num,"is even")
} else {
fmt.Println(num,"is odd")
}
}


#go #golang #оператор #ifstatement
  • 👍 4
  • 🥰 1
Post #73 5.67K
👩‍💻 Пакеты в Go

Пакеты предоставляют удобную организацию разделения кода на отдельные части или модули.

Каждый файл принадлежит пакету. В начале файла указывается пакет:
package main // пакет main означает, что здесь точка входа в программу

func main() {
fmt.Println("Hello, Go!")
}


Импорт других пакетов. Чтобы использовать код из другого пакета, его нужно импортировать:
import "fmt"

import _ "unusedpackage" // компилятор не разрешает импортировать неиспользуемые пакеты, для этого можно использовать пустой идентификатор _ (использовать только при разработке)


Пример:
package mathutil

func Add(a, b int) int {
return a + b
}

Функция Add обозначена с заглавной функцией, это позволяет ей быть доступной из других пакетов (это также относится к переменным). В посте с функциями более подробно описано

package main

import "mathutil"

func main() {
fmt.Println(mathutil.Add(2, 3))
}


#go #golang #пакеты #package
Telegram self 👩‍💻 Функции в Go Функция — это блок кода, который выполняет определенную задачу. func functionname(parametername type) returntype { //function body } Объявление функции начинается с func ключевого слова, за которым следует functionname. Параметры указываются…
  • 💘 1
Post #72 4.44K
📊 ncdu — быстрый анализ дискового пространства в терминале!

ncdu — это мощный инструмент для просмотра использования диска прямо в командной строке.

Основные шорткаты:

↑/↓ — Перемещение по списку.
→ — Перейти внутрь директории.
← — Выйти на уровень выше.
d — Удалить выбранный файл или директорию.
g — Перейти к главной директории.
/ — Поиск по имени файла.
r — Обновить текущее сканирование.
n — Сортировать по имени.
s — Сортировать по размеру.
? — Показать справку.

#ssh #программы #сервер #оптимизация #linux #sysadmin
  • ❤ 1
  • 👍 1
  • 🔥 1
Post #71 4.51K
👩‍💻 Функции в Go

Функция — это блок кода, который выполняет определенную задачу.

func functionname(parametername type) returntype {
//function body
}

Объявление функции начинается с func ключевого слова, за которым следует functionname. Параметры указываются между ( ) за которыми следует returntype функция. Синтаксис для указания параметра следующий: имя параметра, за которым следует тип. Можно указать любое количество параметров, например (parameter1 type, parameter2 type). Затем следует блок кода между { }, который является телом функции.

func functionname() {
// Параметры и возвращаемый тип являются необязательными в функции
}


// Несколько возвращаемых значений
package main

import (
"fmt"
)

func rectProps(length, width float64)(float64, float64) {
var area = length * width
var perimeter = (length + width) * 2
return area, perimeter
}

func main() {
area, perimeter := rectProps(10.8, 5.6)
fmt.Printf("Area %f Perimeter %f", area, perimeter)
}


// Именованные возвращаемые значения
func rectProps(length, width float64)(area, perimeter float64) {
area = length * width
perimeter = (length + width) * 2
return //no explicit return value
}


Пустой идентификатор. _ известен как пустой идентификатор в Go. Его можно использовать вместо любого значения любого типа
package main

import (
"fmt"
)

func rectProps(length, width float64) (float64, float64) {
var area = length * width
var perimeter = (length + width) * 2
return area, perimeter
}
func main() {
// Так как нам не нужен perimeter - мы его отбрасываем
area, _ := rectProps(10.8, 5.6) // perimeter is discarded
fmt.Printf("Area %f ", area)
}


Экспортированные имена — это те, что начинаются с заглавной буквы, и они доступны для использования в других пакетах. Это также работает и на переменные
// Экспортируемая функция
func PrintMessage() {
fmt.Println("Hello from package!")
}

// Внутрипакетная функция
func internalFunction() {
fmt.Println("This is an internal function")
}


#golang #go #функции #func
Post #70 3.53K
👩‍💻 Константы в Go

Используются для обозначения фиксированных значений
const a = 50


const (
retryLimit = 4
httpMethod = "GET"
)


const a = 55 // разрешается
a = 89 // переназначение не разрешается


// Значение константы должно быть известно во время компиляции
var a = math.Sqrt(4) // разрешается
fmt.Println(a)
const b = math.Sqrt(4) // не разрешается
fmt.Println(b)


#golang #go #константы #const
Post #69 3.89K
👩‍💻 Строки в Go

var s string = "hello"

m := "hey"


q := `
SELECT *
FROM person
WHERE age > 18
`


"hello " + "world" // "hello world"


len("go") // 2

// будьте внимательны! Функция считает кол-во байт, а не кол-во символов
a = "го"
len(a) // 4

fmt.Printf("Length: %d\n", utf8.RuneCountInString(a)) // 2


Все переменные

#golang #go #переменные #variables #string
Post #68 3.63K
👩‍💻 Руны в Go

Rune — тип данных, который используется для представления кодовых точек. Он является псевдонимом для int32, то есть 32-битного целого числа. Это значит, что каждая руна может представлять одну кодовую точку Unicode.

Кодовая точка — это уникальный номер, который присваивается каждому символу в стандарте Unicode. Представь, что каждый символ — это буква в алфавите, а кодовая точка — это номер страницы в словаре, где ты найдешь эту букву.


Этот код выведет на экран каждую руну строки str вместе с ее кодовой точкой.
package main

import "fmt"

func main() {
str := "Привет⭐️"
for _, r := range str {
fmt.Printf("%c: %d\n", r, r)
}
}


Строка свободно преобразуется в []byte и []rune, но эти 2 типа данных не конвертируются между собой напрямую
s := "hey😉"

rs := []rune([]byte(s)) // cannot convert ([]byte)(s) (type []byte) to type []rune

bs := []byte([]rune(s)) // cannot convert ([]rune)(s) (type []rune) to type []byte


В Go присутствует синтаксический сахар при обходе строки. Если использовать конструкцию for range, строка автоматически будет преобразована в []rune, то есть обход будет по Юникод символам
emoji := "привет😀"
for _, ch := range emoji {
fmt.Println(ch, string(ch)) // выводим код символа и его строковое представление
}


Все переменные

#golang #go #переменные #variables #rune
  • ❤ 1
Older posts →

About this channel

How can I read @xaself without a Telegram account?
TGViewer shows the public web preview Telegram publishes for self: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does self have?
self (@xaself) has 368 subscribers on Telegram, refreshed roughly every 30 minutes.
Does self know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →