-
11 votes
-
Russia to disconnect from the internet as part of a planned cyberwar test
33 votes -
Testing!
Testing it out. Trying some formatting! New line, only once! New line, twice! New line, previous having two spaces! Asterisks! Underscores! Tildes! Backtick! triple backtick! four spaces at the...
Testing it out. Trying some formatting!
New line, only once!New line, twice!
New line, previous having two spaces!Asterisks! Underscores! ~Tildes!~
Backtick!triple backtick!four spaces at the start of the line!1 vote -
In need of streaming advice!
Hey! Lately I've decided that after years of wanting to do stuff on the internet, I'm gonna try my best to start streaming video games. I'm rather excited to start trying to form a lil community...
Hey! Lately I've decided that after years of wanting to do stuff on the internet, I'm gonna try my best to start streaming video games. I'm rather excited to start trying to form a lil community and I wanted to know if anyone here has tips/experience they would like to share. Any and all advice is welcomed and appreciated! I did a little test stream of Bioshock (using OBS) for some friends, but I'm currently using a wireless adapter so it didn't go very well for very long. I'm definitely picking up an ethernet cable before I try again. But in the meantime, I thought I'd ask for some wisdom.
10 votes -
cantunsee.space: Test your attention to detail in UI design
43 votes -
Backblaze hard drive stats for 2018
6 votes -
Why CAPTCHAs have gotten so difficult
22 votes -
Experimenting with some changes to information that's displayed on topics, and some other tweaks
I'm planning to test out various changes today and through the weekend, so I just wanted to put this thread out as a kinda-megathread for them. Functionality-wise, not much should be changing yet,...
I'm planning to test out various changes today and through the weekend, so I just wanted to put this thread out as a kinda-megathread for them. Functionality-wise, not much should be changing yet, but I'm going to be playing around with moving some things, changing some information that's displayed, and so on. For an alpha, the site's been way too stable. We're way past due to try experimenting more.
I'll try to keep a list updated in here of what I've changed. So far:
- On listing pages, the domain for link topics is now shown in the "footer", to the right of the number of comments (replacing the submitter's username), instead of in parentheses after the title. This makes it so that the information about the source of the post is always in a consistent position.
- Link topics pointing to articles now show the word count (when we have that data) after the title, similar to how text topics always have. This should work for most sites, but not always yet.
- Links to YouTube videos now show the video duration after the title. (This should be possible to extend to other sites without too much work)
- Added a
data-topic-posted-byattr to topics in listings to support filtering/styling/etc. via CSS/extensions. - Reduced timestamp precision on topic listing pages to always only show one level (before it would say things like "2 hours, 23 minutes ago", now just "2 hours ago"). It still switches to a specific date after a week.
Please let me know if you love or hate anything in particular, but try to give it a bit of a chance and not just your initial reaction (which tends to be disliking change).
65 votes -
Analysis: Rat poison found in 85% of tested mountain lions, bobcats, fishers
8 votes -
Twins get some 'mystifying' results when they put five DNA ancestry kits to the test
7 votes -
Test Drive your Coding Font
12 votes -
A journey through love with Richard Brautigan
so i've just recently learned about this guy, and his work is quickly becoming a favorite of mine. i'm admittedly crazy poorly-read (is that the antonym to well-read?) when it comes to... well,...
so i've just recently learned about this guy, and his work is quickly becoming a favorite of mine.
i'm admittedly crazy poorly-read (is that the antonym to well-read?) when it comes to...
well, anything besides self-help books released up to "The Subtle Art of Not Giving a Fuck" by Mark Manson.
and his work has been concise and just fucking accurate enough for me to enjoy.
so i present you all,
a journey through love, with Richard Brautigan.
-2
Everybody wants to go to bed
with everybody else, they're
lined up for blocks, so I'll
go to bed with you. They won't
miss us.
in this first stage, we see that little Richie's met himself someone special, and off they go arm in arm to live happily ever after.
Romeo and Juliet
If you will die for me,
I will die for you
and our graves will be like two lovers washing
their clothes together
in a laundromat
If you will bring the soap
I will bring the bleach.
and here we see something that, personally, i found surprising from a poet who got his start in the 50s.
this piece emulates the incendiary, passionate, limitless love that some of us have been lucky enough to experience in the early years of our lives. the love where it's the both of you against the world. the love where the most mundane tasks seem incredulous solely because they're done together. the love that i have only seemed to find in life, through trauma bonding.
their love is powerful. their love is radiant.
I Feel Horrible, She Doesn't
I feel horrible. She doesn't
love me and I wander around
like a sewing machine
that's just finished sewing
a turd to a garbage can lid.
their love is over.
the crass yet poignant imagery somehow simultaneously flashing feelings of uselessness, self-loathing, and loss.
you are here.
Haiku Ambulance
A piece of green pepper
fell
off the wooden salad bowl:
so what?
the sheer stoicism here is inspiring to me.
this is the mindset that i want - and don't have the emotional energy to cultivate.
were Brautigan still around and kickin' today, i'd buy the man a shot of the best whiskey i could get with $7 and thank him for emulating the exact mindset i want, need, and desire
in four lines.
it's simple - the green paper is a fraud, illusory. from afar or even from near with a quick glance - the green paper is another leafy green of the salad. a leaf of lettuce, a bit of cabbage. even if you press your face into the bowl and smell, the paper will smell of salad and nothing but.
it falls onto the floor, you pick it up to throw it away. you notice the texture inapropos with more roughness, and frailty than a leaf of a vegetable. you test it - you tear it.
it was paper.
it was not the spinach you'd desired.
it was not real.
it was not what you wanted.
regardless of the time you've spent preparing the salad, chopping your veg, blending your dressing, tossing it all, and fixing it for presentation,
if you throw this paper out - it will be no loss, and your salad will only be better for it.
a green piece of paper fell off the wooden salad bowl.
so what?
Love Poem
the piece that brought Brautigan in to my attention in the first place.
It's so nice
to wake up in the morning
all alone
and not have to tell somebody
you love them
when you don't love them
any more.
resolve.
clarity.
peace.
the earlier bleach has gone unsipped. she has come, she has gone. he has suffered, he has grown.
and now, he is at peace.
his world back to...
normal.
this has been a journey through love with Richard Brautigan.
4 votes -
State official went roaming around Vermont to test cell coverage claims
4 votes -
Let's find the best overlooked music of 2018. Here's the 175 albums we've collected so far - a good start. Got anything to add to it?
Every year we try to put together a 'best of' list that is devoid of the same 200 albums that make up all of the other music lists on the internet. We do this by intentionally excluding...
Every year we try to put together a 'best of' list that is devoid of the same 200 albums that make up all of the other music lists on the internet. We do this by intentionally excluding popular/mainstream artists from our submission pool. Our cutoff is generally no more than three tracks with a million plays on spotify, though we do fudge it a bit especially for artists that only have regional success or put out something really great. The popularity limits are more of a guideline than a hard and fast rule.
I used last year's results as a test post on tildes, if you want to see what the final results will look like. Once we finish voting on the albums we generate the playlists on spotify and use automated tools to replicate them to other streaming services. We have a google spreadsheet that helps us manage the process. There's a submission form that will drop recommendations right into the spreadsheet where we can work on them.
We're not trying to find albums that are 'better' than the mainstream. We're just trying to include more of the great music that gets released every year, particularly the good stuff from new and overlooked artists that gets lost by the wayside while all the major music publications argue about the right order of the year's press darlings. Consider AlbumOfTheYear's List as the 'official' record of what's popular in the music press.
We do this by asking people for their favorites - in listentothis, in letstalkmusic, and today here on Tildes. I'd like to invite everyone on Tildes to submit their picks for the best overlooked music they've heard this year.
How do you know if an album you like is good enough? Everyone has their own way of listening, but generally, if you've had the record on repeat at all, that's the sign that it's worthy of attention. If you've got one you can't stop spinning and can't get out of your head, that's 'must listen' territory which goes at the top of the list. Make sure to leave a note in your comment when you submit, if you think it's that good. ;)
You can submit albums right here using this form. Please put a ~ in front of your username when you submit, so we know it came from a tildes user rather than a reddit user.
This spotify playlist contains the 175 albums from 2018 we've gathered so far. That's what's in our spreadsheet right now, at the start of the process. We haven't vetted/voted on these yet, just made sure they come in near the popularity cutoff. If any of the albums in this list really knock your socks off, let us know in the comments below. The first 1/3 of the list is mostly from random redditors, quality may be a bit dicey. The last 2/3 is the fruit of the l2t crew's cratedigging all year, submissions from our 30+ moderators. Every genre you can imagine (and some you can't) is in this list, they aren't sorted by style yet - this is one big bucket that goes all over the map.
I will update this playlist as new albums come in, though not exactly in real time - expect a day or two delay. If you want to keep up with it, just follow that list on spotify.
We're taking until the end of Feb. to finish the 2018 set, so roughly 6-8 weeks to listen to all of this stuff before we push the finished set out the door. If you want to help us listen, bookmark this thread here on Tildes, and leave a comment here when one of the albums grabs you. Feel free to submit new albums to that spreadsheet right up until the deadline at the end of Feb.
Happy listening. :)
11 votes -
Testing if punctuation is included when @ing
Test
1 vote -
How are you?
It's usually a question with a two word answer, but I'm sure there's more that could be said - that you wouldn't normally say because you don't want to waffle on. Either way, I'm elated and...
It's usually a question with a two word answer, but I'm sure there's more that could be said - that you wouldn't normally say because you don't want to waffle on.
Either way, I'm elated and excited. I revised a few hours for a test instead of watching a TV show, and my result went from shit to actually pretty bloody great. I'm really happy about it, but I'm not going to revise until GCSE's because it's made me absolutely knackered.
I'm pretty excited because I've got work experience next week. I haven't the foggiest about what it'll be like (fearing a very, very boring week), but I'm looking forward to it. It'll probably be a bit awkward without my friends around, but I'll get used to it.
So, onto you. How are you?
20 votes -
Do you use a todo manager or something like a bullet journal? [My story of trying different planners for four months]
[LONG POST - 4 months of trying different planners) I always wanted to use one but I never thought of analog (paper) planners and tried a lot of digital ones - link to a post. About 4 months ago I...
[LONG POST - 4 months of trying different planners)
I always wanted to use one but I never thought of analog (paper) planners and tried a lot of digital ones - link to a post.
About 4 months ago I saw my friend at school using a pocket diary - similar to this image, he was writing down his tasks on it (he didn't use it again). That day I bought a good pocket diary of around 200 pages, till date I've not used more than 10 pages and its still lying around.
I realised that I was not going to use it because it was very thick and I couldn't carry it in my pocket. I bought this pocket diary. This was thin and simple, perfect for me. I've used it the longest before switching.
Initially I used to dump all the tasks and cross it after completion, later I introduced a date system and it was one date for one page. I wrote down tasks for the day and crossed after completion if something was incomplete I migrated it to next day. This worked well but I needed a place to dump tasks that I had to do in future so I made a future section from backside and added tasks to it. This was the final tweak and I used it for like a month. I used it for daily tasks, future tasks, some notes and contacts (I used to make contact.txt before this).
Later IIRC I wanted to change because it was already half full and a mess because I was trying to do a lot with it. Next I mindlessly bought a notebook - something like this but with 5 sections, I didn't know what to do with it. I also don't remember why I bought it so I used it to write down stuff that I learned online and wanted to remember. It replaced my reddit save and I wrote what I wanted to remember, it is still with me and has been changed a lot (usecase).
I made a calendar on a single page of that notebook and tracked down basic stuff on it, I started using small square sticky notes to write down tasks and that's how I left my pocket diary. Not long after I lost interest in that notebook thing and updating calendar daily was not interesting. I left that and searched a lot online. Again tried a lot of digital options but I know it will never work for me so I left it and didn't use anything for like a day before I stumbled across Strikethru.
Strikethru is something like Bullet Journal. If you want to look at strikethru then see this video & this for Bullet Journal.
I took that notebook and turned it into a bullet journal, I used it for ~a week before trying strikethru and then again switching to bullet journal after a week. That was testing period and I chosed bulletjournal (bujo) over strikethru. That book was also thick so not long after I made a new bujo notebook (normal 200 pages). Again it felt like a big task that I had to do daily and I lost interest, I again restarted it with a new design. In this month I switched to different notebooks/design a lot and was never satisfied. I also tried Nextcloud tasks for 3 days before again trying out bujo.
Last year in december around a week before christmas I wanted to change it all so I went to a store and bought a new grid notebook (we used it for doing math in 1st grade). I used it for 10 days and everything broke during the last week of december, I was not at home and we went on a vacation. I took it with me but didn't update it because it was boring. It has been 5 days I was busy organising everything else again and now I've settled on what I started with (slightly better idea).
During that time I read a lot on nosurf, pornfree, internet addiction, sleep cycles, polyphasic society, tulpas, made new friends, tried a lot of todo managers, used different journaling apps and this is what I've decided to stay with.
I went to the store today to buy the same pocket diary that I've used the longest (1 month one). Its cheap, for 15 INR and works well for me. Over there I saw a box that said monthly planner, I took it and it had 13 small pocket diaries (similar to what I've used the longest but more thin) and with that a small case that would hold a notebook. There was one contacts pocket diary (perfect) and 12 pocket diaries one for each month. It was for this year and costed 170 INR, I didn't had money so I asked the storeman (idk what we call them, here we call them uncle) did he have cheaper option. He showed me the same piece that costed 140 INR but was for 2016, he said he would give it to me for 70 INR because he would have to throw it anyways.
I thought that was a great deal and bought it. So now I have 12 mini diaries for each month and one contacts diary that has my big list of 10 friends contacts. After trying a lot of different options I came back to what I used for the first time. Its simple and stupid & fits in my pocket.
It has one page for one day and I just have to cross 2016 and the day (mon, tue, etc.) thing and update it with 2019 days. In the middle it has a big two page calendar for current month, page before it has previous months small one page date list to write down events and on page after it has next months small one page date list. The last page is for notes and the cover has 2017 calender that I won't use and ignore.
Theres little patch work todo but for that price I think I bought a good set and if I actually use this for full year then I would buy a new one next one (for 2020 & not 2017 :|)
I've spent around 300 INR for all these (~ 4.5 USD)
Tl;dr -> Used a lot of systems and in the end switched to what I used for the first time which is simple and fits in my pocket.
# What do you use for managing your tasks? Do you use it daily?
16 votes -
test
-----BEGIN PGP MESSAGE----- Version: Mailvelope v3.0.2 Comment: https://www.mailvelope.com wcFMAwjKAAqDBWZWAQ//ZKSX4/1cjA+HpiQvusGBHAzfYZwfrw0gZrzzcUUL...
-----BEGIN PGP MESSAGE-----
Version: Mailvelope v3.0.2
Comment: https://www.mailvelope.comwcFMAwjKAAqDBWZWAQ//ZKSX4/1cjA+HpiQvusGBHAzfYZwfrw0gZrzzcUUL
vOj/dUfNAzy6XXHLVUCHqShGt5sQhHM21tu+6ijIsBhRtULfh9vMiWYe4EM2
0zfJ8MtS7aXGRrb9ynJQ5bgNN0n+87z34uWGHCeeXKQ0dYyuidoMcEisBKJx
ivczZzx8G0t9J6G+5EgYK8OXM4autsUdaMpv+Z0BXGFcnhMkfLjiM/aCow/a
OMZxKutfM2M5CUy9lErVrn1B91JQ8pP8d2WHfzHGQLU3uT/gVFe2lLVhm9S9
YlvkRS5qrq8T65Ntu7xUl7t7WBoPgk7nQDcyPE28TgV/mleK5+K4udzoPQZo
R97tbpjBAH/MsuXY58502yfkFFEv3MOl71VFYpR68IZ8Wza8toVB5w30GbXS
LejklE868n2a5IhNJcrhKNn2vs4e56wg5ug3Njs9I5gKfl2oLbt0mmpL7Eow
lyLVUPq+x67dV5aXz00+S5jiqNg6PDtlhY4C4KoQBgpqWQz264UH0TP0YIOk
9RqrqsTAOqKkGSk2yD3yrdLmFDQezL2cjrn2FK6/1PCaGmQsE1mEervbfBfv
EFiAfhN1tJDBPtzUZ03TCePQt1guUAHZBqrE9GQ+zHTIcMEi3cM8D5XTjupT
QG9B70cHE/mEkyAOSfqG4dHInlVfUEtXFftRaK5h443SRwGw47nk/ncWe3S8
Ugs1HCkSbZm9tpKgcYdSTuFCOWyA8JLXRidTyPi2y1upc13+BuG7lutmSPYr
P+bv38eSq7977iEtn+6V
=t5Y6
-----END PGP MESSAGE-----1 vote -
secomd test
1 vote -
test: posting link tgat was already posted
1 vote -
test
. testtesttesttest
1 vote -
A tester walks into a bar: Reviewing test techniques
4 votes -
Test your knowledge of American incarceration
9 votes -
What are some good open source games?
I've found a few really, honestly fantastic open source games and I'd like to share them and discover some new ones too. Firstly, NullpoMino is a fantastic cross-platform Tetris clone. It's...
I've found a few really, honestly fantastic open source games and I'd like to share them and discover some new ones too.
Firstly, NullpoMino is a fantastic cross-platform Tetris clone. It's highly, highly customizable and is lots of fun to play. It's got a great community over at Hard Drop, and if you like Tetris - you'll like NullpoMino. However, there are a few issues with it; one in particular being the relatively low skill ceiling of Marathon. The skill ceiling is very low (compared to other titles such as the NES edition), but this is solely exclusive to Marathon as far as I know. It turns into a test of patience rather than skill. Another issue is with installation; as the game was made for 32 bit systems it is rather slow, and it's finicky to run on Linux. However, it is a fantastic Tetris title (and open source!)
Another good open-source game is Osu! I've never played it competitively, but it's a fair bit of fun to play with friends and is a great game. It's cross-platform, although I've only ever played it on Windows, and it has a nice community. Fantastic game that I don't see mentioned too much.
The last game for this post is SuperTuxKart. It serves as a great kart-racing game, that's fun and has a low barrier to entry. Graphically, it's not drop-dead gorgeous, but it's not bad at all either. It's decent solo, and a lot of fun with friends. Would highly recommend. Cross-platform and available as a snap.
21 votes -
Beer expert guesses cheap vs expensive beer | Price Points
6 votes -
Virgin Galactic achieves space on SpaceShipTwo test flight
10 votes -
Films with heroines make more money
11 votes -
Tumblr's displaced porn bloggers test their new platforms
21 votes -
Testing rel=noopener
4 votes -
Test
Hello, there. This is a test of formatting Bold Hi Hello Code I said this. Link Unordered List *Item 1 *Item 2 *Item 3
1 vote -
~music Listening Club 25 - 1992
On the second week of the new format, we're going to try out themes based on periods of time, this time being the year of 1992. Themes, both years like this one or whatever else you think would...
On the second week of the new format, we're going to try out themes based on periods of time, this time being the year of 1992. Themes, both years like this one or whatever else you think would work well for the listening club, can be suggested in this thread or if you join the unofficial Tildes Discord server in the #listening-club channel.
Essential Album: Aphex Twin - Selected Ambient Works 85-92 - Listen!
While a lot of excellent and long-lasting work was released in 1992, Selected Ambient Works 85-92 stands out as one of the most influential and has stood the test of time as well as any of them. As much as everyone hates the label of "Intelligent Dance Music" (IDM), there's no doubt that SAW is one of the cornerstone records of that genre that has an impact in the world of music at large that can't be ignored.
Selected Ambient Works 85–92 is the debut studio album by the English electronic musician Richard D. James under the pseudonym of Aphex Twin, released as a very limited import in late November 1992 by Apollo Records, an imprint of the more prominent label R&S Records, and later widely in February 1993. The 1992 LP was James' third release overall, and collected tracks dating back as early as 1985. An analogue remaster was released in 2006, and a digital remaster in 2008.
Selected Ambient Works 85–92 received widespread acclaim and has been characterised as a landmark of electronica, ambient music, and IDM. It was followed by Selected Ambient Works Volume II (1994). On the week ending 27 September 2014, the album entered at #30 in the UK Dance Albums Chart after the release of his 2014 album Syro.
Widely regarded by critics as one of the pioneering works in early IDM and modern electronic music, retrospective reviews mention its influence on electronic artists. Warp Records refers to it as "the birthplace and the benchmark of modern electronic music" and has stated that "every home should have a copy." In 2003, the album was placed #92 in "NME's 100 Best Albums" poll. Nine years later, it was named the greatest album of the 1990s by FACT Magazine. The album was also featured in the book 1001 Albums You Must Hear Before You Die.
Minor Album: Divine Styler - Spiral Walls Containing Autumns of Light - Listen!
This is a strange one, possibly the strangest hip hop album released as of 1992. It's so disjointed and all over the place that instead of describing it myself, I'll steal the descriptors from RateYourMusic: "Islamic, psychedelic, anxious, cryptic, conscious, abstract, introspective, surreal, eclectic, male vocals, avant-garde, noisy, spiritual."
Spiral Walls Containing Autumns of Light is the second album by hip hop artist Divine Styler, released in 1992 on Giant Records. This album marked a significant change in Divine Styler's musical direction, incorporating a much broader range of styles and influences than 1989's Word Power. Despite the album's unusual style, it was actually released by a major label but, perhaps inevitably, failed to sell as well as record executives expected. Although the album was largely regarded as a commercial failure, it has since developed a large cult following. Styler was signed to Giant because of Ice-T’s relationship with Warner Bros. Records.
The album is notoriously experimental—Allmusic referred to the album as being like '"The Residents meets Funkadelic"—and takes influence from a wide variety of music genres such as hip hop, rock, electronic, funk and even elements of spoken word and noise.
The majority of the album was produced and arranged by Divine Styler himself, which included him performing and processing all of the vocals, playing the guitar, drums (and drum programming), and keyboards, among other instruments. Due to the artist's dominance over the album's direction, it is generally regarded as a very introspective and personal album.
Here's the place to discuss your thoughts on the records, your history with them, the artists, or music in 1992 in general and basically talk about whatever you want to that goes along with Selected Ambient Works 85-92 and Spiral Walls Containing Autumns of Light! Remember that this is intended to be a slow moving thing, feel free to take your time and comment at any point in the week!
Again, if you'd like to stream or buy the albums, they can be found on most platforms here (Selected Ambient Works 85-92) and here (Spiral Walls Containing Autumns of Light).
4 votes -
Why Tildes doesn't need to be fully public
Tildes is currently invite-only. (Thank you redditor u/⎷⎷⎷⎷⎷⎷). Of course, it's in alpha testing, so that makes sense. When do you think tildes will be made public? How will they do it? I don't...
Tildes is currently invite-only. (Thank you redditor u/⎷⎷⎷⎷⎷⎷). Of course, it's in alpha testing, so that makes sense. When do you think tildes will be made public? How will they do it? I don't think it ever really needs to be made public. The reasons are that:
1 - Bans are actual bans. Getting beyond a ban is ridiculously hard compared to on Reddit, where someone just makes a second account. On Tildes, if you're banned, you're banned. That's it. It weeds out a lot of trolls.
2 - Throwaways can't be made. Making a throwaway account on Tildes costs one of your invites, so it's much more annoying to do so.
Hopefully you enjoyed my little rant.29 votes -
Why smart people are vulnerable to putting tribe before truth
11 votes -
What is the biggest change you've ever made to your diet?
In mid-2012 I decided to become a vegetarian, both for health and ethical reasons. Before then I had mostly been on autopilot when it came to food - I just ate what what was the norm in my family....
In mid-2012 I decided to become a vegetarian, both for health and ethical reasons. Before then I had mostly been on autopilot when it came to food - I just ate what what was the norm in my family. My choice forced me to get out of my comfort zone, to try out new foods I had never considered before. For this reason, the change has been incredibly positive to me; I'm much more conscious of what I eat now. And by setting a precedent it later helped me make more changes, like cutting down sugar. I'm currently testing to see if the bloating and stomach aches I suffer daily are because I am lactose intolerant; if it is indeed the case, that will require another drastic change, although this particular one will be by necessity rather than choice.
What is the biggest change you've ever made to your diet? Was it by choice, or did you feel obligated to do so, for example because of health issues? What did you get out of it? How much thought do you put in your daily diet, in general?
22 votes -
HTML <ruby> test
<ruby>明日<rp>(</rp><rt>Ashita</rt><rp>)</rp></ruby> <ruby>明日<rp>(</rp><rt>Ashita</rt><rp>)</rp></ruby>
1 vote -
An Alternative Approach to Configuration Management
Preface Different projects have different use cases that can ultimately result in common solutions not suiting your particular needs. Today I'm going to diverging a bit from my more abstract,...
Preface
Different projects have different use cases that can ultimately result in common solutions not suiting your particular needs. Today I'm going to diverging a bit from my more abstract, generalized topics on code quality and instead focus on a specific project structure example that I encountered.
Background
For a while now, I've found myself being continually frustrated with the state of my project configuration management. I had a single configuration file that would contain all of the configuration options for the various tools I've been using--database, API credentials, etc.--and I kept running into the problem of wanting to test these tools locally while not inadvertently committing and pushing sensitive credentials upstream. For me, part of my security process is ensuring that sensitive access credentials never make it into the repository and to limit access to these credentials to only people who need to be able to access them.
Monolithic Files Cause Monolithic Pain
The first thing I realized was that having a single monolithic configuration file was just terrible practice. There are going to be common configuration options that I want to have in there with default values, such as local database configuration pointing to a database instance running on the same VM as the application. These should always be in the repo, otherwise any dev who spins up an instance of the VM will need to manually tread documentation and copy-paste the missing options into the configuration. This would be incredibly time-consuming, inefficient, and stupid.
I also use different tools which have different configuration options associated with them. Having to dig through a single file containing configuration options for all of these tools to find the ones I need to modify is cumbersome at best. On top of that, having those common configuration options living in the same place that sensitive access credentials do is just asking for a rogue
git commit -Ato violate the aforementioned security protocol.
Same Problem, Different Structure
My first approach to resolving this problem was breaking the configuration out into separate files, one for each distinct tool. In each file, a "skeleton" config was generated, i.e. each option was given a default empty value. The main config would then only contain config options that are common and shared across the application. To avoid having the sensitive credentials leaked, I then created rules in the
.gitignoreto exclude these files.This is where I ran into problem #2. I learned that this just doesn't work. You can either have a file in your repo and have all changes to that file tracked, have the file in your repo and make a local-only change to prevent changes from being tracked, or leave the file out of the repo completely. In my use case, I wanted to be able to leave the file in the repo, treat it as ignored by everyone, and only commit changes to that file when there was a new configuration option I wanted added to it. Git doesn't support this use case whatsoever.
This problem turned out to be really common, but the solution suggested is to have two separate versions of your configuration--one for dev, and one for production--and to have a flag to switch between the two. Given the breaking up of my configuration, I would then need twice as many files to do this, and given my security practices, this would violate the no-upstream rule for sensitive credentials. Worse still, if I had several different kinds of environments with different configuration--local dev, staging, beta, production--then for
msuch environments andnconfiguration files, I would need to maintainn*mseparate files for configuration alone. Finally, I would need to remember to include a prefix or postfix to each file name any time I needed to retrieve values from a new config file, which is itself an error-prone requirement. Overall, there would be a substantial increase in technical debt. In other words, this approach would not only not help, it would make matters worse!
Borrowing From Linux
After a lot of thought, an idea occurred to me: within Linux systems, there's an
/etc/skel/directory that contains common files that are copied into a new user's home directory when that user is created, e.g..bashrcand.profile. You can make changes to these files and have them propagate to new users, or you can modify your own personal copy and leave all other new users unaffected. This sounds exactly like the kind of behavior I want to emulate!Following their example, I took my
$APPHOME/config/directory and placed askel/subdirectory inside, which then contained all of the config files with the empty default values within. My.gitignorethen looked something like this:$APPHOME/config/* !$APPHOME/config/main.php !$APPHOME/config/skel/ !$APPHOME/config/skel/* # This last one might not be necessary, but I don't care enough to test it without.Finally, on deploying my local environment, I simply include a snippet in my script that enters the new
skel/directory and copies any files inside intoconfig/, as long as it doesn't already exist:cd $APPHOME/config/skel/ for filename in *; do if [ ! -f "$APPHOME/config/$filename" ]; then cp "$filename" "$APPHOME/config/$filename" fi done(Note: production environments have a slightly different deployment procedure, as local copies of these config files are saved within a shared directory for all releases to point to via symlink.)
All of these changes ensure that only
config/main.phpand the files contained withinconfig/skel/are whitelisted, while all others are ignored, i.e. our local copies that get stored withinconfig/won't be inadvertently committed and pushed upstream!
Final Thoughts
Common solutions to problems are typically common for a good reason. They're tested, proven, and predictable. But sometimes you find yourself running into cases where the common, well-accepted solution to the problem doesn't work for you. Standards exist to solve a certain class of problems, and sometimes your problem is just different enough for it to matter and for those standards to not apply. Standards are created to address most cases, but edge cases will always exist. In other words, standards are guidelines, not concrete rules.
Sometimes you need to stop thinking about the problem in terms of the standard approach to solving it, and instead break it down into its most abstract, basic form and look for parallels in other solved problems for inspiration. Odds are the problem you're trying to solve isn't as novel as you think it is, and that someone has probably already solved a similar problem before. Parallels, in my experience, are usually a pretty good indicator that you're on the right track.
More importantly, there's a delicate line to tread between needing to use a different approach to solving an edge case problem you have, and needing to restructure your project to eliminate the edge case and allow the standard solution to work. Being able to decide which is more appropriate can have long-lasting repercussions on your ability to manage technical debt.
16 votes -
Suggestions regarding clickbait and misinformation
One thing (amongst many) that always bothered me in my 6+ years of using Reddit was their lax rules about posting clickbait articles and straight up misinformation. In my opinion this was...
One thing (amongst many) that always bothered me in my 6+ years of using Reddit was their lax rules about posting clickbait articles and straight up misinformation. In my opinion this was something that contributed to the rise of radical communities and echochambers in the website.
In this post I'll talk about Clickbait, Unreliable studies, and Misinformation. I'll give examples for each one and suggest a way to deal with it.
Clickbait-
Let's start with the most benign one. These days most big websites use clickbait and hyperbole to gain more traffic. It's something that they have to do in order to survive in today's media climate and I sort of understand. But I think that as a community in Tildes we should raise our standards and avoid posting any article that uses clickbait, instead directly link to the source that the article cites.
An example would be: An article titled "Life on Mars found: Scientists claim that they have found traces of life on the red planet".
But when you read the original source it only states that "Mars rover Curiosity has identified a variety of organic molecules" and that "These results do not give us any evidence of life,".
(This may be a bad/exaggrated example but I think it gets my point across.)On Reddit the mods give these kinds of posts a "Misleading" tag. But the damage is already done, most of the users won't read the entire article or even the source, and instead will make comments based on the headline.
I personally think that these kinds of posts should be deleted even if they get a discussion going in the comments.Unreliable studies-
This is a bit more serious than clickbait. It's something that I see the most in subjects of psychology, social science and futurism.
These are basically articles about studies that conclude a very interesting result, but when you dig a bit you find that the methodologies used to conduct the study were flawed and that the results are inconclusive.An (real) example would be: "A new study finds that cutting your time on social media to 30 minutes a day reduces your risk of depression and loneliness"
Link: https://www.businessinsider.com/facebook-instagram-snapchat-social-media-well-being-2018-11At first glance this looks legit, I even agree with the results. But lets see how this study was conducted:
In the study, 143 undergraduate students were tested over the course of two semesters.
After three weeks, the students were asked questions to assess their mental health across seven different areas
Basically, their test group was 143 students, The test was only conducted for 6 months, and the results were self-reported.
Clearly, this is junk. This study doesn't show anything reliable. Yet still, it received a lot of upvotes on Reddit and there was a lot of discussion going. I only spotted 2-3 comments (at the bottom) mentioning that the study is unreliable.
Again, I think that posts with studies like this should be deleted regardless if there is a discussion going in the comments or not.
Misinformation-
This is in my opinion the biggest offender and the most dangerous one. It's something that I see in political subreddits (even the big ones like /r/politics and /r/worldnews). It's when an article straight up spreads misinformation both in the headline and in the content in order to incite outrage or paint a narrative.
Note: I will give an example that bashes a "left-leaning" article that is against Trump. I'm only doing this because I only read left-leaning to neutral articles and don't go near anything that is right-leaning. Because of this I don't have any examples of a right-leaning article spreading misinformation (I'm sure that there are a lot).
An example would be this article: "ADMINISTRATION ADMITS BORDER DEPLOYMENT WAS A $200 MILLION ELECTION STUNT"
Link: https://www.vanityfair.com/news/2018/11/trump-troops-border-caravan-stuntThere are two lies here:
- Trump administration did not admit to anything. (The article's use of the word 'Admit' is supposedly justified with 'They indirectly admitted to it'. I personally think this is a bad excuse.)
- Most importantly, the 200 million figure is pure speculation. If you go to the older article that this article cites, the 200m figure comes from a speculation that the operation could cost up to 200m if the number of troops sent to the border is 15,000 and they stay there for more than 2 months.
In reality the number of troops sent was 8,500 and they stayed for only a few days/weeks.
A few days after this article was published it turned out that the operation costed 70 million. Still a big sum, still ridiculous. But it's almost a third of what the article claimed.
The misinformation in this example is fairly benign. But I've seen countless other articles with even more outrageous claims that force a certain narrative. This is done by both sides of the political spectrum.
Not only do I think that we should delete these kinds of posts in Tildes, in my opinion we should black list websites that are frequent offenders of spreading misinformation.
Examples off the top of my head would be: Vanity Fair, Salon.com, of course far right websites like Fox News, Info Wars and Breitbart.
A good rule in my opinion would be: If three posts from a certain website get deleted for spreading misinformation, that website should be blacklisted from Tildes.In conclusion:
I think we should set some rules against these problems while our community is still in the early stages. Right now I don't see any of these 3 problems on Tildes. But if we don't enforce rules against them, they will start to pop up the more users we gain.I'll be happy to know your opinions and suggestions on the matter!
32 votes -
Automatic tag generation?
It looks like tags are currently added manually. Would it make sense to automatically tag posts by their content? This would be similar to the behavior of Flairer, /r/flairer
2 votes -
'Sci-fi' plane with no moving parts flies successfully
12 votes -
The kinetic sculptures of Nemo Gould
5 votes -
Code Quality Tip: Wrapping external libraries.
Preface Occasionally I feel the need to touch on the subject of code quality, particularly because of the importance of its impact on technical debt, especially as I continue to encounter the...
Preface
Occasionally I feel the need to touch on the subject of code quality, particularly because of the importance of its impact on technical debt, especially as I continue to encounter the effects of technical debt in my own work and do my best to manage it. It's a subject that is unfortunately not emphasized nearly enough in academia.
Background
As a refresher, technical debt is the long-term cost of the design decisions in your code. These costs can manifest in different ways, such as greater difficulty in understanding what your code is doing or making non-breaking changes to it. More generally, these costs manifest as additional time and resources being spent to make some kind of change.
Sometimes these costs aren't things you think to consider. One such consideration is how difficult it might be to upgrade a specific technology in your stack. For example, what if you've built a back-end system that integrates with AWS and you suddenly need to upgrade your SDK? In a small project this might be easy, but what if you've built a system that you've been maintaining for years and it relies heavily on AWS integrations? If the method names, namespaces, argument orders, or anything else has changed between versions, then suddenly you'll need to update every single reference to an AWS-related tool in your code to reflect those changes. In larger software projects, this could be a daunting and incredibly expensive task, spanning potentially weeks or even months of work and testing.
That is, unless you keep those references to a minimum.
A Toy Example
This is where "wrapping" your external libraries comes into play. The concept of "wrapping" basically means to create some other function or object that takes care of operating the functions or object methods that you really want to target. One example might look like this:
<?php class ImportedClass { public function methodThatMightBecomeModified($arg1, $arg2) { // Do something. } } class ImportedClassWrapper { private $class_instance = null; private function getInstance() { if(is_null($this->class_instance)) { $this->class_instance = new ImportedClass(); } return $this->class_instance; } public function wrappedMethod($arg1, $arg2) { return $this->getInstance()->methodThatMightBecomeModified($arg1, $arg2); } } ?>
Updating Tools Doesn't Have to Suck
Imagine that our
ImportedClasshas some important new features that we need to make use of that are only available in the most recent version, and we're several versions behind. The problem, of course, is that there were a lot of changes that ended up being made between our current version and the new version. For example,ImportedClassis now calledNewImportedClass. On top of that,methodThatMightBecomeModifiedis now calledmethodThatWasModified, and the argument order ended up getting switched around!Now imagine that we were directly calling
new ImportedClass()in many different places in our code, as well as directly invokingmethodThatMightBecomeModified:<?php $imported_class_instance = new ImportedClass(); $imported_class_instance->methodThatMightBeModified($val1, $val2); ?>For every single instance in our code, we need to perform a replacement. There is a linear or--in terms of Big-O notation--a complexity of
O(n)to make these replacements. If we assume that we only ever used this one method, and we used it 100 times, then there are 100 instances ofnew ImportClass()to update and another 100 instances of the method invocation, equaling 200 lines of code to change. Furthermore, we need to remember each of the replacements that need to be made and carefully avoid making any errors in the process. This is clearly non-ideal.Now imagine that we chose instead to use the wrapper object:
<?php $imported_class_wrapper = new ImportedClassWrapper(); $imported_class_wrapper->wrappedMethod($val1, $val2); ?>Our updates are now limited only to the wrapper class:
<?php class ImportedClassWrapper { private $class_instance = null; private function getInstance() { if(is_null($this->class_instance)) { $this->class_instance = new NewImportedClass(); } return $this->class_instance; } public function wrappedMethod($arg1, $arg2) { return $this->getInstance()->methodThatWasModified($arg2, $arg1); } } ?>Rather than making changes to 200 lines of code, we've now made changes to only 2. What was once an
O(n)complexity change has now turned into anO(1)complexity change to make this upgrade. Not bad for a few extra lines of code!
A Practical Example
Toy problems are all well and good, but how does this translate to reality?
Well, I ran into such a problem myself once. Running MongoDB with PHP requires the use of an external driver, and this driver provides an object representing a MongoDB ObjectId. I needed to perform a migration from one hosting provider over to a new cloud hosting provider, with the application and database services, which were originally hosted on the same physical machine, hosted on separate servers. For security reasons, this required an upgrade to a newer version of MongoDB, which in turn required an upgrade to a newer version of the driver.
This upgrade resulted in many of the calls to
new MongoId()failing, because the old version of the driver would accept empty strings and other invalid ID strings and default to generating a new ObjectId, whereas the new version of the driver treated invalid ID strings as failing errors. And there were many, many cases where invalid strings were being passed into the constructor.Even after spending hours replacing the (literally) several dozen instances of the constructor calls, there were still some places in the code where invalid strings managed to get passed in. This made for a very costly upgrade.
The bugs were easy to fix after the initial replacements, though. After wrapping
new MongoId()inside of a wrapper function, a few additional conditional statements inside of the new function resolved the bugs without having to dig around the rest of the code base.
Final Thoughts
This is one of those lessons that you don't fully appreciate until you've experienced the technical debt of an unwrapped external library first-hand. Code quality is an active effort, but a worthwhile one. It requires you to be willing to throw away potentially hours or even days of work when you realize that something needs to change, because you're thinking about how to keep yourself from banging your head against a wall later down the line instead of thinking only about how to finish up your current task.
"Work smarter, not harder" means putting in some hard work upfront to keep your technical debt under control.
That's all for now, and remember: don't be fools, wrap your external tools.
23 votes -
Test
The world is flat.
7 votes -
Тест КГБ 2
Another titlecasing test.
1 vote -
кгб, цру, ми-5
Russian titlecasing test.
1 vote -
Json, Xml, Tcp, Http
Testing the titlecasing.
1 vote -
DNA testing reveals baffling bird is three species in one
18 votes -
Is the syntax highlighting broken?
Most examples in the announcement post are grey to me. So are most of my tests. I remember it working just fine, but today I've noticed that it's all grey.
8 votes -
Syntax test
C: int main(void) { puts("test"); return 0; } Go: package main import "os" func main() { _, err := os.Stdout.WriteString("test") if err != nil { _, _ = os.Stderr.WriteString("fail") } } Ruby:...
C:
int main(void) { puts("test"); return 0; }Go:
package main import "os" func main() { _, err := os.Stdout.WriteString("test") if err != nil { _, _ = os.Stderr.WriteString("fail") } }Ruby:
10.times { |n| puts "test_#{ n }" }XML:
<html> <body> <h1>test</h1> </body> </html>1 vote -
New Caledonia votes on independence from France in landmark test. Vote in New Caledonia being closely watched as test of support for France in its many territories around the world.
15 votes -
Test tube trees
5 votes