Early on at Amazon, CEO Jeff Bezos famously issued a memo about how software was to be built at the company. Teams would share their data through service interfaces, or APIs, the same way that they would share it with an outside customer. That meant that a developer on one team didn’t need to know anything about how another team operated in order to integrate the product it made—he or she could follow the documentation and use that product as though it were an external service. Ultimately, this ease of cooperation became extremely efficient and is what paved the way for Amazon Web Services—a $6.7 billion business that powers huge parts of the web (including Netflix).Continue reading “Why you can’t manage humans like they’re software”
https://github.com/openconnect/openconnect-gui/issues/180 Use above code for use with Openconnect 1.5.3
case "disconnect": // Delete direct route for the VPN gateway echo("Deleting Direct Route for VPN Gateway"); exec("route delete " + env("VPNGATEWAY") + " mask 255.255.255.255"); exec("netsh interface ip set dns " + env("TUNIDX") + " source=static 184.108.40.206") exec("netsh interface ip delete dns " + env("TUNIDX") + " 220.127.116.11")
I often say that if Warren Buffett were 30 years old, he’d only invest in software. Here’s why…
1. The Demand for Software is very strong and stable — Spend on software has grown at ~9% for about a decade. Looking forward Gartner estimates show that the Software category is expected to grow 8–11% versus the U.S. economy at 2–3% and broader technology spending at 3–4%. Software is a GOOD neighborhood to live in.
You might uncover better solutions
In a previous article, I wrote about how trying to solve coding challenges without using if-statements might help uncover better solutions. In this article, we will explore how to solve some more challenges, but this time without using any loops.
By loops, I mean imperative loops like
do...while. All of these are similar in the way that they provide an imperative way to perform iterations. The alternative is to perform iterations in a declarative way. Continue reading “Coding Tip: Try to Code Without Loops”
|Subject:||[Chicken-users] [ANN] CHICKEN 5.0.0 has been released|
|Date:||Wed, 7 Nov 2018 19:53:30 +0100|
Dear CHICKEN users, We are proud to announce the immediate availability of CHICKEN 5.0.0 at the following URL: https://code.call-cc.org/releases/5.0.0/chicken-5.0.0.tar.gz This tarball has the following SHA256 checksum: a8b94bb94c5d6a4348cedd75dc334ac80924bcd9a7a7a3d6af5121e57ef66595 It has been a long stretch, but we finally made it! This release contains the largest number of big-impact changes we've made since the CHICKEN 4.0.0 release. Most importantly, we have completely overhauled the module layout so that it should make more sense where each identifier is located. For a quick overview of where things are, see the page we used for discussion of these changes: https://wiki.call-cc.org/core-libraries-reorganization The manual has of course also been updated to reflect these new modules: https://wiki.call-cc.org/man/5/Included%20modules Other notable features are: - Full numeric tower - A new declarative egg description format for chicken-install - Improved support for static linking (eggs are now also compiled statically) - "Deployment" mode has been dropped as it was less portable and reliable than static linking. - Builds are fully bit-for-bit reproducible (for core, but user code too) - Random numbers now use a better PRNG than libc rand() (namely, WELL512) - Core has gone on a diet: several libraries have been moved to eggs, like srfi-1, srfi-13, srfi-14, srfi-18, srfi-69, and several other things. The (very long!) complete list of changes since version 4.13.0 is available here: https://code.call-cc.org/dev-snapshots/2018/08/11/NEWS Because the testing period has been quite long, we've managed to port many of the most important eggs to CHICKEN 5 already. You can view them at the new subdomain, see https://eggs.call-cc.org/5 Of course for the time being, not everyone can immediately switch to CHICKEN 5 for everything, so https://eggs.call-cc.org/4 also works. If you have code you want to port, we've created a porting guide that covers the most important pitfalls: https://wiki.call-cc.org/porting-c4-to-c5 Many thanks to everyone in the community for their enthusiasm, mental support and help with testing all this new code and enthusiastically porting stuff to CHICKEN 5 even back when it was barely ready! Regards, The CHICKEN Team
Description: PGP signature
While writing my own bcrypt library, being unsatisfied with the current Java de-facto standard implementation jBcrypt, I discovered a lot of odd things surrounding the bcrypt protocol (mind you: not the underlying cryptographic primitive ‘Eksblowfish’).
Bcrypt is a password hashing function designed by Niels Provos and David Mazières in 1999 which became popular as the default password hash algorithm for OpenBSD¹. In comparison to simple cryptographic hash functions (like SHA-256), the main benefit of using bcrypt is that a developer can set how expensive it is to calculate the hash. This is called key stretching and should be used with any (usually weak) user provided password to protect against brute force attacks (i.e. simple guessing).
Introduction to Bcrypt
So how does it work? First you need a password and set the iteration count as a logarithmic work factor between 4–31, doubling the required computation every increment. So for example it could look like this:
which may output
Americans are holding on to their smartphones for longer than ever.
Pricier devices, fewer subsidies from carriers and the demise of the two-year cellphone contract have led consumers to wait an average of 2.83 years to upgrade their smartphones, according to data for the third quarter from HYLA Mobile Inc., a mobile-device trade-in company that works with carriers and big-box stores. That is up from 2.39 years two years earlier.
Continue reading “Why Americans are sticking with older phones”
Python is booming in popularity. It is used in DevOps, Data Science, Web Development and Security.
It does not, however, win any medals for speed.
I will be writing a series of blog posts about Apache Pulsar, including some Kafka vs Pulsar posts. First up though I will be running some chaos tests on a Pulsar cluster like I have done with RabbitMQ and Kafka to see what failure modes it has and its message loss scenarios.
I will try to do this by either exploiting design defects, implementation bugs or poor configuration on the part of the admin or developer.