Skip to content

Instantly share code, notes, and snippets.

Andrey Tarantsov andreyvit

View GitHub Profile
@andreyvit
andreyvit / filter-windbg-address-map.go
Created Dec 5, 2018
A script to filter and summarise the memory map produced by `!address` command in WinDbg (requires Go 1.11)
View filter-windbg-address-map.go
package main
import (
"bytes"
"flag"
"io/ioutil"
"log"
"strconv"
"strings"
View MemoryLeakReport.md

Memory Leak Report

Many web apps leak memory on IE11 despite running fine on other browsers. We've identified two main causes of this.

The first kind of leak is simple, entirely predictable and caused by a quirk in how IE's JavaScript engine handles closures. Let's call it an “undead closure leak”. This leak goes away if you properly clean up all references or reload the page, and thus affects only AJAXy parts of the apps.

The second kind of leak is a complex permanent one, leaking the entire page context even if you reload the page. Let's call it a “GC singularity leak”. It's triggered by certain JavaScript code patterns, seemingly because IE's garbage collector never finishes its job (our theory is that it exhibits exponential complexity and encounters some sort of timeout/threshold).

This might not be an exhaustive list; internet posts point to other issues, notably when handling IFRAMEs, but we haven't encountered any of these.

@andreyvit
andreyvit / ie11leak.html
Created Nov 20, 2018
A minimal reproduction case for a weird IE11 memory leak
View ie11leak.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script crossorigin src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<script>
(function () {
var doc = document;
@andreyvit
andreyvit / Как редактировать подкаст.md
Last active May 1, 2018
Как редактировать подкаст
View Как редактировать подкаст.md

Как редактировать подкаст

На входе

Файлы от каждого участника подкаста (FLAC / AAC). По сути моно. У некоторых два канала с микрофона. У некоторых в левом канале микрофон (это то, что нас интересует), а в правом то, что они слышали (это нужно использовать для выравнивания звуковых дорожек, а потом выбросить). Моменты начала (и окончания) записи на файлах не синхронизированы.

Что нужно сделать

  1. Добавить файлы в многотрековый проект Adobe Audition.
  2. Совместить файлы так, чтобы разговор на разных дорожках совпадал.
@andreyvit
andreyvit / MYPROJPromise.h
Created Dec 25, 2017
My template for server operations with using AFNetworking or any other 3rd-party code (in Objective-C)
View MYPROJPromise.h
@import Foundation;
typedef void (^MYPROJPromiseResultBlock)(id result);
typedef void (^MYPROJPromiseErrorBlock)(NSError *error);
typedef void (^MYPROJPromiseResultAndErrorBlock)(id result, NSError *error);
typedef void (^MYPROJPromiseErrorAndResultBlock)(NSError *error, id result);
typedef void (^MYPROJPromiseResultOrErrorBlock)(id resultOrError);
typedef void (^MYPROJPromiseWorkBlock)(MYPROJPromiseResultAndErrorBlock completionHandler);
View shelesnake.md

SHELESNAKE

Ресурсы на планете Шелезяка подходят к концу, и роботы были вынуждены перейти на питание упавшими частицами метеоритов. Через несколько дней ожидается большой метеоритный дождь, поэтому вам поручили написать программу для небольшой серии из трех роботов, позволяющую им в сумме собрать максимальное число метеоритных осколков.

Поверхность планеты представляет собой плоский круг, по которому раскидано 100 метеоритных осколков. Как роботы, так и осколки считаются точками. Когда робот подходит к осколку на расстояние 1.0 или ближе, он подбирает осколок, а с неба в произвольное место планеты падает новый (таким образом, количество осколков всегда ровно 100).

Действия роботов разделены на такты. У вас всего есть 5000 тактов, чтобы собрать максимальное количество осколков.

@andreyvit
andreyvit / LoggingPolicy.md
Last active May 24, 2016
Proposal for a Michigan Logging Policy
View LoggingPolicy.md

Logging Policy

What's this, and why is it needed?

People often pick log levels randomly, making them fairly useless. I've recently seen a very useful definition of log levels, and I liked it very much. So here we go.

Log Levels

  • Notice: notable events that should be aggregated and reviewed by the system administrator or development team regularly. This is a good fit for something that's normal in moderation, but may represent a problem if it starts happening too often.
@andreyvit
andreyvit / raid.h
Created Aug 10, 2015
One of the finer pieces of code I have ever written
View raid.h
#ifndef _RAID_H_
#define _RAID_H_
#define RAID_LEVEL 3
#define RAID_WRITE(stat) do {int raidi; for(raidi = 0; raidi < RAID_LEVEL; ++raidi) stat;} while(0)
#define raidwr raid[raidi]
#define raidrd raid[0]
GlobalState raid[RAID_LEVEL];
View elevators.js
{
init: function(elevators, floors) {
var DIR_UP = 1, DIR_DOWN = -1, DIR_IDLE = 0;
var FLOOR_NINF = -1, FLOOR_PINF = 1000;
var floorUpRequests = [];{
init: function(elevators, floors) {
var DIR_UP = 1, DIR_DOWN = -1, DIR_IDLE = 0;
var FLOOR_NINF = -1, FLOOR_PINF = 1000;
@andreyvit
andreyvit / wwdc-2014-summaries.md
Last active Aug 29, 2015
WWDC 2014 Summaries
View wwdc-2014-summaries.md

A Look Inside Presentation Controllers (228)

TODO.

A Strategy for Great Work (237)

  1. “Know a good idea when you see it”: a demo of KHTML running on a Mac, made in 2 days, helped them pick it for Safari.

  2. “Don't try to solve every problem at once”: was extracting KHTML from KDE, had no idea how it worked, just compiled one file at a time, and stubbed missing functions one at a time.

You can’t perform that action at this time.