I created the most popular Turkish social platform, Eksi Sozluk, using a single plaintext file as its content database back in 1999. It had taken me only three hours to get it up and running without any web frameworks or anything. It was just an EXE written in Delphi. The platform's still up albeit running on .NET/MySQL now and getting banned by Erdogan government for baseless or false reasons (like "national security"). Despite being banned, it was the seventh most popular web site in Turkey two weeks ago, and the second most popular Turkish web site in the same list: https://x.com/ocalozyavuz/status/1735084095821000710?s=20
You can find its ancient source code from 1999 here: https://github.com/ssg/sozluk-cgi
The platform is currently at https://eksisozluk1999.com because its canonincal domain (https://eksisozluk.com) got banned. Any visitors from outside Turkey should get redirected anyway.
Since it's still a legal business entity in Turkey, it keeps paying taxes to Turkish government, and even honors content removal requests despite being banned. Its appeals for the bans are in the hands of The Consitutional Court to be reviewed for almost a year now.
A newspiece from when it was banned the first time this year: https://www.theguardian.com/world/2023/mar/01/eksi-sozluk-wh...
Its Wikipedia page: https://en.wikipedia.org/wiki/Ek%C5%9Fi_S%C3%B6zl%C3%BCk
Crazy to see you! Some time ago, I was actually looking to add Eksi to Touchbase (www.touchbase.id) since several users reached out and wanted to add it alongside their other platforms to share on their profile, but we couldn't find out the URL convention for user profile feeds! It seemed to be "https://eksisozluk1999.com/{{username}}--{{7 digit value}}", but we couldn't find any rhyme or reason to the 7 digits. Are the integers random, or do they even go back to stemming from a convention from the previous codebase?
User profiles are actually stored like https://eksisozluk1999.com/biri/{{username}}. "/@{{username}}" also redirects to "/biri/{{username}}". You shouldn't need numbers at all. The numbers are only at the end of topic titles. They are title id's (sequential integers assigned when they're created) to disambiguate conflicting Latinized forms of Turkish words.
back in 1999 or so, I wrote an online shopping site this way, all the data stored as text files (one per category, with many items in my case ... I was 18 years old and had no idea about databases). The site ran smoothly for almost a year until the customer used "*" in the name of a product... which was the character by which all the product data in the text files data was split...
That's why you always delimit your data fields in a text file with a unicode snowman
Surely noone will ever use that character!
live and learn. It was the re-split when they saved the new products through my brilliant parser that royally fucked it all up. Genius that I was, I used "|" to separate attributes, but I also definitely used a double asterisk to mean something else. Nothing teaches you not to get clever better than screaming customers and abject failure. And having to find/replace a thousand asterisks to figure out which ones were making the file unreadable. Falling on my face made me the careful coder I am today.
Early career chap over here. Awesome hearing stories like this. Those wild west days certainly have passed. We’ve got so much now to get us started as programmers that it almost robs us of learning experiences somehow.
Not if you see some of the stuff my coworkers write.
Hah. Well you always need to just learn new things. That's what my life taught me.
Check it out. Year is 1999 or so - [edit: scram that, more like 2001] and I'm working at a Starbucks on my laptop. Mind you, wifi does not exist. Having a color laptop is sort of posh. One other person who shows up there every day, this kid Jon who's my same age, he's got a laptop. We end up talking. No one even has a cell phone.
Jon's my age and he's writing PHP scripts. So am I. I have a client I built a website for that needs an online store - they sell custom baby blankets and car seat covers. They want a store where you can choose your interior fabric and exterior fabric for each item, and see a preview. They have 10 interior and 20 exterior fabrics. They sew these blankets by hand for each request, for like $100 each. This is a huge job at the time... it pays something like $4000 for me to write the store from scratch. (I'd easily charge $60,000 now for it). First I have to mock up 200 combinations in photoshop?... so instead I write a script that previews the exterior and interior fabrics. Then I write a back-end in PHP to let them upload each fabric and combine them.
One day I'm sitting at the next table to Jon (he was working on a game at the time, I think - fuck, who knows, we were both 18 year old drop outs) - and I showed him how I wrote these fabric combinations to text files. And he was like... "Dude, have you tried SQL? It's AMAZING!" And I was like, "what the fuck is SQL?"
Yes, people used to pay idiots like us to build their websites. I'm still sort of proud of a lot of shit I got to do back then. But I am thankful to Jon that he introduced me to SQL when I was at the time trying to invent databases from scratch with fopen('r') and fopen('w') and hand-built parsers ;)
[edit] Just one little thing I'd note my friend: If you have a brain, it's always the wild west. Those jobs that make you create something from scratch, they haven't evaporated. Sure, it helps to know newer technologies, but the more important thing is being sure you can do what they're asking for, and then figure out a way to do it. This is the hacker ethos.
You can also encode the special characters when writing to file and decoding after read.
Weird. In the same year (1999), I did pretty much the same thing (because strtok really made it easy to split a string) also for client input fields.
Only, I used the ASCII FS character (the Field Separator character) and everything worked brilliantly.
additionally: if a nickname has spaces, we have to type "%20" instead of spaces in the links with "/@{{username}}"
i've submitted an entry about this a few minutes ago. https://eksisozluk1999.com/entry/143247963
*months, not minutes. sorry for autocorrect (i wasn't using english keyboard.)
Using Apple’s translate function I was able to read many of the posts - very interesting to see the differences between American and Turkish social media.
There were many posts about cats and their livelihoods and protection. Love that
> There were many posts about cats and their livelihoods and protection. Love that
Turks have a wonderful relationship with cats, especially in Istanbul: https://en.wikipedia.org/wiki/Feral_cats_in_Istanbul
There is a nationwide no-catch and no-kill policy for feral cats.
There’s a theory that cats mostly domesticated themselves; human settlements and their large grain stores proved to be a reliable source of rodents for them to hunt, and the humans tolerated the cats because they kept the rodent problem in check, but these cats would have lived a semi-domesticated lifestyle around human settlements without initially being kept as household pets. Maybe the feral cats of Istanbul are the closest modern approximation to this.
When I was a kid, that still used to be the norm on farms. There were farm cats and house cats. The farm cats were there to kill rodents and otherwise minded their own buisness. You could not just take them up, they would have bitten you. I think this has gotten out of style, as I have not seen the division nowdays and all cats seem to be gotten tame.
Barn cats are still a thing, but they are typically still owned and kept whereas I was talking more about free roaming cats that live around human settlements. The early free roaming cats would have been about as tame as barn cats; my impression is that the cats of Istanbul are more friendly.
Definitely in line with the axiom of sits where fits
Would love to see that implemented here in USA. People in places like NYC love to catch and spay every cat they see, then go on to complain about too many rodents around.
Rodents are an issue of trash and food left around, not a problem of not enough cats.
Cats shit in my garden and leave dead songbirds where I grow food. No, we don’t need more cats.
Do you not think rodents are in your garden … where food is left around?
I'm very glad to hear that it's readable using a translator!
In fact, the community dynamics resemble Reddit a lot despite having significant differences in layout and format. Irony, sarcasm, harsh criticism are common yet tolerance of differing viewpoints is relatively high compared to other platforms where people just flock to their own bubble or just block everyone else who they don't agree with.
It's fun too, has a rich history spanning a quarter century, and has been quite influential.
Don’t forget to archive it with responsible parties, like for future history and anthropological research. It would be a shame to loose so much of public discourse, especially if it’s so influential.
Not completely baseless reasons if you don't have any meaningful moderation on the platform. You're quick to blame your own gov at first convenience when you don't like the fact that your system may be harming society. All governments try to take measures to control spread of misinformation, Europeans and Americans do it by forcing social media platforms to silence opposing views by labelling them "misinformation", and Türkiye does the same. No difference.
Among the millions of entries on the platform, not one single piece of content on the platform was presented as evidence for the ban decisions. Just ambiguous words or false claims.
Shouldn't it be straightforward to prove that Eksi Sozluk lacks "meaningful moderation"? Shouldn't it be a requirement for such a drastic action like banning the whole web site?
Twitter produces orders of magnitude more disinformation in volume, amplified way faster and way broader too, yet they don't get any ban from Turkey whatsoever. How do you explain this kind of double standard?
It should be pretty straightforward for you to show you have any moderation whatsoever, I dont believe you do. The whole of the site is full of rubbish.
If I were the Turkish government I would never even do the favour by banning the site, cause that draws attention the site doesn't deserve. I dont care if it's most visited site whatever, it's just useless.
Well, whenever we enter an evidence war like this we must go back to the old standard. The burden of proof is on the accuser. It has to be. If the burden of proof is always on the defendant, all you need is 30 people making accusations and it becomes impossible to defend against. It's basically a legal DDOS.
Also, i think every logical person can see that its much much easier to provide a single example of a lack of moderation than it is nebulous "prove you have moderation". What kind of standard do you have for that and how do we know you're not going to shift the goalpost the moment they bring you what you ask for. An example is an example is an example. Provide your proof or cease accusations. I've seen this argument many times in my country, always used to shut down free expression and enforce repression. There's great books and videos on logical fallacies out there
Lol no need for an essay, I didnt mean the service provider has to prove they have moderation to the officials. I meant just here, it would be easy to just say the site has moderation. I don't believe there is, which means it's a dumpster ground with everyone posting all sorts of trash. Which, by the way, is another reason the site shouldn't even warrant any attention, but obviously government officials are stupid to even bother.
Reframing what you just said, you think people should prove they are innocent against any accusation because it would be "pretty straightforward"?
Either you like authoritarian governments or you have it in for this website (or both?)
Don't try to normalize Aladdin by saying everything he does is Aladdin. He is such an Aladdin you can't defend him by saying he's Aladdin!!
Got any problematic examples?
How did you make a Windows executable work on the web?
Using CGI protocol on a Windows server. IIS (Windows' own web server) basically interfaces with executables by running them, feeding them HTTP headers, and server variables through environment variables, and gets the response HTTP headers and the body from their STDOUT. It's very inefficient, of course, since every request requires spawning a new copy of the executable, but it had worked fine in its first months :)
Here is a very simple example from the original sources: https://github.com/ssg/sozluk-cgi/blob/master/hede.pas
Don't sell yourself too short here, that's exactly how Perl/PHP works and that was defacto standard around the same vintage (and for a decade more).
Honestly, there's a lot of beauty in that simplicity, I can definitely imagine someone also wanting to work with mod_php in Apache as well (just a module for the web server).
That said, FastCGI and similar technologies were inevitable and something like PHP-FPM isn't much more difficult to actually run in practice.
Still, having a clearly defined request lifecycle in wonderful, especially when compared to something how Java application servers like Tomcat/Glassfish used to work with Servlets - things there have gotten better and easier too, but still...
Agree. I also loved the simplicity. It’s not that different from Serverless, if you look at it.
There is an HTTP server handling all the HTTP stuff and process launching (which is handled by API Gateway in AWS, for example), and the communication between it and the “script” just uses language or OS primitives instead of more complex APIs.
The 2000s were quite wild in how things changed… suddenly you have giant frameworks that also parse HTTP, a reverse proxy. At some point even PHP became all about frameworks.
I wonder if we wouldn’t have a more open, standardized and mature version of CGI/Serverless if it had been a more gradual transition rather than a couple of very abrupt paradigm shifts.
I imagine it ran server-side (on Windows).
Indeed. I think it's worth going a little deeper for those who perhaps aren't familiar with some of the underlying principles of the Web.
For starters, all the program does is receive requests (as text) over a TCP/IP connection. It replies over the same connection.
So writing a Web server in any language, on any OS is a trivial exercise. (Once you have the ability to read or write TCP/IP.
The program has to accept the input, calculate the output, and send the output.
If the input is just file names, then the program just reads the file and sends it. (Think static site).
The program may parse the file, and process it some more. It "interprets" code inside the file, executes it, and thus transforms the output. Think PHP.
In these cases a generic server fits the bill. Think Apache, IIS, nginx and so on.
The next level up are programs that are compiled. They generate the output on the fly, often with no, or little, disk interaction. This sort of program often uses a database, but might not. (An online Soduku game for example might do everything in memory.)
Again, any if the above can be built on any OS and written in any language with TCP support.
Why do dictators love to ruin old stuff?
I don't know, why do dictators love to ruin old stuff?
Because they think they oughtacrack.
(That's the best I've got, clearly need more crackers.)
“Who controls the past controls the future”
Is there a reason why they are not taking the 1999 version of the domain down?
Because the platform switched to it only last week, no other reason. It was on eksisozluk1923.com before that. The moment this new domain catches up on popularity, they would find an arbitrary reason to ban that too.
Let's hope things change after 2028. Optum kardesim.
I don't think that "elections" change the result of dictatorship
Oh, I did something similar. I built quite popular local (non-english language) gaming forum with an Access file hosted in a Windows server and a VBScript ASP file, which had just been released. That's the original version, before ASP.NET. I was 13 or 14 years old at the time and didn't know better. It was no SQLite, so I had some weird concurrency problems. On top of that I ran into the some size limit (was it 2GB?) pretty quickly, but at this point it was time to look for a bigger server and figure out real databases anyway.
It eventually stopped being popular under my administration, so I transferred the domain to some people around 1999. It was rebuilt with PHPBB or something and got a new life. It's still on, surprisingly.
Fascinating that our stories intersect so much. I later converted that Delphi code to ASP/VBScript because native Delphi code ran really slow on a new DEC Alpha AXP server because of emulation on the RISC architecture. ASP code was much faster despite being interpreted :) I found ASP way more practical too. Access was also my native next choice of database. Not very scalable, but day and night difference compared to a text file :)
I never really stopped to think about it, but ASP was indeed quite performant, considering it was all interpreted, running in late 90s shared-hosting hardware with very little RAM and super slow hard disks. The site got a few thousand active users and worked quite well, apart from the DB size limits.
Fast forward 10, 20, almost 30 years and I frequently encounter websites that struggle to work under the same load, even with expensive AWS bills, especially when working with Rails.
Perhaps ASP was performant because the site was a few orders of magnitudes smaller than anything you'd see today, even though it was full featured. Probably 1000x or 10000x smaller if I also include third-party libraries in the count. It was quite comparable to serverless/edge computing actually.
It should not have to be said, but (especially in in the West) we tend to forget about it:
Turkey has more inhabitants than the most populous country in western Europe (Germany). Turkey is also significantly larger than the largest country in western Europe (France).
When it comes to the number of Internet users it is on par with Germany and beats all other western European countries.
True. I think the number of Internet users in Turkey has surpassed 70 million. Eksi Sozluk used to receive 30+ million unique visitors monthly before it got banned.
Çok iyi :)
Sedat, you’re a legend, and a machine, great to see you here or anywhere. Good luck with the legal challenges.