Skip to content

Instantly share code, notes, and snippets.

@Kos
Kos / formats.txt
Last active January 28, 2024 02:47
OpenGL image formats along with their unsized variants and preferred formats for pixel transfer (Written by hand, needs verification) Pixel store for compressed textures not provided because there are glCompressedTexImage and family for them. EXT_texture_compression_s3tc formats not included.
| Image format (sized) | Unsized | Compr | Pixel format | Pixel type |
|---------------------------------------|--------------------|-------|--------------------|-----------------------------------|
| GL_R8 | GL_RED | False | GL_RED | GL_UNSIGNED_BYTE |
| GL_R8_SNORM | GL_RED | False | GL_RED | GL_BYTE |
| GL_R16 | GL_RED | False | GL_RED | GL_UNSIGNED_SHORT |
| GL_R16_SNORM | GL_RED | False | GL_RED | GL_SHORT |
| GL_R32F | GL_RED | False | GL_RED | GL_FLOAT |
| GL_R8I | GL_RED | False | GL_RED_INTEGER | GL_INT |
def book_to_json(book: Book):
return {
"isbn": book.isbn,
"title": book.title,
"author": book.author,
}
def book_from_json(data: dict) -> Book:
return Book(
@Kos
Kos / views.py
Last active April 24, 2021 18:22
def book_list(request: HttpRequest) -> HttpResponse:
if request.method == "GET":
books = Book.objects.filter(visible=True)
if "author" in request.GET:
books = books.filter(author__icontains=request.GET["author"])
if "title" in request.GET:
books = books.filter(title__icontains=request.GET["title"])
response_data = [book_to_json(book) for book in books]
return JsonResponse(response_data, safe=False)
class Book(models.Model):
isbn = models.CharField(max_length=13)
title = models.TextField()
author = models.TextField()
visible = models.BooleanField(default=True)
@Kos
Kos / gamepad.js
Last active December 13, 2020 20:37
// https://w3c.github.io/gamepad/#dfn-standard-gamepad-layout
const Dpad = {
UP: 12,
LEFT: 14,
RIGHT: 15,
DOWN: 13,
};
const Buttons = {
A: 0,
B: 1,
1) First thing I'd do would be to disconnect all the graphics rendering code from your World and Entity; it's going to be complicated enough without them :-)
2) I don't like that an Entity remember its index into the world. Let's revisit a typical roguelike data model:
> a World or a Level has a tilemap (floor, walls, or generally - a tight "grid" of walkable and non walkable scenery) and in addition - a number of entities, where every entity stays on one place in the grid.
You can have zero or more entities in the same slot - a goblin can stand over a pile of items, for instance.
3) Now let's think about the processes that happen. There are processes like movement, attack or picking things up. Let's take movement.
@Kos
Kos / life.py
Created November 28, 2018 20:33
Game of Life
import numpy as np
from scipy.signal import convolve2d
def get_neighbour_counts(array):
kernel = np.array([[1, 1, 1], [1, 0, 1], [1, 1, 1]], dtype=int)
return convolve2d(array, kernel, mode="same", boundary="wrap")
def get_next_state(state, neighbours):
@Kos
Kos / slicing.py
Created January 6, 2013 13:36
Slicing gotchas in Python 2
# Some setup...
import sys
def throws(msg, f):
try:
f()
except Exception, e:
return msg in str(e)
else:
@Kos
Kos / Django Rest Framework serializer tips.ipynb
Created April 23, 2018 09:03
Django Rest Framework serializer tips
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@Kos
Kos / closures.js
Created January 18, 2013 20:09
This snippet is a piece of trivia that illustrates some behaviour of closures in JS. Remember: With great power comes great responsibility! For details, see my blog post: http://kos.gd/2013/01/closures-the-cute-pets-that-bite/
// This snippet is a piece of trivia that illustrates some behaviour of closures in JS.
// Remember: With great power comes great responsibility!
// For details, see my blog post:
// http://kos.gd/2013/01/closures-the-cute-pets-that-bite/
// Setup
if (typeof(print) === 'undefined') print = console.log.bind(console);
// For starters:
// Here's a function that calculates a sum of every N-th element of a given array.