Skip to content

Instantly share code, notes, and snippets.

View jenya239's full-sized avatar

Evgeniy Arshanskiy jenya239

View GitHub Profile
@jenya239
jenya239 / summarize.rb
Created February 13, 2025 12:25
скрипт генерации краткого описания проекта
#!/usr/bin/env ruby
require 'net/http'
require 'json'
require 'uri'
require 'digest'
require 'fileutils'
# Константы
OPENAI_API_KEY = ENV['OPENAI_API_KEY']
OPENAI_API_URL = "https://api.openai.com/v1/chat/completions"
@jenya239
jenya239 / esm.rb
Created November 8, 2024 14:16
ruby esm
require 'awesome_print'
require 'active_support/all'
class Modules
include Singleton
attr_reader :src_dir
def initialize
@src_dir = find_src_dir
@jenya239
jenya239 / clear-openvpn3-sessions.rb
Created April 19, 2024 09:59
clear disconnected openvpn3 sessions
#!/usr/bin/env ruby
require 'active_support/all'
class Session
FIELDS = [:path, :created, :pid, :owner, :device, :config_name, :session_name, :status]
@@sessions = []
attr_accessor(*FIELDS)
attr_accessor :id
@jenya239
jenya239 / authentication.mjs
Created October 13, 2023 14:40
passport oauth (facebook) state in verify
this.strategy = new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
passReqToCallback: true,
profileFields: ['id', 'emails', 'name'],
callbackURL: '/oauth2/redirect/facebook',
store: true
}, (req, accessToken, refreshToken, profile, cb) => {
d(`\n\noauth state in verify = `, req.oauthState)
return cb(null, {})
@jenya239
jenya239 / Pageable.tsx
Last active October 18, 2022 22:20
fetchable by page
import React, {
createContext,
Reducer,
RefObject,
useCallback,
useContext,
useMemo,
useReducer,
useRef,
} from 'react'
const path = require('path')
const fs = require('fs')
const debug = console.log
const buildDirMap = (dirPath) => {
const map = {}
const items = fs.readdirSync(dirPath)
for (const name of items) {
map[name] = fs.statSync(path.join(dirPath, name), { throwIfNoEntry: false })
> label {
margin-top: 10px;
padding-left: 10px;
display: grid;
grid-template-columns: 12px auto;
gap: 12px;
input[type='checkbox'] {
appearance: none;
margin: 0;
import React, { Context, Reducer, useContext, useEffect, useMemo, useReducer } from 'react'
type Status = 'init' | 'processing' | 'error' | 'success'
interface IItemState<Item> {
id: number
stage: number
item: Item
status: Status
}
import React, { Context, Reducer, useContext, useMemo, useReducer } from 'react'
type ItemState<Item> =
| { status: 'loading'; id: number; item?: Item }
| { status: 'error'; id: number; error: string; item?: Item }
| { status: 'success'; id: number; item: Item }
interface IActions {
fetchItem: (id: number) => Promise<void>
reset: () => void
import React, { Context, Reducer, useContext, useMemo, useReducer } from 'react'
type Action<Value> =
| { type: 'request' }
| { type: 'success'; value: Value }
| { type: 'failure'; error: string }
| { type: 'reset' }
type Dispatch<Value> = (action: Action<Value>) => void