Skip to content

Instantly share code, notes, and snippets.

View lukaskollmer's full-sized avatar
๐Ÿ’ญ
frolicking

Lukas Kollmer lukaskollmer

๐Ÿ’ญ
frolicking
View GitHub Profile
@lukaskollmer
lukaskollmer / javascript.js
Last active May 27, 2016 08:01
How do languages handle removing objects during iteration?
var list = [1, 2, 3, 4];
list.forEach(function(entry) {
console.log(entry);
var index = list.indexOf(entry);
list.splice(index, 1);
});
console.log('list after loop: ', list);
/**
Console output:
@lukaskollmer
lukaskollmer / Demo.py
Created June 7, 2016 19:11
Pythonista crash demo
# coding: utf-8
#!/usr/bin/env python3
# Copyright (c) 2016 Lukas Kollmer <[email protected]>
'''
Purpose: Showcases a crash when calling a nonexistent python method from within an Objective-C method
'''
import console
from objc_util import *
UITapGestureRecognizer = ObjCClass('UITapGestureRecognizer')
def action(_self, _cmd, sender):
tag = ObjCInstance(sender).view().tag()
asset = images[tag]
asset.get_image()
action.encoding = '@0@0:0@0'
from objc_util import *
UIColor = ObjCClass('UIColor')
UIViewController = ObjCClass('UIViewController')
@on_main_thread
def main():
color = UIColor.colorWithHexString_('#FFC0CB')
vc = UIViewController.new()
@lukaskollmer
lukaskollmer / hack.m
Created June 21, 2016 15:30
UITextView: Allow tapping links from NSAttributedString, but disallow text selection
/**
Note to self:
This UITextView class extension gets calles every time iOS wants to add a new gesture recognizer to the textView.
It checks for the type of the gesture recognizer (Long Press) and then for the associated action.
Only if the action is ``smallDelayRecognizer:``, the gestuere recognizer will stay enabled.
All otheer long press gestures will be disabled.
Purpose:
Allow user interaction with the links in the attributedText, but disallow text selection
๐Ÿ˜€๐Ÿ˜ฌ๐Ÿ˜๐Ÿ˜‚๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜…๐Ÿ˜†๐Ÿ˜‡๐Ÿ˜‰๐Ÿ˜Š๐Ÿ™‚๐Ÿ™ƒโ˜บ๏ธ๐Ÿ˜‹๐Ÿ˜Œ๐Ÿ˜๐Ÿ˜˜๐Ÿ˜—๐Ÿ˜™๐Ÿ˜š๐Ÿ˜œ๐Ÿ˜๐Ÿ˜›๐Ÿค‘๐Ÿค“๐Ÿ˜Ž๐Ÿค—๐Ÿ˜๐Ÿ˜ถ๐Ÿ˜๐Ÿ˜‘๐Ÿ˜’๐Ÿ™„๐Ÿค”๐Ÿ˜ณ๐Ÿ˜ž๐Ÿ˜Ÿ๐Ÿ˜ ๐Ÿ˜ก๐Ÿ˜”๐Ÿ˜•๐Ÿ™โ˜น๏ธ๐Ÿ˜ฃ๐Ÿ˜–๐Ÿ˜ซ๐Ÿ˜ฉ๐Ÿ˜ค๐Ÿ˜ฎ๐Ÿ˜ฑ๐Ÿ˜จ๐Ÿ˜ฐ๐Ÿ˜ฏ๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜ข๐Ÿ˜ฅ๐Ÿ˜ช๐Ÿ˜“๐Ÿ˜ญ๐Ÿ˜ต๐Ÿ˜ฒ๐Ÿค๐Ÿ˜ท๐Ÿค’๐Ÿค•๐Ÿ˜ด๐Ÿ’ค๐Ÿ’ฉ๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ‘น๐Ÿ‘บ๐Ÿ’€๐Ÿ‘ป๐Ÿ‘ฝ๐Ÿค–๐Ÿ˜บ๐Ÿ˜ธ๐Ÿ˜น๐Ÿ˜ป๐Ÿ˜ผ๐Ÿ˜ฝ๐Ÿ™€๐Ÿ˜ฟ๐Ÿ˜พ๐Ÿ™Œ๐Ÿ‘๐Ÿ‘‹๐Ÿ‘๐Ÿ‘Ž๐Ÿ‘Š๐ŸฟโœŠโœŒ๐Ÿ‘Œโœ‹๐Ÿ‘๐Ÿ’ช๐Ÿ™โ˜๏ธ๐Ÿ‘†๐Ÿ‘‡๐Ÿ‘ˆ๐Ÿ‘‰๐Ÿ–•๐Ÿ–๐Ÿค˜๐Ÿ––โœ๐Ÿ’…๐Ÿ‘„๐Ÿ‘…๐Ÿ‘‚๐Ÿ‘ƒ๐Ÿผ๐Ÿ‘๐Ÿ‘€๐Ÿ‘ค๐Ÿ‘ฅ๐Ÿ—ฃ๐Ÿ‘ถ๐Ÿ‘ฆ๐Ÿ‘ง๐Ÿ‘จ๐Ÿ‘ฉ๐Ÿ‘ฑ๐Ÿ‘ด๐Ÿ‘ต๐Ÿ‘ฒ๐Ÿ‘ณ๐Ÿ‘ฎ๐Ÿ‘ท๐Ÿ’‚๐Ÿ•ต๐ŸŽ…๐Ÿ‘ผ๐Ÿ‘ธ๐Ÿ‘ฐ๐Ÿšถ๐Ÿƒ๐Ÿ’ƒ๐Ÿ‘ฏ๐Ÿ‘ซ๐Ÿ‘ฌ๐Ÿ‘ญ๐Ÿ™‡๐Ÿ’๐Ÿ™…๐Ÿ™†๐Ÿ™‹๐Ÿ™Ž๐Ÿ™๐Ÿ’‡๐Ÿ’†๐Ÿ’‘๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ’๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘ช๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘š๐Ÿ‘•๐Ÿ‘–๐Ÿ‘”๐Ÿ‘—๐Ÿ‘™๐Ÿ‘˜๐Ÿ’„๐Ÿ’‹๐Ÿ‘ฃ๐Ÿ‘ ๐Ÿ‘ก๐Ÿ‘ข๐Ÿ‘ž๐Ÿ‘Ÿ๐Ÿ‘’๐ŸŽฉ๐ŸŽ“๐Ÿ‘‘โ›‘๐ŸŽ’๐Ÿ‘๐Ÿ‘›๐Ÿ‘œ๐Ÿ’ผ๐Ÿ‘“๐Ÿ•ถ๐Ÿ’๐ŸŒ‚๐Ÿถ๐Ÿฑ๐Ÿญ๐Ÿน๐Ÿฐ๐Ÿป๐Ÿผ๐Ÿจ๐Ÿฏ๐Ÿฆ๐Ÿฎ๐Ÿท๐Ÿฝ๐Ÿธ๐Ÿ™๐Ÿต๐Ÿ™ˆ๐Ÿ™‰๐Ÿ™Š๐Ÿ’๐Ÿ”๐Ÿง๐Ÿฆ๐Ÿค๐Ÿฃ๐Ÿฅ๐Ÿบ๐Ÿ—๐Ÿด๐Ÿฆ„๐Ÿ๐Ÿ›๐ŸŒ๐Ÿž๐Ÿœ๐Ÿ•ท๐Ÿฆ‚๐Ÿฆ€๐Ÿ๐Ÿข๐Ÿ ๐ŸŸ๐Ÿก๐Ÿฌ๐Ÿณ๐Ÿ‹๐ŸŠ๐Ÿ†๐Ÿ…๐Ÿƒ๐Ÿ‚๐Ÿ„๐Ÿช๐Ÿซ๐Ÿ˜๐Ÿ๐Ÿ๐Ÿ‘๐ŸŽ๐Ÿ–๐Ÿ€๐Ÿ๐Ÿ“๐Ÿฆƒ๐Ÿ•Š๐Ÿ•๐Ÿฉ๐Ÿˆ๐Ÿ‡๐Ÿฟ๐Ÿพ๐Ÿ‰๐Ÿฒ๐ŸŒต๐ŸŽ„๐ŸŒฒ๐ŸŒณ๐ŸŒด๐ŸŒฑ๐ŸŒฟโ˜˜๐Ÿ€๐ŸŽ๐ŸŽ‹๐Ÿƒ๐Ÿ‚๐Ÿ๐ŸŒพ๐ŸŒบ๐ŸŒป๐ŸŒน๐ŸŒท๐ŸŒผ๐ŸŒธ๐Ÿ’๐Ÿ„๐ŸŒฐ๐ŸŽƒ๐Ÿš๐Ÿ•ธ๐ŸŒŽ๐ŸŒ๐ŸŒ๐ŸŒ•๐ŸŒ–๐ŸŒ—๐ŸŒ˜๐ŸŒ‘๐ŸŒ’๐ŸŒ“๐ŸŒ”๐ŸŒš๐ŸŒ๐ŸŒ›๐ŸŒœ๐ŸŒž๐ŸŒ™โญ๏ธ๐ŸŒŸ๐Ÿ’ซโœจโ˜„โ˜€๏ธ๐ŸŒคโ›…๏ธ๐ŸŒฅ๐ŸŒฆโ˜๏ธ๐ŸŒงโ›ˆ๐ŸŒฉโšก๏ธ๐Ÿ”ฅ๐Ÿ’ฅโ„๏ธ๐ŸŒจโ˜ƒโ›„๏ธ๐ŸŒฌ๐Ÿ’จ๐ŸŒช๐ŸŒซโ˜‚โ˜”๏ธ๐Ÿ’ง๐Ÿ’ฆ๐ŸŒŠ๐Ÿ๐ŸŽ๐Ÿ๐ŸŠ๐Ÿ‹๐ŸŒ๐Ÿ‰๐Ÿ‡๐Ÿ“๐Ÿˆ๐Ÿ’๐Ÿ‘๐Ÿ๐Ÿ…๐Ÿ†๐ŸŒถ๐ŸŒฝ๐Ÿ ๐Ÿฏ๐Ÿž๐Ÿง€๐Ÿ—๐Ÿ–๐Ÿค๐Ÿ๐Ÿ”๐ŸŸ๐ŸŒญ๐Ÿ•๐Ÿ๐ŸŒฎ๐ŸŒฏ๐Ÿœ๐Ÿฒ๐Ÿฅ๐Ÿฃ๐Ÿฑ๐Ÿ›๐Ÿ™๐Ÿš๐Ÿ˜๐Ÿข๐Ÿก๐Ÿง๐Ÿจ๐Ÿฆ๐Ÿฐ๐ŸŽ‚๐Ÿฎ๐Ÿฌ๐Ÿญ๐Ÿซ๐Ÿฟ๐Ÿฉ๐Ÿช๐Ÿบ๐Ÿป๐Ÿท๐Ÿธ๐Ÿน๐Ÿพ๐Ÿถ๐Ÿตโ˜•๏ธ๐Ÿผ๐Ÿด๐Ÿฝโšฝ๏ธ๐Ÿ€๐Ÿˆโšพ๏ธ๐ŸŽพ๐Ÿ๐Ÿ‰๐ŸŽฑโ›ณ๏ธ๐ŸŒ๐Ÿ“๐Ÿธ๐Ÿ’๐Ÿ‘๐Ÿ๐ŸŽฟโ›ท๐Ÿ‚โ›ธ๐Ÿน๐ŸŽฃ๐Ÿšฃ๐ŸŠ๐Ÿ„๐Ÿ›€โ›น๐Ÿ‹๐Ÿšด๐Ÿšต๐Ÿ‡๐Ÿ•ด๐Ÿ†๐ŸŽฝ๐Ÿ…๐ŸŽ–๐ŸŽ—๐Ÿต๐ŸŽซ๐ŸŽŸ๐ŸŽญ๐ŸŽจ๐ŸŽช๐ŸŽค๐ŸŽง๐ŸŽผ๐ŸŽน๐ŸŽท๐ŸŽบ๐ŸŽธ๐ŸŽป๐ŸŽฌ๐ŸŽฎ๐Ÿ‘พ๐ŸŽฏ๐ŸŽฒ๐ŸŽฐ๐ŸŽณ๐Ÿš—๐Ÿš•๐Ÿš™๐ŸšŒ๐ŸšŽ๐ŸŽ๐Ÿš“๐Ÿš‘๐Ÿš’๐Ÿš๐Ÿšš๐Ÿš›๐Ÿšœ๐Ÿ๐Ÿšฒ๐Ÿšจ๐Ÿš”๐Ÿš๐Ÿš˜๐Ÿš–๐Ÿšก๐Ÿš ๐ŸšŸ๐Ÿšƒ๐Ÿš‹๐Ÿš๐Ÿš„๐Ÿš…๐Ÿšˆ๐Ÿšž๐Ÿš‚๐Ÿš†๐Ÿš‡๐ŸšŠ๐Ÿš‰๐Ÿš๐Ÿ›ฉโœˆ๏ธ๐Ÿ›ซ๐Ÿ›ฌโ›ต๏ธ๐Ÿ›ฅ๐Ÿšคโ›ด๐Ÿ›ณ๐Ÿš€๐Ÿ›ฐ๐Ÿ’บโš“๏ธ๐Ÿšงโ›ฝ๏ธ๐Ÿš๐Ÿšฆ๐Ÿšฅ๐Ÿ๐Ÿšข๐ŸŽก๐ŸŽข๐ŸŽ ๐Ÿ—๐ŸŒ๐Ÿ—ผ๐Ÿญโ›ฒ๏ธ๐ŸŽ‘โ›ฐ๐Ÿ”๐Ÿ—ป๐ŸŒ‹๐Ÿ—พ๐Ÿ•โ›บ๏ธ๐Ÿž๐Ÿ›ฃ๐Ÿ›ค๐ŸŒ…๐ŸŒ„๐Ÿœ๐Ÿ–๐Ÿ๐ŸŒ‡๐ŸŒ†๐Ÿ™๐ŸŒƒ๐ŸŒ‰๐ŸŒŒ๐ŸŒ ๐ŸŽ‡๐ŸŽ†๐ŸŒˆ๐Ÿ˜๐Ÿฐ๐Ÿฏ๐ŸŸ๐Ÿ—ฝ๐Ÿ ๐Ÿก๐Ÿš๐Ÿข๐Ÿฌ๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿจ๐Ÿช๐Ÿซ๐Ÿฉ๐Ÿ’’๐Ÿ›โ›ช๏ธ๐Ÿ•Œ๐Ÿ•๐Ÿ•‹โ›ฉโŒš๏ธ๐Ÿ“ฑ๐Ÿ“ฒ๐Ÿ’ปโŒจ๐Ÿ–ฅ๐Ÿ–จ๐Ÿ–ฑ๐Ÿ–ฒ๐Ÿ•น๐Ÿ—œ๐Ÿ’ฝ๐Ÿ’พ๐Ÿ’ฟ๐Ÿ“€๐Ÿ“ผ๐Ÿ“ท๐Ÿ“ธ๐Ÿ“น๐ŸŽฅ๐Ÿ“ฝ๐ŸŽž๐Ÿ“žโ˜Ž๏ธ๐Ÿ“Ÿ๐Ÿ“ ๐Ÿ“บ๐Ÿ“ป๐ŸŽ™๐ŸŽš๐ŸŽ›โฑโฒโฐ๐Ÿ•ฐโณโŒ›๏ธ๐Ÿ“ก๐Ÿ”‹๐Ÿ”Œ๐Ÿ’ก๐Ÿ”ฆ๐Ÿ•ฏ๐Ÿ—‘๐Ÿ›ข๐Ÿ’ธ๐Ÿ’ต๐Ÿ’ด๐Ÿ’ถ๐Ÿ’ท๐Ÿ’ฐ๐Ÿ’ณ๐Ÿ’Žโš–๐Ÿ”ง๐Ÿ”จโš’๐Ÿ› โ›๐Ÿ”ฉโš™โ›“๐Ÿ”ซ๐Ÿ’ฃ๐Ÿ”ช๐Ÿ—กโš”๐Ÿ›ก๐Ÿšฌโ˜ โšฐโšฑ๐Ÿบ๐Ÿ”ฎ๐Ÿ“ฟ๐Ÿ’ˆโš—๐Ÿ”ญ๐Ÿ”ฌ๐Ÿ•ณ๐Ÿ’Š๐Ÿ’‰๐ŸŒก๐Ÿท๐Ÿ”–๐Ÿšฝ๐Ÿšฟ๐Ÿ›๐Ÿ”‘๐Ÿ—๐Ÿ›‹๐Ÿ›Œ๐Ÿ›๐Ÿšช๐Ÿ›Ž๐Ÿ–ผ๐Ÿ—บโ›ฑ๐Ÿ—ฟ๐Ÿ›๐ŸŽˆ๐ŸŽ๐ŸŽ€๐ŸŽ๐ŸŽŠ๐ŸŽ‰๐ŸŽŽ๐ŸŽ๐ŸŽŒ๐Ÿฎโœ‰๏ธ๐Ÿ“ฉ๐Ÿ“จ๐Ÿ“ง๐Ÿ’Œ๐Ÿ“ฎ๐Ÿ“ช๐Ÿ“ซ๐Ÿ“ฌ๐Ÿ“ญ๐Ÿ“ฆ๐Ÿ“ฏ๐Ÿ“ฅ๐Ÿ“ค๐Ÿ“œ๐Ÿ“ƒ๐Ÿ“‘๐Ÿ“Š๐Ÿ“ˆ๐Ÿ“‰๐Ÿ“„๐Ÿ“…๐Ÿ“†๐Ÿ—“๐Ÿ“‡๐Ÿ—ƒ๐Ÿ—ณ๐Ÿ—„๐Ÿ“‹๐Ÿ—’๐Ÿ“๐Ÿ“‚๐Ÿ—‚๐Ÿ—ž๐Ÿ“ฐ๐Ÿ““๐Ÿ“•๐Ÿ“—๐Ÿ“˜๐Ÿ“™๐Ÿ“”๐Ÿ“’๐Ÿ“š๐Ÿ“–๐Ÿ”—๐Ÿ“Ž๐Ÿ–‡โœ‚๏ธ๐Ÿ“๐Ÿ“๐Ÿ“Œ๐Ÿ“๐Ÿšฉ๐Ÿณ๐Ÿด๐Ÿ”๐Ÿ”’๐Ÿ”“๐Ÿ”๐Ÿ–Š๐Ÿ–‹โœ’๏ธ๐Ÿ“โœ๏ธ๐Ÿ–๐Ÿ–Œ๐Ÿ”๐Ÿ”Žโค๏ธ๐Ÿ’›๐Ÿ’š๐Ÿ’™๐Ÿ’œ๐Ÿ’”โฃ๐Ÿ’•๐Ÿ’ž๐Ÿ’“๐Ÿ’—๐Ÿ’–๐Ÿ’˜๐Ÿ’๐Ÿ’Ÿโ˜ฎโœโ˜ช๐Ÿ•‰โ˜ธโœก๐Ÿ”ฏ๐Ÿ•Žโ˜ฏโ˜ฆ๐Ÿ›โ›Žโ™ˆ๏ธโ™‰๏ธโ™Š๏ธโ™‹๏ธโ™Œ๏ธโ™๏ธโ™Ž๏ธโ™๏ธโ™๏ธโ™‘๏ธโ™’๏ธโ™“๏ธ๐Ÿ†”โš›๐Ÿˆณ๐Ÿˆนโ˜ขโ˜ฃ๐Ÿ“ด๐Ÿ“ณ๐Ÿˆถ๐Ÿˆš๏ธ๐Ÿˆธ๐Ÿˆบ๐Ÿˆทโœด๏ธ๐Ÿ†š๐Ÿ‰‘๐Ÿ’ฎ๐Ÿ‰ใŠ™๏ธใŠ—๏ธ๐Ÿˆด๐Ÿˆต๐Ÿˆฒ๐Ÿ…ฐ๐Ÿ…ฑ๐Ÿ†Ž๐Ÿ†‘๐Ÿ…พ๐Ÿ†˜โ›”๏ธ๐Ÿ“›๐ŸšซโŒโญ•๏ธ๐Ÿ’ขโ™จ๏ธ๐Ÿšท๐Ÿšฏ๐Ÿšณ๐Ÿšฑ๐Ÿ”ž๐Ÿ“ตโ—๏ธโ•โ“โ”โ€ผ๏ธโ‰๏ธ๐Ÿ’ฏ๐Ÿ”…๐Ÿ”†๐Ÿ”ฑโšœใ€ฝ๏ธโš ๏ธ๐Ÿšธ๐Ÿ”ฐโ™ป๏ธ๐Ÿˆฏ๏ธ๐Ÿ’นโ‡
@lukaskollmer
lukaskollmer / PythonistaKit.h
Created July 10, 2016 10:19
PythonistaKit class dump
# coding: utf-8
//
// Generated by class-dump 3.5 (64 bit).
//
// class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2013 by Steve Nygard.
//
#pragma mark Function Pointers and Blocks
typedef void (*CDUnknownFunctionPointerType)(void); // return type and parameters are unknown
@lukaskollmer
lukaskollmer / error.py
Created July 28, 2016 18:59
livejson pretty error
import livejson
import datetime
def save_new_count2(username, count):
date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with livejson.File("../db2.json", pretty=True) as db:
try:
db[username][date] = count
except:
db[username] = {}
db[username][date] = count
data:text/html;base64,PGh0bWw+CjxoZWFkPgogIDx0aXRsZT5CYWNrdXAgU2VtaW5hcmFyYmVpdDwvdGl0bGU+CiAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICA8bWV0YSBuYW1lPSJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlIiBjb250ZW50PSJ5ZXMiPgogIDxtZXRhIG5hbWU9ImFwcGxlLW1vYmlsZS13ZWItYXBwLXN0YXR1cy1iYXItc3R5bGUiIGNvbnRlbnQ9ImJsYWNrLXRyYW5zbHVjZW50Ij4KICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24tcHJlY29tcG9zZWQiIGhyZWY9Imh0dHA6L2xvY2FsaG9zdDo1MjkxOS93ZWJjbGlwcy9pbWFnZXMvQmFja3VwJTI1MjBTZW1pbmFyYXJiZWl0L2ljb24ucG5nIj4KICA8bGluayByZWw9ImFwcGxlLXRvdWNoLXN0YXJ0dXAtaW1hZ2UiIG1lZGlhPSIob3JpZW50YXRpb246IGxhbmRzY2FwZSkiIGhyZWY9Imh0dHA6L2xvY2FsaG9zdDo1MjkxOS93ZWJjbGlwcy9pbWFnZXMvQmFja3VwJTI1MjBTZW1pbmFyYXJiZWl0L2xhbmRzY2FwZS1sYXVuY2gucG5nIi8+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtc3RhcnR1cC1pbWFnZSIgbWVkaWE9IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIiBocmVmPSJodHRwOi9sb2NhbG
@lukaskollmer
lukaskollmer / upcoming_birthdays.py
Created August 10, 2016 17:33
My VERY FIRST Python script EVER
# coding: utf-8
import contacts
import ui
from datetime import datetime
import operator
import console
console.clear()
if not contacts.is_authorized():