I think in the long run, it would be more sustainable to actually run a Windows server. I'm thinking of Windows 7 Thin Client. It's only x86, but it can run on popular VPS providers, needs virtually no memory and it has built-in sandboxing for network and file writes.
$10/m. I got it to run pretty smoothly on a 2G linode.
But that's without utilization optimization. That means powering down the linode when no requests come in for x minutes (where it doesn't cost anything) and powering it back on when a new one arrives. Only the first new request will be slightly slower.
Coming from DO, I'm a bit surprised powered down doesn't count at usage. I'm planning to migrate to Linode anyway, as they offer twice the RAM for the same price.
The only downside to Linode I can find at this point is that they use custom kernels, which aren't compatible with my current setup. Shouldn't be too hard to replace though.
@Dennis I can help you with that. You just need to prepare your dream setup on you own PC as a qemu-kvm disk. Then there are a few small tricks to overwrite the boot disk.
That's how I got Windows on linode in the first place.
Tell me what to configure and I'll give you a fast link. Then all you need to do is boot into rescue mode and run wget -qO- fastlink.com/blah.gz | gunzip | of=/dev/sda from GliSh.
I'll prepare a clean Fedora KVM soon. I'll drop you the SSH address when ready for final config. Can you add your public SSH keys on GitHub? I'll just pull it from there.
At github.com/settings/keys create a new SSH key with the contents of your public SSH ID (from ~/.ssh/id_rsa.pub). If you do, anyone can allow you access to their PC using your GitHub username. That's a bit easier than copying keys about.
@Dennis I use Gandi; if you power down a system there, they charge you for the hard disk and any IPv4 addresses you want to keep a hold on (so that people connecting into your system can continue to use the same address), but not for anything else
I'm not sure if I'd recommend them for TIO, though, they seem more oriented to businesses than to individuals
@ais523 If we are going for dynamic, a DIY AWS Lambda with Jenkins+Docker would be even cheaper. (Can't use Lambda, because it only has Python and NodeJS AFAIK).
I think in the long run, it would be more sustainable to actually run a Windows server. I'm thinking of Windows 7 Thin Client. It's only x86, but it can run on popular VPS providers, needs virtually no memory and it has built-in sandboxing for network and file writes.
Thin PC was designed as an ultra-light variant of Windows 7 which could directly replace XP, but as a virtual system on a massive scale. It takes about 3 minutes to install and is more or less a complete Windows 7 with advanced write-filter for the file system.
I ran an OVH VPS with CentOS for some time as a build server, no issues.
@Dennis If you want, I still have an OVH VPS lying around that I don't use. It has 2 months left. You can have it as a sandbox to try if OVH works for you.
That would just be the download though, which is of course not activated out of the box. I just said I will donate a license, which includes giving Dennis the money to buy a key ;)
@Dennis Address is [email protected]. Your keys are installed. There's a textfile in your home folder with important info. I took the liberty to install nano, otherwise the system is untouched.
Maybe you could allow internet access by just making it so that users have to agree to terms where they agree not to attempt anything malicious using TIO (and agree not to attempt to bypass the Sandboxing to break stuf etc. etc). Then if someone uses TIO maliciously, you don't get in trouble for it. After all, people use proxies all the time to do illegal things and it isn't Tor or whoever procided the proxy who gets in trouble for it.
Then again, I might just have no idea about anything legal-related.
@Dennis does SE even use cleanup tags? I don't think we tend to have posts large enough that it's reasonable to want to delegate the cleanup to someone more qualified
on Wikipedia, where you're reviewing a new page every few minutes and many of them are on subjects you don't know, often you can't do much other than throw on a {{wikify}} or {{unref}} or whatever, but it seems like overkill to have such a system here
hmm, I probably shouldn't have gone off on that tangent, I shouldn't PPCG while tired
yep, the reviewers here are fairly on top of things; in fact, it's reasonably possible to go through all the reviews other people have done too (review the reviews), if you want to, as the volume is so small
@EriktheOutgolfer So far, I haven't added any forks to TIO. Adding it as a separate language (preferably with a different name) would be an option, but two different atoms probably don't warrant that.
The other option would be to initiate pull requests to merge the new atoms into the original repo. If you're interested in that, you'd have to follow the naming conventions though.
Basically, I wanted to make my own fork as a ground for making atoms to pull-request with correct names later. I used my own naming convention so as to not have any potential conflict with atoms added to the main Jelly (yes, I am copying new atoms and quicks from there). I asked for a pull because I wanted to have an "Erik's beta version" before rolling out the pull-request.
Also, after a pull-request has peen merged with the main Jelly, I will add the new atom's name, but not remove my own name I previously had there, so as to avoid breaking older code.
Understood, but I think it would be much easier and less confusing if you just started making pull requests now. æR and ŒḂ are free and would follow the naming conventions.
Pfft, you already saw my source code. Yes, I had considered those at first to be honest, but later thought of a possible conflict with newer atoms, so I used my own naming convention. Creating a pull request now.
@EriktheOutgolfer Alright. It would be better to implement æR as list(sympy.primerange(x, y + 1)), which will be a lot faster if y - x is large. You should also specify an ldepth and rdepth of 0 or it won't vectorize.
I think it would be better to make the palindrome check cast an integer to its digits. Testing whether, e.g., the number 12321 is a palindrome or not is quite common in code golf challenge.
If you change the argument's name to, e.g., argument, argument = iterable(argument, make_digits = True) would accomplish that.
Huh? I never knew that. Final (I think) change incoming. Also, I didn't take any inspiration from is_string, and I always knew it wasn't an atom at all.
One thing I really come to appreciate about linode is the 40G LAN (every node in one data centre also gets it's own local IP). E.g. the rescue system is a debian image that runs on a RAM disk. So it's possible to clone raw device data from a rescue shell to a completely separate production node at roughly 200MB/s. Unsafe and stupid, but still awesome.
The basic infrastructure would be (TIO ⟷ Swift client) ⟷ (Swift gateway) ⟷ (Swift DB). I can host a gateway for you and setup a small test DB. The swift client is a python CLI.
The OVH vps would probably be a good playground for this.
Python CLI sounds easy enough. I have a bit too much on my plate right now to test this – if I try to do too many things at once, the result is always the same: nothing gets done – but I'll get back to you in ~1 week.
@Dennis I have mounted a Swift database via fuse at /mnt/tiodb. Every directory inside that mountpoint is a separate database. Every file in such a directory is an object. The content is the key. E.g. right now, there's one DB called "test" with one object "testkey" containing "hello". It's basically a very-high-latency file system. Don't ever rename objects. Only create, read or delete them (using normal unix file commands).
@mınxomaτ So I can use it like I would use any other mount point? That's great! I have little to no experience with databases. Is there anything like block size or inodes I have to worry about?
Not sure if that made sense.
Does a 400 bytes object really occupy 400 bytes (plus metadata) or is it always a multiple of x bytes? Size aside, is there a limit to how many objects can be stored in the database?
Reduce IOPs :). If you can blob together multiple keys into a bigger object, the latency is obviously reduced, but the tradeoff is higher CPU usage. Don't attempt to rename or use any other extended attributes.
@Dennis It should be 400 bytes since there is no metadata in Swift, only objects. There are also no permissions etc. But you can try and check with df.
Blobs is what I was going to do when I still thought about storing them directly on the server. Just wanted to check if that was still needed with a db.
This is the non-commercial version of Swift, specifically hubiC. They guarantee the integrity of the data. The commercial version is here: ovh.com/us/public-cloud/storage/object-storage