Skip to content

Instantly share code, notes, and snippets.

View damieng's full-sized avatar
🏠
Working from home

Damien Guard damieng

🏠
Working from home
View GitHub Profile
@damieng
damieng / LINQOrExpressionCombiner.cs
Created May 17, 2017 05:42
OR together LINQ expressions for Where clauses etc
class Or
{
public static Expression<Func<T, bool>> Combine<T>(Expression<Func<T, bool>> left, Expression<Func<T, bool>> right)
{
var parameter = Expression.Parameter(typeof(T), "p");
var combined = new ParameterReplacer(parameter).Visit(Expression.OrElse(left.Body, right.Body));
return Expression.Lambda<Func<T, bool>>(combined, parameter);
}
class ParameterReplacer : ExpressionVisitor
@damieng
damieng / Mehkee96.json
Last active December 17, 2017 20:37
Mehkee 96 bootmapper with split number/arrow area
[
[
[
{
"index": 103,
"label": "LCtrl"
},
{
"index": 104,
"label": "LShift"
@damieng
damieng / download-with-fetch.ts
Created February 16, 2018 03:59
Download a file with progress indication using just window.fetch + node (TypeScript version)
import * as fs from 'fs';
// Public: Download a file and store it on a file system using streaming with appropriate progress callback.
//
// * `sourceUrl` Url to download from.
// * `targetFile` File path to save to.
// * `progressCallback` Callback function that will be given a {ByteProgressCallback} object containing
// both bytesDone and percent.
// * `length` Optional file length in bytes for cases where the server will not supply the
// Content-Length header but the value is known in advance. Without either the
@damieng
damieng / algolia-search.html
Last active May 30, 2018 04:54
Algolia search from damieng.com
<script src="https://cdn.jsdelivr.net/npm/algoliasearch@3/dist/algoliasearchLite.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/algoliasearch-helper@2.26.0/dist/algoliasearch.helper.min.js"></script>
<script>
let searchForm = document.getElementById('search-form')
let hits = document.getElementById('hits')
let algolia = algoliasearch('{your-site-id}', '{your-search-token}')
let helper = algoliasearchHelper(algolia, '{your-index-name}', { hitsPerPage: 10, maxValuesPerFacet: 1, getRankingInfo: false })
helper.on("result", searchCallback)
function runSearch() {
@damieng
damieng / config.yml
Last active June 3, 2018 01:50
CircleCI config for damieng.com
version: 2
jobs:
build:
docker:
- image: circleci/ruby:2.3
working_directory: ~/jekyll
environment:
- JEKYLL_ENV=production
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
- JOB_RESULTS_PATH=run-results
@damieng
damieng / jekyll1.unp
Created July 22, 2018 20:31
Dr. Jekyll & Mr Hide Part 1 decompiled
PAW Database : JEKYLL.sna
Extracted by UNPAWS32 v2.1
General data
------------
Locations 25
Objects 15
@damieng
damieng / crystal-quest.unp
Last active July 22, 2018 22:28
Crystal Quest decompiled PAWS adventure
PAW Database : CrystalQuest.z80
Extracted by UNPAWS32 v2.1
General data
------------
Locations 49
Objects 60
@damieng
damieng / theghost.asm
Last active November 6, 2018 19:55
Ghost 48K compatibility for +2/+3 Sinclair ZX Spectrums
; Code by Mark Harris, published in Your Sinclair Issue 59 http://live.worldofspectrum.org/infoseek/magazines/your-sinclair/59#20
; Disassembly and comments by Damien Guard.
ORG 28000
; Setup pages to allow 48K ROM to be copied to RAM page 4.
DI
LD A,0x14 ; 48K ROM at 0x0000, RAM page 4 at 0xc000
LD BC,0x7ffd ; 128K paging port
OUT (C),A ; Switch the pages
@damieng
damieng / zx-to-ttf.sh
Last active April 21, 2019 05:09
ZX to TTF font conversion shell script (required psftools modified, PixelWorld and FontLab Studio + scripts)
#!/bin/bash
fl5reg="HKCU\Software\FontLab\Studio 5\Directories"
for i in "$@"
do
name="${i%.*}"
echo Processing $name
pw preview "$i" . >> /dev/null
psf="${name}.psf"
vfb="${name}.vfb"
zx2psf "$i" "${psf}" --mode=move1 --graphics=none
@damieng
damieng / zx-font-convert.sh
Last active October 19, 2023 14:00
ZX Spectrum font conversion script
#!/bin/bash
fl5reg="HKCU\Software\FontLab\Studio 5\Directories"
for i in "$@"
do
name="${i%.*}"
echo Processing $name
mkdir -p PC
psf="PC/${name}.psf"
vfb="PC/${name}.vfb"