Understand your Mac and iPhone more deeply by tracing the evolution of Mac OS X from prelease to Swift. John Siracusa delivers the details.
You've got two main options:
| #!/bin/sh | |
| print_usage() { | |
| echo "usage: compress_video <input_file>" | |
| echo "supported formats: mp4, webm, mkv, mov, avi, flv" | |
| } | |
| get_extension() { | |
| f="${1##*/}" | |
| case "$f" in |
| #!/bin/bash | |
| # since screen doesn't know how to set custom baud rates, this does it for FTDI devices. | |
| # it works by using setserial to set the custom speed (spd_cust) mode for baud rate 38400 | |
| # it calculates the proper clock divider by dividing the device's base clock by the desired rate | |
| # then, it starts screen at 38400 - which is not longer 38400 but your new clock rate. | |
| # tested on FT232H, FT2232H, FT-X, and FT232RL | |
| # does not work on CH341 or PL2303 | |
| # todo: confirm FTDI before running setserial and report error | |
| # todo: validate uart range |
| # An opinionated nginx default server configuration block | |
| # Author: Ryan Castellucci https://rya.nc/ @ryancdotorg | |
| # Revision: 2021-02-07 | |
| server { | |
| listen 80 default_server; | |
| listen [::]:80 default_server; | |
| server_name _; | |
| # Send ACME (LetsEncrypt) requests to a special directory |
| import java.util.concurrent.atomic.*; | |
| import java.util.concurrent.*; | |
| public class Main { | |
| private static ExecutorService executor = Executors.newFixedThreadPool(2); | |
| private static int iterations = 10000000; | |
| public static class Runner { | |
| // writes to canceled happen before a CAS on suspended | |
| // reads on canceled happen after a CAS on suspended |
The Linux kernel is written in C, so you should have at least a basic understanding of C before diving into kernel work. You don't need expert level C knowledge, since you can always pick some things up underway, but it certainly helps to know the language and to have written some userspace C programs already.
It will also help to be a Linux user. If you have never used Linux before, it's probably a good idea to download a distro and get comfortable with it before you start doing kernel work.
Lastly, knowing git is not actually required, but can really help you (since you can dig through changelogs and search for information you'll need). At a minimum you should probably be able to clone the git repository to a local directory.
| #!/usr/bin/awk -f | |
| # This program is a copy of guff, a plot device. https://github.com/silentbicycle/guff | |
| # My copy here is written in awk instead of C, has no compelling benefit. | |
| # Public domain. @thingskatedid | |
| # Run as awk -v x=xyz ... or env variables for stuff? | |
| # Assumptions: the data is evenly spaced along the x-axis | |
| # TODO: moving average |
| Cortex M CPU searchable IRQ/peripheral list | |
| Goal: Use this when reverse engineering a binary for an unknown Cortex M CPU to help figure out exactly what you're looking at | |
| Simple usage: | |
| Load the binary into IDA/Ghidra | |
| Find the vector table (usually the first 256-ish bytes right at the start of the file), and find some 'interesting' IRQ vectors that point to real code. | |
| (The first 16 vectors are internal Cortex M stuff (reset vector, NMI etc) and will not be useful) | |
| In the IRQ handler code pointed to by the vector, you will very often soon encounter an obvious peripheral address being loaded into a register. |
These are notes I've taken while rying to get srslte up and running. This is messy, sorry...
Dependencies:
sudo apt install tree vim git g++ make cmake pkg-config libpython-dev python-numpy swig libi2c-dev libusb-1.0-0-dev libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev gnuradio