Skip to content

Instantly share code, notes, and snippets.

View utilmind's full-sized avatar
🏠
Working from home

Oleksii Kuznietsov utilmind

🏠
Working from home
View GitHub Profile
@utilmind
utilmind / is_scientific_notation.php
Last active May 2, 2024 18:54
is_scientific_notation in PHP
// Check, whether string is a numerical value in “scientific notation” format.
function is_scientific_notation($str) {
return !is_int($str) && !is_float($str) && is_numeric($str)
&& stripos($str, 'e') !== false;
}
@utilmind
utilmind / export-array-to-csv.js
Created March 24, 2024 03:23
Export data array (possibly received from JSON) into CSV
const exportToCsv = (data, csvFileName) => {
const link = document.createElement("a");
if (undefined !== link.download) { // downloads supported?
const csvRows = [],
// get the key names for the CSV header (column names)
headers = Object.keys(data[0]),
escCsvValue = value => "string" === typeof value && (-1 !== value.indexOf('"') || -1 !== value.indexOf(",")) // escape values that contain quotes or commas
? '"' + value.replace(/"/g, '""') + '"' // Dobule quotes are double escaped
@utilmind
utilmind / utf8ToWin1251.js
Last active March 24, 2024 03:14
UTF-8 to Windows-1251 (primarily for export into CSV)
Convert UTF-8 to Windows-1251
utf8ToWin1251 = s => {
const map1251 = { 1027: 129, 8225: 135, 1046: 198, 8222: 132, 1047: 199, 1168: 165, 1048: 200, 1113: 154, 1049: 201, 1045: 197, 1050: 202, 1028: 170, 160: 160, 1040: 192, 1051: 203, 164: 164, 166: 166, 167: 167, 169: 169, 171: 171, 172: 172, 173: 173, 174: 174, 1053: 205, 176: 176, 177: 177, 1114: 156, 181: 181, 182: 182, 183: 183, 8221: 148, 187: 187, 1029: 189, 1056: 208, 1057: 209, 1058: 210, 8364: 136, 1112: 188, 1115: 158, 1059: 211, 1060: 212, 1030: 178, 1061: 213, 1062: 214, 1063: 215, 1116: 157, 1064: 216, 1065: 217, 1031: 175, 1066: 218, 1067: 219, 1068: 220, 1069: 221, 1070: 222, 1032: 163, 8226: 149, 1071: 223, 1072: 224, 8482: 153, 1073: 225, 8240: 137, 1118: 162, 1074: 226, 1110: 179, 8230: 133, 1075: 227, 1033: 138, 1076: 228, 1077: 229, 8211: 150, 1078: 230, 1119: 159, 1079: 231, 1042: 194, 1080: 232, 1034: 140, 1025: 168, 1081: 233, 1082: 234, 8212: 151, 1083: 235, 1169: 180, 1084: 236, 1052: 204, 1085: 237, 1035: 142, 1086: 238, 1087: 2
@utilmind
utilmind / react-crawler.js
Last active February 10, 2024 03:18
Check available 2-letter names on "clusters" in NodeJS, using Puppeteer to parse JavaScript-generated content
(async () => {
const puppeteer = require('puppeteer'),
fs = require('fs').promises,
// Generate 2-letter combinations
generateCombinations = x => {
const combinations = [],
// Small latin letters and digits
characters = [...Array(26).keys()].map(i => String.fromCharCode(i + 97))
.concat([...Array(10).keys()].map(i => i.toString()));
@utilmind
utilmind / lstorage.js
Last active October 3, 2021 17:12
lStorage & sStorage -- replacements for localStorage and sessionStorage
(function(window) {
// lStorage & sStorage -- replacements for localStorage and sessionStorage
// ===========================
// Brave browser (withe default settings) is blocking access to localStorage.
// This is sucks, but in most cases we can live without stored data. Just don't let exception prevent execution of our code.
// ===========================
/* IDEA:
* We have replacement for any storage, that lives only during current instance. (Even less than session.)
* We use this replacement only if regular storage not found. (And this is the only sense to use it.)
@utilmind
utilmind / is-valid-email.js
Created July 28, 2021 22:33
isValidEmail() JavaScript
// see also is_valid_email() in "strings.php".
String.prototype.isValidEmail = function() {
// This all are valid accordingly to RFC: !#$%&'*+-/=?^_`{|}~
// Gmail use + for subadressing. Usage of other special chars in unknown, but they are still valid anyway.
// Double-dot, however (..) is not allowed.
return 0 <= this.indexOf("..")
? false // email can't have 2 dots at row
: /^([\w!#$%&'*+\-/=?^_`{|}~]+(?:\.[\w!#$%&'*+\-/=?^_`{|}~]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,30}(?:\.[a-z]{2})?)$/i.test(this.trim()); // the longest domain extension in 2015 was ".cancerresearch", and looks like it's not the limit. UPD. how about .travelersinsurance? I set up it the longest domain extension to 30 chars.
}
@utilmind
utilmind / set-background-color.bat
Created July 16, 2021 20:12
set-background-color
:: See also set-wallpaper.bat
@echo off
if [%1]==[] (
echo USAGE: set-background-color.bat [6 hexadecimal digit color value]
echo EXAMPLE: "set-background-color.bat ffffff". This will set background color to white.
exit
)
@utilmind
utilmind / set-wallpaper.bat
Last active July 24, 2021 06:03
Windows 10 batch file to set Desktop background wallpaper
:: See also "set-background-color.bat".
:: Sometimes, when you're using the best performance settings, with no shadows under icon labels,
:: it's important to specify the solid background-color too, to display the contrast color for the icon labels.
:: If your primary wallpaper color is dark, set the solid color to black (000000). When it's light -- set solid color to white (ffffff).
@echo off
if [%1]==[] (
echo USAGE: set-wallpaper.bat [full/path/to/filename.jpg]
exit
@utilmind
utilmind / expireStorage
Last active April 20, 2021 22:23
Replacement for regular localStorage or sessionStorage objects, if they blocked by some paranoiac browser, like Brave with default settings
// This is replacement for regular localStorage or sessionStorage objects,
// if they blocked by some paranoiac browser, like Brave with default settings....
var expireStorage = {
length: function() {
return data.length;
},
key: function(key) {
return Object.keys(data)[key];
},
@utilmind
utilmind / cookieless-ga.js
Created January 9, 2021 07:21
Google Analytics without cookies
// https://medium.com/swlh/how-to-use-google-tag-manager-and-google-analytics-without-cookies-7d041c73cc76
// https://developers.google.com/tag-manager/devguide
(function() {
window.dataLayer = window.dataLayer || [];
var GA_MEASUREMENT_ID = "UA-XXXXXXXXX-X",
GA_LOCAL_STORAGE_KEY = "ga:clientId",
clientId = localStorage.getItem(GA_LOCAL_STORAGE_KEY),
gtag = function() {
dataLayer.push(arguments);