About computing and software development
PrevNode LinkNextAre you a programmer?
Node LinkNextYes, I am. For some of the publicly available source code I wrote (usually FOSS) see:
(I'm answering this question here, because I got asked that a lot.)
Note that software development involves other activities than programming (e.g: QA, writing documentation, or system administration). Moreover, I believe that, despite common belief, writing HTML, or many other languages which are not Turing complete, is programming because it requires similar discipline.
What are your Computers’ Specifications?
PrevNode LinkNextMy primary machine is a desktop machine with a:
- An Intel Core i3 CPU (x86-64).
- 8 GB of RAM.
- Intel Corporation Sandy Bridge Integrated Graphics Controller (rev 09)
- A 2 TB hard-disk.
- A 21″ Wide LCD Screen by LG.
- Intel Corporation Cougar Point High Definition Audio Controller.
- Intel Corporation 82579V Gigabit Network Connection.
I’m running Fedora Linux and Debian GNU/Linux on it. This desktop computer replaced my older computer which was a:
- Pentium 4, 2.4 GHz CPU.
- 2.5 GB of RAM.
- An ATI Radeon HD 2600 card.
- One 160 GB Hard-disk and two smaller ones of 80 GB or so.
- A 19″ LCD Screen by ViewSonic.
- A standard built-in AC’97 sound-card.
I’m using mostly FOSS on it, and try not to depend on non-FOSS software. I documented the reason why I no longer trust non-FOSS software on my technical weblog.
Which Programming Language did you start with? Which programming languages do you know now?
PrevNode LinkNextWhen I was in the 4th grade (back around 1987), my father bought my family a PC XT machine, with 640 KB of memory, and a colour CGA screen. Using this, my friends and I started learning how to program, first using the BASIC interpreter that was installed on the BIOS and was invoked if you didn’t put a diskette inside, and then using some of the BASIC variants that ran on DOS such as BASIC.COM, GWBASIC and BASICA. So for better or for worse, BASIC was my first language.
I’ve neglected programming for a long while and just played games on the computer, and possibly did some work on it. However, I returned to programming when I was in the 9th grade, this time on a 386 SX with QBasic which came with some later versions of DOS, and later on with Borland Turbo C++ 3.0 (which sported a much more primitive variant of C++ compared to today’s flavours). Despite knowing C and C/C++, I still found QBasic useful, due to my ability to rapidly develop code in it (what Larry Wall later called “whipuptitude” in some of his talks.). I also may have dabbled with Excel’s Visual Basic for Applications (VBA) before I graduated from high school, and during my 10th grade, I learned some Pascal using Microsoft QuickPascal on DOS.
After I graduated from high school, I worked at three firms. In some of them I've done C or C++ development on Windows, but I also studied some SQL, and became familiar with some UNIX flavours and with Perl 5 and the UNIX shells. UNIX has been an epiphany for me: until then I used DOS and Windows, and considered them bad, but did not know what a good system is. UNIX was the first genuinely good system that I have encountered. I also fell in love with Perl, and it became my favourite language.
By the time I started studying in the Technion, I had a relatively early distribution of Linux installed on my computer, and started playing with various languages available there.
You can find a list of languages that I currently know on one of my résumés.
Which text editors are you using? What is your favourite text editor?
PrevNode LinkNextWell, I'm usually using gvim (the Gtk+/GUI version of the Vim programmer’s editor) for coding and for writing purely-Latin texts. For bidirectional (mixed Hebrew+Latin / etc.) texts, I sometimes use Kate instead, with a fallback on gedit. Sometimes, I use “vim” (the console version) or neovim's nvim for quick edits or when I cannot or would prefer not to use a GUI editor.
The reason I am using gvim instead of vim, is because many terminal emulators on Linux (including Konsole which is my preferred one) mess up with the Hebrew/Latin bidirectionality too much (enough to confuse vim), because the syntax highlighting looks nicer there, because the mouse support is better, because I like and use the menubar, because Unicode characters are often displayed better, and because it does not start much slower than Vim. If the console-based Vim works for you, feel free to use it.
Regarding Emacs: from what I know, it should be a fine text editor, but I could never get used to it, so that’s not what I’m using. I was told about the Evil mode which provides partial Vim compatibility, but I didn’t try it, in part because I’m now using quite a lot of Vim extensions written in vimscript and in Vim’s extension languages, which are not supported by Evil.
Which text editors have you used in the past?
Node LinkWhen developing on Windows, I used IDEs such as Borland C++, or Microsoft Visual Studio.
I used Joe extensively on Unix-like OSes.
I also used NEdit on them.
I used FTE on Unixes and Windows as well (by the originator of IceWM).
I used Cooledit in the Technion due to lacking conditions, and was frustrated by its lack of Windows-like copy/paste keyboard bindings.
Why are you using your choice of an operating system (= Fedora Linux)?
PrevNode LinkNextFedora has up-to-date software.
Fedora has regular releases.
(From my experience, installations of Arch Linux, which is a rolling-release distribution, tend to become un-updatable / un-upgradable if left unattended for long.)
Fedora has relatively little contributors' redtape.
Its desktop experience is good.
Fedora is popular enough, so it has enough (paid or pro-bono) contributors so most of the critical usability and reliability issues are handled fairly quickly.
I find the RPM / DNF / etc. stack easier to use than dpkg and apt. I also am more versed in hacking *.src.rpm packages than in debian's toolchain.
Fedora's online community is, as a general rule, friendly, patient, and helpful.
That put aside, I still willingly try to help people, who are using other Linux distributions, or even non-Linux (and sometimes non-Unix-like) operating systems, with their technical problems. Part of my motivation is this quote from “The Cathedral and the Bazaar”.
Also note that your experience and preferences may vary.
What were your B.Sc.'s Final Projects?
PrevNode LinkNextThey were:
The IP Noise Simulator. The user-land version should still work and may be of interest.
Zavitan - a web-based seminars manager written in Perl 5.
Why are you using DuckDuckGo? (Instead of Google?)
PrevNode LinkNextTo prevent Filter bubble.
I like their keyboard navigation (left/right/up/down keys).
Their search URLs have less junk than Google's.
I like the bang commands ("!g" for a Google search; "!gh" for a GitHub search; etc.).
Also note that DuckDuckGo claims to avoid tracking the users, but I personally do not care too much about that.
Why are you still using XML?
PrevNode LinkNextWith the advent of JSON, and similar formats such as YAML, some hipster geeks have proclaimed that XML-based grammars no longer have any legitimate use. However, while I use JSON and YAML for many tasks, I still find XML (and some related technologies such as DocBook 5, XPath, RELAX NG, and XSLT) of use. Part of the reason for that is that XML can be used to add markup to a substring of the text, e.g.: like the <a> element:
<p> I like <a href="http://example.com/" title="site">hyperlinks</a> in my XML. </p>
I recall that some Lisp fans argued that XML is syntactic sugar for S-expressions, but I think it is a moot point, because we can encode and decode them both to/from a binary stream of 0s and 1s, JSON, or most other syntaxes. Syntax, while often considered marginal, is nevertheless important, and I don't think I'll enjoy writing text documents completely using S-expressions. I also recall reading about a new programming language that allows mixing and matching both lisp-like code and XML code.
In addition, note that I sometimes use template systems or similar tools to generate XML documents, and documents in other formats.
Now, with respect to HTML 5, the Markdowns and AsciiDoc, while I use them sometimes, they are less structured and more errorprone than many XML grammars, and often are not semantic enough for all my use cases. I can use XSLT, Python, or similar, to convert XML to XHTML5 anyway, whether directly or indirectly. And I often do.
Finally, note that I also use some custom formats such as the one I defined for whitelists of spell-checkers or the so-called Screenplay-Text format.
Relevant links:
Why are you using YAML?
PrevNode LinkNextWhile YAML has many extraneous features, it is also more user-friendly than JSON.
With respect to the many security vulnerabilities that YAML implementations had in the past: I try to not be paranoid, and most of my YAML files are under my control anyway.
Do people still use IRC?
PrevNode LinkNextYes, they/we do. Old ≠ bad.
Some advantages of IRC are:
The protocol is simple enough to allow implementing mostly reliable and secure IRC servers.
The protocol has open specifications, and some FOSS servers and clients.
IRC chatrooms, which are known as "channels", are more discoverable than those of many newer services which have paranoid "privacy" measurements in place. E.g.: Python's channel is usually called "#python" or "##python".
See my mini-essay about paranoia.
Moreover, a new channel can be allocated fairly easily.
There are several separated IRC networks, so if one exhibits an issue, others are often unaffected by it.
The IRC protocol is fairly lightweight, fast, and responsive.
Why are some of your E-mail signatures longer than 4 lines?
PrevNode LinkNextThe McQuary-limit is just a guideline.
They are more accessible this way.
The sizes of many emails written using top-posting can be north of 70 kilo-Bytes, and most such emails are at least 12 kilo-Bytes, while having 5-or-fewer meaningful lines. Given that, slightly longer signatures are a drop-in-the-bucket.
Where can I find your E-mail signatures’ generator?
PrevNode LinkNextAbout Free and Open Source Software (FOSS)
PrevNode LinkHow can I become an open-source contributor?
Node LinkNextSee what I wrote about it on my homepage. I’m giving instructions there. You may also wish to read my “Advice for the Young” essay.
Can you help me intrude into/exploit (so-called “crack” or “hack”) someone’s server/instagram account/IRC account/Twitter/Facebook/etc.?
PrevNode LinkNextNo, and that is because I am not a computer intruder or a “cracker”, and even if I were versed in that, I wouldn't try to get myself and other people in trouble by trying to exploit vulnerabilities on useful, ethical, services.
There are better ways to handle your online problems than to try to do cracking. For more insights, see:
“Master Foo and the Script Kiddie” - a modern UNIX koan by Eric Raymond.
Q: Would you help me to crack a system, or teach me how to crack?
A: No. Anyone who can still ask such a question after reading this FAQ is too stupid to be educable even if I had the time for tutoring. Any emailed requests of this kind that I get will be ignored or answered with extreme rudeness.
Q: How can I get the password for someone else's account?
A: This is cracking. Go away, idiot.
Q: How can I break into/read/monitor someone else's email?
A: This is cracking. Get lost, moron.
Q: How can I steal channel op privileges on IRC?
A: This is cracking. Begone, cretin.
Are you a hacker?
PrevNode LinkNextThe word "Hacker" can mean several things. It can mean a computer intruder, in which case, see the question above - I am certainly not one. Otherwise, it can mean a clever and competent enthusiast of a certain field of endeavour, primarily used by and for computer workers, but not limited to them. As I note, by inspiration from other sources, hacking is at least several millennia old.
Anyway, a "hacker" is something that normally other people call you rather than something you call yourself. I aspire for excellence and continuous improvement in several fields of endeavour (including software development), but only other people can judge whether I am indeed a hacker of them. And my policy is to encourage criticism rather than fanboy/fangirl-ism.
You’re using Mercurial (on Bitbucket.org/etc.) for some of your projects. How can I learn how to use it?
PrevNode LinkNextThere are some links to tutorials on the Mercurial page of the Better-SCM site. More can be found in a web search for “mercurial tutorial”. Mercurial is not too hard to learn.
When building some of your CMake-based projects, I am getting an error for a missing “Shlomif_Common.cmake” file
PrevNode LinkNextYes, you can find it in this repository. Just put it in the source directory. Such a problem should not be encountered when building a source release from the source archive downloads.
How many Projects are you Working on?
PrevNode LinkNextI have originated, maintain, or contribute to more than one project and keep switch-tasking between them. Some of them have sub-projects or individual tasks. You can find some lists and activity logs on this page.
Do you have a GitHub account?
PrevNode LinkNextYes, see this link for more information.
Why are you working on this non-Perl 5/6 project? I thought you were a Perl guy!
PrevNode LinkNextWhile I have written a lot of Perl 5 code, and often still maintain it because it cannot be all reimplemented in something else overnight, Perl is not the only language I know and use. Perl is not exactly a religion that requires full devotion to its belief, and I actually met a woman who considers herself both a Christian as well as a Buddhist so…
For more information, see:
Why I Hate Advocacy - by Mark-Jason Dominus.
Why did you publicly share your solutions to Project Euler problems despite their request to avoid doing that?
PrevNode LinkNextFor several reasons:
Making the GitHub project public allows me to use Travis-CI and other CI services free of charge.
I enjoy sharing my work with others.
I think that Linus Torvalds’ quote that
Only wimps use tape backup: real men just upload their important stuff on FTP, and let the rest of the world mirror it ;)
has a grain of truth in it.It may be useful as evidence of the fact I solved these for prospective employers and other interested parties.
Do you solve the Project Euler problems in their order?
PrevNode LinkNextNo, I don't. I often skip problems which I find too difficult or not interesting enough. I did solve 149 out of the first 150 problems (excluding No. 143).
How do you keep organised? What do you use for To-Do lists?
PrevNode LinkNextFirst of all, see this post I wrote about why E-mail is not only a to-do list, and about the fact that other resources serve as virtual to-do lists. For my proper to-do lists, I use gvim/vim, either using plaintext or using the vim-quicktask plugin.
Why do you mention that a certain work or post is copyrighted by you and under a certain licence?
PrevNode LinkNextFirst of all note that IANAL/etc. Anyway, I try to give explicit and more permissive licences (e.g: Creative Commons ones) to all my posts and works because otherwise they are “All Rights Reserved” by default and so under much more restrictive implicit licensing conditions. I know that Ashleigh Brilliant got copyright to apply to relatively short sentences (which most of my posts are longer than them), and that there was a court decision that made it a violation to sample and reuse even a single chord of a copyrighted song. So there may not be a minimal limit to how substantial a copyrightable work can be.
Most of the licences I use permit some use that will be normally be forbidden by default, so you are better off, and it is better to be safe than sorry.
Also see:
What is the “Expat License”?
PrevNode LinkNextIt is what the FSF calls the so-called MIT License (or SPDX: MIT
). The original X11 licence has an extra clause.
Why do you have so many GitHub repositories?
PrevNode LinkNextMany of my GitHub repositories were one-off clones for correcting some typos, or fixing a bug followed by a pull request. Deleting them all will require some time, and also requires entering the password again.
Another factor that makes my repositories more numerous is the fact that I use individual repositories for some image macros, for some stories and screenplays, and for some essays. I am not a purist of the "monorepo" strategy.
Why are you still using Perl? Can't you rewrite all your Perl code in Python / JavaScript / TypeScript / Erlang / Intercal / etc.?
PrevNode LinkNextIt is true that Perl 5 seems to have somewhat fallen out of favour, but as much as I like Python (and I do), I still also like Perl. One cannot rewrite their entire codebase in [insert hyped language/stack/framework/technology of the present] every 6 months or so. Back when I was interested in learning Ruby, some of its enthusiasts implied I should use Rails for my sites. And guess what? The Rails and Ruby craze and hype are gone, and Rails has its share of issues, and I'm glad my site was not converted to be a Rails application. It can also happen to node.js, Python, PHP, or WordPress.
Currently, perl5 is quite actively developed with annual major releases, and with as little backward compatibility broken as possible. The CPAN ecosystem is not quite as active as PyPI or npm, but still proves useful often, and also avoids breaking backward compatibility as much as possible. Moreover, I can often make use of modules and libraries in other languages using the Inline::* family of CPAN modules and other FFIs.
Note that I also write some new code in Python, Julia, bash, C, C++, and other languages.
Shlomi Fish on Twitter: "From #IRC : One thing we appreciate about #perl #CPAN, is that there is often a "category killer", which while not always perfect, is used. On PyPI and npm, many use cases have many alternatives (re https://t.co/xCbM7jfC2t ; https://t.co/Nx8Uu3JvAw) without a clear winner."
( Tweet )
Shlomi Fish on Twitter: via @nixsanctuary : “My 20 Year Career is Technical Debt or Deprecated”.
I can emphatise, but as opposed to him, large amounts of my FOSS / Creative Commons / etc. code+content are still functional (after many transitions) .
Avoiding being an early adopter has advantages.
( Tweet )
Why did you quit using and contributing to Mageia Linux?
PrevNode LinkNextContributing to Mageia was too time consuming, and Mageia is too obscure, unpopular, and mismanaged. I like Fedora and Debian better. I told Atlas to shrug given an overworked and miserable contributor (whether paid or not) likely accomplishes little. This is regardless of how much important the project is.
Why are you using VLC? (Instead of mpv?)
PrevNode LinkNextFirst of all note that I use mpv for quickly playing media files from the command-line. Otherwise, I prefer VLC's user-interface and its overall user-experience. They are not perfect, but generally better than mpv's spartan one.
Why do your projects’ releases skip odd minor version numbers?
PrevNode LinkNextThis is what the "Producing OSS" book calls "The Even/Odd Strategy". Quoting from it ( under CC-by-sa ):
Some projects use the parity of the minor number component to indicate the stability of the software: even means stable, odd means unstable. This applies only to the minor number, not the major or micro numbers. Increments in the micro number still indicate bug fixes (no new features), and increments in the major number still indicate big changes, new feature sets, etc.
The advantage of the even/odd system, which has been used by the Linux kernel project[78] among others, is that it offers a way to release new functionality for testing without subjecting production users to potentially unstable code. People can see from the numbers that "2.4.21" is okay to install on their live web server, but that "2.5.1" should probably stay confined to home workstation experiments. The development team handles the bug reports that come in from the unstable (odd-minor-numbered) series, and when things start to settle down after some number of micro releases in that series, they increment the minor number (thus making it even), reset the micro number back to "0", and release a presumably stable package.
This system preserves, or at least, does not conflict with, the compatibility guidelines given earlier. It simply overloads the minor number with some extra information. This forces the minor number to be incremented about twice as often as would otherwise be necessary, but there's no real harm in that. The even/odd system is probably best for projects that have very long release cycles, and which by their nature have a high proportion of conservative users who value stability above new features. It is not the only way to get new functionality tested in the wild, however. In the section called “Stabilizing a Release” we will examine another, perhaps more common, method of releasing potentially unstable code to the public, in which the release number is further marked so that people have an idea of the risk/benefit trade-offs immediately on seeing the release's name.
For what are you using Inkscape?
PrevNode LinkNextLately, I've been mostly using it for captioned images.
Why is your uptime so low?
PrevNode LinkReading from my Facebook post:
Today I'd like to share a story told by a friend. At his workplace, they had a computer running Gentoo Linux which wasn't rebooted for a while and accumulated a large uptime. Then one day they had to reboot it for some reason. This friend gave me one guess to guess what happened then. I guessed that "it didn't work". I was right.
While mainframe computers tend to accumulate years of uptime, I suspect their software and hardware made some design compromises to accommodate for that.
My uptime record was 34 days:
I try to reboot every kernel update.
I do enjoy “Uptime Funk - A SUSE Music Parody” though.