Skip to content

Instantly share code, notes, and snippets.

View phoe's full-sized avatar
🤔
:thonk:

Michał "phoe" Herda phoe

🤔
:thonk:
View GitHub Profile
@phoe
phoe / ssl.lisp
Created August 30, 2018 19:12
Connect to Furcadia with STARTTLS
(defun ssl-connect () ;; this is a god damn hack
(let* ((socket (usocket:socket-connect "lightbringer.furcadia.com" 80))
(stream (usocket:socket-stream socket)))
(sleep 1)
(loop while (listen stream)
for line = (read-line stream nil stream)
until (eq line stream)
do (format t "S> ~A~%" line))
(format t "C> ~A~%" "starttls")
(format stream "starttls~C~C" #\Return #\Linefeed)
@phoe
phoe / kbmap-lisp
Created October 18, 2018 07:20
Polish Lisp keyboard map - parens and brackets switched
// based on a keyboard map from an 'xkb/symbols/pl' file
default partial alphanumeric_keys
xkb_symbols "basic" {
// Visualisation and description: http://podziemie.net/xkb/pl
// Contact: Michał Górny <zrchos+freedesktop@gmail.com>
include "latin"
@phoe
phoe / lu-decomposition.lisp
Created November 14, 2018 23:14
LU decomposition in portable Common Lisp
;;; Matrix utilities.
(defun matrix= (matrix-1 matrix-2)
(destructuring-bind (m1y m1x) (array-dimensions matrix-1)
(destructuring-bind (m2y m2x) (array-dimensions matrix-2)
(and (= m1y m2y)
(= m1x m2x)
(loop for y below m1y
always (loop for x below m1x
always (= (aref matrix-1 y x)
@phoe
phoe / pzmq-router-dealer.lisp
Created May 24, 2019 10:15
ZeroMQ pzmq sample router/dealer in Common Lisp
;; modified from pzmq examples
(defun hwclient (&optional (server-address "tcp://localhost:5555"))
"Translation of http://zguide.zeromq.org/c:hwclient updated for ZMQ 3.
Includes some parameters in with-* macros to demonstrate syntax."
(pzmq:with-context (ctx :max-sockets 10)
(pzmq:with-socket (requester ctx) (:dealer :affinity 3 :linger 100)
;; linger is important in case of (keyboard) interrupt;
;; see http://api.zeromq.org/3-3:zmq-ctx-destroy
(pzmq:connect requester server-address)
@phoe
phoe / format-float-junk.lisp
Last active November 21, 2019 11:58
fix for CCL's floating point fuckery - code adapted from SBCL
;; Do not use - a proper fix was committed into my fork at phoe-trash/ccl.
(defconstant single-float-min-e
(- 2 ccl::ieee-single-float-bias ccl::ieee-single-float-digits))
(defconstant double-float-min-e
(- 2 ccl::ieee-double-float-bias ccl::ieee-double-float-digits))
;; TODO: maybe-inline %flonum-to-digits, we don't need the indirection
(declaim (inline %flonum-to-digits))
(defun %flonum-to-digits (char-fun
@phoe
phoe / text.md
Last active February 7, 2020 13:22
loop return value

So recently a religious debate intense discussion happened on #lisp about whether the following form:

;; Form 1
(loop for i from 1 to 5 finally (return i))

should return 5 or 6 (or, in other words, (1+ 5) - this notation is important as it will be used later).

I argue that it is invalid for it to return 6 and 5 must be returned instead.

@phoe
phoe / arcturus-glossary.json
Last active May 14, 2020 21:05
Arcturus riichi mahjong glossary in JSON format - plus tiles, plus standard and nonstandard yaku and yakumans
[{
"romaji": "Agari",
"kanji": "和がり",
"english": "Win",
"explanation": "Generic call for winning a hand."
},
{
"romaji": "Agaripai",
"kanji": "和がり牌",
"english": "Winning tile",
@phoe
phoe / modus-operandi.md
Last active May 5, 2021 11:13
Dear GitHub Trust and Safety Team
@phoe
phoe / analysis.md
Last active May 5, 2021 11:13
Dear GitHub Trust and Safety Team
@phoe
phoe / sbcl-private-package.lisp
Created January 26, 2022 13:23
List all SBCL packages, private, and public ones
(defun starts-with (string substring)
(let ((length (length substring)))
(and (<= length (length string))
(string= (subseq string 0 length) substring))))
(defun list-all-sbcl-packages ()
(flet ((sbcl-package-p (package)
(starts-with (package-name package) "SB-")))
(remove-if-not #'sbcl-package-p (list-all-packages))))