From b2190ee8baf0911a5b0ba74fae907be8ed456ff7 Mon Sep 17 00:00:00 2001 From: "Jip J. Dekker" Date: Fri, 7 Jul 2023 15:55:03 +1000 Subject: [PATCH] add articles from the previous website --- src/lib/generateRssFeed.js | 7 +- .../2017-02-custom-dtrace-instrumentation.mdx | 192 ++++++++++++++++++ .../articles/2022-08-homebrew-minizinc.mdx | 51 +++++ .../index.mdx | 86 -------- .../planetaria-design-system.png | Bin 52474 -> 0 bytes src/pages/articles/index.jsx | 4 +- .../articles/introducing-animaginary.mdx | 101 --------- .../rewriting-the-cosmos-kernel-in-rust.mdx | 96 --------- 8 files changed, 249 insertions(+), 288 deletions(-) create mode 100644 src/pages/articles/2017-02-custom-dtrace-instrumentation.mdx create mode 100644 src/pages/articles/2022-08-homebrew-minizinc.mdx delete mode 100644 src/pages/articles/crafting-a-design-system-for-a-multiplanetary-future/index.mdx delete mode 100644 src/pages/articles/crafting-a-design-system-for-a-multiplanetary-future/planetaria-design-system.png delete mode 100644 src/pages/articles/introducing-animaginary.mdx delete mode 100644 src/pages/articles/rewriting-the-cosmos-kernel-in-rust.mdx diff --git a/src/lib/generateRssFeed.js b/src/lib/generateRssFeed.js index 5f027b0..98006d3 100644 --- a/src/lib/generateRssFeed.js +++ b/src/lib/generateRssFeed.js @@ -9,13 +9,14 @@ export async function generateRssFeed() { let articles = await getAllArticles() let siteUrl = process.env.NEXT_PUBLIC_SITE_URL let author = { - name: 'Spencer Sharp', - email: 'spencer@planetaria.tech', + name: 'Jip J. Dekker', + email: 'jip.dekker@monash.edu', } let feed = new Feed({ title: author.name, - description: 'Your blog description', + description: + 'The collection of writing by Jip about optimization, programming language, and general computer science', author, id: siteUrl, link: siteUrl, diff --git a/src/pages/articles/2017-02-custom-dtrace-instrumentation.mdx b/src/pages/articles/2017-02-custom-dtrace-instrumentation.mdx new file mode 100644 index 0000000..5d29cf5 --- /dev/null +++ b/src/pages/articles/2017-02-custom-dtrace-instrumentation.mdx @@ -0,0 +1,192 @@ +import { ArticleLayout } from '@/components/ArticleLayout' + +export const meta = { + author: 'Jip J. Dekker', + date: '2017-02-24', + title: 'Implementing custom DTrace instrumentation', + description: + 'DTrace (and SystemTap) are often the “go to” when adding tracing in high performance environments such as for example operating systems. This note discusses adding instrumentation to your own application, so you can take advantage of these powerful tools.', +} + +export default (props) => + +Last semester I had a chance to work with DTrace. In particular, I implemented +custom DTrace instrumentation in Encore and [Pony](http://www.ponylang.org/). +Encore is a new programming language which extends Pony. The language is being +developed at Uppsala University. In this blog I will explain why you want to use +DTrace, how we use it, and how to add it to your application. + +## What is DTrace? + +DTrace stands for **dynamic trace**. Have you even had to go through your code +and add print-statements to gather statistics or debug? That is exactly what +DTrace tries to avoid! When an application uses DTrace, it has **instrumentation +points**. These are the points where you would gather or print data. Each +instrumentation point can contain some arguments. This will be the data +available at this instrumentation point. A big advantage of these +instrumentation points is that you do not have to remove them. This is because +it is dynamic; when an instrumentation point is not in use, the program will +skip over it. + +If you are on a Mac, then many of the programs you are using already have +instrumentation points. DTrace was part of the Solaris operating system and +adopted into most BSD versions. Normal users can use the instrumentation points +implemented in existing programs. Various guides to exploring these +instrumentation points already exist. If you are on a Mac, then you could take a +look +[here](http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html). +FreeBSD offers its own guide, which you will find +[here](https://wiki.freebsd.org/DTrace/Tutorial). + +### Sidenote: Linux — SystemTap + +_Because of licensing troubles, DTrace is not the standard in Linux operating +systems. There are DTrace versions available, but you'll have to install them +into the kernel. An alternative is at hand though: SystemTap. SystemTap works +like DTrace, but there are a few key differences. In general, you can use the +same instrumentation points, but not the same scripts. To read more about +SystemTap visit their [website](https://sourceware.org/systemtap/index.html)._ + +## Writing DTrace scripts + +In more serious use cases one-line DTrace instructions won't be enough. DTrace +offers a simple scripting interface. Using a few statements you can extract the +information you need. Within DTrace scripts we refer to instrumentation points +as **probes**. Every script contains statements in the following form: + +``` +probe description +/ predicate / +{ + action statements +} +``` + +The probe descriptor is the defined name for the probe. The action statements +contain the actions executed when a probe activates. Finally, a predicate +describes a condition that has to hold for the actions to take place. + +It is sometimes hard to find DTrace documentation. The [Dynamic Tracing +Guide](http://dtrace.org/guide/preface.html) is usually a great place to start. +It contains information on almost anything you might come across while writing +scripts. The documentation on the various types can be very helpful. Although +the guide refers to the Illumos operating system, it is the same on other +systems. + +Although the statements are simple, they can gather important information. Take +for example the following +[script](https://github.com/ponylang/ponyc/blob/master/examples/dtrace/gc.d): + +``` +pony$target:::gc-start +{ + @count["GC Passes"] = count(); + self->start_gc = timestamp; +} + +pony$target:::gc-end +{ + @quant["Time in GC (ns)"] = quantize(timestamp - self->start_gc); + @times["Total time"] = sum(timestamp - self->start_gc); +} + +END +{ + printa(@count); + printa(@quant); + printa(@times); +} +``` + +This script analyses the garbage collection in the Pony runtime. It will show +you how many times garbage collection ran, how much time it took, and how the +time was distributed. This is very important information when analysing the +performance of the garbage collector. The following image shows the output of an +example run of the DTrace script: + +``` +GC Passes 7 + +Time in GC (ns) + value ---------- Distribution ---------- count + 1024 | 0 + 2048 |@@@@@@@@@@@ 2 + 4096 |@@@@@@@@@@@ 2 + 8192 |@@@@@@@@@@@ 2 + 16384 |@@@@@@ 1 + 32768 | 0 + +Total time 56721 +``` + +DTrace script are usually saved with a `.d` file type. To run a DTrace script +you use `dtrace -s [script].d`. If you want to limit the results to an +executable, then you can add `-c [executable]`. This executable will then be +start with the script running. + +### Tip: Shebang + +_If you include `#!/usr/bin/env dtrace -s` on the first line in your file, then +you don't have to type `dtrace -s` every time. If your script is executable, +then you can run `./[script].d`. You can append any DTrace flags you deem +necessary._ + +## Adding your own probes + +If you are writing a program in C, you have the option of adding your own +probes. The process is simple: + +1. You define your probes. +2. You generate C macros for the probes. +3. You place the macros within the C code. + +Take a look at [this +guide](https://www.ibm.com/developerworks/aix/library/au-dtraceprobes.html) for +an in-detail walkthrough. It will show you the syntax for defining your own +probes and how to compile your code. Note that there are differences in the +compilation process for DTrace and SystemTap. Take these into account in your +Makefile. + +The names of the macros that DTrace generates leave something to be desired. +Their worst quality is that they can be ambiguous. For example, the probe +`gc-start`, in Pony, will generate the macro `PONY_GC_START`. This name suggests +that the macro would start the garbage collection. In a large code base the +macros can also be hard to find. To improve on this, you can add a macro +framework. Pony has its macro framework +[here](https://github.com/ponylang/ponyc/blob/master/src/common/dtrace.h). This +will let you call the macro like this: `DTRACE1(GC_START, ...);`. + +### Sidenote: macOS — System Integrity Protection + +_In newer versions of macOS not all features of DTrace are available to all +users. **System Integrity Protection** blocks some features. This includes the +use of custom probes. To use them, you need to partially disable System +Integrity Protection. [This +blog](http://internals.exposed/blog/dtrace-vs-sip.html) describes the problem +and how to solve it._ + +## A glimpse of Pony + +It might be helpful to take a look at a working implementation. Encore is +currently not open source, but Pony is! You can find the Pony repository +[here](https://github.com/ponylang/ponyc). The following items you might find +useful: + +- [The probe definitions](https://github.com/ponylang/ponyc/blob/master/src/common/dtrace_probes.d) + +- [The macro framework](https://github.com/ponylang/ponyc/blob/master/src/common/dtrace.h) + +- [The documentation and example scripts](https://github.com/ponylang/ponyc/tree/master/examples/dtrace) + +You can find the use of the probes in the C code by searching for `DTRACE` in +any `.c` file. + +## Resources + +- [Exploring Leopard with DTrace](http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html) +- [The DTrace One-Liner Tutorial](https://wiki.freebsd.org/DTrace/Tutorial) +- [SystemTap](https://sourceware.org/systemtap/index.html) +- [Dynamic Tracing Guide](http://dtrace.org/guide/preface.html) +- [Adding DTrace probes to your applications](http://www.ibm.com/developerworks/aix/library/au-dtraceprobes.html) +- [DTrace vs. System Integrity Protection](http://internals.exposed/blog/dtrace-vs-sip.html) +- [The Pony Repository](https://github.com/ponylang/ponyc) diff --git a/src/pages/articles/2022-08-homebrew-minizinc.mdx b/src/pages/articles/2022-08-homebrew-minizinc.mdx new file mode 100644 index 0000000..2093ef1 --- /dev/null +++ b/src/pages/articles/2022-08-homebrew-minizinc.mdx @@ -0,0 +1,51 @@ +import { ArticleLayout } from '@/components/ArticleLayout' + +export const meta = { + author: 'Jip J. Dekker', + date: '2022-08-15', + title: 'A Homebrew Tap for MiniZinc Solvers', + description: + "I'm proposing a Homebrew tap to make it easier for users to install different MiniZinc solvers. The tap already contains many of the open source solvers that are current contenders in the MiniZinc challenge, and I'm hoping to add any others that fit the infrastructure.", +} + +export default (props) => + +TLDR; I'm proposing a [Homebrew](https://brew.sh/) tap to make it easier for users to install different MiniZinc solvers. +The tap already contains many of the open source solvers that are current contenders in the MiniZinc challenge, and I'm hoping to add any others that fit the infrastructure. +I will try to keep the solvers contained in the tap up-to-date, but contributions are always welcome. +The tap can be found in this [GitHub repository](https://github.com/Dekker1/homebrew-minizinc). + +--- + +One of the strengths of the MiniZinc ecosystem is the great variety of solvers that have support for the language, each with their different strengths and weaknesses. +Using different solvers to solve your MiniZinc solvers has improved a lot over the years (at least in my opinion). +The process now generally consists of installing the right prerequisites, the solver itself, and putting all the MiniZinc files (the library and the solver configuration) in the right place. +That being said, this can still be a bit of work (or at least something that is easy to do wrong). + +Luckily this problem is the exact problem that package manages already solve. +Although I cannot offer a solution for all devices (let's refrain from having yet another package manager), devices using [Homebrew](https://brew.sh/) can now use my [MiniZinc solver tap](https://github.com/Dekker1/homebrew-minizinc). +If you have Homebrew installed, then using the tap to, for example, install Yuck is as simple as running `brew install dekker1/minizinc/yuck`. +Once the process is finished “Yuck 20210501” can be immediately used from the MiniZincIDE, or from command line running `minizinc --solver yuck `. + +The tap can currently help to install the following solvers: + +- [Choco](https://choco-solver.org) — `brew install dekker1/minizinc/choco` +- [Chuffed](https://github.com/chuffed/chuffed) — `brew install dekker1/minizinc/chuffed` +- [flatzingo](https://github.com/potassco/flatzingo) — `brew install dekker1/minizinc/flatzingo` +- [FindMUS](https://gitlab.com/minizinc/FindMUS) — `brew install dekker1/minizinc/findmus` +- [Geas](https://bitbucket.org/gkgange/geas) — `brew install dekker1/minizinc/geas` +- [JaCoP](https://github.com/radsz/jacop/) — `brew install dekker1/minizinc/jacop` +- [FZN Picat](https://github.com/nfzhou/fzn_picat) — `brew install dekker1/minizinc/fzn-picat` + - Note: this tap contains only the FlatZinc interface to [Picat](http://picat-lang.org), it depends on the Picat package in Hombebrew core. +- [Yuck](https://github.com/informarte/yuck/) — `brew install dekker1/minizinc/yuck` + +_A continuously updated list of the solvers included can be found in the [repository README](https://github.com/Dekker1/homebrew-minizinc)._ + +It is my intention to keep at least these solvers up-to-date, and I will try to add other open source MiniZinc challenge contenders. +Contributions to update solvers or add new solvers are very welcome. + +Finally, I understand that Homebrew might not work for everyone. +It is limited in its supported operating systems, and some people seem to really despise it. +If you prefer some other package manager or in the future there is a better/more inclusive alternative, then hopefully this Homebrew tap can serve as inspiration. + +If you have any problems, then feel free to file an [issue](https://github.com/Dekker1/homebrew-minizinc/issues). diff --git a/src/pages/articles/crafting-a-design-system-for-a-multiplanetary-future/index.mdx b/src/pages/articles/crafting-a-design-system-for-a-multiplanetary-future/index.mdx deleted file mode 100644 index 6b797e4..0000000 --- a/src/pages/articles/crafting-a-design-system-for-a-multiplanetary-future/index.mdx +++ /dev/null @@ -1,86 +0,0 @@ -import { ArticleLayout } from '@/components/ArticleLayout' -import Image from 'next/image' -import designSystem from './planetaria-design-system.png' - -export const meta = { - author: 'Adam Wathan', - date: '2022-09-05', - title: 'Crafting a design system for a multiplanetary future', - description: - 'Most companies try to stay ahead of the curve when it comes to visual design, but for Planetaria we needed to create a brand that would still inspire us 100 years from now when humanity has spread across our entire solar system.', -} - -export default (props) => - -Most companies try to stay ahead of the curve when it comes to visual design, but for Planetaria we needed to create a brand that would still inspire us 100 years from now when humanity has spread across our entire solar system. - - - -I knew that to get it right I was going to have to replicate the viewing conditions of someone from the future, so I grabbed my space helmet from the closet, created a new Figma document, and got to work. - -## Sermone fata - -Lorem markdownum, bracchia in redibam! Terque unda puppi nec, linguae posterior -in utraque respicere candidus Mimasque formae; quae conantem cervice. Parcite -variatus, redolentia adeunt. Tyrioque dies, naufraga sua adit partibus celanda -torquere temptata, erit maneat et ramos, [iam](#) ait dominari -potitus! Tibi litora matremque fumantia condi radicibus opusque. - -Deus feram verumque, fecit, ira tamen, terras per alienae victum. Mutantur -levitate quas ubi arcum ripas oculos abest. Adest [commissaque -victae](#) in gemitus nectareis ire diva -dotibus ora, et findi huic invenit; fatis? Fractaque dare superinposita -nimiumque simulatoremque sanguine, at voce aestibus diu! Quid veterum hausit tu -nil utinam paternos ima, commentaque. - -```c -exbibyte_wins = gigahertz(3); -grayscaleUtilityClient = control_uat; -pcmciaHibernate = oop_virus_console(text_mountain); -if (stateWaisFirewire >= -2) { - jfs = 647065 / ldapVrml(tutorialRestore, 85); - metal_runtime_parse = roomComputingResolution - toolbarUpload + - ipx_nvram_open; -} else { - maximizeSidebar *= suffix_url(flatbed + 2, requirements_encoding_node + - only_qbe_media, minicomputer); -} -``` - -Aere repetiti cognataque natus. Habebat vela solutis saepe munus nondum adhuc -oscula nomina pignora corpus deserat. - -## Lethaei Pindumve me quae dinumerat Pavor - -Idem se saxa fata pollentibus geminos; quos pedibus. Est urnis Herses omnes nec -divite: et ille illa furit sim verbis Cyllenius. - -1. Captus inpleverunt collo -2. Nec nam placebant -3. Siquos vulgus -4. Dictis carissime fugae -5. A tacitos nulla viginti - -Ungues fistula annoso, ille addit linoque motatque uberior verso -[rubuerunt](#) confine desuetaque. _Sanguine_ anteit -emerguntque expugnacior est pennas iniqui ecce **haeret** genus: peiora imagine -fossas Cephisos formosa! Refugitque amata [refelli](#) -supplex. Summa brevis vetuere tenebas, hostes vetantis, suppressit, arreptum -regna. Postquam conpescit iuvenis habet corpus, et erratica, perdere, tot mota -ars talis. - -```c -digital.webcam_dual_frequency = webmasterMms; -if (5 + language_standalone_google) { - cc_inbox_layout *= file_character; - task += p; - lockUnicode += enterprise_monochrome(tokenFunctionPersonal, keyVirtual, - adf); -} -windows_binary_esports(87734, array(restoreRomTopology, adRaw(407314), - dongleBashThumbnail), interpreter); -``` - -Sit volat naturam; motu Cancri. Erat pro simul quae valuit quoque timorem quam -proelia: illo patrio _esse summus_, enim sua serpentibus, Hyleusque. Est coniuge -recuso; refert Coroniden ignotos manat, adfectu. diff --git a/src/pages/articles/crafting-a-design-system-for-a-multiplanetary-future/planetaria-design-system.png b/src/pages/articles/crafting-a-design-system-for-a-multiplanetary-future/planetaria-design-system.png deleted file mode 100644 index 0d240176ec56f57ecb4881d265daad31e6012d47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52474 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ϖTmrpapjZNm~!Bl_vyaMt}qieRWO6vhSHjZV|90M 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 diff --git a/src/pages/articles/index.jsx b/src/pages/articles/index.jsx index 97d1edd..6091f8f 100644 --- a/src/pages/articles/index.jsx +++ b/src/pages/articles/index.jsx @@ -38,14 +38,14 @@ export default function ArticlesIndex({ articles }) { return ( <> - Articles - Spencer Sharp + Articles - Jip J. Dekker
diff --git a/src/pages/articles/introducing-animaginary.mdx b/src/pages/articles/introducing-animaginary.mdx deleted file mode 100644 index f2ca246..0000000 --- a/src/pages/articles/introducing-animaginary.mdx +++ /dev/null @@ -1,101 +0,0 @@ -import { ArticleLayout } from '@/components/ArticleLayout' - -export const meta = { - author: 'Adam Wathan', - date: '2022-09-02', - title: 'Introducing Animaginary: High performance web animations', - description: - 'When you’re building a website for a company as ambitious as Planetaria, you need to make an impression. I wanted people to visit our website and see animations that looked more realistic than reality itself.', -} - -export default (props) => - -When you’re building a website for a company as ambitious as Planetaria, you need to make an impression. I wanted people to visit our website and see animations that looked more realistic than reality itself. - -To make this possible, we needed to squeeze every drop of performance out of the browser possible. And so Animaginary was born. - -```js -import { animate } from '@planetaria/animaginary' - -export function MyComponent({ open, children }) { - return ( - - {children} - - ) -} -``` - -Animaginary is our new web animation library that redefines what you thought was possible on the web. Hand-written in optimized WASM, Animaginary can even animate the `height` property of an element at 60fps. - -## Sermone fata - -Lorem markdownum, bracchia in redibam! Terque unda puppi nec, linguae posterior -in utraque respicere candidus Mimasque formae; quae conantem cervice. Parcite -variatus, redolentia adeunt. Tyrioque dies, naufraga sua adit partibus celanda -torquere temptata, erit maneat et ramos, [iam](#) ait dominari -potitus! Tibi litora matremque fumantia condi radicibus opusque. - -Deus feram verumque, fecit, ira tamen, terras per alienae victum. Mutantur -levitate quas ubi arcum ripas oculos abest. Adest [commissaque -victae](#) in gemitus nectareis ire diva -dotibus ora, et findi huic invenit; fatis? Fractaque dare superinposita -nimiumque simulatoremque sanguine, at voce aestibus diu! Quid veterum hausit tu -nil utinam paternos ima, commentaque. - -```c -exbibyte_wins = gigahertz(3); -grayscaleUtilityClient = control_uat; -pcmciaHibernate = oop_virus_console(text_mountain); -if (stateWaisFirewire >= -2) { - jfs = 647065 / ldapVrml(tutorialRestore, 85); - metal_runtime_parse = roomComputingResolution - toolbarUpload + - ipx_nvram_open; -} else { - maximizeSidebar *= suffix_url(flatbed + 2, requirements_encoding_node + - only_qbe_media, minicomputer); -} -``` - -Aere repetiti cognataque natus. Habebat vela solutis saepe munus nondum adhuc -oscula nomina pignora corpus deserat. - -## Lethaei Pindumve me quae dinumerat Pavor - -Idem se saxa fata pollentibus geminos; quos pedibus. Est urnis Herses omnes nec -divite: et ille illa furit sim verbis Cyllenius. - -1. Captus inpleverunt collo -2. Nec nam placebant -3. Siquos vulgus -4. Dictis carissime fugae -5. A tacitos nulla viginti - -Ungues fistula annoso, ille addit linoque motatque uberior verso -[rubuerunt](#) confine desuetaque. _Sanguine_ anteit -emerguntque expugnacior est pennas iniqui ecce **haeret** genus: peiora imagine -fossas Cephisos formosa! Refugitque amata [refelli](#) -supplex. Summa brevis vetuere tenebas, hostes vetantis, suppressit, arreptum -regna. Postquam conpescit iuvenis habet corpus, et erratica, perdere, tot mota -ars talis. - -```c -digital.webcam_dual_frequency = webmasterMms; -if (5 + language_standalone_google) { - cc_inbox_layout *= file_character; - task += p; - lockUnicode += enterprise_monochrome(tokenFunctionPersonal, keyVirtual, - adf); -} -windows_binary_esports(87734, array(restoreRomTopology, adRaw(407314), - dongleBashThumbnail), interpreter); -``` - -Sit volat naturam; motu Cancri. Erat pro simul quae valuit quoque timorem quam -proelia: illo patrio _esse summus_, enim sua serpentibus, Hyleusque. Est coniuge -recuso; refert Coroniden ignotos manat, adfectu. diff --git a/src/pages/articles/rewriting-the-cosmos-kernel-in-rust.mdx b/src/pages/articles/rewriting-the-cosmos-kernel-in-rust.mdx deleted file mode 100644 index f8b3a3c..0000000 --- a/src/pages/articles/rewriting-the-cosmos-kernel-in-rust.mdx +++ /dev/null @@ -1,96 +0,0 @@ -import { ArticleLayout } from '@/components/ArticleLayout' - -export const meta = { - author: 'Adam Wathan', - date: '2022-07-14', - title: 'Rewriting the cosmOS kernel in Rust', - description: - 'When we released the first version of cosmOS last year, it was written in Go. Go is a wonderful programming language, but it’s been a while since I’ve seen an article on the front page of Hacker News about rewriting some important tool in Go and I see articles on there about rewriting things in Rust every single week.', -} - -export default (props) => - -When we released the first version of cosmOS last year, it was written in Go. Go is a wonderful programming language with a lot of benefits, but it’s been a while since I’ve seen an article on the front page of Hacker News about rewriting some important tool in Go and I see articles on there about rewriting things in Rust every single week. - -```rust -use ferris_says::say; -use std::io::{stdout, BufWriter}; - -fn main() { - let stdout = stdout(); - let message = String::from("Hello fellow hackers"); - let width = message.chars().count(); - - let mut writer = BufWriter::new(stdout.lock()); - say(message.as_bytes(), width, &mut writer).unwrap(); -} -``` - -I derive a large amount of my self-worth from whether or not Hacker News is impressed with the work I'm doing, so when I realized this, I cancelled all of our existing projects and started migrating everything to Rust immediately. - -## Sermone fata - -Lorem markdownum, bracchia in redibam! Terque unda puppi nec, linguae posterior -in utraque respicere candidus Mimasque formae; quae conantem cervice. Parcite -variatus, redolentia adeunt. Tyrioque dies, naufraga sua adit partibus celanda -torquere temptata, erit maneat et ramos, [iam](#) ait dominari -potitus! Tibi litora matremque fumantia condi radicibus opusque. - -Deus feram verumque, fecit, ira tamen, terras per alienae victum. Mutantur -levitate quas ubi arcum ripas oculos abest. Adest [commissaque -victae](#) in gemitus nectareis ire diva -dotibus ora, et findi huic invenit; fatis? Fractaque dare superinposita -nimiumque simulatoremque sanguine, at voce aestibus diu! Quid veterum hausit tu -nil utinam paternos ima, commentaque. - -```c -exbibyte_wins = gigahertz(3); -grayscaleUtilityClient = control_uat; -pcmciaHibernate = oop_virus_console(text_mountain); -if (stateWaisFirewire >= -2) { - jfs = 647065 / ldapVrml(tutorialRestore, 85); - metal_runtime_parse = roomComputingResolution - toolbarUpload + - ipx_nvram_open; -} else { - maximizeSidebar *= suffix_url(flatbed + 2, requirements_encoding_node + - only_qbe_media, minicomputer); -} -``` - -Aere repetiti cognataque natus. Habebat vela solutis saepe munus nondum adhuc -oscula nomina pignora corpus deserat. - -## Lethaei Pindumve me quae dinumerat Pavor - -Idem se saxa fata pollentibus geminos; quos pedibus. Est urnis Herses omnes nec -divite: et ille illa furit sim verbis Cyllenius. - -1. Captus inpleverunt collo -2. Nec nam placebant -3. Siquos vulgus -4. Dictis carissime fugae -5. A tacitos nulla viginti - -Ungues fistula annoso, ille addit linoque motatque uberior verso -[rubuerunt](#) confine desuetaque. _Sanguine_ anteit -emerguntque expugnacior est pennas iniqui ecce **haeret** genus: peiora imagine -fossas Cephisos formosa! Refugitque amata [refelli](#) -supplex. Summa brevis vetuere tenebas, hostes vetantis, suppressit, arreptum -regna. Postquam conpescit iuvenis habet corpus, et erratica, perdere, tot mota -ars talis. - -```c -digital.webcam_dual_frequency = webmasterMms; -if (5 + language_standalone_google) { - cc_inbox_layout *= file_character; - task += p; - lockUnicode += enterprise_monochrome(tokenFunctionPersonal, keyVirtual, - adf); -} -windows_binary_esports(87734, array(restoreRomTopology, adRaw(407314), - dongleBashThumbnail), interpreter); -``` - -Sit volat naturam; motu Cancri. Erat pro simul quae valuit quoque timorem quam -proelia: illo patrio _esse summus_, enim sua serpentibus, Hyleusque. Est coniuge -recuso; refert Coroniden ignotos manat, adfectu.