#How do I start learning PHP?
Explore tagged Tumblr posts
Text
How do I start learning PHP?

Starting to learn PHP can be an exciting journey, especially if you're interested in web development and programming. Here's a step-by-step guide to help you get started with learning PHP:
Understand the Basics
Before diving into PHP, make sure you have a basic understanding of HTML, as PHP is often embedded within HTML code to create dynamic web content.
Set Up Your Development Environment
Install a local development environment on your computer. You can use tools like XAMPP, WAMP, or MAMP, which include PHP, Apache (web server), MySQL (database), and other necessary components.
Alternatively, you can use online platforms that provide web-based development environments.
Learn PHP Fundamentals
Start by learning the foundational concepts of PHP:
Variables and data types
Operators
Control structures (if-else statements, loops)
Functions and user-defined functions
Arrays and associative arrays
Basic file handling
Online Tutorials and Courses
Utilize online tutorials and courses to learn PHP step by step. Some recommended resources include:
Codecademy's PHP course
PHP.net's official documentation and tutorials
W3Schools' PHP tutorial
Udemy and Coursera courses on PHP
Practice Coding
Programming is best learned through practice. Create small projects, code exercises, and mini-projects to apply what you've learned. Start with simple tasks and gradually move on to more complex challenges.
0 notes
Text
Lessons in PHP
12 Days of Christmas: Day 4, December 28th, 2024
Girl’s Generation/SNSD’s Kim Taeyeon x Male Reader
2k words
Christmas Masterlist

The clicking sounds of keyboards ring through the room. Students are doing their in-class assignments, while you’re struggling to solve the first problem on the sheet. How the fuck can your friends do this?
Fuck, this is hard. Your code repairs seem fruitless against the errors, so you raise your hand, hoping that one of the TAs will help you.
You look around, seeking for help, until you meet one of your TAs’ eyes.
Kim Taeyeon.
Fuck.
No, you’re not scared or intimidated by her, you’re just always perplexed by her otherworldly features. There are her sharp eyes, her perfectly sculpted nose, and that jawline that makes you almost drool. Every time she helps you with your code, you’re just unable to focus on the material because of the intoxicating perfume she wears. It’s as if she knows that it’s your weak point.
Taeyeon walks towards you with purpose, every step is confident. Her short skirt and tie sways with the movement. She looks straight at you, expressionless, until she reaches your desk.
“So.” Taeyeon starts the troubleshooting session. “What do we have here?”
“I–I can’t add the new values into the table, M–Miss Kim.”
She nods. “Okay, can you show it for me?”
You let the code work on itself, before typing your information into the boxes, press submit, and–
“Voila,” you mutter quietly. It doesn’t work. She seems to be amused by your attempt at cracking a joke.
“Alright, I’ll see what I can do.”
Despite her efforts, her attempts are also proven fruitless. The code just doesn’t seem to work how hard she tries, and you can feel that it’s starting to get on her nerves.
“I can just ask an AI for this, Miss Kim.”
She shoots you a surprised look. “AI? Yah! You won’t learn that way! Just–meet me after the class, alright? I’ll help you.”
“O–Okay, Miss Kim.” You’ll be late for lunch again.
—
The students are starting to leave the seats one by one, having finished their in-class assignment early. Then, there’s you, trying to fix your damn code, trying to learn. Still, it just won’t budge.
“Fuck.”
Finally, the bell rings. You pick up your laptop and walk towards Taeyeon, hoping to find some relief in her. She nods at you.
“I’ll be there,” she says. She’s still helping Haewon with her code.
—
Taeyeon starts her debugging session. It’s particularly hard on PHP, because it won’t tell you where the mistake is. Fucking PHP.
As time goes by, you’re surprised that Taeyeon doesn’t seem to become stressed with the failed attempts. Hell, she even seems to be happier and happier, humming as she debugs the code! What is going on?
“You know, I think this is a delightful session–” she moves closer towards you. Her right arm touches yours, hands still on your keyboard “–we’re having.”
Her perfume fills your nostrils. It pervades your space violently. You’re starting to get hypnotized by it. Fuck, she smells good.
She moves in a little closer. Her hips press into yours. You can feel her body heat against your side. She types in a few letters. You hope it can finally make your code run. She reloads the page, dragging her fingers along your keyboard lazily before submitting the credentials.
“Whoops, seems like it doesn’t work~” says Taeyeon. There’s something in her voice, but back to your laptop first. Why won’t it work, and why does she sound so–
“Looks like we’re missing a few more things here.” She scoots her chair closer to you. It’s so uncomfortable, yet you don’t want to move away from her.
You’re revelling in this.
You watch as she types more letters into your screen—enter, shift, echo. She does it so elegantly, contradicting what every computer job is supposed to be.
She reloads the page again, typing in the information languidly. It’s as if she doesn’t want this to end.
It still doesn’t show up.
She shrugs, sighing at the disappointment on your screen. “Guess I’ll try again,” she says with a small smile.
You are starting to get restless. Her perfume is still invading your nostrils like crazy. You want to go to lunch so fucking bad, but you also don’t want to leave this smell of sensuality circling around her.
“Miss Kim, I–It’s fine, I’ll just–”
“No,” she commands, her voice stern. You jump slightly as she says that. “I won’t let my student go out of this room learning nothing.”
She presses into you even more. It’s starting to hurt now, yet you don’t have any intent to walk away from her, not when she smells so fucking good like this.
You hear a soft giggle from her. Is she enjoying the way she’s getting this close to you like this?
You scoot away from her a little, giving you and her some much-needed space. You can hear her sigh. Is it out of disappointment?
“Are you okay, M–Miss Kim?” you just have to ask. Can’t let your TA be uncomfortable after all.
She giggles. “Oh, I’m fine~ and please drop that name, mister,” she says with sultry. Her fingers draw an invisible line over your arm, hovering over it. Still, it makes you shiver.
“I like something more–” her hands are hovering on your shoulder now, and she’s pulling you in closer and closer, as if you’re magnetized “–intimate.”
Your breathing becomes shaky. Your hands tremble. Her scent becomes stronger and stronger as seconds go by. You’re lost in her.
“Wh–What’s more i–intimate, Miss Kim.”
She giggles, leaning in closer. Her breath touches your ear softly, and she whispers, “Call me mommy.”
You swallow hard. Being dominated by your TA isn’t exactly what you’ve been expecting today.
Her hands start to grope your pliant body. You respond to her touch strongly, sucking a sudden. She drags her hands down the front and back simultaneously, fully capturing you in her cage.
“Look at you, so–willing,” she says, letting out a giggle after. She reaches for your belt now, and she slowly unbuckles it adeptly. It comes off so easily, leaving you bare, unguarded. She then unbuttons your trousers. The edge of your boxers comes into view.
“Mommy will take your pants off, alright?” asks Taeyeon. You can only gulp and nod.
She pulls your zipper down gently, slowly revealing the tent under your boxers. Her eyes gleam, letting out a giggle.
“Ooh~ so excited for mommy, huh?”
You say nothing but a whimper. Your body quivers in unbridled anxiety, apprehensive of disappointing her. The tension is high. Taeyeon starts to grope your erection through the boxers, making your body quiver in pleasure.
She then climbs onto your lap, and your breath hitches. Your crotch makes contact with the wet spot on her panties. You can feel it. She’s wet.
She smiles and starts to grind her wetness on your crotch. She lets out a hum, clearly satisfied with her student’s reaction. You’re desperate for the friction she’s giving you. Your breathing quickens. You’re struggling to contain a moan any longer. It’s sickly sweet.
Taeyeon rests her arms on your shoulders, pulling you closer into her embrace. You’re completely captured by her—her face, her smell, all of her, and you’re revelling in the way she’s doing it.
“Y–You smell so good, mommy,” you utter, enraptured within her pungent aroma. Your mouth opens slightly, hoping to lean in for a kiss.
She chuckles. “That’s J’adore for you, baby.”
Taeyeon then parts her lips, just slightly. She leans in until her hot breath touches yours. It mingles in the air between you two, thickening with desire.
At the first touch of your lips, you feel shockwaves coursing through you. Her tongue touches yours, and you get to feel the soft flesh inside her mouth. You get a hint of strawberries remaining on her lips. Maybe she was in a rush this morning.
As you clash into each other, her tongue starts to invade your mouth recklessly, as if she’s trying to take as much of you as possible. She lets out one sweet hum after another. Her hands are still gripping onto the back of your neck. Wet sounds of the kiss ring through your ear. The sensation on your crotch remains. She’s grinding against you adeptly. She’s good at this.
The kiss deepens. Her taste of strawberries becomes too intense for you to handle, but she won’t let you go. Her hands start to glide down your willing body again, feeling your soft skin and muscles. You let out moans and moans in response.
“M–Mommy,” you rasp, muffled into the kiss. Her grinds quicken, stealing breaths out of your lungs. You are overwhelmed by the sensation of her clothed sex on you.
Her thighs tense up, her breathing quickens. She’s going to cum from grinding on your cock, fully clothed.
She unlatches herself from the kiss, leaving a string of saliva connecting you together. “Now, fuck, mommy’s going to cum, alright? Mmmm.” She bites her lip after she finishes her words, sucking in the air through her teeth. Fuck, that looks so hot.
“Y–Yes, mommy,” you reply. Your high is also coming. “I–I’m gonna cum too.”
Taeyeon giggles before grinding on your cock even faster, drawing stuttered moans out of you. Your loins tighten. You’re going to cum inside your pants!
Good thing you wear rather dark-colored pants today.
Her breathing becomes shorter and shorter. Her grip on your neck tightens. Her moans grow louder and louder. She’s cumming, and you’re all here to see it happen.
“Gonna cum, gonna cum, gonna cum, ahh!”
Her body spasms on top of you. Her eyes flutter. Her mouth hangs open. She screams, loud. She just came from grinding on your lap alone, and that couldn’t make you happier. She lets out a groan as her orgasm subsides, threading her fingers through your hair.
“Good boy,” she says with a smile, pressing her red, pouty lips on your forehead. That’s going to leave a mark.
The all-too-familiar feeling builds up inside your stomach. It seeps through your lower body muscles. Your feet twitch. Your thighs stiffen. It’s there. It’s there.
“M-Mommy, I’m gonna cum,” you utter.
She smiles back at you, planting another kiss on your cheek. You’ll have to wash your face before going to lunch.
“Cum for me, baby.”
You grunt loudly. Maybe someone could’ve heard that. Your body writhes in bliss. You can feel your cock twitching inside your pants. Cum leaks out from the tip and paints the insides of your pants white. Some of it seeps out through your pants. It feels so good.
A giggle leaves Taeyeon’s lips. She’s loving the way her student breaks under her like this. “Good boy, good boy.” She runs her fingers through your hair lovingly, making you whimper a little.
Your orgasm finally fades. You pant in exhaustion after the sensual act. Your hands are still shaking. You just cum from dry humping with your TA!
“You okay?” she asks. You’re probably looking disheveled right now, all panting, chest heaving. “You look–scattered.”
“Y–Yeah, mom–uh–Miss Kim,” you stammer out. Your mind is in haywire right now. Should you still call her mommy?”
Taeyeon chuckles at your apprehension. She seems satisfied with her student being a mess like this.
“Oh, and about the code,” she suddenly says, snapping you back into reality. “We might have to make an arrangement at a later date.”
You blink, trying to connect the pieces back together. You were struggling with PHP, so you asked Miss Kim to help you with that. However, you got a dry humping session instead. The code is still unfinished.
“Y–Yeah, the code,” you respond, giving her a shy smile. “An arrangement, sure.”
“Maybe–this Saturday? I don’t have classes on that day.”
“Sure, Miss Kim.”
She gives you a smile, satisfied with your answer, before climbing off your spent body. “That settles it, then.”
You smile back at her before getting off the chair–
Fuck, you forgot to put your pants back up. Taeyeon giggles softly at your predicament.
“Oh, and–be prepared,” she says.
“Yes, Miss Kim?”
“It’s going to be a long session.”
—
752 notes
·
View notes
Text
"Lore, where have you been?"
In hell, probably. I remade M0R1BUND.com.
“For the love of god, why?”
Short answer: to save time and money.
Long answer: Sharing art was getting burdensome. Neocities hosts static websites built with html, css, and javascript—which is awesome for its mission, to encourage people to create future-proof websites. But this also means that every page is created and maintained by hand. I handle every little link and file and bit of code, and if I want to do site-wide changes, I have to push those by hand, too. This takes time, and so does writing image descriptions and cross-posting art to other websites. It became normal for sharing art to eat up an entire day.
I later created Basedt.net in WordPress, so that I didn’t have to worry about managing link hierarchies, which was a big timewaster on my old webcomic. I liked working in WordPress well enough, and I knew I would benefit from being able to use PHP to manage the sheer amount of stuff that’s on M0R1BUND.com. I was also paying double for webhosting through two different services, when I really didn’t need to…. So… I knew it was inevitable that I would consolidate the two at some point. It was time.
I do really love Neocities and I’m sorry to let it go. I encourage anyone who wants to learn web design and create their own website to start there.
Anyway, that’s how I ended up in hell for 6 months.
“What’s changed?”
Most things. I’m most excited about the quality-of-life stuff, like being able to sort art by character/location/world, or being able to move between individual pieces instead of having to return to the gallery landing page. There are lots of things I want to add, but my soft deadline for this was the new year, so I focused on recreating M0R1BUND.com as it existed before… well… this.
I’ve also edited most of my writing. This site is old, and the art is even older, it felt good to give it some TLC.
There are still a few things missing from the new site:
The Woods and RANSOM. They aren’t really representative of Basedt or Mercasor anymore, and I was not a competent writer in 2018. If I re-share them, it will be in the distant future.
Some of my Those Who Went Missing stuff. I haven’t been playing TWWM publicly, so this is lower priority right now. It will happen when it happens.
Some twines. They haven’t adjusted to the new filepath format yet. Killswitch is here, though :)
If you need them urgently for some reason, I can share them with you? but that seems doubtful haha.
Links to pages on the old M0R1BUND.com are broken and will remain broken until I set up redirections to the new M0R1BUND.com. I have no idea how long that will take! … Hopefully not long, given the new semester is here.
And of course... If you see anything weird, tell me! I test as much as I can, but I only have access to so many devices. Break this website within an inch of its miserable life so that I can fix it.
“How’s Basedt going?”

