summaryrefslogtreecommitdiffstats
path: root/2023/talks/cubing.md
blob: b8f1132753fd923bd498f9544ca1170876ee7b6e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
[[!meta title="Speedcubing in Emacs"]]
[[!meta copyright="Copyright © 2023 Vasilij "wasamasa" Schneidermann"]]
[[!inline pages="internal(2023/info/cubing-nav)" raw="yes"]]

<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
<!-- You can manually edit this file to update the abstract, add links, etc. --->


# Speedcubing in Emacs
Vasilij "wasamasa" Schneidermann (he/him) - Pronunciation: [vɐˈsʲilʲɪj] [vazamaza] [ˈʃnaɪ̯dɐman], IRC: wasamasa, Website: <https://emacsninja.com> Fediverse: @wasamasa@lonely.town, <mailto:mail@vasilij.de>

[[!inline pages="internal(2023/info/cubing-before)" raw="yes"]]

Emacs is well-known for its kitchen-sink nature and sheer extensibility.
However, its utility for tasks beyond text manipulation is still
disputed. While it is possible to do most of your computing inside
Emacs, the existing solutions are of varying quality. Sometimes it is
necessary to create a custom solution tailored to one's personal needs
and I believe Emacs to be a worthwhile platform for this.

In this talk I present my journey of building a package to assist me
with speedcubing, a competitive sport with the goal of solving the
Rubik's Cube as fast as possible. Along with a demo, useful Emacs
features and challenges that came up during development will be shown.


# Discussion

## Questions and answers

-   Q: I see that there is a way to document the time it took to
    complete the puzzle; however, what about other things such as the
    date and time, and potentially a note on technique or warm up
    routine etc? It seems like an interface that included these things
    would also help people who are practicing and trying to improve. It
    would help answer the question... what kinds of things do I need to
    do to improve. ;;Thank you for your answer.
    -   A: Currently, only the timestamp and completion time are
        recorded for the puzzle/label. However, I've looked at
        twisty-timer and it does record both the used scramble and a
        comment field as well, so I plan adding those once the other
        features work properly. This would allow keeping track of
        particularly good/bad solves for example.
-   Q: As a side-note, could you say something about how you use emacs
    to help with your cybersecurity or CTF actifivities? Are there some
    recommended packages or do you use all of your own templates and
    procedures to speed your activity? Maybe just post a link to your
    homepage or GH repositories.
    -   A: It's pretty much only Org usage to document my activities in
        a way that I know what I did 3 weeks ago and can pick up my
        research from then. I do not use Emacs for source code review
        specifically (depending on the target environment, there are
        better suited tools). The thing with the field is that often,
        one has to resort to work with whatever tools are at hand and to
        make the most of them, which is kind of at odds with using Emacs
        first and foremost as an integrated environment for everything.
        Other than Org, I use it as an editor for pretty much any
        programming language I encounter.
-   Q: What are the biggest challenges to using transient?
    -   A: The documentation was very high-level compared to what I'm
        used to, so I had to skim it a lot to find out how to use it for
        basic tasks. I think it would be useful to have some slightly
        more hands-on examples for common tasks. One issue I've run
        into a few times was the code using generic functions, so it was
        difficult to debug errors (like using a non-interactive lambda
        form when a command was expected and getting an unhelpful error
        message).
        -   <https://github.com/positron-solutions/transient-showcase>
            might be helpful.
            -   Definitely, but as I've remarked in the talk, the
                examples felt very "generic". Slightly more realistic
                examples would make it even better.
-   Q: Very cool project.  Alas I'm not a cuber, so my question is
    merely, what did you learn in the process of making this
    presentation?
    -   A: I've never recorded a demo video happening outside of my
        laptop before, so getting the external recording setup right
        was... fun. It involved a ladder, several cardboard boxes and
        my phone. After five attempts (one of which ended up with the
        cube rolling off the desk loudly), I finally got an okayish
        recording to use for the presentation.
-   Q: Does svg.el support tap events? 
    -   A: svg.el is only responsible for generating valid SVG documents
        and one can put whichever tags/attributes there they wish. From
        my understanding, anything interactive usually solved with JS in
        the browser would need to be rewritten using Emacs Lisp instead.
        Tap events for example could be solved with the ":map"
        property put on the image and would work for other image formats
        than SVG as well.

Notes

- There's probably quite a few cubers in here. =) I tend to average 50s on 3x3, the kiddo is usually a bit faster.
- I've recently got a 45s best with LBL
- I have some code in my config to draw last-layer diagrams as SVGs and an Org link thing like #+LINK: pll https://alg.cubing.net/?stage=PLL&type=alg&setup=x_y_z&view=playback&alg=%s to link to algs quickly; https://sachachua.com/blog/2023/02/using-org-babel-to-learn-rubik-s-cube-algorithms/
 - speaker: ah yes, I've had the idea to try out roofpig or cubing.js for doing that in org documents, nice to see it has been done before
- FWIW transient just had a v0.5.0 release which adds and fixes things.  It continues to improve thanks to tarsius's tireless work.
- i'm glad you're exploring Emacs UI wasamasa , i've also been confounded trying to write a transient, and its nice to see that sqlite is working for ya
- to be fair, I've considered to just stick to my usual approach of writing boring code that does work on as many machines as possible, but there were so many new features that would help making a nice looking and working package that I decided to just depend on emacs 29.1

[[!inline pages="internal(2023/info/cubing-after)" raw="yes"]]

[[!inline pages="internal(2023/info/cubing-nav)" raw="yes"]]