Skip to content

Instantly share code, notes, and snippets.

View KoStard's full-sized avatar
👾

Ruben Kostandyan KoStard

👾
View GitHub Profile
#! /usr/bin/env python3
"""
Implement iterate_while function and a peekable generator.
Allows easier branching in the processing of the generator.
This answers the question:
How can you pass a generator to another function, such that it consumes only part of it?
"""
import sounddevice as sd
import soundfile as sf
import numpy as np
import pydub
def record_audio(filename="recording.mp3", samplerate=44100):
# Initialize recording flag
recording = True
# Create array to store audio data
@KoStard
KoStard / markdown_syntax_highlighting.py
Created September 24, 2024 11:03
A demo script, showing how to print markdown text into terminal with syntax highlighting without rendering it with tools like rich. This way it still remains the markdown text which you can copy/paste from terminal, but with nice readable colors.
import mistune
from mistune.renderers.markdown import MarkdownRenderer
from pygments import highlight
from pygments.lexers import get_lexer_by_name, MarkdownLexer
from pygments.formatters import Terminal256Formatter
def markdown_stream_generator():
text = """
# Main Heading
@KoStard
KoStard / merge_all.py
Created July 31, 2022 21:54
Using mkvmerge merge multiple video and audio files in the target directory - useful when working with multiple episodes of the same show
from pathlib import Path
import argparse
import subprocess
parser = argparse.ArgumentParser('Tool to merge list of mkv files with mka files using mkvmerge.\n'\
'The audio files should contain the matching video file name.')
parser.add_argument('input_video_path', help='The path where to find the mkv files')
parser.add_argument('input_audio_path', help='The path where to find the mka files')
parser.add_argument('output_path', help='The path where to save the merged files')
@KoStard
KoStard / csv_splitter.py
Created July 29, 2022 10:07
Split different kinds of CSV files - configure the delimiter, number of lines in each file, etc
from os import mkdir
import pandas as pd
import sys
import argparse
import pathlib
parser = argparse.ArgumentParser(description="Split CSV documents")
parser.add_argument('input_filepath',
help="The input csv file you want to split")
parser.add_argument(
@KoStard
KoStard / ocr_armenian_pdf_to_pdf.py
Created February 7, 2021 19:17
OCR Armenian text from PDF and generate PDF from resullts
"""
python3 convert.py input_file.pdf output_file.pdf
"""
import pdf2image
import io
from PyPDF2 import PdfFileReader, PdfFileWriter
import sys
try:
@KoStard
KoStard / vlc-play-videos-with-external-audio-file.sh
Created December 29, 2020 22:12
How to specify and use external audio track for videos with VLC CLI
# --audio-track= using 1 here, as my video files have audio, but in different language, so after adding the second audio, it's index will become 1 (it's 0 based)
vlc --audio-track=1 \
video_file_path_1 \
:input-slave=external_audio_path_1 \
video_file_path_2 \
:input-slave=external_audio_path_2
#... You can continue this command for as many files you want
# This way you can start VLC with all your files already linked and easily move to next/previous episodes, instead of manually doing "Advanced Open File", specifying the external audio file and changing the track to the new one.
import heapq
class Node: # Trie node
def __init__(self, val=""):
self.mem = [None] * 26
self.count = 0
self.val = val
def register_word(root, word):
node = root
@KoStard
KoStard / lfu_cache.py
Created July 19, 2019 13:26
Implementing LFU Cache with linked lists of linked lists.
class EnhancedLinkedListNode:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
self.next = None
self.prev = None
def remove(self):
if self.prev:
@KoStard
KoStard / lfu_cache.py
Created July 19, 2019 13:26
Implementing LFU Cache with linked lists of linked lists.
class EnhancedLinkedListNode:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
self.next = None
self.prev = None
def remove(self):
if self.prev: