Lightning Talks, Day 1 - SPS24
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 18 | |
Author | ||
Contributors | ||
License | CC Attribution 4.0 International: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor. | |
Identifiers | 10.5446/69805 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
5
12
00:00
Suite (music)CodeDatabasePoint (geometry)CodeSimultaneous localization and mappingMultiplication signGoodness of fitSlide ruleOffice suiteLevel (video gaming)Open sourceProbability density functionComputer animationLecture/Conference
02:34
Slide ruleSoftwareDatabaseQuery languageCodeSummierbarkeitTask (computing)Axiom of choiceBuildingSynchronizationSchemaevolutionDialectDisintegrationObject-relational mappingObject (grammar)Electric generatorRelational databaseLogicWrapper (data mining)Data managementRegulärer Ausdruck <Textverarbeitung>Software frameworkLibrary (computing)Core dumpControl flowOracleTupleEndliche ModelltheorieData modelPartial derivativeData conversionTerm (mathematics)Computer configurationRankingInterface (computing)String (computer science)Table (information)Data structureIntegerLetterpress printingUniform boundedness principleIdentity managementParameter (computer programming)IterationQuery languageCodeBlack boxNumberPoint (geometry)Category of beingInternet forumPointer (computer programming)Row (database)Multiplication signSynchronizationEvoluteDatabaseTerm (mathematics)Task (computing)Vulnerability (computing)Library (computing)Flow separationSingle-precision floating-point formatResultant3 (number)Autonomous System (Internet)Interpreter (computing)Power (physics)Programmer (hardware)Cartesian coordinate systemDifferent (Kate Ryan album)String (computer science)Table (information)RankingLine (geometry)DialectPairwise comparisonMappingCore dumpAxiom of choiceTypprüfungWindowType theoryComputer animationSource code
07:52
Query languageSchemaevolutionTerm (mathematics)DisintegrationSynchronizationDatabaseCodeRankingData modelObject-relational mappingDialectBuildingPartial derivativeCore dumpLibrary (computing)Computer configurationInterface (computing)FeedbackTask (computing)FirmwareDevice driverWritingSoftware testingMatrix (mathematics)Revision controlBefehlsprozessorWhiteboardLoop (music)Hardware-in-the-loop simulationServer (computing)Installation artGroup actionSoftware testingComputer hardwareOrder (biology)BefehlsprozessorSlide ruleAdaptive behaviorConditional-access moduleWhiteboardResultantProgrammer (hardware)Multiplication signSoftwareDirection (geometry)CodeElectronic mailing list2 (number)Query languageAreaRow (database)Server (computing)Patch (Unix)PiRepository (publishing)Physical systemProbability density functionProcess (computing)Real numberFirmwareConnected spaceProjective planeDevice driverLevel (video gaming)Bus (computing)Personal identification numberDifferent (Kate Ryan album)Raw image formatRevision controlRoboticsSoftware developerAsynchronous Transfer ModeCartesian coordinate systemPower (physics)Open setLoop (music)Computer animationProgram flowchartLecture/ConferenceMeeting/Interview
13:01
BefehlsprozessorInstallation artServer (computing)Group actionSoftware testingBefehlsprozessorFeedbackResultantKreisprozessSoftwareGroup actionPiServer (computing)Conditional-access moduleNeuroinformatikType theoryVolumenvisualisierungComputer animationLecture/Conference
14:20
BefehlsprozessorInstallation artServer (computing)Group actionDialectSinePatch (Unix)Software development kitMultiplication signCartesian coordinate systemSoftware testing2 (number)Computer hardwareAutomationComputer virusError messageLoop (music)Computer animationLecture/ConferenceMeeting/Interview
15:48
Run time (program lifecycle phase)Real numberException handlingLibrary (computing)Software frameworkPatch (Unix)Server (computing)ResultantWrapper (data mining)Error messageFunctional (mathematics)Division (mathematics)Projective planeSlide ruleData dictionaryParameter (computer programming)Revision controlModule (mathematics)Social classQuicksortGoodness of fitSystem callSubsetCodeRootBlock (periodic table)Web pageSoftware development kitString (computer science)Software bugRoutingDescriptive statisticsMereologySubject indexingRun time (program lifecycle phase)Lecture/ConferenceComputer animation
20:09
Slide ruleVideo projectorData conversionProjective planeLevel (video gaming)Computer animation
21:07
Fluid staticsSystem programmingJava appletComputer virusInterpreter (computing)Physical systemMechatronicsType theorySource codeAxiom of choiceComputer fileInheritance (object-oriented programming)Product (business)WordExistenceType theoryLine (geometry)Error messageFluid staticsFormal languageInterpreter (computing)Physical systemIntegrated development environmentArrow of timeProjective planeCodeJava appletRevision controlSoftware testingAxiom of choiceGraph (mathematics)PiLecture/ConferenceComputer animationJSONXMLUML
23:19
StapeldateiPartition (number theory)Java appletNumberData typeElectronic mailing listElectronic mailing listUtility softwareJava appletComputer fileType theoryString (computer science)JSONXMLUMLComputer animation
23:52
Partition (number theory)Cache (computing)Data typeSummierbarkeitSoftware developerMultiplication signNumberCASE <Informatik>JSONXML
24:26
StapeldateiLetterpress printingStandard deviationLibrary (computing)Slide ruleExistenceOpen setLattice (order)Point (geometry)Multiplication signJava appletCASE <Informatik>FeedbackObject (grammar)Projective planeLibrary (computing)Standard deviationCodePhysical systemSource codeLine (geometry)Functional (mathematics)Open setSoftware testingDirectory serviceComputer fileSlide rule2 (number)Interactive televisionType theoryLetterpress printingGoodness of fitOcean currentPartition (number theory)Cycle (graph theory)Process (computing)Student's t-testGraphics tabletLipschitz-StetigkeitSoftwareOpen sourceResultantJSONLecture/ConferenceMeeting/InterviewComputer animationSource codeXML
29:54
ExistenceRobotComputer engineeringVideo gameString (computer science)outputLine (geometry)Ocean currentSheaf (mathematics)KinematicsData managementGame theoryInstance (computer science)Arithmetic progressionRoboticsContext awarenessDirectory serviceDigital electronicsComa BerenicesNeuroinformatikMultiplication signComputer fileText editorLibrary (computing)Slide ruleGraphics tabletIterationObject (grammar)Computer programmingCASE <Informatik>Functional (mathematics)Presentation of a groupWebsiteModule (mathematics)ExistenceOpen sourceXMLLecture/ConferenceComputer animation
35:23
RoboticsOpen sourceSpacetimeElement (mathematics)Inheritance (object-oriented programming)Computer animation
35:54
Advanced Encryption StandardComplete metric spaceSoftware testingDifferent (Kate Ryan album)Projective planeOpen sourceControl flowCodeSoftware testingPosition operatorSlide rulePiMultiplication signFlagType theoryMusical ensembleAuthorizationBitFormal languageOpen setRevision controlComplete metric spaceSource codeSoftwareLetterpress printingExterior algebraServer (computing)DivisorClosed setSuite (music)WebsiteRight anglePoint (geometry)Disk read-and-write headIntegrated development environmentSoftware bugOcean currentComputer animationLecture/ConferenceMeeting/InterviewJSON
Transcript: English(auto-generated)
00:05
Welcome back. We are ready for the lightning talks. That was quite a last minute effort because I had a couple of minutes left to prepare those slides and then figured out that people sent things in PDF and HTML and LibreOffice documentation and Google Drive.
00:29
But I made it all work in a last minute effort. Let's hope it works more or less seamlessly. We have a couple of minutes extra, so I have a couple of minutes to be silly on stage.
00:41
At your Python there are usually people pulling chokes. That's not what we're going to do. But you will have an active role in those lightning talks as well. Raise your hand if you have ever been at a poetry slam before. Nice. So you might already know what's going to happen.
01:01
You will have an active role here in interrupting the speaker if they end up talking for too long. And how that will happen is in the nicest way possible with applause. So I will appear back here and I will start with a very quiet applause and you will join in at that point. Feel free to do that just now. Just as a little one.
01:23
Very quiet, very quiet. More calm than that. So they notice it but they still have time to speak. Let's try that again. Just a very small applause. Yeah, that's better. That's good. And that will happen when I raise one hand back there.
01:41
And then when I raise two hands it's time to give them a real applause so they have no chance to continue speaking. Let's try that real quick. There we go. So that will happen after, let's say, four-ish and five minutes.
02:04
I will be back there. Raise one hand. Quiet applause. Raise both hands. Big applause. That's all from my side. And now Stefan Koehler made from code to database how to make Titans and elephants dance together.
02:20
Thank you very much. I'll not be speaking about the elephant in the room. And I really hope to give you more time since I never joined such a poetry slam. But let's start from code to database queries and how to make Titans and elephants dance together.
02:43
And that could look like this. And the point is my whole talk is about connecting Python applications to databases, my specialty, like Postgres. And Postgres, that's the muppet of Postgres.
03:04
And it's a common yet complex task in the power of modern SQL and the choice of many existing libraries. So this talk is about evaluating seven Python software libraries that make it easy to connect Python to databases like Postgres,
03:21
but not only using seven criteria and not considering code synchronization and schema evolution support. So the top seven software libraries are SQLAlchemyCore, PyPika, then Records, and PonyORM.
03:45
Does it have pointer? No. Probably not. And databases with SQLAlchemy and GV, which requires Psycock2 and TortoiseORM.
04:02
Do we have a pointer now? You owe me two minutes for testing out the laser. Okay, it works, actually.
04:21
So the SQLAlchemy is perhaps the most famous one, and that's widely used. And PyPika is quite a new one in my experience. And Records is another one, and they all have different properties.
04:46
So the comparison goes along the lines of how lightweight they are, how Pythonic they are, how typing support is there, which is yet really supported by Python itself,
05:05
then about query typing support, then its criteria is how the result is being handled, especially regarding Pandas, and how the SQL dialect is being supported.
05:21
So it goes there, as you see, and you probably wait for some ranking, which goes like this. So no single winner overall, because they all have different strengths. So you see changing winners in the first place.
05:42
You see several times PyPika and two times also SQLAlchemy. And that's mainly my point. So the overall ranking is really more or less SQLAlchemy in number one, and PyPika as number two, and Records as number three.
06:04
But having said this, it of course always depends. So if you look at some code snippets, you see right away the differences. So SQLAlchemy requires you to have some mapping, which for some programmers is too much already,
06:24
of some restrictions, because the table already exists in the database. So it really is about mapping to Python. And so compared to that one, where you see a nice thing over there in the query,
06:43
where it's SQL-like, but still in Python, so very Pythonic and type-safe, because that is tested at compile time, at interpretation time right away, as opposite, for example, to that example where you really have a string and SQL inside,
07:07
which is a black box to the interpreter, and will be tested or failed at runtime, which is not type-safe. So it really depends on your needs,
07:21
on how much you really want to exploit the possibilities of your database. And that's mainly what I wanted to show. So in fact, having some minutes, probably, I still come back to the strengths and weaknesses.
07:44
So the weaknesses of SQLAlchemy is that it's moderate in terms of lightweight. It's not so lightweight, actually, and typing support is only partial. The drawback of records, for example, is that it's really limited to executing raw queries,
08:05
while Typek, for example, it lacks a direct result handling and relies on adapters. Thank you very much.
08:24
I hope you get the slides afterwards to look on these all over once again. Whoever is next, when a talk is running, it would be good if you could already go to the back
08:45
to get a microphone wired up, because that's a little easier for everyone. Unfortunately, I don't actually have a list here right now, but I can tell you the order real quick. Next up, wait, now I successfully confused myself, apparently.
09:05
Where are your slides? I forgot your slides. I am very sorry for that.
09:24
It's in the combined PDF, but we can fix that up. Next up then would be Daniel with monkey patching. So you already go to the back, Daniel, to get a microphone.
09:41
And the stage is yours. Thank you, everybody, for giving me the chance to present Octoprope. This is a project which I was working on during this year. It's about open hardware.
10:02
I start with a story where you are the developers working for a company, and the company created the fancy cam. The fancy cam will be used in drones and robots everywhere. And your job is to write the driver in C code, because it will be linked into the MicroPyson firmware.
10:20
And you have to use a repository on GitHub, because you should allow pull requests from the community. Then your job is to really test the software, because it should be good quality. You have to test it on two fancy cams, because the company creates two different cams.
10:42
Then there are five CPU boards which you should support, and the two latest versions of MicroPyson. So these are 20 versions you have to test for every commit you do into main. And you know to test hardware is work. You need a board which you have to connect to power,
11:02
and then you have to connect the cam, then you have to connect the programmer, then you have to flash it, then you have to start it again into application mode, then you run the test, you make the tick, and you take the next board. You have to do it 20 times. But you're a clever programmer. You automate. But how do you automate to flash a software, a CPU?
11:24
How to automate to connect one CPU board to one cam or the other cam? This is where OctoProbe comes into play. Now I need the next slide. How do I do this? Cool.
11:40
OctoProbe, it's about testing with hardware in the loop. And as you could imagine, it comes from the octopus. The octopus is a very intelligent animal. Why? Because it's using PyTest. And it has very flexible tentacles. And you see a tentacle on the left hand side.
12:01
So this is where the name comes from, OctoProbe. Now, you want to build a test system with OctoProbe. What you do first, you take seven of these tentacles. You see the tentacles, this experimental area, and there you mount the cam.
12:22
You connect it to plus or minus the signals. You take the next tentacle, put the second cam, and five CPUs on five other tentacles. So you have seven tentacles, and you stack them together. It looks like this. So this is one tentacle. It's about 10 francs, 15 francs.
12:40
This is how they are stacked together. So all are connected via this 40 pin bus. Okay, what's next? Every tentacle has a USB connection, which you connect to your test server. The test server that you install OctoProbe,
13:03
it has to be a Linux computer. And now you're ready to start the tests. But your tests have to be able to compile the software for one CPU, compile it for another CPU, refresh the first CPU, power cycle the CPU, connect it to the first cam, run the test.
13:23
And you're happy. You can type pytest in a few minutes later after seeing this flickering. There are lots of LEDs on it. You see it flickering. It's not like a container which is just running somewhere. It's flickering. And after two minutes, you see all the test results. Yeah, you're happy.
13:40
But let's go a step further. You take your test server and register it as a self-hosted render within GitHub. And then you write the GitHub action that whenever somebody writes a pull request to this repo, the test will start and you will see it flickering.
14:03
And then the test results will be attached to the pull request. So you don't even have to give feedback that the test fails. It happens automatically. People will fix their pull requests.
14:20
I'm missing the hands from the back because this is more or less. I just wanted to give you an introduction how you could use OctoProbe to automate tests with hardware in the loop.
14:46
You have seven seconds left. Time for questions. So next up we have an intro to monkey patching.
15:06
Did you just steal my present? No, here it is. OK. That button and the... Ah, OK. Cool. All right. Hello. My name is Daniel Zoke.
15:21
And today I'm going to give a little intro to monkey patching. I took a picture of that monkey in Costa Rica. But, yeah. So why did I want to give this talk? I work for Sentry. And basically we do error monitoring and other application monitoring stuff. And at Sentry I'm working on the Python SDK
15:42
and we need to monkey patch a lot of things to get your errors. So I thought I'd give a little intro. But what is monkey patching? So basically, ChatGPT says, and I think this is a good description, it's when you dynamically modify or extend a class or module at runtime,
16:02
allowing you to change its behavior. And in Python you have really great freedom to basically monkey patch anything. And so I'll give you now an example of monkey patching something. And we do this, some stuff like this a lot in our Sentry SDK actually.
16:20
So let's imagine some server framework. And this is kind of how you would use it. So you import it and then you can define this as like the root route. And then this is the handler. If it didn't have a bug, it would just return hello world. But we intentionally added this zero division error
16:43
that will crash the thing and result in a 500 status code. And so somewhere in this server framework library, it's not a real server framework obviously, but let's just imagine that it has this dictionary of handlers
17:01
that goes from the string for the path to the actual function. And when we call the my server framework.route on the previous page, that kind of just registers the handler and the dictionary. And then sort of the way requests get handled is in the library,
17:21
we have a request handler, request underscore handler function that will look up the correct handler and just call it basically. And this is again the function that we registered on the previous page here. All right. So now how do we patch this?
17:42
So this is our error handling SDK. And basically we just need to import the request handler. And then this function is going to patch it. So what do we do? So we get my server framework.request handler. That's that function that handles the requests.
18:02
We need to save an old version of it. Then this wrapper is going to be what we replace the original request handler with. We're just going to take arbitrary arguments and keyword arguments and forward them to the old request handler. But we do this within a try accept block so that the exceptions we get,
18:22
we can capture them and re-raise them. And so this capturing is what will get our basically our error monitoring tool. We'll get the error to show up in there. And then lastly, this is the actual monkey patching part. We do my server's framework.request handler equals wrapper.
18:44
And this overwrites completely the old request handler and replaces it with the new one we just wrote. Then we just need to call this patcher function. And then now if we have this code here where we've modified it from the original
19:02
so we still have my server framework, but now we're also importing this error SDK that I demonstrated. We're initializing it. This is going to internally call the patching function I showed on the previous slide. And now when we call index, it's going to call that patched request handler
19:22
and this zero division error will get captured and sent to the error monitoring tool. So yeah, that's basically all I had for you. But one thing I want to highlight is you can monkey patch anything in Python. You can replace it with anything. And any library you import can basically replace any other library's arbitrary function.
19:46
So you should be really careful what you actually add as dependencies to your Python project and what you import. You should make sure you actually know what it's doing and that it's not patching in some malicious way.
20:01
But yeah, thank you very much. Thank you. So next up we have Niklas. After that will be Timon, so you go back for your microphone. Oh, my slides do not agree with what I prepared again.
20:29
Okay, I should not have done this last minute apparently. Your talk was about the Chython and I do have your slides here. They just didn't make it into the combined slide deck.
20:42
But they did made it on the projector and the stage is yours. Thank you. Hi, so who of you has ever heard of Chython? Okay, that's surprising. I'm not affiliated with the project at all. I'm just using it.
21:00
I talked about that in some private conversations at a conference. And they told me, hey, maybe you do a lightning talk out of that. So here we are. Maybe some of you find it interesting. If not, that's fine. Yeah, basically who here likes Python? This is where you're supposed to maybe raise your hand, some of you. That's fine. Who uses type annotations?
21:22
Okay, you're tired. That's also fine. Who uses static type checking with them? So like mypy or something or even in your IDE? Cool. And who has to interact with Java system? Okay, a few sad hands. A few more sad people just looking down.
21:40
Basically, what is Chython? It's a Python 2.7 interpreter in Java. So you can do things like this in Python from Java language system. Then you do a system out front line. All the stuff we always wanted in Python, basically. And you can run it and it just prints out a word. But for some reason, I had to do a not super small Jython project.
22:05
And I wanted to use the modern Python ecosystem and not just Python 2.7 and implement it in Java. So I thought, okay, how do I make this work with mypy and graph, pytest, all these things. And the main hurdle was the syntax because in Python 3, at least in modern versions,
22:24
you can do the colon and the types and the arrow and so on. And in Python 2, we cannot. But there is this official syntax with the type comments. And at least PyCharm understands and I guess other IDEs or lintests might also do. And mypy understood that.
22:40
At least in versions below that one and if you use the Python 2 feature. And then it is of course a syntax error and you don't even need to run the code to find that because mypy will tell you, hey, this is a syntax error. Which is nice because I'm switching a lot between Python 3 and Jython. So sometimes I just forget where I am.
23:00
But also, you might forget that some things were only added after Python 2.7 like random dot choices. So mypy will tell you, hey, this thing actually doesn't exist. You don't have to run it in your full production dev environment, whatever. You just can do it with static typing.
23:20
And you can even use other Java packages. And I guess this is the only reason why you would ever want to use Jython because you need to interact with something else. So you add it to the Jython path and then you can just use org Apache Commons collections for list utils for example. And it works.
23:40
But of course to make mypy understand that, mypy will not understand what's inside some jar files. At least how we solved it is we created some type stubs. Pretty simple, we even add docstrings to it so we get inline documentation for that if we want to. Which makes the development experience at least much closer to what we are used to from modern Python things.
24:04
And also mypy will actually say, if you forget that after numbers there should be a second number. Basically you want to partition in some things and then mypy will tell you, hey, according to the stubs which you wrote yourself, this does not work. So it's like mocking all the time.
24:22
You should not trust them too much, but in this case at least it's better than not having them. But you can even do real mocks. In this case I just implemented this partition thing in my type stub. Call it a .py, not py file. And then I can use pytest and just act as if it would be modern Python.
24:44
Of course in the end this is just running CPython all the time. This is not actually doing anything with Jython yet. At some point we have to deploy that in our test system which is a very long, very tedious, very annoying process. And we want faster feedback so we do a lot more just in CPython and acting as if it would be Python 2.
25:07
And acting as if it could actually import Java stuff. But of course you still have to test the real thing at some point. But for us it was really important to get a short feedback cycle and go back and forth a lot. So this is how we did it.
25:21
Maybe you find it interesting and if not, that's good for you to be honest. But yeah, that's it. Thank you. Right on time, 15 seconds left. Next is Timon telling us about not using OSPath.
25:46
And then Radomir will be next so you go back for your microphone. Then we'll have the telephone. We're stuck. Oh yeah.
26:04
So hello everybody. I'm Timon. I work or help organizing the Swiss Python Summit as you maybe already know. And I also work at the OST as a researcher for the Institute for Software. And I wanted to talk, I just handcrafted it some minutes ago.
26:23
This talk about don't use OSPath anymore. Because there's a way much better way to do it since many years. Who know what OSPath is and what it does?
26:40
I think almost everybody who uses it a lot. Thumb, hands. I still see it a lot in code. And this is why this was my motivation for the speed. And what it does, what you use it for is to work with paths.
27:01
And even the most, some path function, those are under OS and not even under OSPath. For example, here we get the working directory and then we join the working directory with some file. And the good thing about why not just string concatenating is that it works on any system.
27:23
It doesn't matter if we have a slash or a backslash. We can then, for example, print the path. We see where it is and we can quickly open the file to create it. We can then rename it. And again, with renaming, I use my old path and then have to join the path dear name for my path with the new file name.
27:52
And to get the new file, I have to say to do the same thing again. I can print it out.
28:01
I can see if the path exists. And in the end, I can delete it, which is called unlink, which is maybe technically correct. But it kind of bodes me out that there's no delete function. But what you can see here is there is a lot of OSPath, a lot of repetition and some really long lines of codes where you'll have to break down.
28:26
And since many here, okay, half of my slides is here. There is a better way to do it. And it's called pathlib. It's in the standard library and it's an object-oriented way to work with paths.
28:49
And it's there since Python 3.14 and since 2014. So since many, many years. And I see a lot of projects, open source project or student code, which is new code and claims to work only with Python 3.9 or, sorry, 3.4.
29:16
We don't import from future. 3.4.
29:21
So it's a long time in the standard library and people still don't use it. And why? One, I think one thing, especially beginners, if you Google for it, it gives you that the first three results, for example, are still the old way.
29:42
But let's look how it would work. The same example with pathlib. So the only thing that you really need from pathlib is the path object. If you create it, it automatically gets the current work interactive for you. You can input a string as well.
30:02
To concatenate path, you can use just a slash. So it's really handy and kind of readable. Then the most thing I like is you can read and write just with one line.
30:20
So you don't have to open the file in a context manager or whatever. Just one line and you can read and write it. Of course, it's all the other functions, like, for example, exists. And you can rename it. You get the renamed paths straight away. And, of course, you can do something like delete.
30:45
What I also really like is instead of using the old or the globe object library, you can just get your path. And with every path object, you can globe this directory and iterate through your directory.
31:05
Yeah, this was quite almost all everything. If you want to read more, the official documentation is really, really good. And it has its own section about comparing the old way and the new way. You just scroll down and you have a list.
31:22
If you did always have something, what you have to do with the new object. And, of course, the Python module of the week website has also some really nice examples and a step-by-step introduction to the topic.
31:41
That was everything already. Who will use it in the future? Great! Next up, we have Dave. No, sorry. I'll come up with something better for tomorrow.
32:01
We have Radomir with robots and MicroPython. Your slides will only be over there. Hi, everybody. You might have seen my presentations on previous Python Summit
32:22
where I showed you circuit Python-based game consoles and also robots based on circuit Python and MicroPython. I just wanted to make a quick update on that because there wasn't enough progress to actually make a full talk about it,
32:43
but I can show it in a lightning talk. For those who didn't see that, I make those game consoles that actually run MicroPython on them. The idea is to use them for workshops for teaching programming
33:02
because then you don't have to install Python on the computers that the workshop goers come with It's because you just connect the device. It comes with a USB drive. You see the Python files in there. You can just edit them with any text editor. You don't have to install anything.
33:21
You don't have to debug. You don't have to worry about that. You save time and because the devices are quite cheap, you can take them home through the workshop and continue playing with them without having to install anything on your home computer.
33:42
But there is one thing I noticed that, you know, reading computer games is fine. It's interesting because everybody likes computer games. But there is one thing other that is even more interesting to program. And that is things that move.
34:03
If it moves, it's like there is something in human brain that if it's moving, it immediately has your attention. So I also built those small robots. And I was showing, I think two years ago,
34:22
a bunch of them that use MicroPython or CircuitPython. It's the same thing really. But I have a new one that is even smaller than the previous one. I will put it here. So the idea is that, again, you connect it to the computer, you can program it.
34:44
But it has the minimal things that are actually required to make an interesting robot problem. So, for instance, you have inverse kinematics, because the legs are complicated enough to actually require you to...
35:05
This floor covering is not perfect for this little guy. And also the battery is running out. Anyway, I have some animation of it working, just in case.
35:21
So the robot is actually open source. And, you know, buying a sports robot is like $40,000. This is $40. It's still not super cheap, but it's cheap enough to actually buy a toy and play with it.
35:40
You shouldn't give it to kids. It's not actually a toy. It has sharp elements on it and so on. I think it's a nice way of starting your work with robots and exploring that problem space. I think there is a lot of things you can explore. It has an accelerometer on board, so you can do things like that as well.
36:03
There are a lot of different things you can try with it. And because it's so small, it fits on your desk. It will not break through your wall and run away like a spot may if you program it wrong.
36:20
So yeah, the project is open source. You can find all my projects on this website if you are interested. The thing is entirely built out of PCB. So there is not 3D printing, no laser cutting necessary because you just fabricated the PCB, send it to China, they send you the fabricated things.
36:40
Just assemble it and it should work. Thank you very much. Last but certainly not least, we have Dave with MyPy rewritten in Rust.
37:10
What? All right. Okay. Hi, I'm Dave. I'm the author of JEDI and I have been doing this since 2012.
37:25
If you don't know what JEDI is, it's an auto-completion and go-to and other IDE stuff. And it also runs within IPython. When I kind of finished a project in 2020,
37:41
so that was a few years ago, but eight years in, I realized that there were only two issues open in the issue tracker. And one was that the performance wasn't good. So I thought, well, I should probably rewrite it in Rust.
38:02
So I started doing that and then I realized, well, I want to do type checking as well. So I realized, well, I probably have to rewrite MyPy then. And this was the slide in 2022 when I was here at this talk and gave a talk as well about Rust.
38:24
And it wasn't really good at that point because I passed 20% of MyPy's test suite, but it ran really fast. And so I liked that. And how is it in 2024? Well, it passes 90% of MyPy's test suite
38:44
and it's still quite fast. So that's when I decided, well, my goal is now to write a language server in Rust for Python.
39:02
And, yeah, these are the socials if you care about it, but what I realized is that a language server is still quite a bit of work with autocompletion and all the other stuff. I did this in Python, but it took me eight years to do it well. So it might still take some time, but what's kind of ready is a software that I call SeeMyPy or SetMyPy.
39:29
And it is still quite fast. It's 50 times faster than MyPy currently. It still has a few bugs that I'm resolving.
39:40
That's why it's not public yet. It's single-threaded, so it's still optimizable. I suspect that a factor of 100 versus a no-cache MyPy should be possible. It supports most MyPy flags and features other than the type ignore.
40:02
It supports type ignore, but it doesn't check if it doesn't apply. But that's a detail for now. And I'm currently just reducing false positives, and it gets better and better. So the only bad thing about it is,
40:23
because I'm doing this full-time now, it's probably not going to be open source unless somebody pays me. Which, I mean, it might happen. The astral is a thing, the company behind rough. But I don't know what's going to happen there.
40:42
But it's going to be available soon, and the language server as well. And I'm very interested to have a discussion with you. I'm going to be around afterwards if you're interested in having such a MyPy, especially if you have performance needs.
41:04
And I'm very aware that if it's not going to be open source, it's not going to be for everyone. But note as well that I'm going to keep maintaining chat eyes, so there are open source alternatives. And the good thing is also my software should be kind of compatible with MyPy,
41:24
so you can always have the less performant version around. Yeah, that's kind of it. Maybe there are questions. Thank you.
41:40
That was the last lightning talk for today. We will have another lightning talk session tomorrow, hopefully with better slides or a better combined slide deck. I already have the LaTeX code written in my head to generate intro slides and combine the PDFs, but we will see if that works out.
42:00
Thank you very much. And next up will be Timon with the closing already for today, unfortunately.