#What are PHP functions?
Explore tagged Tumblr posts
jateshi · 2 years ago
Text
I swear to fuck-
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
relto · 8 months ago
Text
the docs for the regular variable bind say that you can reuse statements by simply assigning the bound variables new values, and well it looks like that was a lie too.
0 notes
kimyoonmiauthor · 6 months ago
Text
Why Spell Check (and some grammar check) isn't AI
So I've seen in the wake of Nanowrimo some people claim that spell check is AI and thus is like Gen AI, and I saw the claim originator on Twitter, but when I pressed them, they basically tried to say they had a degree in computer science, so when I pressed into them if they knew what they were talking about, they couldn't answer because obviously don't know about AI.
For some background I've done some light programming (If you look at the Korean name generator, that's all me). And I also have relatives that did programming.
Here, I can lay out how spell check works without AI or a fancy algorithm.
The oldest spellchecks didn't use AI or Gen AI, they used what is your basic corresponding tables.
If you use something like google sheets (database), you can do this pretty quickly yourself though with a lot of manpower.
Here is a list of commonly misspelled words.
Add that with another table with how they are commonly misspelled.
Then you need a table with "common typos"
Then you need one more table for "Words the user adds."
The algorithm is basically this: Set up a loop. A loop is a mechanism that has an algorithm (or set of instructions in it) which repeats until a certain instruction is met. This loop with this algorithm will check for words. In this case, anything with letters, usually encompassing ' and - (though some programs ignore dashes).
So[,][ ]it[ ]will[ ]look[ ]at[ ]letters[ ]in[ ]this[ ]sentence[ ]and[ ]figure[ ]out[ ]if[ ]it[ ]is[ ]spelled[ ]correctly.
The first loop in the previous sentence will look at the word "so" by selecting everything it knows to be a letter in English. Tada "S, o" Then correspond that to the dictionary. So shows up in the dictionary listing it has of English words. Thanks Webster. (If you're British, the OED)
The Algorithm concludes the word is spelled correctly. No more work needs to be done on So. The next word is it "i, t" correspond that to the dictionary and so on.
If you have a "bad word" for example "alot" then the work is, word is spelled incorrectly. Next "work to be done" is to find out if this word is in the "commonly misspelled" words list. If yes, then underline the word in red to get it corrected.
Tumblr media
AKA run Algorithm to underline word (usually a few lines of code if you're doing it the old way).
Then the algorithm moves on. The function of right click/Cntrl click is saying, OK, this word, "alot" is it commonly misspelled? Here are a list of corrections according to this other table. This is the work that needs to be done: We need a popup table. We need to pull from the database this misspelling, and then we need to pull from this other database and pull corresponding correct spellings based on this. Then you set up an if-then If the user clicks on this word, change highlighted word.
This is your basic spelling algorithm. You do not need gen AI for this or AI.
Grammar works similarly. You need a table, the type of speech it is (n, v, adv, adj) and then to load in "rules" one should use. You do not need AI. You need some basic programming skills. On the table of somewhere between "Hello, world" (1) and "OMG, I created artificial intelligence like Data " (10) My "Korean name generator" is like 2.5? in difficulty (minus all of the language and cultural knowledge). Haha. Still mocking myself. But a Spellcheck is not far from that. it is like 3. You could build one fairly easily with PHP and database access to a dictionary and misspelled words with corrections.
But Google pulled from the Enron Emails.
In this case, you can sorta fuzzy logic it and create bigger algorithms, mostly to sort out the *grammar* and *New words* that were used that aren't already in the database, which basically is another loop, but with an add to database function. (i.e. table). Then you would correspond this with another loop to look at "odd grammar" and flag it.
You can use AI to sort it faster than a basic algorithm, but nope, you do not need AI to correspond it. A basic algorithm would do. You can also use AI for "words that look similar to this one" and "Words commonly used in place of this one"
But overall, You do not need AI for a grammar check. You only need a dictionary, a set of commonly held rules of English and exceptions (maybe some Noam Chomsky, though he's controversial), and then some programming skill to get past the hurdle.
But Grammar check could use AI
AI as it stands is basically a large algorithm to match large datasets to the words you use. But the problem is that the datasets are taken from users who did not volunteer to put in that information.
It is not Data on Enterprise have novel experiences of every day and learning how to function in the human world by processing it through a matrix of quantum computing.
So WHEN grammar check does use AI, the AI is mostly doing the crunching of the corresponding the information into a more neat table option, as I understand it. It is not the same thing as Gen AI or your average spell check and Microsoft algorithm from say 2000.
Those are not equal things. Instead, adding Gen AI to say, Microsoft Word, is more like stealing your words for the machine (which BTW, Microsoft absolutely did and you need to transfer out to Anti-AI programs/Apps.) and corresponding them for Gen AI future use for people who can't write worth a damn, and then "averaging" it out. Elew. Who wants to write to the average? That's anti-Creative.
And just because it uses an Algorithm, doesn't automatically use AI.
Look, I can write a algorithm now:
Loop: If you want to be strong...
Go outside.
Do cardio.
Go lift weights.
Make sure you eat a healthy diet and balanced which includes reducing refined sugars and do not eat bad fats.
That equally is a set of instructions, but that's not automatically AI.
I programmed my calculator to spit out the quadratic formula. And this isn't even officially programming, this is a script. Dudes, if you're going to call that AI, then you need help with learning computer programming.
The threshold for making AI v spellcheck is a lot, lot higher programming than a set of simple tables and a loop that looks for letters and spaces corresponding it to an existing dictionary. If that's you're threshold for AI, then when you type words, you are caught in an algorithm. Ooooooo... OMG, when you pull up a dictionary to spellcheck yourself, that's AI. C'mon. The threshold is a might higher to make AI or "victim of algorithm" as in Twitter.
So anytime someone says, "All Spellcheck uses genAI/AI" Laugh in their faces and say no. 'cause like, I'm a terrible programmer, and even I'm like, Meh, not that hard to set up spell check, give me a solid dictionary database and I'll do ya.
That said, A human will beat AI on grammar anytime and will be able to sort weird spellings faster and A-OK, or not.
146 notes · View notes
c-official · 4 months ago
Text
How is PHP not a conlang. Wdym that the only datastructure is a hashmap?!?!?? Php is what you get if you go "wouldn't it be fucked up if everything was a hashmap". You need an object? That is basicly just a hashmap with associated functions.
And the worst part is that hashing is it's whole deal but if you want to hash by a touple it's like, a tuple? you mean an array(hashmap again)? well of course we can't hash that.
47 notes · View notes
the-nox-syndicate · 2 months ago
Text
SysNotes devlog 1
Hiya! We're a web developer by trade and we wanted to build ourselves a web-app to manage our system and to get to know each other better. We thought it would be fun to make a sort of a devlog on this blog to show off the development! The working title of this project is SysNotes (but better ideas are welcome!)
Tumblr media
What SysNotes is✅:
A place to store profiles of all of our parts
A tool to figure out who is in front
A way to explore our inner world
A private chat similar to PluralKit
A way to combine info about our system with info about our OCs etc as an all-encompassing "brain-world" management system
A personal and tailor-made tool made for our needs
What SysNotes is not❌:
A fronting tracker (we see no need for it in our system)
A social media where users can interact (but we're open to make it so if people are interested)
A public platform that can be used by others (we don't have much experience actually hosting web-apps, but will consider it if there is enough interest!)
An offline app
So if this sounds interesting to you, you can find the first devlog below the cut (it's a long one!):
(I have used word highlighting and emojis as it helps me read large chunks of text, I hope it's alright with y'all!)
Tech stack & setup (feel free to skip if you don't care!)
The project is set up using:
Database: MySQL 8.4.3
Language: PHP 8.3
Framework: Laravel 10 with Breeze (authentication and user accounts) and Livewire 3 (front end integration)
Styling: Tailwind v4
I tried to set up Laragon to easily run the backend, but I ran into issues so I'm just running "php artisan serve" for now and using Laragon to run the DB. Also I'm compiling styles in real time with "npm run dev". Speaking of the DB, I just migrated the default auth tables for now. I will be making app-related DB tables in the next devlog. The awesome thing about Laravel is its Breeze starter kit, which gives you fully functioning authentication and basic account management out of the box, as well as optional Livewire to integrate server-side processing into HTML in the sexiest way. This means that I could get all the boring stuff out of the way with one terminal command. Win!
Styling and layout (for the UI nerds - you can skip this too!)
I changed the default accent color from purple to orange (personal preference) and used an emoji as a placeholder for the logo. I actually kinda like the emoji AS a logo so I might keep it.
Laravel Breeze came with a basic dashboard page, which I expanded with a few containers for the different sections of the page. I made use of the components that come with Breeze to reuse code for buttons etc throughout the code, and made new components as the need arose. Man, I love clean code 😌
I liked the dotted default Laravel page background, so I added it to the dashboard to create the look of a bullet journal. I like the journal-type visuals for this project as it goes with the theme of a notebook/file. I found the code for it here.
I also added some placeholder menu items for the pages that I would like to have in the app - Profile, (Inner) World, Front Decider, and Chat.
Tumblr media
i ran into an issue dynamically building Tailwind classes such as class="bg-{{$activeStatus['color']}}-400" - turns out dynamically-created classes aren't supported, even if they're constructed in the component rather than the blade file. You learn something new every day huh…
Tumblr media
Also, coming from Tailwind v3, "ps-*" and "pe-*" were confusing to get used to since my muscle memory is "pl-*" and "pr-*" 😂
Feature 1: Profiles page - proof of concept
This is a page where each alter's profiles will be displayed. You can switch between the profiles by clicking on each person's name. The current profile is highlighted in the list using a pale orange colour.
Tumblr media
The logic for the profiles functionality uses a Livewire component called Profiles, which loads profile data and passes it into the blade view to be displayed. It also handles logic such as switching between the profiles and formatting data. Currently, the data is hardcoded into the component using an associative array, but I will be converting it to use the database in the next devlog.
Tumblr media
New profile (TBC)
You will be able to create new profiles on the same page (this is yet to be implemented). My vision is that the New Alter form will unfold under the button, and fold back up again once the form has been submitted.
Alter name, pronouns, status
The most interesting component here is the status, which is currently set to a hardcoded list of "active", "dormant", and "unknown". However, I envision this to be a customisable list where I can add new statuses to the list from a settings menu (yet to be implemented).
Tumblr media Tumblr media Tumblr media Tumblr media
Alter image
I wanted the folder that contained alter images and other assets to be outside of my Laravel project, in the Pictures folder of my operating system. I wanted to do this so that I can back up the assets folder whenever I back up my Pictures folder lol (not for adding/deleting the files - this all happens through the app to maintain data integrity!). However, I learned that Laravel does not support that and it will not be able to see my files because they are external. I found a workaround by using symbolic links (symlinks) 🔗. Basically, they allow to have one folder of identical contents in more than one place. I ran "mklink /D [external path] [internal path]" to create the symlink between my Pictures folder and Laravel's internal assets folder, so that any files that I add to my Pictures folder automatically copy over to Laravel's folder. I changed a couple lines in filesystems.php to point to the symlinked folder:
Tumblr media
And I was also getting a "404 file not found" error - I think the issue was because the port wasn't originally specified. I changed the base app URL to the localhost IP address in .env:
Tumblr media
…And after all this messing around, it works!
(My Pictures folder)
Tumblr media
(My Laravel storage)
Tumblr media
(And here is Alice's photo displayed - dw I DO know Ibuki's actual name)
Tumblr media
Alter description and history
The description and history fields support HTML, so I can format these fields however I like, and add custom features like tables and bullet point lists.
Tumblr media
This is done by using blade's HTML preservation tags "{!! !!}" as opposed to the plain text tags "{{ }}".
(Here I define Alice's description contents)
Tumblr media Tumblr media
(And here I insert them into the template)
Tumblr media
Traits, likes, dislikes, front triggers
These are saved as separate lists and rendered as fun badges. These will be used in the Front Decider (anyone has a better name for it?? 🤔) tool to help me identify which alter "I" am as it's a big struggle for us. Front Decider will work similar to FlowCharty.
Tumblr media
What next?
There's lots more things I want to do with SysNotes! But I will take it one step at a time - here is the plan for the next devlog:
Setting up database tables for the profile data
Adding the "New Profile" form so I can create alters from within the app
Adding ability to edit each field on the profile
I tried my best to explain my work process in a way that wold somewhat make sense to non-coders - if you have any feedback for the future format of these devlogs, let me know!
~~~~~~~~~~~~~~~~~~
Disclaimers:
I have not used AI in the making of this app and I do NOT support the Vibe Coding mind virus that is currently on the loose. Programming is a form of art, and I will defend manual coding until the day I die.
Any alter data found in the screenshots is dummy data that does not represent our actual system.
I will not be making the code publicly available until it is a bit more fleshed out, this so far is just a trial for a concept I had bouncing around my head over the weekend.
We are SYSCOURSE NEUTRAL! Please don't start fights under this post
24 notes · View notes
webfarmhouses-blog · 5 months ago
Text
Web designer in Jodhpur
Creative Web Design
We are a web designing company that has a team of skilled and experienced web designers and developers who can create stunning and functional websites for any type of business or domain. We offer a variety of web designing services, such as custom web design, web development, web hosting, SEO, and maintenance. We also provide you with a free web design consultation, where we can discuss your goals, needs, and preferences, and provide you with a web design proposal that suits your requirements and expectations.
What we do in Web Design
Our web designing services are the services that provide web designing solutions for clients who want to create or improve their online presence. It involves the use of various elements such as colours, fonts, images, graphics, animations, and interactions to convey the message and purpose of the website to visitors. Web designing services can help clients with various aspects of web designing, such as Consultation: Our web designing services can help clients understand their goals, needs, and preferences, and provide them with expert advice and guidance on how to achieve them . Strategy: Our services can help clients develop a clear and effective web design strategy that aligns with their brand identity, target audience, and business objectives.Design: We help clients create a unique and attractive web design that reflects their vision and personality, and that engages and impresses their visitors.Launch: Our services can help clients launch their website to the public, and provide them with web hosting, domain registration, and security services.
Our Design Technology
At Web Farm House, we understand that web design is not just about making a website look good. It is also about making it work well, communicate effectively, and provide value to the users. That is why we use the latest web design technology to create websites that are:
Visually appealing: We use web graphic design to create stunning and consistent visual elements for your website, such as colours, fonts, images, icons, and animations.
Easy to use: We use user interface design to create intuitive and interactive elements for your website, such as buttons, menus, forms, and navigation.
Functional and reliable: We use web development to code and program your website, using languages such as HTML, CSS, JavaScript, PHP, and others. We follow the principles of web standards, web accessibility, web performance, and web security, to ensure the quality and reliability of your website.
Our Work Process
At Web Farm House, we follow a systematic and collaborative work process to create your website. Our work process consists of four main phases: Discovery, Design, Development, and Delivery:
Discovery: This is the phase where we get to know you and your project. We will ask you some questions about your goals, needs, preferences, budget, and timeline. We will also conduct some research on your industry, competitors, and target audience. Based on the information we gather, we will create a project proposal and a contract for you to review and approve.
Design: This is the phase where we create the visual and interactive elements of your website. We will start by creating a sitemap and a wireframe, which are the blueprints of your website’s structure and layout. We will then create a mockup, which is a prototype of your website’s appearance and functionality. We will present the mockup to you and ask for your feedback and approval. We will make any revisions as needed until you are satisfied with the design.
Development: This is the phase where we code and program your website. We will use the latest web development technology to create a website that is functional, reliable, and compatible with different devices and browsers. We will also test and debug your website to ensure its quality and performance. We will show you the progress of the development and ask for your feedback and approval.
Delivery: This is the final phase where we launch and maintain your website. We will upload your website to your chosen hosting service and domain name. We will also provide you with a user manual and a training session on how to use and update your website. We will also offer you ongoing support and maintenance services to keep your website running smoothly and securely.
We will also listen to your feedback and suggestions and make any changes as needed. We will work with you as a partner and a friend, not just as a client and a vendor. we value your input and satisfaction throughout the work process. We will communicate with you regularly and keep you updated on the status of your project.
Our Web Designing Services
Our is provides web design services for clients who want to create or improve their online presence. We help clients with various aspects of web designing, such as consultation, strategy, design, development, testing, launch, and maintenance:
Static web design
Liquid web design.
Adaptive web design.
Dynamic web design.
Responsive web design.
Single-page web design.
Why Choose Us?
We are a One-Stop Solution for delivering the best web design and development services. We render customized and affordable web design facilities to suit your requirements. Choose the best plans for building a responsive web design according to your needs:
Excellent technical support
Core PHP &Codeigniter + MySQL.
Secure and Reliable coding.
Satisfactory Customer Support.
SEO-friendly web development.
33 notes · View notes
kremlin · 1 year ago
Note
I do computer work but it's not very hard and kind of boring. How do I get to do hard computer work? Do I have to go to grad school?
hi i tend to miss these because of slipshod ublock custom filters im too birdbrained to fix.
i worked for a large american technology company which sold business machines internationally for close to a decade until laid off in successful accounting fraud scheme a few years ago. started as developer, erm, pardon me, i started as
junior developer
which is a role similar to routinely-executed court jester and human meatwave conscript meant to soak up enemy bullets to cause exhaustion of enemy bullet supply and finally guy that comes in big gross truck with a pump and a tank and a big hose used to suck the shit+piss out of portable toilet/malfunctioning sewer etc. this is for when you are 20 years old or so and they hit you with this work to calm your ass down a bit. my case was cloud bullshit on ancient rickety php stack. 5% keystrokes/clicks are php, 95% remainder is jira and other members of the axis of evil. LOT of dick sucking and butt fucking. Going into men's bathroom and making eye contact with cubicle neighbor before entering stall and fearlessly making disgusting noises. microwaving fish lunch thrice daily. you get the idea. meager paycheck but six figures takehome technically
next is staff dev, wait, god damn fucking tumblr, you can't adjust fonts mid-paragraph, and Big Text is just another type of font, in case you wanted Big Specific font. fucking fuck hold on. next step is
staff developer
no effective change besides greatly increased workload (click those motherfucking jira buttons!! suffer coworker's asinine bad-faith code review comments that HE AND HE ALONE must manually accept your responses to, on HIS time, before you are allowed to click the jira buttons that start the human meat sausage factory to get your 20 line maximum change into an RC and then release and then push candidate and then prod push!! pay raise one thousand dollars annually (lol). Emails. Now you deal with project manager too. speculate as to what sorts of grievous head injuries that man must suffer daily to describe his logic. his job is like the guy from office space that brings documents from one desk to another but he randomly reorders the words on the page in-flight. make plausibly-deniable wife fucking jokes about his wife in earshot. you're almost at the top of the suffering function. next is, no fucking cute font this time, senior developer, sounds cool right, lol, lmao, "senior" "developer" is like "tallest" "midgit".
no pay increase no workload increase but now manager emails you about extremely, extremely personal issues he's facing and also makes his most difficult problems from his boss your problems. one week will pass and then they will hit you with the "we're considering you for a team lead position". answer:
NO
answer no as this is the prescribed path, you take that role, you are maxxed out in workload, you are dealing with forty employee's worth of bullshit, another one thousand dollarinos a year raise, employer has solved efficiency problem with your sanity and burnout as variables. you're supposed to quit or kill yourself within seconds of hitting 30 y/o. don't fall for tricks. say "NO" in a creative way such as "i have tabulated some data and made it into excel pie chart quantifying diff. departments work output and am considering sending it to whoever Dave is, the guy that is one or two or three report levels over your boss' head, you know, his boss' boss' boss or whatever. or say "you are harassing me sexually, racistly" that kind of shit. make threat clearly.
was worth mentioning before, throughout all of this make as many friends and as much of a splash for yourself as possible as its time to trade on that goodwill, tell your boss you want an open relationship and you're going to fuck and suck other managers, and then find the good one with the good team of old fucking geriatric guys who could never be fooled into working more than a reasonable amount daily and also can kill people with their minds since they have been sitting on the bleeding edge of computing since 1969. their boss will usually be, suspiciously, one report rank higher than everyone else. e.g. their boss has a whole other boss + his reports under him. usually small team. go to their boss, say, hi, look at me, look at my beautiful plumage and captivating mating dance, please hire me, pleassseee. his team will say no, they will say things like "I don't know about that kiddo", "That guy seems like a candy-ass", they will read your papers and look at you in the eyes and say it is not compelling, the boss will kind of hire you anyway. if he doesn't you're fucked. if he does you're now a
STAFF ENGINEER
for fifteen minutes and then
ADVISORY/SENIOR/SPECIAL ENGINEER
and the suffering is over. no code minimal jira + squad of gremlin zerglings under your boss whom you can rank-pull and delegate bullshit to, they will be mostly suckers, take advantage of this. 80% of keystrokes/clicks will be in production of beautiful wonderful lovely .docx and .xlsx's, what a godsend, only in an emergency are you allowed to fuck with your zergling's code, usually in a cool way with bullshit procedure removed.
i worked on high performance computing shit. "what the fuck do you mean 2PB or so in and out a day on flash memory", "what the fuck do you mean special infiniband intel MPI library on CD-R stored in Craig's filing cabinet???". Meetings with company people: webcams off, responses optional, snideness allowed. Meetings with client: you must have your dress shirt starched and white glove the shit out of those motherfuckers. timezones = skill issue. i don't care where germany is, i don't give a shit, wake up at 3am for a 20m meeting i take on the toilet or while eating a boiled lobster complete with cracker + lobster bib. customers countable on one hand, invoices to customers not countable with 32 bits. no fucking mistakes ever allowed except for like whitepaper drafts, you cannot fuck the pumpkin on this one, your actual job relies on your ability to hit a button and suck down a week's worth of compute and millions of dollars, boiling swimming pool's worth of TDP, one mistake that leads result data to being able to be characterized as flawed and your balls are getting ripped off. Quarterly IRL meetings = normiepilled normiemaxxing. Dress sharp. leave at 5pm on the dot, go to bar with Old Fucker coworkers, drink wrecklessly with them, have a blast, let them give you a tour of a lab you are absolutely 100% not allowed to be inside, buildings that have posted weight limits per sq. ft. exceeding 250lbs, such a blast. every paycheck a FORTUNE every dinner a banquet every meeting an email every keystroke life or death. you get to meet /lib/doug mofos too one of whom i wrote a very poor kind of poem thing about. thats about it. hope this helps
146 notes · View notes
theveryevilblog · 1 month ago
Text
Haskell > anything else
Haskell is the best programming language because it lets you write a fully functioning web server with three lines of code and zero understanding of how anything works You don't write programs, you declare intentions, and the compiler decides if you're worthy Every other language lets you make mistakes. Haskell waits patiently then destroys your ego at compile time Besides, who needs to 'build skill' in programming anyway?
Not even comparable to python, which is just... so annoyingly uncomplicated and pointless (to make good python syntax you need to make it as un-python as possible) and javascript? Who needs fast languages anyway? So unsatisfying And don't even get me started on C, C++ or C#, which are literally the same language by the way Rust? Bro, just send me the virus already. I don't care PHP? What does that even stand for? Poverty Holding Person? Like you? Java? You stopped being relevant about thirty years ago Swift? Buddy, I do not care about your apple vision pro R? You couldn't even spare another letter? What are you, C-- or something? Ruby? Just admit that Ruby on Rails died last decade... Go? Go where? Out the door? Because currently, that is what Go developers are being asked to do by employers Perl? I don't even know what that language is
6 notes · View notes
angelosearch · 6 months ago
Text
Can a blorbo be a transitional object?
I am back on my bullshit with some therapy-related thoughts.
First, definitions.
What is a blorbo?
Since we're on Tumblr, ya'll probably know what a blorbo is, but if you somehow don't, it is The Character. The one you obsess over. The one you're constantly spinning around in your brain. Thinking about them can bring you comfort and/or distraction.
Of course, I have a blorbo, which is probably A HUGE SHOCKER given I never talk/write/draw/get a tattoo of him. Nope, couldn't be me. (Yes, I consider Squall my #1 Blorbo)
What is a transitional object?
Transitional objects, or "comfort objects," are (usually) physical objects that a child will use to feel comfort when separated from a caregiver. Think about your baby blanket. Or that one stuffed animal you carried everywhere. That object helps a kid self-soothe and feel in control. These objects are especially helpful around bedtime for helping the child sleep.
Sometimes, kids will personify a transitional object as a way of more safely expressing their own wants/needs/concerns. I have a client who brings her transitional object (Monkey) to session with her, and sometimes we have this friend "participate" in the art directives--that is, the client will do the exercise for Monkey. Monkey's art is usually more revealing than hers.
You can probably already see where I am going with this...
Here's the thought
In my "Human Development" class tonight, we were talking about how transitional objects function in attachment theory, especially in the context of children. When I was a child, my transitional object was the TY Beanie Baby Tiny the Chihuahua. I slept with her every night and carried her everywhere. Having her created a sense of security and comfort. Everyone in class shared our childhood objects, and all of us, one way or another, had moved on from it.
Transitional objects are called that because they help children transition from using mom/caregiver as a "secure base" (if mom/caregiver and child have healthy attachment, child feels more comfortable socializing with strangers or having new experiences while mom/caregiver is present) to using the object as that base. Eventually, we socially develop to not need the "secure base" at all, and so we grow out of needing the thread-bare blanket or the stuffed dragon your uncle gave you.
HOWEVER, many adults continue to have transitional objects to help manage anxiety. In fact, I've been in PHP programs where they are encouraged. I carried around a stone that said "May the Force be with you" on it for a while, which I fidgeted with for grounding and read for encouragement. For some people, their car is that object. Doing some reading, a phone can serve that purpose, even.
As I was doing some (very light) research on the transitional objects of adults, I also noticed that "photographs" and "documents" were mentioned. While these are still physical objects, I imagine the idea of them is more comforting than the actual print or paper. (I would love to know if anyone has thoughts about this from personal experience.) Another thing that interested me was that pets have been characterized as transitional objects within literature. The connection you have with an animal can be comforting in a similar way. Personally, I am not sure how I feel about that (my dog is not an object!), but this implies that transitional objects could have value that transcends their physicality.
That is, if ideas and relationships can be the meaning behind a transitional object, how are blorbos not transitional objects?
What do we do with our blorbos?
We:
Think about them, which provides distraction and comfort
Carry images of them (our blogs, camera rolls, plushies, stickers, even tattoos) because looking at them brings us positive feelings
Make them our secure base--We can potentially feel more comfortable socializing if they are "present" (in the conversation)
Put them in situations! And sometimes these situations reflect things we struggle with ourselves (for me, this was Squall and Laguna's estrangement in Chaos Theory)
And many of us will think about our blorbos in situations before we fall asleep to help us drift off!!!
Personally, if I am emotionally dysregulated, I will often go into my little fanfiction world, and it helps me calm down. I 100% do this before sleep, almost every night. And Squall has served as a secure base for me to explore art/writing, time and time again.
And now thinking back, when I really embraced Squall as my blorbo, the conditions were right to make me seek a transitional object. I was 11 and had just moved 30 minutes away from my childhood home. It was a big change for me, where I lost most of what I knew, including my friends. I felt isolated and insecure in this new unknown place. It was then that I played FFVIII myself and it really helped me adjust to the new environment and feel more stable... because Squall is my transitional object!
Bonus Observation
Where do we talk about our blorbos? This hellsite. What else do we all have on this hellsite? Anxiety (or some form of ND). Honestly, do you know a person with a blorbo who is neurotypical?
I think as adults it is hard to find a physical socially acceptable transitional object--so when we are facing a lot of anxiety, we use media as an in-our-pocket source of comfort.
Conclusion
I think a blorbo can and does serve many of the functions of a transitional object, especially in terms of self-soothing. A blorbo, just like a transitional object, provides a secure base for exploration, emotional regulation, and comfort enough to induce sleep.
My planned thesis for my graduate program capstone is all about how obsessing over a piece of media can be a pathway for healing (that's not exactly the thesis, just shorthand), and this is just another lens to understand the person-media relationship through.
I am curious to know if this resonates or if I am just extra weird. I am making a lot of assumptions above about what is "normal" for a fandom person on Tumblr. If I was to really look into this, I'd have to conduct interviews to see how other people use/see their blorbos.
I have a lot more research to do about attachment theory and transitional objects. There may be a concept that means a "transitional idea" as opposed to a physical object. I am also curious what this means in the context of hyperfixation.
Whether or not a blorbo is generally a transitional object for us fandom people, Squall is absolutely a transitional object for me.
(I have been so stressed about this class and I have a free hour and what do I do? I write an essay about developmental psychology anyway... smh.)
7 notes · View notes
izicodes · 1 year ago
Text
Tumblr media Tumblr media
Wednesday 6th March 2024 - [ Week 1 Day 4 ]
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.
What I learnt today:
🩵 Defining Functions 🩵 Invoking Functions 🩵 Return Statements 🩵 More on Return Statements 🩵 Return Values 🩵 Returning NULL 🩵 Parameters 🩵 Multiple Parameters 🩵 Default Parameters 🩵 Pass By Reference 🩵 Variable Scope
Tumblr media
💌 Day 4: What has been easy so far from learning PHP?
Like I said in yesterday's post, learning the basic fundamentals is fair easy because most programming languages start off the same~!
[ The challenge ]
Tumblr media
26 notes · View notes
phptrainingtipsandticks · 2 years ago
Text
What are the 4 built in functions in PHP?
Tumblr media
PHP comes with a wide range of built-in functions that cover various tasks and operations. It's challenging to narrow them down to just four, but here are four commonly used built-in functions that provide essential functionality in PHP:
echo() and print()
echo() and print() are used to output text and variables to the browser.
echo() is more commonly used and can output multiple values separated by commas.
print() is similar to echo() but only takes one argument and returns 1 (true) after printing.
count()
count() is used to count the number of elements in an array or the properties in an object.
It returns the number of elements or properties.
strlen()
strlen() calculates the length (number of characters) of a string.
It returns the number of characters in the string.
date()
date() is used to format and display the current date and time.
It takes a format string as an argument and returns the formatted date and time.
These functions provide basic yet essential functionality for various tasks, such as outputting content, counting elements, calculating string lengths, and formatting dates. However, keep in mind that PHP has a vast number of built-in functions to handle a wide variety of tasks, ranging from data manipulation and arrays to file handling, database interaction, and more.
0 notes
dubaiwebsitedesignss · 5 days ago
Text
What Is The Difference Between Web Development & Web Design?
In today’s world, we experience the growing popularity of eCommerce businesses. Web designing and web development are two major sectors for making a difference in eCommerce businesses. But they work together for publishing a website successfully. But what’s the difference between a web designers in Dubai and a web developer?
Directly speaking, web designers design and developers code. But this is a simplified answer. Knowing these two things superficially will not clear your doubt but increase them. Let us delve deep into the concepts, roles and differentiation between web development and website design Abu Dhabi.
Tumblr media
What Is Meant By Web Design?
A web design encompasses everything within the oeuvre of a website’s visual aesthetics and utility. This might include colour, theme, layout, scheme, the flow of information and anything related to the visual features that can impact the website user experience.
With the word web design, you can expect all the exterior decorations, including images and layout that one can view on their mobile or laptop screen. This doesn’t concern anything with the hidden mechanism beneath the attractive surface of a website. Some web design tools used by web designers in Dubai which differentiate themselves from web development are as follows:
● Graphic design
● UI designs
● Logo design
● Layout
● Topography
● UX design
● Wireframes and storyboards
● Colour palettes
And anything that can potentially escalate the website’s visual aesthetics. Creating an unparalleled yet straightforward website design Abu Dhabi can fetch you more conversion rates. It can also gift you brand loyalty which is the key to a successful eCommerce business.
What Is Meant By Web Development?
While web design concerns itself with all a website’s visual and exterior factors, web development focuses on the interior and the code. Web developers’ task is to govern all the codes that make a website work. The entire web development programme can be divided into two categories: front and back.
The front end deals with the code determining how the website will show the designs mocked by a designer. While the back end deals entirely with managing the data within the database. Along with it forwarding the data to the front end for display. Some web development tools used by a website design company in Dubai are:
● Javascript/HTML/CSS Preprocessors
● Template design for web
● GitHub and Git
● On-site search engine optimisation
● Frameworks as in Ember, ReactJS or Angular JS
● Programming languages on the server side, including PHP, Python, Java, C#
● Web development frameworks on the server side, including Ruby on Rails, Symfony, .NET
● Database management systems including MySQL, MongoDB, PostgreSQL
Web Designers vs. Web Developers- Differences
You must have become acquainted with the idea of how id web design is different from web development. Some significant points will highlight the job differentiation between web developers and designers.
Generally, Coding Is Not A Cup Of Tea For Web Designers:
Don’t ever ask any web designers in Dubai about their coding knowledge. They merely know anything about coding. All they are concerned about is escalating a website’s visual aspects, making them more eyes catchy.
For this, they might use a visual editor like photoshop to develop images or animation tools and an app prototyping tool such as InVision Studio for designing layouts for the website. And all of these don’t require any coding knowledge.
Web Developers Do Not Work On Visual Assets:
Web developers add functionality to a website with their coding skills. This includes the translation of the designer’s mockups and wireframes into code using Javascript, HTML or CSS. While visual assets are entirely created by designers, developer use codes to implement those colour schemes, fonts and layouts into the web page.
Hiring A Web Developer Is Expensive:
Web developers are more expensive to hire simply because of the demand and supply ratio. Web designers are readily available as their job is much simpler. Their job doesn’t require the learning of coding. Coding is undoubtedly a highly sought-after skill that everyone can’t entertain.
Final Thoughts:
So if you look forward to creating a website, you might become confused. This is because you don’t know whether to opt for a web designer or a developer. Well, to create a website, technically, both are required. So you need to search for a website design company that will offer both services and ensure healthy growth for your business.
2 notes · View notes
knightinkosherarmour · 7 months ago
Text
Post Human Studies: The Unreal State
This week, students, we return to the concept of Post Human Polities - PHP - as opposed to Post Human Species - PHS - as established in our previous lecture on the Progress Cult. As loathe as I am to bring up the maniacs behind the Progress Cult, if you can all forgive my editorializing, today's lecture deals with one of their successor PHPs, the Unreal State. The Unreal State most likely has deep ties to the social thought behind the Progress Cult which was Anarchoacademic Liberism.
For reasons you will come to understand, I hope, most of today's statements regarding the Unreal State must be coached in uncertainties. First however, let us discuss and attempt if not to define than circle a definition for Anarchoacademic Liberism. Anarchoacademic Liberism is an attempt at a revival of old Earthen ideologies of futurism and anarchism as understood by the Provost Major of the Progress Cult. To his understanding, anarchism was simply abolishing any and all social taboos and understandings as well as abolition of most state functions and futurism was putting ultimate faith in any and all new emergent technologies regardless of ethics behind them. As a student of Earthen and Human philosophies and ideologies, I must question where the Provost Major gained his understanding. The Provost Major thusly structured what remained of the Progress Cults state apparatus after various academic institutions supposing they would be best at encouraging the acquisition of information.
After the Applied Military Theories and the dissolution of the Progress Cult's holdings following the Provost Major's death, one of the break away polities was the Unreal State. The Unreal State was like many other successors to the Progress Cult, charismatic leaders putting their own spin on Anarchoacademic Liberism. However, the Unreal State took it one step forward, and began an assault against the very fundamental laws of reality.
This is now where things will have to enter supposition. Everything after this is conjecture. There are three possibilities to what the current Unreal State is.
The first is this, there is a pocket of space in what was once a Progress Cult controlled system once was. The Unreal State as much as it exists exists there, in space that no longer follows the same rules, if any, as the rest of reality if the space follows any rules at all. The Unreal State has managed to create a rupture in reality that in a system whose name can no longer be recorded on any form of media, believe me experts in the field of memetic hazardous storage have tried. Now that we have established that Unreal State now lies entirely within this rupture and potentially other ruptures comes the questions of those people who claim to be from the Unreal State. Those individuals we met claiming to be Citizens of the Land That Isn't and are displaying high levels of universal dissociation are from this Unreality and seek to spread its dissolution of reality with a fever that rivals adherents of the Green Orthodox Bible. Attempts to enter these gaping holes in reality, which now include what once was Mercury of the Sol System, more or less than resounding failures with to this dates no contact being able to be established or return trips emerging.
The second is this there is a pocket of space in what was once a Progress Cult controlled system once was. The second possible explanation is that these ruptures in space time are actually more akin wormholes, portals to a place we do not yet understand where only those who have spent long periods exposed to the Unreal State can survive, or those become citizens there. We have heard reports from surviving Citizens that have return that the state is engaged now and not just the war against the very fabric of reality but against those that maintain it and those beyond the veil. They claim knowledge of Cthulhiods, named after the Old Earthen Occultist’s Erotic Creation’s writing, and other creatures of the firmament such as Angels of Vangel. These citizens that they alone of humanity take the war for liberation to new fronts, they fulfill the work in words promised by humanity for years before. Whoever is part of this work they have emerged to changed, part of the universal disassociation is that in parlance some of you might laugh at they seem to clip through objects that were steady as possible they no longer react in the right ways on a physiochemical level to external interactions. Most worrisome part of this is that this does not seem to be isolated and is capable of spreading it is how Mercury once a famed center of medical research was dissolved and in the place where it once rotated now is a gaping Mall visible through the solar system at all times. It has made Earth's first colony Venus, turn itself into a fortificated world and reinforce the paranoia in isolation of the Martian gardeners. That of the four cradle worlds of mankind, on has been lost already, is a portent of doom.
The third is this there is a pocket of space in what was once a Progress Cult controlled system once was. This one is the most comforting one to me, all individuals claiming to be from the Unreal State are charlatans and delusional. The Unreal State does not in any form exist and it is merely a galactic Boogeyman. That all previous suppositions can be simply explained away through a clever trick of the hand and a heavy heavy dose of ignorance. This however is the least likely.
The one confirmed fragment I have found consistent is this.
"In the Unreal State, the whole of the law is this: There shall be no Law, neither against murder nor that yoke of gravity, and to oppose all other laws shall be your duty."
Even speaking of the Unreal State is fraught with the fact almost nothing is confirmed there are many suppositions many ideas of things that could be known but in the end what is confirmed is a little more than dust in the wind. I hope against hope to whatever deities that there truly are if they are benevolent in this world, that the Unreal State is simply a fiction of already unstable cultists. For the consider anymore of what it's potential truths imply makes me jealous of those with cybernetic implants who may cleanse their mind.
Now students, if any of you here are truly real or here, the lecture is over. Class dismissed. I hope to see you in some form again soon. I need a drink of coffee. Is this still recording?
5 notes · View notes
dumbfinntales · 3 months ago
Text
Goddamn AI feels like cheating. I remember I had a course in my school where we learned making a website. HTML, CSS, PHP and all that jazz, and I remember how painstaking it was to get everything to work. But ooohh, nothing boils my blood like trying to place elements, especially divs. It took me some time to get my website done, but it was simple. Amateurish looking yeah, I am a student after all.
But now? We have a course on AI, because of course there is. We were tasked to use some AI tool to create a simple website and just test it. I "created" a fully functioning restaurant menu with a button to remove items from the list, in like 10 minutes. And the worst part? It looks alright. I know if I had done all this myself from scratch it'd have taken me hours. Just tell an AI to do it and it's done in ten minutes.
Of course it'll take a lot more work to make it look professional and getting more complicated functionality, but what the AI created in 10 minutes looks eerily close to something I made myself in two weeks.
3 notes · View notes
tomblomfield · 3 months ago
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:
Tumblr media
And the recipe step-by-step view:
Tumblr media
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:
Tumblr media
This should really be identical to list recipes by tag, but Windsurf has implemented them separately.
Recipes by tag:
Tumblr media
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:
Tumblr media
My carousel:
Tumblr media
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.
Tumblr media
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
cerulity · 4 months ago
Text
Common Things Vulnerable to Y2K38 (+ Explanation)
I want to compile a list of things I find that are vulnerable to the Y2K38 bug. If you find any I don't know about, I can add them to the list. But first, an explanation...
What is Y2K38?
For those that aren't aware, past January 19, 2038 at 3:14:07 UTC (2038-01-19T03:14:07Z), the number of seconds since midnight of January 1, 1970 (1970-01-01T00:00:00Z) will surpass 2^31 - 1.
So what are the implications of this? It has to do with how computers store time.
The Unix epoch is defined as the number of seconds since January 1, 1970, and this is universal to both Unix and Windows systems (so virtually every single computer that doesn't have a homemade operating system). The issue is what specific types of numbers are used to store the epoch.
There are two properties to an integer type: size and sign. The size dictates how many bits a number can hold, and the sign dictates whether or not the integer can store negative numbers. If the number is unsigned, it will be able to store numbers ranging from zero to 2^n - 1, where n is the size of the integer in bits. This means that an 8-bit unsigned number can hold numbers ranging from 0 to 255, because 2^8 - 1 is 255. If a number is signed, the positive range is cut in half. Signed numbers range from -2^(n - 1) to 2^(n - 1) - 1. This means that an 8-bit signed integer can hold numbers ranging from -128 to 127, as -2^7 is -128, and 2^7 - 1 is 127. As integers are used to store the Unix epoch, this means that the epoch is limited to the range of the integer type you use to store it.
If you decide to use a 32-bit signed integer to store the Unix epoch, then once the epoch reaches 2^31 - 1 (which is the upper limit of 32-bit signed integers and is around 2.1 billion), the epoch won't be able to increase anymore. So what happens when we try to increase it anyways? We get an integer overflow.
Due to how CPUs add numbers together, when the result of an operation is larger than the range of the integer type, the result is wrapped around. For example, if you have the number 127 in an 8-bit signed integer, adding one will wrap around to -128! This is a problem for the epoch, because now, instead of storing 2.1 billion seconds past January 1, 1970, it will now be storing 2.1 billion seconds before 1970, which goes all the way back to December 1901!
So why not just use a bigger number? Well, it's not really that simple. There has been an effort to switch over to 64-bit integers, which has an overwhelmingly generous range of around 21 times the estimated age of the universe. However, there are some systems that just can't change or haven't changed for a variety of reasons, and this is what the list will be about. There are two main causes for the Y2K38 bug, and most vulnerabilities stem from them:
32-bit representation of of time_t: time_t is the integer type that time is stored in. When a C program calls the time() function, it will receive a time_t. If time_t is 32-bits long, then the time() function will be vulnerable.
Downcasting the result of time(): There's a pattern in programming I like to call "int-defaultness". C's primitive types are not named with sizes. Instead, they are called 'char', 'short', 'int', and 'long'. These types are standardised to be at least 8 bits, 16 bits, 32 bits, and 64 bits respectively, but most platforms just use those sizes exactly. Usually, you would use exact-sized types like int16_t, uint64_t, and so on, or if it's a function like time(), you would use time_t. However, it is a common pattern to default to int as an integer type, and someone who isn't careful may just convert the result of the time() function into an int. This is known as downcasting, which is the conversion from one integer type to a smaller one. Regardless of whether or not time_t is 32 bits or 64 bits, this downcast will always convert the time to 32 bits, and the overflow behaviour will apply, leaving PHP vulnerable.
As you can see, the time() function is the root cause of the bug, and due to its popularity, usages and mimics of time() can be left vulnerable.
So, without further ado, here is...
The List of Vulnerabilities
PHP time() function: PHP has a time() function that acts very similar to C's, and if the size of a PHP int is 32 bits, PHP is left vulnerable.
pcap file format: The pcap file format (used by libpcap, which is used by utilities like tcpdump and Wireshark) is a format for storing captured packets, and the specification states that the timestamps of packets must stored in a 32-bit unsigned integer. Luckily, since it is unsigned, this will overflow in the year 2106, but there is still some vulnerability here. The PcapNG file format uses 64-bit timestamps, which prevents the vulnerability.
Embedded systems: Smaller computers have a tendency towards lower bit-widths, and 32 bits is common. Embedded systems control things like radios, elevators, GPSes, and more things that don't require heaps of computation power. These systems commonly define time_t to be 32 bits, making them vulnerable.
2 notes · View notes