Skip to content

Instantly share code, notes, and snippets.

View fzakaria's full-sized avatar

Farid Zakaria fzakaria

View GitHub Profile
@fzakaria
fzakaria / analyze_git_signatures.py
Created April 16, 2025 16:03
Find the number of git commits that have changed public signatures in Java code
#! /usr/bin/env python3
import subprocess
import re
import datetime
from collections import defaultdict, Counter
import argparse
import os
import sys
@fzakaria
fzakaria / generate_classpath.py
Created March 14, 2025 20:43
Generate a .classpath from a text file
import sys
import os
from xml.etree import ElementTree as ET
from xml.dom import minidom
# Usage: python gen_classpath.py jars.txt /path/to/bazel/workspace
def find_binary_jar(source_jar):
"""Replace '-sources.jar' or '-src.jar' with '.jar' or 'lib' prefix if necessary"""
dir_name, file_name = os.path.split(source_jar)
@fzakaria
fzakaria / count_dyn_syms.py
Created March 13, 2025 22:31
Count exported symbols from all shared objects in the dependency tree
#! /usr/bin/env nix
#! nix shell github:tomberek/-#python3With.pyelftools --command python3
import sys
import subprocess
import re
import os
from elftools.elf.elffile import ELFFile
from elftools.elf.constants import SHN_INDICES
@fzakaria
fzakaria / MODULE.bazel
Created January 14, 2025 19:58
Using Bazel Build Event Service (BES)
build_event_stream_repo = use_extension("//tools/build_defs:bes_repo.bzl", "build_event_service_repo")
build_event_stream_repo.settings(
name = "bazel_bes",
revision = "7.4.1",
sha256s = {
"build_event_stream.proto": "7388663cc11b0642ffce0e3a14bd4c4902b913fb5697e5cf47b7a4d7c8ba5640",
"command_line.proto": "a6fb6591aa50794431787169bc4fae16105ef5c401e7c30ecf0f775e0ab25c2c",
"invocation_policy.proto": "7a1f9074d64aaea2c5fc01df093a25fbbd68d84db63fbfb355f5aa15683a75cd",
"option_filters.proto": "bc1cc29e53e2856c3ae25149cc6661bb218737a9146e7417eb29f8caaa715821",
<<<<<<< Conflict 1 of 1
%%%%%%% Changes from base #1 to side #1
load("@contrib_rules_jvm//java:defs.bzl", "java_binary")
java_binary(
name = "mvn",
jvm_flags = ["-Dmaven.multiModuleProjectDirectory=/tmp/m2"],
main_class = "org.apache.maven.cli.MavenCli",
visibility = [
"//python/release_tools:__pkg__",
@fzakaria
fzakaria / shell.nix
Created January 10, 2025 05:12
CSE130 nix-shell
{
pkgs ?
import (fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/nixpkgs-unstable.tar.gz";
sha256 = "sha256:01f1ym9f0dr66yg6d2fzapscrd0dh125zpi04wp0b2l32v57nxq8";
}) {},
}: let
pypkgs = pkgs.python3Packages;
autograder = pypkgs.buildPythonPackage rec {
pname = "autograder-py";
@fzakaria
fzakaria / fzf-jj
Created December 3, 2024 19:51
A simple fzf powered jujutsu command that shows some possible revsets.
#!/bin/bash
# Define revsets and their descriptions
revsets=(
"all()" "All commits of the repository"
"::@" "Show all ancestors"
"remote_bookmarks().." "Show all commits that are not in remote bookmarks"
"mine()" "Commits authored by the current user"
)
@fzakaria
fzakaria / jar_index.bzl
Created November 7, 2024 17:47
Bazel Starlark rule to create a JarIndex
def _jar_index_impl(ctx):
java_info = ctx.attr.src[JavaInfo]
java_runtime = ctx.attr._java_runtime[java_common.JavaRuntimeInfo]
java_home = java_runtime.java_home
jar_bin = "%s/bin/jar" % java_home
runtime_jars = " "
for jar in java_info.transitive_runtime_jars.to_list():
runtime_jars += jar.path + " "
@fzakaria
fzakaria / BUILD.bazel
Created October 4, 2024 02:59
Creating a JAR natively in Starlark
load("@bazel_skylib//rules:write_file.bzl", "write_file")
genrule(
name = "example",
outs = ["example.jar"],
cmd = """
OLD_CWD=$$(pwd) && cd $(RULEDIR) && \\
$$OLD_CWD/$(JAVABASE)/bin/jar cmfv $(rootpath :manifest) \\
$$OLD_CWD/$@ $(rootpath :main_class)
@fzakaria
fzakaria / index.html
Created August 8, 2024 16:02
A little web-page for my Raspberry Pi to show the local surf conditions at Steamer Lane, Santa Cruz, CA
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Santa Cruz Surf Watch</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;