221 results for "":
Consuming Ethernet frames with the nom crate
Now that we’ve found the best way to find the “default network interface”… what can we do with that interface?
Well, listen for network traffic of course!
use rawsock:: open_best_library;
use std:: time:: Instant ;
fn main () -> Result <(), Error > {
let lib = open_best_library () ?;
let iface_name = format! ( r#"\Device\NPF_{}"# netinfo?
iface = libiface_name?
start =
iface |packet|
start
packet
?
Day 10 (Advent of Code 2022)
Onwards! To the day 10 puzzle.
I don’t see a way to make part 1 especially fun — so let’s just get to it.
Parsing
As usual, let’s reach for the nom crate…
$ cargo add nom@7
(cut)
…to parse the input into nicely-organized Rust data structures:
// in `src/main.rs`
use nom::{
branch:: alt,
bytes:: complete:: tag,
combinator::{ map value
sequencepreceded
->
noop =
addx = nomcharactercompletei32
noop addx i
->
=>
_ =>
Three gamedev surprises
Despite their peaceful appearance, game developers actually lead thrilling lives! Here are three things I learned (or re-learned) about yesterday that I’d like to share with you, in the form of assumptions that revealed false.
VSync is relatively straightforward. Right?
As an obsessive-compulsive, bipolar, perfectionist game dev, getting your game to run smoothly on all kinds of operating systems, graphics cards, and drivers combination is something of a holy grail. Many look for it, but let’s be honest here, it never really turns out as expected.
rock 0.9.6 is on the loose!
Just 8 days after the last release, rock 0.9.6 is out.
To update, run git pull && make rescue as usual. To install from scratch,
clone the repo, cd into it, and run make rescue from there - it’ll download the latest bootstrap, compile itself from
C, then recompile itself from ooc.
Running rock -V should give you something like this:
rock 0.9.6 codename loki, built on Wed Feb 20 15:09:08 2013
oocdoc, Part 1 — NaturalDocs
Documentation in ooc land has sucked for quite some time. The standard response is pretty much: “use the code, Luke!” — which is fine when doing small projects that don’t matter much, but not so when you want to get serious.
So when a newcomer, beoran, asked how to generate documentation, and later told us he got NaturalDocs to work, naturally, I had to see for myself how well it worked.
oocdoc, Part 4 — sourcepath
In the previous article, We’ve built a nagaqueen-based tool that can parse one ooc file, detect class declarations and print its doc strings. Today, we’re making a bit of infrastructure for our app to support more sizable projects.
Source path and lib folders
Parsing a single file was a nice milestone, but it’s not nearly enough. We want to generate documentation for a whole project at a time: and since we’ll want to cross-link the various bits of documentation we generate, we’ll also need to parse the various dependencies (such as the ooc sdk, and any used library) so that we can resolve argument types and link them properly.
A simple ping library, parsing strings into IPv4 address
We’ve just spent a lot of time abstracting over LoadLibrary, but we still have all the gory details of the Win32 ICMP API straight in our main.rs file! That won’t do.
This time will be much quicker, since we already learned about carefully designing an API, hiding the low-level bits and so on.
Let’s add an icmp module to our program. Actually, we’ve been dealing with
an IPAddr all this time, it also sounds like it could use its own package:
A dynamic linker murder mystery
I write a ton of articles about rust. And in those articles, the main focus is about writing Rust code that compiles. Once it compiles, well, we’re basically in the clear! Especially if it compiles to a single executable, that’s made up entirely of Rust code.
That works great for short tutorials, or one-off explorations.
Unfortunately, “in the real world”, our code often has to share the stage with other code. And Rust is great at that. Compiling Go code to a static library, for example, is relatively finnicky. It insists on being built with GCC (and no other compiler), and linked with GNU ld (and no other linker).
Writing a Dockerfile for catscii
Now that our service is production-ready, it’s time to deploy it somewhere.
There’s a lot of ways to approach this: what we are going to do, though, is build a docker image. Or, I should say, an OCI image.
This is still a series about Nix, but again: because the best way to see the benefits of Nix is to do it without Nix first, we’ll use only Docker’s tooling to build the image.
crates.io phishing attempt
Earlier this week, an npm supply chain attack.
It’s turn for crates.io, the main public repository for Rust crates (packages).
The phishing e-mail looks like this:
And it leads to a GitHub login page that looks like this:
Several maintainers received it — the issue is being discussed on GitHub.
The crates.io team has acknowledged the attack and said they’d see if they can do something about it.