Skip to content

Instantly share code, notes, and snippets.

@Kos
Kos / pytest_helpers.py
Last active May 1, 2025 13:58
Pytest helpers
class AnyUUID:
def __eq__(self, other):
if isinstance(other, str):
try:
UUID(other)
return True
except ValueError:
return False
else:
return isinstance(other, UUID)
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,
@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 / Django Rest Framework serializer tips.ipynb
Created April 23, 2018 09:03
Django Rest Framework serializer tips
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@Kos
Kos / 01_backend.py
Created November 22, 2014 21:04
Dajaxice replacement idea
from rest_framework.decorators import api_view
from rest_framework.response import Response
import ajaxmelt
@ajaxmelt.register('POST')
@api_view
@login_required
def edit_name(request):
campaign = get_object_or_404(Campaign.objects.visible_to(request.user), id=campaign_id)
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 / UglifyJSCompressor.py
Created February 28, 2014 12:48
Source maps with Django Compressor
import os
import shutil
import subprocess
import tempfile
import uuid
from compressor import base
from compressor.conf import settings as compressor_settings
from compressor.js import JsCompressor
from django.conf import settings
from django.core.files import File