This walks you through making your last 4 commits look like freshly made commits, with new timestamps and commit hashes.
Step 1: Start Interactive Rebase
git rebase -i HEAD~4
In the editor that opens, change all pick to edit like so:
This walks you through making your last 4 commits look like freshly made commits, with new timestamps and commit hashes.
Step 1: Start Interactive Rebase
git rebase -i HEAD~4
In the editor that opens, change all pick to edit like so:
Timeseries Data in MySQL
We operate on the tinesearies data, chunk it down into buckets and run mins, avgs and maxes over all of that data
-- If you know how to convert recursive code to iterative code with its own stack, | |
-- then you understand recursion and can answer simple interview questions about it. | |
-- mysql 8 and above | |
CREATE TABLE nodes ( | |
node INT NOT NULL, | |
parent INT, | |
-- add any other columns used in the query here | |
PRIMARY KEY (node), | |
FOREIGN KEY (parent) REFERENCES nodes(node) |
import axios from "axios"; | |
import {v4 as uuid} from 'uuid' | |
const API_URL = `${process.env.REACT_APP_URL}/`; | |
const Axios = axios.create({ | |
baseURL: API_URL, | |
}); | |
//API Call Interceptor to add token to the header. | |
Axios.interceptors.request.use( |
const b64toBlob = (b64Data, contentType = "", sliceSize = 512) => { | |
const byteCharacters = atob(b64Data); | |
const byteArrays = []; | |
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { | |
const slice = byteCharacters.slice(offset, offset + sliceSize); | |
const byteNumbers = new Array(slice.length); | |
for (let i = 0; i < slice.length; i++) { | |
byteNumbers[i] = slice.charCodeAt(i); |
'use strict'; | |
const { generateHeadersKey } = require('./generateHeadersKey'); | |
const { generateQueryParamsKey } = require('./generateQueryParamsKey'); | |
function generateCacheKey( | |
ctx, | |
keys = { | |
useQueryParams: false, // @todo: array or boolean => can be optimized | |
useHeaders: [], |
/** | |
* Reject promise after timeout | |
* | |
* @todo this is slow, we should find a way to do this in a faster way | |
* @param {Promise<any>} callback | |
* @param {number} ms | |
* @return {Promise<never>} | |
*/ | |
function withTimeout(callback, ms) { | |
let timeout; |
/*------------------------------------------ | |
Responsive Grid Media Queries - 1280, 1024, 768, 480 | |
1280-1024 - desktop (default grid) | |
1024-768 - tablet landscape | |
768-480 - tablet | |
480-less - phone landscape & smaller | |
--------------------------------------------*/ | |
@media all and (min-width: 1024px) and (max-width: 1280px) { } | |
@media all and (min-width: 768px) and (max-width: 1024px) { } |
/** | |
* Generate html string suitable for rendering in PDF | |
*/ | |
export const generateReportPdfHTML = async (options: GenerateReportPdfOptions): Promise<string> => { | |
const pages = CustomReportTemplate({ ...options, ssr: true }); | |
const pagesContent = _.map(pages, ({ name, content }) => ( | |
<Flex key={`box-${name}`} flexDir="column" h="100vh" style={{ pageBreakBefore: 'always' }}> | |
{content} | |
</Flex> |