It’s going. Recreating my website took precedence for the above reasons, but I’ve been working concurrently on it in my spare time. We move like a glacier into the new year. ETA: ???
37 notes
·
View notes
Note
That is SO COOL that you're doing your own gallery for your art. Very clever. I'd love if it caught on with other artists. Is it hosted somewhere, or are you building it yourself?
I've got my own website and hosting, and I'm using third-party software to run my gallery.
I would love to see more of the old school web galleries catching on, but the biggest hurdles today are 1) finding web hosting, and 2) knowing how to build a site.
Neocities is a superb place to learn, and they have generous free hosting and extremely affordable membership options, and no ads, ever. They're funded entirely by their supporters, rather like AO3, so they're not beholden to ad companies—which means they don't have to police content (apart from the typical "nothing in violation of state/federal/international law" as stated under the Offensive Material and the Lawful Use section in their Terms). It's actually a fantastic place for artists to upload their mature art*.
*But you can't hotlink without being a paid supporter. Hotlinking is embedding images on sites outside of where the image is hosted. So if you wanted to use Neocities as a place to upload your nsfw art so you could post it on AO3, you'd need to pay for that ability. But still, having a gallery where you can direct people to your art is pretty sweet.
The only drawback to Neocities that I've seen is that you're limited to doing everything with HTML/CSS and Java, and for experienced web devs who are used to managing their own databases and working with PHP and installing whatever software they want, basically having complete control over every aspect of their site, Neocities is a bit limited. But for new and intermediate web builders, this shouldn't be a problem. There are lots cool ways to build your own website and have a gallery and just play around and pretend it's 1997 again. (Again? For some, maybe.)
I've got a Neocities site that I occasionally tinker with. Who knows, maybe if enough people join up we can start a DP web ring or a Pompep Club like how fandom used to do back in the early internet days.
(I am not associated with Neocities.org or being paid to promote their services. I just really like what they're doing.)
#asks#didn't mean to go off on a tangent here#i'm just passionate about websites and web 1.0#neocities#old school#web building#fandom#i personally would've killed for something like neocities in 98#1 GIGABYTE space? FREE? with NO ADS?
11 notes
·
View notes
Text
Vibecoding a production app
TL;DR I built and launched a recipe app with about 20 hours of work - recipeninja.ai
Background: I'm a startup founder turned investor. I taught myself (bad) PHP in 2000, and picked up Ruby on Rails in 2011. I'd guess 2015 was the last time I wrote a line of Ruby professionally. I've built small side projects over the years, but nothing with any significant usage. So it's fair to say I'm a little rusty, and I never really bothered to learn front end code or design.
In my day job at Y Combinator, I'm around founders who are building amazing stuff with AI every day and I kept hearing about the advances in tools like Lovable, Cursor and Windsurf. I love building stuff and I've always got a list of little apps I want to build if I had more free time.
About a month ago, I started playing with Lovable to build a word game based on Articulate (it's similar to Heads Up or Taboo). I got a working version, but I quickly ran into limitations - I found it very complicated to add a supabase backend, and it kept re-writing large parts of my app logic when I only wanted to make cosmetic changes. It felt like a toy - not ready to build real applications yet.
But I kept hearing great things about tools like Windsurf. A couple of weeks ago, I looked again at my list of app ideas to build and saw "Recipe App". I've wanted to build a hands-free recipe app for years. I love to cook, but the problem with most recipe websites is that they're optimized for SEO, not for humans. So you have pages and pages of descriptive crap to scroll through before you actually get to the recipe. I've used the recipe app Paprika to store my recipes in one place, but honestly it feels like it was built in 2009. The UI isn't great for actually cooking. My hands are covered in food and I don't really want to touch my phone or computer when I'm following a recipe.
So I set out to build what would become RecipeNinja.ai
For this project, I decided to use Windsurf. I wanted a Rails 8 API backend and React front-end app and Windsurf set this up for me in no time. Setting up homebrew on a new laptop, installing npm and making sure I'm on the right version of Ruby is always a pain. Windsurf did this for me step-by-step. I needed to set up SSH keys so I could push to GitHub and Heroku. Windsurf did this for me as well, in about 20% of the time it would have taken me to Google all of the relevant commands.
I was impressed that it started using the Rails conventions straight out of the box. For database migrations, it used the Rails command-line tool, which then generated the correct file names and used all the correct Rails conventions. I didn't prompt this specifically - it just knew how to do it. It one-shotted pretty complex changes across the React front end and Rails backend to work seamlessly together.
To start with, the main piece of functionality was to generate a complete step-by-step recipe from a simple input ("Lasagne"), generate an image of the finished dish, and then allow the user to progress through the recipe step-by-step with voice narration of each step. I used OpenAI for the LLM and ElevenLabs for voice. "Grandpa Spuds Oxley" gave it a friendly southern accent.
Recipe summary:
And the recipe step-by-step view:
I was pretty astonished that Windsurf managed to integrate both the OpenAI and Elevenlabs APIs without me doing very much at all. After we had a couple of problems with the open AI Ruby library, it quickly fell back to a raw ruby HTTP client implementation, but I honestly didn't care. As long as it worked, I didn't really mind if it used 20 lines of code or two lines of code. And Windsurf was pretty good about enforcing reasonable security practices. I wanted to call Elevenlabs directly from the front end while I was still prototyping stuff, and Windsurf objected very strongly, telling me that I was risking exposing my private API credentials to the Internet. I promised I'd fix it before I deployed to production and it finally acquiesced.
I decided I wanted to add "Advanced Import" functionality where you could take a picture of a recipe (this could be a handwritten note or a picture from a favourite a recipe book) and RecipeNinja would import the recipe. This took a handful of minutes.
Pretty quickly, a pattern emerged; I would prompt for a feature. It would read relevant files and make changes for two or three minutes, and then I would test the backend and front end together. I could quickly see from the JavaScript console or the Rails logs if there was an error, and I would just copy paste this error straight back into Windsurf with little or no explanation. 80% of the time, Windsurf would correct the mistake and the site would work. Pretty quickly, I didn't even look at the code it generated at all. I just accepted all changes and then checked if it worked in the front end.
After a couple of hours of work on the recipe generation, I decided to add the concept of "Users" and include Google Auth as a login option. This would require extensive changes across the front end and backend - a database migration, a new model, new controller and entirely new UI. Windsurf one-shotted the code. It didn't actually work straight away because I had to configure Google Auth to add `localhost` as a valid origin domain, but Windsurf talked me through the changes I needed to make on the Google Auth website. I took a screenshot of the Google Auth config page and pasted it back into Windsurf and it caught an error I had made. I could login to my app immediately after I made this config change. Pretty mindblowing. You can now see who's created each recipe, keep a list of your own recipes, and toggle each recipe to public or private visibility. When I needed to set up Heroku to host my app online, Windsurf generated a bunch of terminal commands to configure my Heroku apps correctly. It went slightly off track at one point because it was using old Heroku APIs, so I pointed it to the Heroku docs page and it fixed it up correctly.
I always dreaded adding custom domains to my projects - I hate dealing with Registrars and configuring DNS to point at the right nameservers. But Windsurf told me how to configure my GoDaddy domain name DNS to work with Heroku, telling me exactly what buttons to press and what values to paste into the DNS config page. I pointed it at the Heroku docs again and Windsurf used the Heroku command line tool to add the "Custom Domain" add-ons I needed and fetch the right Heroku nameservers. I took a screenshot of the GoDaddy DNS settings and it confirmed it was right.
I can see very soon that tools like Cursor & Windsurf will integrate something like Browser Use so that an AI agent will do all this browser-based configuration work with zero user input.
I'm also impressed that Windsurf will sometimes start up a Rails server and use curl commands to check that an API is working correctly, or start my React project and load up a web preview and check the front end works. This functionality didn't always seem to work consistently, and so I fell back to testing it manually myself most of the time.
When I was happy with the code, it wrote git commits for me and pushed code to Heroku from the in-built command line terminal. Pretty cool!
I do have a few niggles still. Sometimes it's a little over-eager - it will make more changes than I want, without checking with me that I'm happy or the code works. For example, it might try to commit code and deploy to production, and I need to press "Stop" and actually test the app myself. When I asked it to add analytics, it went overboard and added 100 different analytics events in pretty insignificant places. When it got trigger-happy like this, I reverted the changes and gave it more precise commands to follow one by one.
The one thing I haven't got working yet is automated testing that's executed by the agent before it decides a task is complete; there's probably a way to do it with custom rules (I have spent zero time investigating this). It feels like I should be able to have an integration test suite that is run automatically after every code change, and then any test failures should be rectified automatically by the AI before it says it's finished.
Also, the AI should be able to tail my Rails logs to look for errors. It should spot things like database queries and automatically optimize my Active Record queries to make my app perform better. At the moment I'm copy-pasting in excerpts of the Rails logs, and then Windsurf quickly figures out that I've got an N+1 query problem and fixes it. Pretty cool.
Refactoring is also kind of painful. I've ended up with several files that are 700-900 lines long and contain duplicate functionality. For example, list recipes by tag and list recipes by user are basically the same.
Recipes by user:
This should really be identical to list recipes by tag, but Windsurf has implemented them separately.
Recipes by tag:
If I ask Windsurf to refactor these two pages, it randomly changes stuff like renaming analytics events, rewriting user-facing alerts, and changing random little UX stuff, when I really want to keep the functionality exactly the same and only move duplicate code into shared modules. Instead, to successfully refactor, I had to ask Windsurf to list out ideas for refactoring, then prompt it specifically to refactor these things one by one, touching nothing else. That worked a little better, but it still wasn't perfect
Sometimes, adding minor functionality to the Rails API will often change the entire API response, rather just adding a couple of fields. Eg It will occasionally change Index Recipes to nest responses in an object { "recipes": [ ] }, versus just returning an array, which breaks the frontend. And then another minor change will revert it. This is where adding tests to identify and prevent these kinds of API changes would be really useful. When I ask Windsurf to fix these API changes, it will instead change the front end to accept the new API json format and also leave the old implementation in for "backwards compatibility". This ends up with a tangled mess of code that isn't really necessary. But I'm vibecoding so I didn't bother to fix it.
Then there was some changes that just didn't work at all. Trying to implement Posthog analytics in the front end seemed to break my entire app multiple times. I tried to add user voice commands ("Go to the next step"), but this conflicted with the eleven labs voice recordings. Having really good git discipline makes vibe coding much easier and less stressful. If something doesn't work after 10 minutes, I can just git reset head --hard. I've not lost very much time, and it frees me up to try more ambitious prompts to see what the AI can do. Less technical users who aren't familiar with git have lost months of work when the AI goes off on a vision quest and the inbuilt revert functionality doesn't work properly. It seems like adding more native support for version control could be a massive win for these AI coding tools.
Another complaint I've heard is that the AI coding tools don't write "production" code that can scale. So I decided to put this to the test by asking Windsurf for some tips on how to make the application more performant. It identified I was downloading 3 MB image files for each recipe, and suggested a Rails feature for adding lower resolution image variants automatically. Two minutes later, I had thumbnail and midsize variants that decrease the loading time of each page by 80%. Similarly, it identified inefficient N+1 active record queries and rewrote them to be more efficient. There are a ton more performance features that come built into Rails - caching would be the next thing I'd probably add if usage really ballooned.
Before going to production, I kept my promise to move my Elevenlabs API keys to the backend. Almost as an afterthought, I asked asked Windsurf to cache the voice responses so that I'd only make an Elevenlabs API call once for each recipe step; after that, the audio file was stored in S3 using Rails ActiveStorage and served without costing me more credits. Two minutes later, it was done. Awesome.
At the end of a vibecoding session, I'd write a list of 10 or 15 new ideas for functionality that I wanted to add the next time I came back to the project. In the past, these lists would've built up over time and never gotten done. Each task might've taken me five minutes to an hour to complete manually. With Windsurf, I was astonished how quickly I could work through these lists. Changes took one or two minutes each, and within 30 minutes I'd completed my entire to do list from the day before. It was astonishing how productive I felt. I can create the features faster than I can come up with ideas.
Before launching, I wanted to improve the design, so I took a quick look at a couple of recipe sites. They were much more visual than my site, and so I simply told Windsurf to make my design more visual, emphasizing photos of food. Its first try was great. I showed it to a couple of friends and they suggested I should add recipe categories - "Thai" or "Mexican" or "Pizza" for example. They showed me the DoorDash app, so I took a screenshot of it and pasted it into Windsurf. My prompt was "Give me a carousel of food icons that look like this". Again, this worked in one shot. I think my version actually looks better than Doordash 🤷♂️
Doordash:
My carousel:
I also saw I was getting a console error from missing Favicon. I always struggle to make Favicon for previous sites because I could never figure out where they were supposed to go or what file format they needed. I got OpenAI to generate me a little recipe ninja icon with a transparent background and I saved it into my project directory. I asked Windsurf what file format I need and it listed out nine different sizes and file formats. Seems annoying. I wondered if Windsurf could just do it all for me. It quickly wrote a series of Bash commands to create a temporary folder, resize the image and create the nine variants I needed. It put them into the right directory and then cleaned up the temporary directory. I laughed in amazement. I've never been good at bash scripting and I didn't know if it was even possible to do what I was asking via the command line. I guess it is possible.
After launching and posting on Twitter, a few hundred users visited the site and generated about 1000 recipes. I was pretty happy! Unfortunately, the next day I woke up and saw that I had a $700 OpenAI bill. Someone had been abusing the site and costing me a lot of OpenAI credits by creating a single recipe over and over again - "Pasta with Shallots and Pineapple". They did this 12,000 times. Obviously, I had not put any rate limiting in.
Still, I was determined not to write any code. I explained the problem and asked Windsurf to come up with solutions. Seconds later, I had 15 pretty good suggestions. I implemented several (but not all) of the ideas in about 10 minutes and the abuse stopped dead in its tracks. I won't tell you which ones I chose in case Mr Shallots and Pineapple is reading. The app's security is not perfect, but I'm pretty happy with it for the scale I'm at. If I continue to grow and get more abuse, I'll implement more robust measures.
Overall, I am astonished how productive Windsurf has made me in the last two weeks. I'm not a good designer or frontend developer, and I'm a very rusty rails dev. I got this project into production 5 to 10 times faster than it would've taken me manually, and the level of polish on the front end is much higher than I could've achieved on my own. Over and over again, I would ask for a change and be astonished at the speed and quality with which Windsurf implemented it. I just sat laughing as the computer wrote code.
The next thing I want to change is making the recipe generation process much more immediate and responsive. Right now, it takes about 20 seconds to generate a recipe and for a new user it feels like maybe the app just isn't doing anything.
Instead, I'm experimenting with using Websockets to show a streaming response as the recipe is created. This gives the user immediate feedback that something is happening. It would also make editing the recipe really fun - you could ask it to "add nuts" to the recipe, and see as the recipe dynamically updates 2-3 seconds later. You could also say "Increase the quantities to cook for 8 people" or "Change from imperial to metric measurements".
I have a basic implementation working, but there are still some rough edges. I might actually go and read the code this time to figure out what it's doing!
I also want to add a full voice agent interface so that you don't have to touch the screen at all. Halfway through cooking a recipe, you might ask "I don't have cilantro - what could I use instead?" or say "Set a timer for 30 minutes". That would be my dream recipe app!
Tools like Windsurf or Cursor aren't yet as useful for non-technical users - they're extremely powerful and there are still too many ways to blow your own face off. I have a fairly good idea of the architecture that I want Windsurf to implement, and I could quickly spot when it was going off track or choosing a solution that was inappropriately complicated for the feature I was building. At the moment, a technical background is a massive advantage for using Windsurf. As a rusty developer, it made me feel like I had superpowers.
But I believe within a couple of months, when things like log tailing and automated testing and native version control get implemented, it will be an extremely powerful tool for even non-technical people to write production-quality apps. The AI will be able to make complex changes and then verify those changes are actually working. At the moment, it feels like it's making a best guess at what will work and then leaving the user to test it. Implementing better feedback loops will enable a truly agentic, recursive, self-healing development flow. It doesn't feel like it needs any breakthrough in technology to enable this. It's just about adding a few tool calls to the existing LLMs. My mind races as I try to think through the implications for professional software developers.
Meanwhile, the LLMs aren't going to sit still. They're getting better at a frightening rate. I spoke to several very capable software engineers who are Y Combinator founders in the last week. About a quarter of them told me that 95% of their code is written by AI. In six or twelve months, I just don't think software engineering is going exist in the same way as it does today. The cost of creating high-quality, custom software is quickly trending towards zero.
You can try the site yourself at recipeninja.ai
Here's a complete list of functionality. Of course, Windsurf just generated this list for me 🫠
RecipeNinja: Comprehensive Functionality Overview
Core Concept: the app appears to be a cooking assistant application that provides voice-guided recipe instructions, allowing users to cook hands-free while following step-by-step recipe guidance.
Backend (Rails API) Functionality
User Authentication & Authorization
Google OAuth integration for user authentication
User account management with secure authentication flows
Authorization system ensuring users can only access their own private recipes or public recipes
Recipe Management
Recipe Model Features:
Unique public IDs (format: "r_" + 14 random alphanumeric characters) for security
User ownership (user_id field with NOT NULL constraint)
Public/private visibility toggle (default: private)
Comprehensive recipe data storage (title, ingredients, steps, cooking time, etc.)
Image attachment capability using Active Storage with S3 storage in production
Recipe Tagging System:
Many-to-many relationship between recipes and tags
Tag model with unique name attribute
RecipeTag join model for the relationship
Helper methods for adding/removing tags from recipes
Recipe API Endpoints:
CRUD operations for recipes
Pagination support with metadata (current_page, per_page, total_pages, total_count)
Default sorting by newest first (created_at DESC)
Filtering recipes by tags
Different serializers for list view (RecipeSummarySerializer) and detail view (RecipeSerializer)
Voice Generation
Voice Recording System:
VoiceRecording model linked to recipes
Integration with Eleven Labs API for text-to-speech conversion
Caching of voice recordings in S3 to reduce API calls
Unique identifiers combining recipe_id, step_id, and voice_id
Force regeneration option for refreshing recordings
Audio Processing:
Using streamio-ffmpeg gem for audio file analysis
Active Storage integration for audio file management
S3 storage for audio files in production
Recipe Import & Generation
RecipeImporter Service:
OpenAI integration for recipe generation
Conversion of text recipes into structured format
Parsing and normalization of recipe data
Import from photos functionality
Frontend (React) Functionality
User Interface Components
Recipe Selection & Browsing:
Recipe listing with pagination
Real-time updates with 10-second polling mechanism
Tag filtering functionality
Recipe cards showing summary information (without images)
"View Details" and "Start Cooking" buttons for each recipe
Recipe Detail View:
Complete recipe information display
Recipe image display
Tag display with clickable tags
Option to start cooking from this view
Cooking Experience:
Step-by-step recipe navigation
Voice guidance for each step
Keyboard shortcuts for hands-free control:
Arrow keys for step navigation
Space for play/pause audio
Escape to return to recipe selection
URL-based step tracking (e.g., /recipe/r_xlxG4bcTLs9jbM/classic-lasagna/steps/1)
State Management & Data Flow
Recipe Service:
API integration for fetching recipes
Support for pagination parameters
Tag-based filtering
Caching mechanisms for recipe data
Image URL handling for detailed views
Authentication Flow:
Google OAuth integration using environment variables
User session management
Authorization header management for API requests
Progressive Web App Features
PWA capabilities for installation on devices
Responsive design for various screen sizes
Favicon and app icon support
Deployment Architecture
Two-App Structure:
cook-voice-api: Rails backend on Heroku
cook-voice-wizard: React frontend/PWA on Heroku
Backend Infrastructure:
Ruby 3.2.2
PostgreSQL database (Heroku PostgreSQL addon)
Amazon S3 for file storage
Environment variables for configuration
Frontend Infrastructure:
React application
Environment variable configuration
Static buildpack on Heroku
SPA routing configuration
Security Measures:
HTTPS enforcement
Rails credentials system
Environment variables for sensitive information
Public ID system to mask database IDs
This comprehensive overview covers the major functionality of the Cook Voice application based on the available information. The application appears to be a sophisticated cooking assistant that combines recipe management with voice guidance to create a hands-free cooking experience.
2 notes
·
View notes
Note
can you tell us about the worldbuilding of your new au?
Why of course!
To start this off though, let me tell you a fun little thing about the Blog AU that is built in!
We made this AU with the idea that people who read it can put their characters into it. You know the Cafe AU that everyone is sticking their OCs in? You can do something similar! The fic is going to be canon to y'all but y'all won't be 100% canon to the fic so you guys can interact with the canon! So we genuinely encourage you guys to make outside content and make your OCs blogs or designs for this. Go crazy with it and join in! I will eventually need usernames and a few other things for the blog/forum skins. If you make anything, make sure to tag me on here (and if it's on Instagram, I'm Lixxendraws). I want you guys to be able to draw/write your characters in this AU because it'd be such a fun thing to do!
Anyways.
There are a few doodles of their official outfit designs but I don't like how they look. But I will post them eventually!
Here is the world building Under The Cut
Branch's Kismet identity is Bass while his in person one is Lapis for the sake of his safety and privacy.
Technology:
Napbug: digital audio sharing website whereP3 files are shared. Mostly for music rips and downloads
TOL: the internet hosting. Mostly known for the chatroom they speak on. You need to know the person's connection code to directly connect to them. You can chat on it and view forums/blogs directly from their TOL. You can have up to four identifications per computer
PHP (personal homepage): the blog domains they use. They can be reached outside of TOL, along with personal forums
Trollums: the nicknames for forums. You can find people's TOL & PHP on trollums and it is how people mostly find blogs
BeeperBugs (beepers): little hugs that act like pagers. They will send and receive messages somehow (they never figures it out). You will hear them beep and they can carry codes; you can put them onto landlines and they will put in the numbers. They also can use Morse code to send messages instead of needing calls.
Computers: dial up computers. They are simple and can connect to CD drives (not built in), VHS players, floppy disks, cassettes, and can burn CDs/DVDs. They're big and chunky; no laptops. Internet cafes and libraries are popular due to not as many people having them. People learn coding to break and customize them
Cassettes and MP3 players: they are popular and do not have earbuds. Only over ear headphones that are wired.
Very basic printer/fax machines that run off landlines
Televisions: tube/box TVs. Podbuster is a popular VHS and DVD rental/store. DVDs are barely used due to being new
Film cameras are very much still used and popular. People will develop themselves or take them to the library to be digitalized. There's services to develop photos still
Zines exist! They will be produced by a group of fans and sent out. They will trade items or find ways to collect money to pay for them. You will find forums dedicated to zines and posting zines months after print release. There is big fan culture
Blogs are every big. Normally personal blogs will interact with each other and have fun; but then there's fan blogs. They only post about their interests and will post some personal stuff. They're almost always anonymous unless you directly know them.
Blog lore:
PinkBandLyfe is a popular BroZone and Kismet blog that always has the best images, videos, and MP3s. They've nicknamed the blog owner Pinkie and know her bias is Clay, but since she is around Bitty B’s age, she has a soft spot for him. Bass in Kismet is her bias. But since Bass is a private person she promotes healthy boundaries and privacy. She preaches for Bitty B and Bass’s privacy. She's speculated a few times but that's it. Everyone gives her her privacy and keep her identity secret since she is big on that and they respect her (and fear her disappearing). Her blog is chaotic but well organized and out together!
BatterBug is a survival/doomsday blog that people learn survival skills from and it talks about literally everything and anything about tragedy and skills to use in them. They call the owner BB and call him paranoid. But it's useful so he has a following
ReverbFan27 is a Bad Hair Day blog that isn't as in-depth as PinkBandLyfe. The blog is run by the user who has been nicknamed 27. He tends to be more practical and people enjoy watching him ramble about the technical aspects of the performances. They know his older brother, who is nicknames Ef, was into them first and got 27 into it. They only know that, he is a Billy Reverb bias, and he is the youngest child. The rest is a secret. They speculate who he is because sometimes he has the best pictures of BHD. But they haven't figured it out yet. He's VERY organized
Everybody knows Pinkie and 27 are friends and they helped each other get popular. Sometimes you will see them give each other content to post! 27 somehow has never before seen BroZone stuff or will mention he has rare collectibles that Pinkie lives for
People ship Pinkie and 27. They laugh and brush it off
Misc story lore that isn't spoilers:
Bergens made peace 10 years earlier when Poppy accidentally ran into Bridget when she ran off angrily. She helped Bridget on her own and it creates positive political ties!
The kingdoms live how they are post Trolls World Tour due to (unspecified) events happening! It is noted to happen a generation ago with King Thrash and King Peppy taking thrones
The kingdoms now have bigger populations and are more spread out! They have multiple cities and towns. Neighboring troll tribes now touch, but you must put in effort to travel
Royals freely live amongst their people in society due to respect from the people. They're big on “humanizing” the royals. Royals are not big on public appearances outside of their kingdoms. The ambassadors are the only ones seen in the wild
Branch spends his free time reading/writing in the coffee shop or in a library. He normally has his headphones on with a Walktroll (walkman). He lives to write his blog posts by hand first, so he writes them in the coffee shop. He also carries around a camera to take pictures of things. He develops them himself in his pod and put them on the walls if they're good then in albums if they're okay or bad. He has a TON of childhood photos from Rosiepuff, who died a natural death before he joined Kismet. He uses her camera. He so takes a ton of pictures of Kismet and sends them to Pinkie!
#trolls#dreamworks trolls#blog#blog au#trolls au#princess poppy#queen poppy#trolls poppy#trolls branch#broppy#branch#90s tech#fanfiction#fan culture#trolls band together#trolls world tour#trolls cooper#cooper#y2k#technology#world building#alternate universe#trolls blog au#anon#anon ask#ask
7 notes
·
View notes
Note
if pet hotel had little games and activities like neopets or club penguin puffle games, what would they be?
whatever would be within my skill level to program i guess
i think i would start out with a game where the pet is holding a basket beneath some trees and you have to catch falling fruit by moving the pet left and right. sounds nice and simple enough, and once i had enough of a variety of simple games i would then feel free to try and experiment with something more complex and take as much time as i need since the simple games are able to fill that space where something needs to be right now
if i made this a website-based virtual pet game like neopets and flight rising are, something that's gonna be tricky and would probably take me a long time is i would have to learn how to make an html5 application (which is what these games would be if this was the case, since flash is dead) that would be able to read pet information and user information from a database so the pet could appear in the minigame, be able to modify values like the amount of money the player has so the player can earn money by playing these games, and this database needs to be able to be read and written to by both these minigames and by regular pages like a player's profile page where you'd be able to see your current money balance, for instance. The only experience I have in regards to creating an html5 application is running the html dist Gradle command that libGDX has, which just converts all of your java code into javascript as its own contained thing when for this I would need to make something that actually has the ability to talk to other things. I would have to learn a ton of php in order to make this a thing as well, which I don't have a lot of experience with either.
If I were to turn the pet hotel into a fully-fledged automated and programmable game with my current knowledge and skillset, I think I'd have an easier time using libGDX and Java Swing to make it, and then people would have to download a jar file for it off of itch.io in order to play it. I feel like more people would play it if the game was entirely website-based because people don't really like to download things, which is kind of understandable, but learning web development is really hard and from what little I do know about it I'm kind of bad at it. I took a class where I learned how web sockets work in Java so I think I could be able to make something that connects online like this, but I would have to rent some server space in order to do this so the pet hotel would become something that starts actually costing me money to run if I did this. Also I already have a full-time job so the progress I would make on this would be pretty slow, and sometimes I struggle to muster up the motivation to even just make regular art during the time that I'm not working because my brain just kind of sucks like that. So for now i just run this thing that pretends to be a video game but is actually not because my brain prefers the instant gratification of watching youtube videos and playing video games that other people have already made instead of using that time to learn how to make a video game myself
3 notes
·
View notes
Text
Tuesday 5th March 2024 - [ Week 1 Day 3 ]
Today I studied primarily on Codecademy's "Learn PHP Skill Path" and still on the basics but it's pretty easy??? Programming languages have a trend of starting off relatively the same, each having small differences.
I don't know if the time of this challenge I would get to the very hard parts of PHP (if there are any? I'm not sure) but so far I am loving it!
What I learnt today: 🌷 Escapes 🌷 String Concatenation 🌷 Creating Variables 🌷 Using Variables 🌷 Variable Parsing 🌷 Variable Reassignment 🌷 Concatenating Assignment Operator 🌷 Assign by Reference 🪻 Numbers 🪻 Addition and Subtraction 🪻 Using Number Variables 🪻 Multiplication and Division 🪻 Exponentiation 🪻 Order of Operations 🪻 Mathematical Assignment Operators
💌 Day 3: How do you print “Welcome to Earth!” in PHP?
[ The challenge ]
#5in5weeks#study challenge#programming#coding#studyblr#codeblr#studying#comp sci#progblr#tech#programmer#php#study#study hard#studyspiration#night study#stay productive
17 notes
·
View notes
Text
SOMEBODY ONCE TOLD ME-
I know it’s been a very long while since our last episode, but after dealing with other projects, along with real life getting in the way from time to time, we’re finally continuing our next part of the second road trip across the Maasrichtian. While it only has 5 segments like the last episode, and does borrow some of last season’s “Freshwater” thunder quite a bit, I still had a good time with Swamps. And the segments presented here do bring a few things to the table for PHP in general. You’ll see what I mean when we get into them.
Snacks on the wing
The episode starts with the wetlands of Asia, where baby azhdarchid pterosaurs are attempting to fly for the first time. Keeping up with this show’s record of baby animals meeting their end, the pterosaurs have to deal with the threat of getting eaten by a horde of Shamosuchus. Unlike the Simosuchus from earlier in the season, these relatives to today’s crocodiles and alligators comfort more to the shape that we’re used to seeing these reptiles in. While I don’t have much to say about this segment, I find it cool how it draws comparisons with how Freshwater crocodiles hunt flying foxes in Australia. Even when millions of years apart, some hunting strategies are just that good.
Gone fishin’
The episode then cuts to the forests of South America, where the focus is on a truly unique animal; Austroraptor. For those not aware, this was a species of raptor dinosaur that was not only huge for its family (Think 20 feet long), it also lived a life of hunting fish. These of these guys like what would happen if a grizzly bear and a heron had a baby together. The plot of this segment shows a young male trying to score some lunch of his own. Many of the larger adults can only only catch garfish like it’s not their problem (which is something that our male is new to), but they can be aggressive, often attacking each other if one of them disrupts the other’s hunt. Until he learns how to catch prey successfully, the best option that the main male has to take is to snatch someone else’s prey, and try not to lose at least a few feathers in the process.
“Hippity hoppity, get off my property”
We then cut back to Madagascar to see the return of another Season 1 veteran. Y’all must’ve loved Beelzebufo so much, you all wanted to see more of the bay dinosaur-eating frog (And I really wouldn’t blame any of y’all). And fortunately, Apple heard everyone’s pleas for the devil toad to return, so here we are! The segment has a male Beelzebufo trying to find a good place to attract a mate. Unfortunately for the frog, a herd of Rapetosaurus just happened to come back and waddle in the mud, making things even harder for the Beelzebufo. That must be frustrating.
The Beelzebufo then has to find a new place to set up his courtship display, away from the titanosaurs. After a bit of hopping around, and even doing this…
Keep on rollin’
Our champ eventually finds a good enough spot to try again, with the Rapetosaurus herd moving on. They even leave footprints in the mud that get filled with water. The only complaint that I have for this scene is the lack of the Beelzebufo raising his eventual tadpoles. The concept art for the devil toad that was made by Gaëlle Seguillon refers to it as “Beelzebufo adult”, so it could be possible that devil tadpoles were considered to be in the show. Either that, or we could see another Beelzebufo-themed segment in a possible Season 3, taking alot of inspiration from how African bullfrog males raise their young. I may or may not be planning to add that to my hypothetical Season 3 idea, so keep your eyes peeled.
Head Games
Despite the episode literally being called “Swamps”, we cut to a dusty plain in North America, where the area in question used to be a swamp that eventually dried up. It’s here where we see the second pachycephalosaur of the series in the form of Pachycephalosaurus itself. It’s no secret that the domed heads of these creatures were used for some sort of territorial display, so we see an older male fighting a younger and rowdy male, who has been causing trouble for the herd. After a long and hard duel, the old male is knocked down, and his younger rival bellows out in victory. This turns out to be a bad idea, as it gives the old male time to get back up and strike down his rival. With the battle lost, the young male is then exiled from the herd, where he has to fend for himself. I’m not gonna lie, he’s gonna need everything in his kit to survive. Y’know why?
In the night, no one can hear you roar
The last segment of the episode shows us how basically terrifying T. Rex can be when hunting. After the last season shows how these giant predators can be doting parents or a loving couple, this segment serves as a reminder that this is still Tyrannosaurus Rex that we’re talking about. When night falls on the floodplains of Hell Creek, a couple of T. Rex brothers stalk around the forest, spying on a group of Edmontosaurus. The two split up, with one of them stepping on a fallen branch, intentionally causing the herd to get nervous. Thanks to their padded feet muffling any heavy footsteps that could be heard, along with their extremely good night vision, the predators spring into action. While one of them lunges for an Edmontosaurus, the latter is sent towards the other T. Rex. With both of them clamping their bone-crushing jaws into their hapless prey, the hunt is soon over, and the two get to enjoy their hard-earned meal. A funny thing to mention is how neither of the T. Rex crashed into the opening, roaring as they charged towards their prey. Large predators cannot afford to waste precious energy by running out and screaming like a mad man, so they need to be careful, often turning to ambush tactics to catch prey. If anything, this instance of averting usual pop-culture depictions of dinosaurs serves to make these beasts scarier than they already were. Unlike the mindless, perpetually roaring and shrinking movie monster that shakes the ground itself with every step, you’d never see or hear the real thing coming, until it’s too late…
youtube
This takes the phrase “Bonehead” to a new level
The Uncovered segment of the episode takes a closer look at how pachycephalosaurs like Pachycephalosaurus used their domed heads in fighting. I don’t have alot to say about this part, but I can say that headaches must be a major pain when it comes to these guys.
And with that, we only have 2 episodes left. I apologize for pumping this review out late into the month. Being busy with other projects, along with dealing with real life stuff and being a lazy ass from time to time can do that to you. Nonetheless, the next review on our list covers one of my favorite episodes in the entire series so far, so that’ll be fun when we get to it. Get ready to “dive” in again next time, because we’re gonna be soaking up the thirst of the land.
…I hope you laughed at that joke.
13 notes
·
View notes
Note
hi i totally understand if this is way too personal to answer but did you know what youd been through from the start or did you find out later on? if its the second im not asking for details or anything but vaguely howd you figure it out?
🗝️🏷️ RAMCOA, torture mentions, suicide/sh, active trauma, unlucky therapy
Some of us have known for as long as it’s been happening. Some knew because they were involved. Others have learned recently. Still others do not know yet.
Most of our system is now aware of our RAMCOA history, if that is what you’re asking. There are many stories as to how this came to be.
During the trauma, most were split intentionally by abusers. This has happened for as long as we could be split, and is less frequent now that we avoid the group and our family.
The internal workings of our system rely on the fragments scattered between alters. The one who knows a cue is not the one who was tortured is not the one who completes the behavior is not the one who remembers doing it. Alters were elaborated, split again, assigned a place.
Some were designed to be front-facing alters. They might have no part in programming chains, cover a chain, or have an obscure placement in their chain. These are the alters who did not know, serving as an external presentation.
There are also those who were ‘organic’ splits; they were usually created like the intentional splits, but without forethought. If they went unnoticed, they remained unassigned.
It’s hard to say where the first leaks really started. The presentations were poking around where they shouldn’t have, always so curious about our past. The unassigned meddled invisibly from the outside, interfering or watching. Some of the programmed were higher ups who were wreaking a particular kind of havoc.
We did not all find out together. Everyone has their own story of what happened as they made the discovery. Some are still stuck in their trauma or are too conditioned to see right now.
The presentations got into social media when we were around 15. I don’t know if anyone had it before then, but this is when they noticed online communities of systems and RAMCOA survivors.
This is probably how so much of the system came to know if they didn’t before; they left traces externally and others found it. There were debates about whether this was possible, programs set off to create amnesia or doubt or shatter anyone stepping too close.
We spent a year of forgetting and remembering our own DID symptoms, but eventually failed to realize. Months later, a friend disclosed their own DID. Another few months of research. We went back to a place we had been trafficked out of and finally had a co-conscience switch.
We gathered a notebook with every possibility of what it could have been and took it back to the PHP we had attended before the trip. That therapist took the notebook for a week and gave it back, said to proceed as planned regardless.
That notebook is nearly out of pages now. We took it to our regular therapist, he sent us to a new therapist, they were gentle enough to get someone to admit it. That process took another few months.
This therapist was a trauma and unreality specialist, had worked with systems before us. More of us made their own disclosures about their pasts, eventually leading up to an acknowledgment of having been trafficked and programmed.
That was about a year ago. We have since been deprogramming. There were triggers throughout the time leading up to this, some resulting in suicide attempts and self-harm. We have not yet rid ourselves of callbacks, and are prone to reaccess.
We are somewhat able to dispel new programming, especially when trauma is old or not as awful as tortures used previously. It is difficult to remain socially active enough that we cannot be taken for the time needed to inflict worse.
Does that answer your question? We are willing to speak on some programs and troubles throughout this journey, but not so much as to put ourselves at risk. Feel free to clarify or ask something else.
#ramcoa#tw ramcoa#tw tbmc#did osdd#osddid#dissociative identity disorder#did system#traumagenic system#polyfragmented system#cdd system
16 notes
·
View notes
Text
04/03/2024 || Day 19 (dop)
TLDR:
🔸 practised ASL fingerspelling
🔸 started learning PHP
🔸 started learning Blender
🔸 sketched a page in my sketchbook
------------------------------------------------------------------------------
Work
Volunteering - Last week was tiring, but fun! The event that I was volunteering at focused on people with intellectual disabilities, and I was part of the health screening section (though I was merely recording data, not conducting the screening). This event had people from all over Canada too. Because of that I had to brush up my french skills, which I haven't used in nearly 8+ years, so that was a struggle. What was less of a struggle was communicating with ASL!! I had one person who was deaf and when I realized it I was able to sign to him! Mind you, when he signed back I didn't 100% understand him because I was too focused on what I was signing, and I definitely made a few mistakes, but I'm still really happy!
5in5weeks - Ok, @izicodes made a challenge 2 years ago to spend 5 weeks learning 5 programming languages, and I thought that was a super good idea and that it would help with my burnout. (link to the project can be found here). Now, I'm gonna be taking weekends off (and I'm out of town for the next few days later this week), so I won't be doing this daily, but I'm gonna try my best not to take random days off. That being said, I'm starting this off with PHP! I covered some basics today by watching a youtube playlist, and I probably won't get through all 100+ videos in a week, but my aim with this challenge is to get the basics done and create something simple. After this challenge, I'll delve deeper into the languages that I like.
💌 Day 1: What are you most looking forward in learning PHP?
I had to use PHP for a class about 2 years ago and I asked my friend to help me (because I had no idea what was going on and it wasn't taught in class), and he basically did the work. Now, I keep on seeing PHP as a requirement for job applications, so I decided to finally get started on learning it. I actually applied for a job half a year ago and they emailed me asking if I knew PHP, and having to say no made me feel like garbage. So...time to change that.
Art - I've been wanting to delve into 3D art for a while now. 3 years ago I looked up the classic donut tutorial for Blender, but that's it. Now I'm gonna do the same thing, but this time progress past the tutorial and actually make things on the regular with it. Hopefully I will be as obsessed with it as I was when I was first learning how to draw, and just pump out as much as I can (quality doesn't matter at the starting point). There's just so much to the interface for Blender that you need to learn...it's overwhelming and intimidating.
#5in5weeks#5in5WeeksCodingChallenge#studyblr#codeblr#100 days of code#programming#coding#lazar blogs#100 days of productivity
5 notes
·
View notes
Note
I came across the Phoenixdex website while researching for my own fan-region. I'm curious as to how you build the website to display your works, and do you have any recommendations when it comes to website-building?
Hi!
The Phoenixdex website is custom-coded, built on top of the ProcessWire PHP framework. ProcessWire and frameworks like it are great for building full-on database applications, but a project of that scope is usually way beyond what most people are interested in when they just want an easy personal website for showing off their fakemon stuff. I only bothered building all that myself because I work with web design and development as my actual job and it's a hobby I've had for a long time, so it used a skillset I happened to have already.
You can always go the same route if you either have or want to learn the same skills, but if you're not yet familiar with coding for the web, be aware that you'll need to obtain hosting for your site, and to learn about databases and the programming language/frameworks of your choice. (If you are curious about this, let me know and I can share some resources to help you get started/see if it's something you're really interested in!)
The much, much easier route is to sidestep all that and create a wiki-style site for your project. This is what I did before I created the fully-custom site, actually! (Although I still used my own hosting and made a few modifications, because again that is adjacent to my job/hobby and also I am a nerd.) This gives you a website that's nice and searchable but is also much easier to put together pages for than needing to learn full HTML or some kind of templating language and database APIs or whatever. It would basically be making your own custom Bulbapedia.
Most people used to recommend Fandom/Wikia for this, but there are a lot of awkward limitations and obnoxious ads and policies and it's probably best to stay away from all that. It looks like Miraheze ( https://miraheze.org/ ) is the big not-crappy wiki farm these days. I haven't used them myself so I don't have any personal experience to share about Miraheze as a host, but as I understand it they run a pretty straightforward version of MediaWiki (the same software created for Wikipedia and used for sites like Bulbapedia) so there are plenty of guides and resources out there for learning to use and customize it without Fandom's janky corporate nonsense confusing things. It's even possible to lay things out in the same format Bulbapedia uses, if you're interested in that and up for learning a little bit about MediaWiki templates, but that's far from necessary—you can just put your fakemon info, or trainer or move or whatever you're making a page for, onto the page in whatever format's easiest for you.
You can see an example of a fangame wiki made using Miraheze + MediaWiki on Pokémon Flux's wiki here: https://pkmnflux.miraheze.org/wiki/Main_Page They've opted to use a Bulbapedia-like layout for their content as well.
Sorry for the super basic yet kinda lengthy overview, but there're a lot of weeds you can get into when talking about website creation. I hope it at least helps get you pointed toward something that'll work for you! Let me know if anything was unclear, and best of luck getting your fan region site set up!
10 notes
·
View notes
Text
Some friends who offered to host my site on their server got it running so last night I started learning how to make a more efficient art gallery with php, since that will soon be an option for me. I've never worked with php before but I already dig it. I want to do even more today. I want to learn what all I can do with this language. Am I finally getting back on the web dev horse??
I can't update my site on the new server yet bc they have to set up that functionality but I'm very excited! I've been wanting to move off of Neocities for a while now to escape the limitations of the site, and it's finally happening yayy
3 notes
·
View notes
Note
Hello! Are you still taking requests? If you are, can you write little Luz being a menace? I can picture her in the headspace of a mischievous and curious 2 year old being hyper and maybe endangering herself and doing reckless things either in the owl house, human realm or outdoors. So her poor caregiver (Eda, Camila, Lilith, Vee, Raine...whoever you prefer) is having troubles taking care of her and is worried that Luz may end up hurt if she keeps running/jumping around and basically having the zoomies.
Whether she gets hurt or not is your choice.
Eventually their caregiver comes up with an idea to calm Luz down but keep her happy, maybe by showing her a low stimuli baby cartoon like Bluey and/or offering her a warm bottle or milk to make her feel sleepy. It could be anything really, these are just examples.
I am so so so very sorry if this sounds rude or harsh, I swear, I do not mean it! But the prompt just doesn't really inspire motivation inside me and I'm afraid if I get started on it, I'll have to begin forcing myself to complete it. I'm learning how to stop stressful situations that can cause burnout, in my PHP (partial hospitalization program). I think maybe deciding not to do this one will be one step to healing. Again, I'm sorry, but I'm trying to be healthy (for once).
2 notes
·
View notes
Text
JavaScript Frameworks
Step 1) Polyfill
Most JS frameworks started from a need to create polyfills. A Polyfill is a js script that add features to JavaScript that you expect to be standard across all web browsers. Before the modern era; browsers lacked standardization for many different features between HTML/JS/and CSS (and still do a bit if you're on the bleeding edge of the W3 standards)
Polyfill was how you ensured certain functions were available AND worked the same between browsers.
JQuery is an early Polyfill tool with a lot of extra features added that makes JS quicker and easier to type, and is still in use in most every website to date. This is the core standard of frameworks these days, but many are unhappy with it due to performance reasons AND because plain JS has incorporated many features that were once unique to JQuery.
JQuery still edges out, because of the very small amount of typing used to write a JQuery app vs plain JS; which saves on time and bandwidth for small-scale applications.
Many other frameworks even use JQuery as a base library.
Step 2) Encapsulated DOM
Storing data on an element Node starts becoming an issue when you're dealing with multiple elements simultaneously, and need to store data as close as possible to the DOMNode you just grabbed from your HTML, and probably don't want to have to search for it again.
Encapsulation allows you to store your data in an object right next to your element so they're not so far apart.
HTML added the "data-attributes" feature, but that's more of "loading off the hard drive instead of the Memory" situation, where it's convenient, but slow if you need to do it multiple times.
Encapsulation also allows for promise style coding, and functional coding. I forgot the exact terminology used,but it's where your scripting is designed around calling many different functions back-to-back instead of manipulating variables and doing loops manually.
Step 3) Optimization
Many frameworks do a lot of heavy lifting when it comes to caching frequently used DOM calls, among other data tools, DOM traversal, and provides standardization for commonly used programming patterns so that you don't have to learn a new one Everytime you join a new project. (you will still have to learn a new one if you join a new project.)
These optimizations are to reduce reflowing/redrawing the page, and to reduce the plain JS calls that are performance reductive. A lot of these optimatizations done, however, I would suspect should just be built into the core JS engine.
(Yes I know it's vanilla JS, I don't know why plain is synonymous with Vanilla, but it feels weird to use vanilla instead of plain.)
Step 4) Custom Element and component development
This was a tool to put XML tags or custom HTML tags on Page that used specific rules to create controls that weren't inherent to the HTML standard. It also helped linked multiple input and other data components together so that the data is centrally located and easy to send from page to page or page to server.
Step 5) Back-end development
This actually started with frameworks like PHP, ASP, JSP, and eventually resulted in Node.JS. these were ways to dynamically generate a webpage on the server in order to host it to the user. (I have not seen a truly dynamic webpage to this day, however, and I suspect a lot of the optimization work is actually being lost simply by programmers being over reliant on frameworks doing the work for them. I have made this mistake. That's how I know.)
The backend then becomes disjointed from front-end development because of the multitude of different languages, hence Node.JS. which creates a way to do server-side scripting in the same JavaScript that front-end developers were more familiar with.
React.JS and Angular 2.0 are more of back end frameworks used to generate dynamic web-page without relying on the User environment to perform secure transactions.
Step 6) use "Framework" as a catch-all while meaning none of these;
Polyfill isn't really needed as much anymore unless your target demographic is an impoverished nation using hack-ware and windows 95 PCs. (And even then, they could possible install Linux which can use modern lightweight browsers...)
Encapsulation is still needed, as well as libraries that perform commonly used calculations and tasks, I would argue that libraries aren't going anywhere. I would also argue that some frameworks are just bloat ware.
One Framework I was researching ( I won't name names here) was simply a remapping of commands from a Canvas Context to an encapsulated element, and nothing more. There was literally more comments than code. And by more comments, I mean several pages of documentation per 3 lines of code.
Custom Components go hand in hand with encapsulation, but I suspect that there's a bit more than is necessary with these pieces of frameworks, especially on the front end. Tho... If it saves a lot of repetition, who am I to complain?
Back-end development is where things get hairy, everything communicates through HTTP and on the front end the AJAX interface. On the back end? There's two ways data is given, either through a non-html returning web call, *or* through functions that do a lot of heavy lifting for you already.
Which obfuscates how the data is used.
But I haven't really found a bad use of either method. But again; I suspect many things about performance impacts that I can't prove. Specifically because the tools in use are already widely accepted and used.
But since I'm a lightweight reductionist when it comes to coding. (Except when I'm not because use-cases exist) I can't help but think most every framework work, both front-end and Back-end suffers from a lot of bloat.
And that bloat makes it hard to select which framework would be the match for the project you're working on. And because of that; you could find yourself at the tail end of a development cycle realizing; You're going to have to maintain this as is, in the exact wrong solution that does not fit the scope of the project in anyway.
Well. That's what junior developers are for anyway...
2 notes
·
View notes
Text
Mild barriers to entry are good. They protect actual communities and allow different internet ecosystems that feel different one from another. Dumbing things down just results in a worse version of Instagram or whatever other popular app, and that’s not competitive because people can just go to the already-successful hellhole in question.
@staff If you won’t listen to us, maybe you’ll care what a Tech person thinks.
This is from Fan is a Tool-Using Animal by Maciej Cegłowski (the Pinboard guy):
“Something counter-intuitive to me was a lot of this fan stuff, they would use tools and web sites and plugins and Greasemonkey, like five things at once, and it’s really hard to get your mind around it. My instinct was couldn’t this be done more easily or more intuitively? But it’s actually the difficulty of the tools and the norms of the community [that] protect it. It takes a while. You have to be committed to start contributing because you have to learn how all this stuff works.
This isn’t just fandom. You know those awful PHP-based message boards like, I like to scuba dive so I go to the scuba board sometimes and I have no idea how to use it but there’s some really informative people on there. I think that these terrible interfaces actually serve a protective function where they keep the community isolated from just drive-by comments. If you ever go to the Guardian or the New York Times, places where you can actually comment very easily without ever having been there before, the comments are just totally trash. And I wonder sometimes if it’s because it’s too easy to do it.”
Number 6 is great. Stability is something all users value.
3 is... well, it depends how you implement it. Making it easy to go see all the contentful responses is great. Making it ultra easy for a new person to just dive in in total ignorance to stink up a conversation with their unconsidered opinions is horseshit.
For me, I primarily access Tumblr through my notifications page, and I most certainly don’t want any of the contentful interactions collapsed. What I already do is to hide all likes and all reblogs without commentary or tags. Those are meaningless cruft, not real interactions.
Tumblr is great not because things can go viral in no-comment reblogs but because, now that the platform is quieter, the real conversation is here and not on garbage like Twitter.
It’s entirely possible that Tumblr’s current style of infinite massive image uploads simply isn’t financially sustainable with the community Tumblr has actually attracted and without the cash cow of people paying for sexually explicit materials, but trying to become some shittier, newer app with worse features and more 13-year-olds isn’t going to fix that.
Tumblr’s Core Product Strategy
Here at Tumblr, we’ve been working hard on reorganizing how we work in a bid to gain more users. A larger user base means a more sustainable company, and means we get to stick around and do this thing with you all a bit longer. What follows is the strategy we're using to accomplish the goal of user growth. The @labs group has published a bit already, but this is bigger. We’re publishing it publicly for the first time, in an effort to work more transparently with all of you in the Tumblr community. This strategy provides guidance amid limited resources, allowing our teams to focus on specific key areas to ensure Tumblr’s future.
The Diagnosis
In order for Tumblr to grow, we need to fix the core experience that makes Tumblr a useful place for users. The underlying problem is that Tumblr is not easy to use. Historically, we have expected users to curate their feeds and lean into curating their experience. But this expectation introduces friction to the user experience and only serves a small portion of our audience.
Tumblr’s competitive advantage lies in its unique content and vibrant communities. As the forerunner of internet culture, Tumblr encompasses a wide range of interests, such as entertainment, art, gaming, fandom, fashion, and music. People come to Tumblr to immerse themselves in this culture, making it essential for us to ensure a seamless connection between people and content.
To guarantee Tumblr’s continued success, we’ve got to prioritize fostering that seamless connection between people and content. This involves attracting and retaining new users and creators, nurturing their growth, and encouraging frequent engagement with the platform.
Our Guiding Principles
To enhance Tumblr’s usability, we must address these core guiding principles.
Expand the ways new users can discover and sign up for Tumblr.
Provide high-quality content with every app launch.
Facilitate easier user participation in conversations.
Retain and grow our creator base.
Create patterns that encourage users to keep returning to Tumblr.
Improve the platform’s performance, stability, and quality.
Below is a deep dive into each of these principles.
Principle 1: Expand the ways new users can discover and sign up for Tumblr.
Tumblr has a “top of the funnel” issue in converting non-users into engaged logged-in users. We also have not invested in industry standard SEO practices to ensure a robust top of the funnel. The referral traffic that we do get from external sources is dispersed across different pages with inconsistent user experiences, which results in a missed opportunity to convert these users into regular Tumblr users. For example, users from search engines often land on pages within the blog network and blog view—where there isn’t much of a reason to sign up.
We need to experiment with logged-out tumblr.com to ensure we are capturing the highest potential conversion rate for visitors into sign-ups and log-ins. We might want to explore showing the potential future user the full breadth of content that Tumblr has to offer on our logged-out pages. We want people to be able to easily understand the potential behind Tumblr without having to navigate multiple tabs and pages to figure it out. Our current logged-out explore page does very little to help users understand “what is Tumblr.” which is a missed opportunity to get people excited about joining the site.
Actions & Next Steps
Improving Tumblr’s search engine optimization (SEO) practices to be in line with industry standards.
Experiment with logged out tumblr.com to achieve the highest conversion rate for sign-ups and log-ins, explore ways for visitors to “get” Tumblr and entice them to sign up.
Principle 2: Provide high-quality content with every app launch.
We need to ensure the highest quality user experience by presenting fresh and relevant content tailored to the user’s diverse interests during each session. If the user has a bad content experience, the fault lies with the product.
The default position should always be that the user does not know how to navigate the application. Additionally, we need to ensure that when people search for content related to their interests, it is easily accessible without any confusing limitations or unexpected roadblocks in their journey.
Being a 15-year-old brand is tough because the brand carries the baggage of a person’s preconceived impressions of Tumblr. On average, a user only sees 25 posts per session, so the first 25 posts have to convey the value of Tumblr: it is a vibrant community with lots of untapped potential. We never want to leave the user believing that Tumblr is a place that is stale and not relevant.
Actions & Next Steps
Deliver great content each time the app is opened.
Make it easier for users to understand where the vibrant communities on Tumblr are.
Improve our algorithmic ranking capabilities across all feeds.
Principle 3: Facilitate easier user participation in conversations.
Part of Tumblr’s charm lies in its capacity to showcase the evolution of conversations and the clever remarks found within reblog chains and replies. Engaging in these discussions should be enjoyable and effortless.
Unfortunately, the current way that conversations work on Tumblr across replies and reblogs is confusing for new users. The limitations around engaging with individual reblogs, replies only applying to the original post, and the inability to easily follow threaded conversations make it difficult for users to join the conversation.
Actions & Next Steps
Address the confusion within replies and reblogs.
Improve the conversational posting features around replies and reblogs.
Allow engagements on individual replies and reblogs.
Make it easier for users to follow the various conversation paths within a reblog thread.
Remove clutter in the conversation by collapsing reblog threads.
Explore the feasibility of removing duplicate reblogs within a user’s Following feed.
Principle 4: Retain and grow our creator base.
Creators are essential to the Tumblr community. However, we haven’t always had a consistent and coordinated effort around retaining, nurturing, and growing our creator base.
Being a new creator on Tumblr can be intimidating, with a high likelihood of leaving or disappointment upon sharing creations without receiving engagement or feedback. We need to ensure that we have the expected creator tools and foster the rewarding feedback loops that keep creators around and enable them to thrive.
The lack of feedback stems from the outdated decision to only show content from followed blogs on the main dashboard feed (“Following”), perpetuating a cycle where popular blogs continue to gain more visibility at the expense of helping new creators. To address this, we need to prioritize supporting and nurturing the growth of new creators on the platform.
It is also imperative that creators, like everyone on Tumblr, feel safe and in control of their experience. Whether it be an ask from the community or engagement on a post, being successful on Tumblr should never feel like a punishing experience.
Actions & Next Steps
Get creators’ new content in front of people who are interested in it.
Improve the feedback loop for creators, incentivizing them to continue posting.
Build mechanisms to protect creators from being spammed by notifications when they go viral.
Expand ways to co-create content, such as by adding the capability to embed Tumblr links in posts.
Principle 5: Create patterns that encourage users to keep returning to Tumblr.
Push notifications and emails are essential tools to increase user engagement, improve user retention, and facilitate content discovery. Our strategy of reaching out to you, the user, should be well-coordinated across product, commercial, and marketing teams.
Our messaging strategy needs to be personalized and adapt to a user’s shifting interests. Our messages should keep users in the know on the latest activity in their community, as well as keeping Tumblr top of mind as the place to go for witty takes and remixes of the latest shows and real-life events.
Most importantly, our messages should be thoughtful and should never come across as spammy.
Actions & Next Steps
Conduct an audit of our messaging strategy.
Address the issue of notifications getting too noisy; throttle, collapse or mute notifications where necessary.
Identify opportunities for personalization within our email messages.
Test what the right daily push notification limit is.
Send emails when a user has push notifications switched off.
Principle 6: Performance, stability and quality.
The stability and performance of our mobile apps have declined. There is a large backlog of production issues, with more bugs created than resolved over the last 300 days. If this continues, roughly one new unresolved production issue will be created every two days. Apps and backend systems that work well and don't crash are the foundation of a great Tumblr experience. Improving performance, stability, and quality will help us achieve sustainable operations for Tumblr.
Improve performance and stability: deliver crash-free, responsive, and fast-loading apps on Android, iOS, and web.
Improve quality: deliver the highest quality Tumblr experience to our users.
Move faster: provide APIs and services to unblock core product initiatives and launch new features coming out of Labs.
Conclusion
Our mission has always been to empower the world’s creators. We are wholly committed to ensuring Tumblr evolves in a way that supports our current users while improving areas that attract new creators, artists, and users. You deserve a digital home that works for you. You deserve the best tools and features to connect with your communities on a platform that prioritizes the easy discoverability of high-quality content. This is an invigorating time for Tumblr, and we couldn’t be more excited about our current strategy.
65K notes
·
View notes