All sorts of fun python optimizations that can be done if you specifically know your use case. I wrote about optimizing thread stack size years ago. http://jrwren.wrenfam.com/blog/2016/02/16/optimizing-uwsgi-for-many-many-threads-and-processes/index.html
Percol, jq and gron. I use these dozens of times per day. Also, fish shell, I find it superior to all others and don’t quite understand why anyone would use bash at this day an age.
I also use httpie, ag/ripgrep/ack, fd which are great, but they provide only incremental improvements on standard tools that work well. If I am writing shell scripts I always stick to curl, grep, find, etc.
how about: because I’ve used bash for 25 years and the second a key command doesn’t work in a new shell I feel I’m wasting my time. Why learn a new way to do the exact same thing? Especially why learn it just so things are colorful?
You don’t have to learn any command at all. The invocation syntax for commands is the exact same as bash. I still write my Shellscripts in Bourne shell like I did 15 years ago when I used bash. No change in there. What fish offers is a better UI for command input. Auto complete and history browser are superior to those of bash. You can have it without colours of you want. Colors are there to provide Information. For example, as you type you will get a suggestion for autocomolete. This is shown in a different colour, the same when picking autocplete suggestions. It is not quite accurate to say that it is just more colorful, because bash doesn’t have these features at all.
This has NOT been my experience.
We use fish at work… for reasons… I was very quickly frustrated that commands were different and found it unusable.
You say autocomplete and history are superior, but they are also different. Sometimes the cost of change negates and superiority that the new thing would provide.
Fair in production at work. Learning on the side, trying out a new thing to really make sure that it is the exact same thing (it’s not … bash and zsh and fish are similar but not the same or exact same). Of course, what you are doing is maybe working well enough but pay attention to pain points. Did bash do something weird with variable escaping?
Of course no one can convince anyone, or prove software’s worth. So, here’s my camp and creds I guess. I’m using fish but I think/feel that you could achieve most of it with zsh plugins and then not frustration that the world is still using bash. Zsh is bash compatible so the world staying where it is doesn’t matter. That’s pretty nice. It’s also a zero cost switch, other than learning the tricks (the features that are supposed to be great) that you didn’t have before.
Saying it is about colors is a bit reductive. Color is multiplexing for your cerebral cortex. Colors help you scan. But it’s not just colors.
One I can not live without anymore is hstr: https://github.com/dvorka/hstr
Worth noting: If you use set -o vi
(highly recommend anyway), you can search command history with /<search term>
and then n
(any number of times) to flip through the matches.
I found it faster and more intuitive, but I am using it for years now and never tried fzf again, so things may have changed wrt fzf
Yes it’s fancy ctrl-r but for people like myself who find ctrl-r clunky to use and also find remembering long command strings difficult it’s a huge help.
This doesn’t seem very C-like.
I realize C is old and has had many styles and that the idioms of C are weaker than most other languages, but still. This seems anti-idiom to me.
maybe this example is trying to reinforce Dynamically Addressed Peers, and using RFC ips only would not take as much attention of the reader as using 4.4.4.4, 3.3.3.3 or 2.2.2.2…
It’s a take/parody on sites like http://isitfridayyet.net/, but you don’t have to set up your own domain. Hence “as a service”.
Is Genode really a special-purpose OS? What is that purpose? The project home page says:
The Genode OS framework is an open-source tool kit for building highly secure component-based operating systems. It scales from embedded devices to dynamic general-purpose computing.
When I think special-purpose OS, I think of proprietary things like JunOS, TIMOS, FortiOS, ZyNOS for network switches – and the odd open-source competitor like VyOS, which is just a specialized Linux distro. Other purpose-specific distros like Kali, Tails, Qubes come to mind too. I think Linux is being painted with an awfully broad brush here. I mean, even Android uses the Linux kernel, right?
But, the overall sentiment is right on the money. And don’t even get me started about browsers!
yes, and while android core may not be another example of vendor purpose os, it sure seems like the most commonly shipped android devices do fit the bill.
How well does it handle forking? One semi-common use I have is having multiple people try to test a website. Right now I use code like the below. Does this roughly do the same?
#!/bin/env python
from socketserver import ForkingMixIn
from http.server import SimpleHTTPRequestHandler, HTTPServer
class ForkingSimpleServer(ForkingMixIn, HTTPServer):
pass
import sys
import os
if sys.argv[1:]:
port = int(sys.argv[1])
else:
port = 8000
if sys.argv[2:]:
os.chdir(sys.argv[2])
server = ForkingSimpleServer(('', port), SimpleHTTPRequestHandler)
try:
while 1:
sys.stdout.flush()
server.handle_request()
except KeyboardInterrupt:
print("Finished")
It is written in Go. There is no forking, concurrent requests are handled via concurrent goroutines.
Interestingly this runs very counter to some common wisdom. See “Things you should never do” by Joel https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/
At my last team I used the “paying down credit card debt” analogy. You allocate a portion of your budget to it (hopefully enough to avoid the balance increasing), but you also still spend money on food every month.
The cynical view of this is that you kind of need to rate limit “fixing all the things” because software developers often conflate “technical debt” with “> 6 months old and not using the latest framework or pattern from my favorite blog”. The questions I usually use to guide these conversations are:
So basically you have to convince me there’s a problem, and you have to convince me the recommended solution will actually fix the problem and that we can expect it to be cost effective.
This is a very old post at this point, and I think some historical context about Fog Creek is worth pointing out:
Because of Joel’s inflexible position on this, Fog Creek ended up CREATING THEIR OWN PROGRAMMING LANGUAGE and then porting the whole codebase to C# with their hand-rolled compiler.
I don’t consider that to be any less risky than a full-scale rewrite.
Interestingly this runs very counter to some common wisdom. See “Things you should never do” by Joel https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/
A good followup to “Things you should never do” is Lessons from 6 software rewrite stories, which is about the ways some companies are able to do complete rewrites.
congrats, you’ve met, but not exceeded, the 21yr old C10k problem - https://en.wikipedia.org/wiki/C10k_problem - on 10yr old hardware.
I guess I agree with the author that it is very sad if most people don’t know that this is what is possible. This is what has been possible for 21yrs.
one could also create a socket connection between nodejs and .net and do the same communication over it.
That’s true, and since they are consumed as stream all would work with no changes. Using sockets has the added complexity of having to choose a port. stdin and stdout are already there and ready to use.
Using TCP has some downsides cuz other processes in the same machine could maliciously or accidentally connect to it. Especially if it talks http, miscreants might be able to get a browser to send requests to it with CSRF attacks. Various commercial products have shipped RCEs doing this, so you at least need authentication in the protocol to not introduce vulns.
Using a pair of anonymous pipes as stdin & stdout works fine.
On cursory reading it sounds like Windows might not yet have socketpair
even though some support for AF_UNIX
sockets has existed for a while now.
“Flash has been there from the dawn of the Internet” is something only a person with 93 in their nickname could write. ;)
[ActiveX] acts as a middleware between Java and Flash applications
Ok, I feel old for having seen the horrors of ActiveX (even though my nickname in the same format would only have 88 in it). But, for the record, the cool thing about ActiveX is that you could write ActiveX controls in any language. Of course, they would only run in IE for Windows, which completely negates that advantage, but still, before Emscripten there was nothing else that allowed you to write web frontend code in C++ if you really feel like it.
That was an implied point but yeah, I didn’t actually say that. I’ve made a PR to remove those factually incorrect statements though.
Is there actual data supporting the notion that code in memory-safe languages rots more than C code?
Java and JavaScript have been around for long enough to have a track record, and both are very good at keeping old code working. Rust and Go haven’t been around for as long but both seem to take care to keep old code working.
The SMB client is faster than it has ever been since they ditched samba as their client. Finally I get decent speeds to my local NAS.
For me, it is worth upgrading just for this.
OMG Desqview… that is something I haven’t heard in a very long time.