Note: I'm currently taking a break from this course to focus on my studies so I can finally graduate
Discover gists
Flash image to SD as normal with the firmware selector (I added packages to mine) | |
ssh into router | |
# opkg update && opkg install cfdisk resize2fs | |
# cfdisk /dev/mmcblk0 | |
Select /dev/mmcblk0p2 and RESIZE it. The default entries will take the whole space. | |
Reboot | |
ssh into router | |
# resize2fs /dev/loop0 | |
Success! |
adb help // List all comands | |
== Adb Server | |
adb kill-server | |
adb start-server | |
== Adb Reboot | |
adb reboot | |
adb reboot recovery | |
adb reboot-bootloader |
No, seriously, don't. You're probably reading this because you've asked what VPN service to use, and this is the answer.
Note: The content in this post does not apply to using VPN for their intended purpose; that is, as a virtual private (internal) network. It only applies to using it as a glorified proxy, which is what every third-party "VPN provider" does.
- A Russian translation of this article can be found here, contributed by Timur Demin.
- A Turkish translation can be found here, contributed by agyild.
- There's also this article about VPN services, which is honestly better written (and has more cat pictures!) than my article.
Architecture is 'the important stuff, whatever that is' or 'the parts that are hard to change later'. An architect analyzes business, domain, and other requirements to develop solutions that satisfy a list of prioritized architectural characteristics (-ilities). We should consider time and change with respect to architecture, or evolvability.
Software ecosystems are in a state of dynamic equilibrium. New languages, tools, methods constant force new equilibriums to emerge (free OS, linux, + free operations, puppet, led to the shift to containers). The pace of change in technology is constantly and rapidly changing in unexpected ways. We should architect systems knowing the landscape will change. Make ease of change a principal of architecture, remove the 'hard to change' definition of architecture.
An evolutionary architecture supports guided, incremental change across multiple dimensions. Evolvability is a meta characteristic that
# will not work in all cases, see https://gist.github.com/angelo-v/e0208a18d455e2e6ea3c40ad637aac53#gistcomment-3439904 | |
function jwt-decode() { | |
sed 's/\./\n/g' <<< $(cut -d. -f1,2 <<< $1) | base64 --decode | jq | |
} | |
JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ | |
jwt-decode $JWT |
I wrote this short tutorial because extending my internal storage using my new micro SD card on my Retroid Pocket 2+ failed all the time. Only setting it up as portable/external worked. However, this instructions should work in any Android 5.0+ device.
So, in case you have problems setting up your SD card on your Android device via graphical interface (setting up storage as extended internal memory or portable), and you get a corrupted SD card or any other error, follow these steps to fix it via adb shell
:
- Make sure you have adb access to your Android device:
Settings > System > About
, touch/click onBuild number
untilDeveloper options
are enabled: - Go to
Settings > System > Developer options
and enable USB debugging. - Assuming you have adb installed on your remote terminal run the following:
adb shell
Table of Contents
class Program | |
{ | |
#region Private variables | |
// the secret password which we will try to find via brute force | |
private static string password = "p123"; | |
private static string result; | |
private static bool isMatched = false; | |
/** | |
* @returns `typeof value === 'object' && value != null && !Array.isArray(value)` | |
* @see {@link UntrustedObject} for type refinement details. | |
*/ | |
function isUntrustedObject(value: unknown): value is UntrustedObject { | |
return typeof value === 'object' && value != null && !Array.isArray(value); | |
} | |
// Split a string into a union of all it's characters. | |
type SplitString<S extends string> = S extends `${infer First}${infer Rest}` |