Skip to content

Instantly share code, notes, and snippets.

View daliborgogic's full-sized avatar
:octocat:
In Git we trust!

Dalibor Gogic daliborgogic

:octocat:
In Git we trust!
View GitHub Profile
[{"name":"https://daliborgogic.com/","entryType":"navigation","startTime":0,"duration":1149.9,"initiatorType":"navigation","nextHopProtocol":"h2","workerStart":0,"redirectStart":0,"redirectEnd":0,"fetchStart":0.45500000000000007,"domainLookupStart":1.6700000000000002,"domainLookupEnd":9.585,"connectStart":9.585,"connectEnd":98.83500000000001,"secureConnectionStart":41.370000000000005,"requestStart":99.17500000000001,"responseStart":147.8,"responseEnd":149.11,"transferSize":3286,"encodedBodySize":2948,"decodedBodySize":6782,"serverTiming":[],"unloadEventStart":0,"unloadEventEnd":0,"domInteractive":207.07,"domContentLoadedEventStart":919.33,"domContentLoadedEventEnd":919.3350000000002,"domComplete":1138.67,"loadEventStart":1138.695,"loadEventEnd":1149.9,"type":"navigate","redirectCount":0},{"name":"https://daliborgogic.com/css/main.css","entryType":"resource","startTime":160.83,"duration":36.630000000000024,"initiatorType":"link","nextHopProtocol":"h2","workerStart":0,"redirectStart":0,"redirectEnd":0,"fetchSta
{"traceEvents":[{"pid":18981,"tid":1,"ts":5358359720,"ph":"X","cat":"toplevel","name":"TaskQueueManager::ProcessTaskFromWorkQueue","args":{"src_file":"../../base/trace_event/trace_log.cc","src_func":"SetEnabled"},"dur":38,"tdur":36,"tts":22282},
{"pid":18981,"tid":1,"ts":5358359762,"ph":"X","cat":"toplevel","name":"TaskQueueManager::ProcessTaskFromWorkQueue","args":{"src_file":"../../base/trace_event/trace_log.cc","src_func":"SetEnabled"},"dur":9,"tdur":9,"tts":22322},
{"pid":18981,"tid":1,"ts":5358359774,"ph":"X","cat":"toplevel","name":"TaskQueueManager::ProcessTaskFromWorkQueue","args":{"src_file":"../../base/trace_event/trace_log.cc","src_func":"SetEnabled"},"dur":7,"tdur":7,"tts":22334},
{"pid":18981,"tid":1,"ts":5358359934,"ph":"X","cat":"toplevel","name":"MessageLoop::RunTask","args":{"src_file":"../../third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc","src_func":"OnQueueHasIncomingImmediateWork"},"dur":21,"tdur":21,"tts":22357},
{"pid":18981,"tid":1,"ts":5358359939,"ph":"X","cat"
function daysInMonth (date = new Date()) {
  const m = new Date(date)
  return new Date(m.getFullYear(), m.getMonth() + 1, 0).getDate()
}

daysInMonth()
> 30
daysInMonth('Wed, 15 Feb 2017 22:11:32 GMT')
> 28
@daliborgogic
daliborgogic / App.vue
Last active November 13, 2017 10:13
Vue.js Input type range props sync v.2.3.0+
<template lang="pug">
div
input-type-range(:min.sync="min" :max.sync="max" :step.sync="step" :value.sync="value")
p {{value}}/{{max}}
</template>
<script>
export default {
components: {
InputTypeRange: () => import('~/components/InputTypeRange.vue')
@daliborgogic
daliborgogic / world.vue
Last active August 23, 2018 21:31
Latitude/Longitude to x/y
<template lang="pug">
svg(viewBox="0 0 1008.27 650.94")
//-{id:"AE"},{id:"AF"},{id:"AL"},{id:"AM"},{id:"AO"},{id:"AR"},{id:"AT"},{id:"AU"},{id:"AZ"},{id:"BA"},{id:"BD"},{id:"BE"},{id:"BF"},{id:"BG"},{id:"BI"},{id:"BJ"},{id:"BN"},{id:"BO"},{id:"BR"},{id:"BS"},{id:"BT"},{id:"BW"},{id:"BY"},{id:"BZ"},{id:"CA"},{id:"CD"},{id:"CF"},{id:"CG"},{id:"CH"},{id:"CI"},{id:"CL"},{id:"CM"},{id:"CN"},{id:"CO"},{id:"CR"},{id:"CU"},{id:"CY"},{id:"CZ"},{id:"DE"},{id:"DJ"},{id:"DK"},{id:"DO"},{id:"DZ"},{id:"EC"},{id:"EE"},{id:"EG"},{id:"EH"},{id:"ER"},{id:"ES"},{id:"ET"},{id:"FK"},{id:"FI"},{id:"FJ"},{id:"FR"},{id:"GA"},{id:"GB"},{id:"GE"},{id:"GF"},{id:"GH"},{id:"GL"},{id:"GM"},{id:"GN"},{id:"GQ"},{id:"GR"},{id:"GT"},{id:"GW"},{id:"GY"},{id:"HN"},{id:"HR"},{id:"HT"},{id:"HU"},{id:"ID"},{id:"IE"},{id:"IL"},{id:"IN"},{id:"IQ"},{id:"IR"},{id:"IS"},{id:"IT"},{id:"JM"},{id:"JO"},{id:"JP"},{id:"KE"},{id:"KG"},{id:"KH"},{id:"KP"},{id:"KR"},{id:"XK"},{id:"KW"},{id:"KZ"},{id:"LA"},{id:"LB"},{id:"LK"},{id:"LR"},{id:"LS"},{id:"LT"},{id
@daliborgogic
daliborgogic / h2.js
Last active July 13, 2018 15:06
HTTP2 server push example [Pre-compressed with brotli]
// Native
const http2 = require('http2')
const fs = require('fs')
const path = require('path')
// Packages
const cert = require('openssl-self-signed-certificate')
const mime = require('mime')
const {
@daliborgogic
daliborgogic / h2.js
Last active November 2, 2017 09:59
micro static file server
// Native
const http2 = require('http2')
const url = require('url')
const fs = require('fs')
const path = require('path')
// Packages
const { run, send } = require('micro')
const cert = require('openssl-self-signed-certificate')
const mime = require('mime')
@daliborgogic
daliborgogic / App.vue
Last active November 1, 2017 16:53
CSS Font Loading Module Level 3
<template>
<div id="app">The quick brown fox jumps over the lazy dog</div>
</template>
<script>
async function loadFont () {
const font = new FontFace('Hack Regular', 'url(./hack-regular.woff2)')
await font.load()
document.fonts.add(font)
document.getElementById('app').classList.add('font-loaded')
@daliborgogic
daliborgogic / Dockerfile
Last active December 17, 2018 16:19
Navigation Timing, Headless Chrome, Docker
FROM node:8.7.0-slim
RUN apt-get update && \
apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 \
ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
RUN npm i puppeteer micro qs
@daliborgogic
daliborgogic / Dockerfile
Created September 20, 2017 17:58
mnml Node.js Docker image
# Do the npm install in the full image
# The sizes are for the unpacked images as reported by Docker – compressed sizes are about 1/3
# ~ 65.8 MB (npm 5.4.2)
FROM mhart/alpine-node:8.5.0
MAINTAINER Dalibor Gogic <mail@daliborgogic.com>
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install --production