Skip to content

Instantly share code, notes, and snippets.

Avatar

Mohammad Khatib mkhatib

View GitHub Profile
@mkhatib
mkhatib / appengine-service-accounts-on-devserver.md
Created Sep 23, 2017 — forked from pwalsh/appengine-service-accounts-on-devserver.md
Google App Engine Service Accounts that work in local development: A guide for the lost and weary
View appengine-service-accounts-on-devserver.md

It is easy to get service accounts working with App Engine's app_devserver.py - once you know how.

On the way there, you might have pulled out all your hair following one documentation dead end after another, trying to piece together the right information.

Here are the steps you need to take, in exact order, to get this working. Once you follow these steps, you'll be able to use service accounts in local development, so that you can interact with Google APIs (e.g.: Spreadsheet, Calendar) in a way that is consistent with the deployment environment on App Engine.

In order to follow the instructions, you'll be better off using the latest UI for Google Cloud projects. Older interfaces (such as the dedicated App Engine dashboard) have things in different places, under different names, etc. It is a world of pain there.

Also note that I've tested this on several 1.9.x releases of App Engine; I can't confirm the behaviour of earlier releases.

@mkhatib
mkhatib / manshar.com-service-worker.js
Created Feb 25, 2016
Service Worker with a problem of same hash with two different cache content on two different browsers.
View manshar.com-service-worker.js
'use strict';
importScripts("workers/sw-toolbox-workers.js");
var PrecacheConfig = [
["404.html", "85f3907148cdb68254687c3de7f89a25"],
["bower_components/angular-file-upload/dist/angular-file-upload-shim.min.js", "026ef609992ad0f8d1b02dae399a764b"],
["favicon.ico", "b2eb3d352ea4e8f74b160b46ccc881b9"],
["https://ajax.googleapis.com/ajax/libs/angularjs/1.3.17/angular.min.js", "cd13a2e1aad01b347ad15d5e201f39ee"],
["https://fonts.googleapis.com/earlyaccess/droidarabicnaskh.css", "0d94281129940b9c1a522545882c8293"],
["https://fonts.gstatic.com/ea/droidarabicnaskh/v7/DroidNaskh-Bold.ttf", "aedd83523a65f2c0dc4e2bad69b94534"],
["https://fonts.gstatic.com/ea/droidarabicnaskh/v7/DroidNaskh-Bold.woff", "78aa34ad512567cf0b5e7fc611ff3099"],
@mkhatib
mkhatib / app.js
Created Jan 14, 2016
Carbon Usage
View app.js
var element = document.getElementById('editor');
var editor = new carbon.Editor(element, {
rtl: true,
modules: [carbon.EmbeddedComponent]
});
editor.install(carbon.EmbeddingExtension, {
embedProviders: {
embedly: new carbon.EmbedlyProvider({
apiKey: EMBEDLY_API_KEY
@mkhatib
mkhatib / app.js
Created Jan 14, 2016
Carbon Usage
View app.js
var element = document.getElementById('editor');
var editor = new carbon.Editor(element, {
rtl: true,
modules: [carbon.EmbeddedComponent]
});
editor.install(carbon.EmbeddingExtension, {
embedProviders: {
embedly: new carbon.EmbedlyProvider({
apiKey: EMBEDLY_API_KEY
View designer.html
<link rel="import" href="../core-icon-button/core-icon-button.html">
<link rel="import" href="../core-toolbar/core-toolbar.html">
<link rel="import" href="../core-scroll-header-panel/core-scroll-header-panel.html">
<link rel="import" href="../paper-tabs/paper-tabs.html">
<link rel="import" href="../paper-tabs/paper-tab.html">
<polymer-element name="my-element">
<template>
<style>
View designer.html
<link rel="import" href="../components/polymer/polymer.html">
<polymer-element name="my-element">
<template>
<style>
#core_drawer_panel {
position: absolute;
top: 420px;
right: 0px;
View designer.html
<link rel="import" href="../components/polymer/polymer.html">
<polymer-element name="my-element">
<template>
<style>
#core_scaffold {
position: absolute;
top: 0px;
right: 0px;
@mkhatib
mkhatib / ag-mk-shortcut.js
Created Jun 18, 2013
Adds an AngularJS directive to add keyboard shortcuts for elements with ng-click directive.
View ag-mk-shortcut.js
var app = angular.module('app');
app.directive('mkShortcut', function($document) {
// Ref: http://goo.gl/7XDys
function fireEvent(element, event) {
if (document.createEvent) {
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true ); // event type,bubbling,cancelable
@mkhatib
mkhatib / geopoint.py
Last active Apr 24, 2018
A small class that represents a basic geolocation point and have a method to generate random points around that point given a radius and count.
View geopoint.py
"""A simple GeoPoint object to generate random points nearby."""
import math
import random
class GeoPoint(object):
"""Represents a geolocation point with latitude and longitude."""
@mkhatib
mkhatib / geo.js
Created May 24, 2013
A Javascript utility function to generate number of random Geolocations around a center location and in a defined radius.
View geo.js
/**
* Generates number of random geolocation points given a center and a radius.
* @param {Object} center A JS object with lat and lng attributes.
* @param {number} radius Radius in meters.
* @param {number} count Number of points to generate.
* @return {array} Array of Objects with lat and lng attributes.
*/
function generateRandomPoints(center, radius, count) {
var points = [];
for (var i=0; i<count; i++) {
You can’t perform that action at this time.