Skip to content

Instantly share code, notes, and snippets.

View badvision's full-sized avatar

Brendan Robert badvision

View GitHub Profile
@badvision
badvision / previewOrAnnotateOnly.js
Last active August 29, 2015 14:24
AEM 6.1: Require a user to be in a specific group in order to edit content. Other users will only see preview and annotate layers
// This must be in a client library with the category cq.authoring.editor.hook
/* global Granite, CQ, window */
(function($, author, user, http) {
'use strict';
var UUID = 'UUID',
MEMBERS = 'EDITOR_MEMBERS',
EDITOR_GROUP = '/home/groups/express/express-content-editors',
PREVIEW = 'Preview',
ANNOTATE = 'Annotate',
hideEditLayer = function() {
@badvision
badvision / reloadOnLayerSwitch.js
Last active May 17, 2021 14:09
AEM 6.x: Reload the page when the user switches layers
// This must be in a client library with the category cq.authoring.editor.hook
/* global Granite, jQuery, document */
(function ($, channel) {
'use strict';
$(function () {
var loadedTime = new Date();
channel.on('cq-layer-activated', function (event) {
if (event.prevLayer && event.layer !== event.prevLayer) {
var eventTime = new Date();
if (event.prevLayer !== 'Annotate' && event.layer !== 'Annotate' && (eventTime - loadedTime) > 1500) {
@badvision
badvision / kaboom.a
Created July 15, 2015 07:20
Apple II: Kaboom animation
*= $300;
!cpu 65c02;
;Kaboom: Simple Lo-res color cycle just for fun
php
pha
phx
phy
@badvision
badvision / lemonade_stand.bas
Created July 24, 2015 07:38
Lemonade stand (Applesoft basic)
1 LOMEM: 14080
5 GOSUB 10000: GOSUB 11000: GOSUB 16000: GOTO 135
10 REM <<< LEMONADE STAND >>>
15 REM
20 REM FROM AN ORIGINAL PROGRAM
30 REM BY BOB JAMISON, OF THE
40 REM MINNESOTA EDUCATIONAL
50 REM COMPUTING CONSORTIUM
60 REM * * *
70 REM MODIFIED FOR THE APPLE
REM Original posted by mmphosis to comp.sys.apple2.programmer
REM Shortened down to two lines by b. robert
0 HGR : HCOLOR= 6: HPLOT 0,0 : CALL 62454: B = 70 : FOR Y = 0 TO 99 : READ A$:L = LEN (A$): IF L THEN B = B + 2: P = 130: Q=131: FOR X = 1 TO L:P=P+2: Q=Q+2: HCOLOR=VAL(MID$ (A$,X,1)) : FOR Z = B TO B+1 : HPLOT P,Z TO Q,Z: NEXT Z,X,Y
1 DATA 66666555555,66665555555555,666644477477,66647477747777,666474477747777,66644777744444,6666677777777,66664445444,66644445444,6744445544,7774455755,6445555555,6664455555,6664444,66444,
@badvision
badvision / archimedes.a
Last active February 20, 2017 21:54
Mockingboard sound driver
*= $4000
!cpu 65c02
!sl "globals.txt"
;-----------
reg_ORB = 0 ;Output Register B
reg_ORA = 1 ;Output Register A
reg_DDRB = 2 ;Data direction reg B
reg_DDRA = 3 ;Data direction reg A
reg_T1CL = 4 ;T1 low-order latches (low-order counter for read operations)
import com.webcodepro.applecommander.storage.os.dos33.DosFormatDisk
import com.webcodepro.applecommander.storage.Disk
import com.webcodepro.applecommander.storage.physical.DosOrder
import com.webcodepro.applecommander.storage.physical.ByteArrayImageLayout
import java.io.File
def baseDir="/Users/blurry/Downloads/ac33"
def outDir="/Users/blurry/Downloads/ac33_extracted"
def sourceFolder = baseDir as File
@badvision
badvision / sessionSummary.groovy
Created February 9, 2016 23:30
Summarize all open JCR sessions by the stack trace of the code that opened them. This helps identify session leaks in code.
import groovy.json.JsonSlurper
//Get data from here: /system/sling/monitoring/mbeans/org/apache/jackrabbit/oak/%2522SessionStatistics%2522.2.json
def file = '/Users/brobert/Desktop/all_sessions.json' as File
def sanitizeStacktrace = {trace->
if (trace.contains("loginAdministrative")) {
def lines = trace.split("\n")
def startIdx;
for (def idx=0; idx < lines.length; idx++) {
@badvision
badvision / getAllGroupInfo.groovy
Last active March 8, 2016 17:18
AEM Group membership extractor, use with buildGroupMatrix to produce a spreadsheet of all users and what groups they're in
// Step 1: retrieve group list via http://AEMINSTANCE:4502/home/groups.xml and save as group.xml
// Step 2: modify this script (find/replace AEMINSTANCE:4502 with your AEM host/port, also USERNAME and PASSWORD)
// Stpe 3: run this script in the same directory as group.xml
// Step 4: make the output groups_retrieve.sh executable and run it
// Step 5: use the buildGroupMatrix.groovy script to render the spreadsheet
def groupXml = 'groups.xml' as File
def outScript = 'groups_retrieve.sh' as File
def allGroups = new XmlSlurper().parseText(groupXml.getText())
pathBuilder = {node, path="" ->
@badvision
badvision / buildGroupMatrix.groovy
Created March 8, 2016 17:17
Part 2 of building user information (See getGroupInfo.groovy for instructions)
import groovy.json.*
def slurper = new JsonSlurper()
slurper.setType(JsonParserType.INDEX_OVERLAY);
def groupDir = '.' as File
def output = 'matrix.txt' as File
def users = new TreeMap();
def userGroups = new HashMap();