Skip to content

Instantly share code, notes, and snippets.

View samoshkin's full-sized avatar

Alexey Samoshkin samoshkin

View GitHub Profile
@samoshkin
samoshkin / es6-symbol-toprimitive.js
Created January 17, 2018 18:15
ES6 replace default object-to-primitive conversion logic using Symbol.toPrimitive method
class Disk {
constructor(capacity){
this.capacity = capacity;
}
[Symbol.toPrimitive](hint){
switch (hint) {
case 'string':
return 'Capacity: ' + this.capacity + ' bytes';
@samoshkin
samoshkin / systemjs-builder-code-splitting.js
Created January 19, 2018 21:58
Create common,vendor and several entry point bundles using systemjs-builder
let Builder = require('systemjs-builder');
let fs = require('fs');
let mapValues = require('lodash/mapValues');
let config = {
baseURL: '.',
map: {
'vendor': 'lib/vendor'
}
};
@samoshkin
samoshkin / fetch_vs_xhr.md
Created November 1, 2018 20:04
Fetch API features and limitations

XHR limitations and drawbacks:

  • more complicated API, request and response concepts are mixed together.
  • lacks streaming, whole response is going to buffer in memory, not available for binary data

Fetch API features and pros:

  1. more pleasant simpler API. Has Request and Response abstractions, can be used separately (for example in ServiceWorkers). Based on Promises.
  2. supports streaming, response.body is ReadableStream, you can read data chunk by chunk without buffering, available for binary data. Can access partial content while response is being received.
  3. has cache control support (default, no-store, reload, no-cache, force-cache, only-if-cached)
@samoshkin
samoshkin / postman_vs_insomnia_comparison.md
Created November 6, 2018 17:42
Comparison of API development environments: Postman vs Insomnia

Postman vs Insomnia comparison

Postman | API Development Environment https://www.getpostman.com
Insomnia REST Client - https://insomnia.rest/

Features                                        Insomnia Postman Notes
Create and send HTTP requests x x
Authorization header helpers x x Can create "Authorization" header for you for different authentication schemes: Basic, Digest, OAuth, Bearer Token, HAWK, AWS
@samoshkin
samoshkin / convert2voice.sh
Last active September 12, 2023 06:44
Google Text-to-Speech API example
#!/bin/bash
text=$(cat -)
request="{
'input':{
'ssml':'<speak>$text</speak>'
},
'voice':{
'languageCode':'en-gb',
'name':'en-GB-Wavenet-D',
@samoshkin
samoshkin / env.sh
Created April 18, 2019 22:36
fzf configuration snippet
# Exclude those directories even if not listed in .gitignore, or if .gitignore is missing
FD_OPTIONS="--follow --exclude .git --exclude node_modules"
# Change behavior of fzf dialogue
export FZF_DEFAULT_OPTS="--no-mouse --height 50% -1 --reverse --multi --inline-info --preview='[[ \$(file --mime {}) =~ binary ]] && echo {} is a binary file || (bat --style=numbers --color=always {} || cat {}) 2> /dev/null | head -300' --preview-window='right:hidden:wrap' --bind='f3:execute(bat --style=numbers {} || less -f {}),f2:toggle-preview,ctrl-d:half-page-down,ctrl-u:half-page-up,ctrl-a:select-all+accept,ctrl-y:execute-silent(echo {+} | pbcopy)'"
# Change find backend
# Use 'git ls-files' when inside GIT repo, or fd otherwise
export FZF_DEFAULT_COMMAND="git ls-files --cached --others --exclude-standard | fd --type f --type l $FD_OPTIONS"
@samoshkin
samoshkin / difftool_vimrc.vim
Created April 30, 2019 19:29
Test vimrc configuration to turn Vim into a difftool
set nocompatible
filetype plugin indent on
set tabstop=2 softtabstop=2 shiftwidth=2 expandtab
set number
set hidden
set splitbelow
set splitright
@samoshkin
samoshkin / vimrc-merge.vim
Created May 7, 2019 17:02
Test vimrc configuration to turn Vim into a mergetool
set nocompatible
filetype plugin indent on
set tabstop=2 softtabstop=2 shiftwidth=2 expandtab
set number
set hidden
set splitbelow
set splitright
@samoshkin
samoshkin / prose.md
Created February 27, 2020 17:36
Angular DI и Forms. О чем вам не расскажут книги.

Например есть такая задача. Есть компонент, и на него же вешается директива.

<input [formControl]="controller.formControl"></input>

где component - в данном случае это родной [formControl] - это директива

Задача директивы это настроить связку между "input.value" (view) и controller.formControl (model) в две стороны: