- http://pragprog.com/magazines/2012-08/thinking-functionally-with-haskell
- http://pragprog.com/magazines/2012-09/thinking-functionally-with-haskell
- http://pragprog.com/magazines/2012-10/thinking-functionally-with-haskell
- http://pragprog.com/magazines/2012-11/thinking-functionally-with-haskell
- http://pragprog.com/magazines/2012-12/web-programming-in-haskell
- http://pragprog.com/magazines/2013-01/web-programming-in-haskell-part-ii
- http://pragprog.com/magazines/2013-03/uncle-bob-and-functional-programming
- http://pragprog.com/magazines/2013-04/dependent-types
- http://pragprog.com/magazines/2013-05/dependent-types-part-ii
- http://pragprog.com/magazines/2013-06/unification
| ################################################### | |
| ## | |
| ## Alertmanager YAML configuration for routing. | |
| ## | |
| ## Will route alerts with a code_owner label to the slack-code-owners receiver | |
| ## configured above, but will continue processing them to send to both a | |
| ## central Slack channel (slack-monitoring) and PagerDuty receivers | |
| ## (pd-warning and pd-critical) | |
| ## |
| node { | |
| echo 'Results included as an inline comment exactly how they are returned as of Jenkins 2.121, with $BUILD_NUMBER = 1' | |
| echo 'No quotes, pipeline command in single quotes' | |
| sh 'echo $BUILD_NUMBER' // 1 | |
| echo 'Double quotes are silently dropped' | |
| sh 'echo "$BUILD_NUMBER"' // 1 | |
| echo 'Even escaped with a single backslash they are dropped' | |
| sh 'echo \"$BUILD_NUMBER\"' // 1 | |
| echo 'Using two backslashes, the quotes are preserved' | |
| sh 'echo \\"$BUILD_NUMBER\\"' // "1" |
| --- | |
| - name: Capture files in path and register | |
| shell: > | |
| ls -1 /path/to/files | |
| register: files | |
| - name: Remove files except specified | |
| file: | |
| path: "/path/to/files/{{ item }}" | |
| state: absent |
| (Chapters marked with * are already written. This gets reorganized constantly | |
| and 10 or so written chapters that I'm on the fence about aren't listed.) | |
| Programmer Epistemology | |
| * Dispersed Cost vs. Reduced Cost | |
| * Verificationist Fallacy | |
| * Mistake Metastasis | |
| The Overton Window | |
| Epicycles All The Way Down | |
| The Hyperspace Gates Were Just There |
| package main | |
| import ( | |
| "fmt" | |
| ) | |
| func decorator(f func(s string)) func(s string) { | |
| return func(s string) { | |
| fmt.Println("Started") |
In a perfect world, where things are done well, not just quickly, I would expect to find the following when joining the company:
Documentation
-
Accurate / up-to-date systems architecture diagram
-
Accurate / up-to-date network diagram
-
Out-of-hours support plan
-
Incident management plan
| Latency Comparison Numbers (~2012) | |
| ---------------------------------- | |
| L1 cache reference 0.5 ns | |
| Branch mispredict 5 ns | |
| L2 cache reference 7 ns 14x L1 cache | |
| Mutex lock/unlock 25 ns | |
| Main memory reference 100 ns 20x L2 cache, 200x L1 cache | |
| Compress 1K bytes with Zippy 3,000 ns 3 us | |
| Send 1K bytes over 1 Gbps network 10,000 ns 10 us | |
| Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD |
Orien is correct, it is the fork() system call triggered by ProcessBuilder or Runtime.exec or other means of the JVM executing an external process (e.g. another JVM running ant, a git command, etc.).
There have been some posts on the Jenkins mailing lists about this: Cannot run program "git" ... error=12, Cannot allocate memory
There is a nice description of the issue on the SCons dev list: fork()+exec() vs posix_spawn()
There is a long standing JVM bug report with solutions: Use posix_spawn, not fork, on S10 to avoid swap exhaustion. But I'm not sure if this actually made it into JDK7 as the comments suggest was the plan.
In summary, on Unix-like systems, when one process (e.g. the JVM) needs to launch another process (e.g. git) a system call is made to
| Host github.com | |
| User git | |
| Hostname github.com | |
| PreferredAuthentications publickey | |
| IdentityFile /home/user/.ssh/id_rsa |