10 interesting stories served every morning and every evening.

1 2,016 shares, 82 trendiness

Google is shutting down Stadia

/ Sign up for Verge Deals to get deals on prod­ucts we’ve tested sent to your in­box daily.


Read the original on www.theverge.com »

2 1,985 shares, 82 trendiness

Someone is pretending to be me.

On September 14, 2022 I got an email from some­one that reeked eerily of a scam, but it turned out to be quite real. The full text is be­low.

So I was about to toss this in the trash, but it had a word doc­u­ment at­tached. Thankfully I’m not sit­ting on a Windows ma­chine and can just pre­view the doc­u­ment via Google with­out a fear of in­fect­ing my­self.

So I pre­viewed the doc­u­ment and it was scary. It was a doc­u­ment in­tended for some­one to have a cheat sheet for an in­ter­view on how to act as me.

* It in­cluded a sub­set of my per­sonal in­for­ma­tion.

* It in­cluded a fake email/​ad­dress that was near” mine.

* It in­cluded in­for­ma­tion about the com­pany in­ter­view­ing for.

The more I read this doc­u­ment - the more creepy it felt. Someone went to the ef­fort to ex­tract tons of true in­for­ma­tion from my avail­able sources and build a fake pro­file of me.

* They cre­ated an email that just tossed a 2 at the end of my le­git­i­mate one.

* They picked an ad­dress of a house that is for sale in Tampa.

So I emailed the guy back that sent this to ask for more in­for­ma­tion. The ex­change went like:

So I had all in­for­ma­tion to join this in­ter­view that the fake Connor Tumbleson would have joined. So I did.

I joined the Zoom call early and the client thank­fully ad­mit­ted me quickly. I ex­plained as quick as pos­si­ble that while I was the real Connor - I was not ap­ply­ing for this job.

I tried to ex­plain how the in­di­vid­ual who was hired to im­per­son­ate me had a great set of morals and for­warded this all to me. I was ask­ing for all the in­for­ma­tion this em­ployer had on the fake me when the story got even weirder.

Another Connor Tumbleson joined the call and was stuck in the meet­ing room. The gen­tle­man of this com­pany was frankly amaz­ing and al­lowed me to change my name, turn off my video and tweak my avatar and stay on the call.

So the in­ter­viewer ad­mit­ted en­try to a new per­son who then spoke with an ac­cent I could not place. The in­ter­viewer kicked off the in­ter­view and asked this in­di­vid­ual to ex­plain a bit about him­self.

This im­poster for the next 2 min­utes pro­ceeded to read the same doc­u­ment, that I was leaked, say­ing things word for word as well as say­ing his name was Connor Tumbleson. This was a dif­fer­ent per­son hired to im­per­son­ate me than who reached out to me. My guess the orig­i­nal per­son de­clined and this just got passed to a dif­fer­ent per­son.

I could not stand this any­more lis­ten­ing to some­one le­git­i­mately claim they were me while us­ing my photo, name and hard earned achieve­ments. So I turned on my cam­era, re­named my­self back and asked the in­di­vid­ual what the hell they were do­ing.

So I spoke a few more min­utes with this in­ter­viewer thank­ing him for go­ing along with it. I then learned this was a in­ter­vie­wee dis­cov­ered through Upwork - so I asked for all the proof and con­tin­ued my in­ves­ti­ga­tion.

The com­pany who my im­per­son­ator ap­plied at reached out and pro­vided all the im­ages above as well as re­port­ing this ac­count to Upwork.

So with this dis­cov­ery - I found the fake Upwork of my­self. This was creepy as it in­cluded some jobs I worked and some that were made up. It was like my ac­tual re­sume with some made up boosted traits. It did have my real Laravel cer­ti­fi­ca­tion so my guess is some­one just ex­ported a data-set of me from LinkedIn.

So it seemed like I was start­ing to un­der­stand the pic­ture now.

* They ap­ply to jobs in hopes to get an in­ter­view us­ing that fake pro­file.

* They find sus­pect­ing vic­tims on GitHub who are will­ing to go along with this.

* That per­son uses the iden­tity of some­one else to land the job.

I’m not sure how this ac­tu­ally pans out if it works. Can you re­ally refuse to use video for the en­tire con­tract of the job? How do you get paid if you need to sub­mit tax doc­u­ments? Do you pre­tend to be me for­ever?

So it was time to in­ves­ti­gate fur­ther. Who or what was be­hind this pro­file?

However, be­fore I did that. I wanted to child­ishly email the ad­dress of the per­son im­per­son­at­ing me.

The re­sponse I got I’m not sure how to re­act - an apol­ogy for as­sum­ing my iden­tity which is ab­solutely in­sane. You could just make up pro­files and use AI gen­er­ated im­ages, but us­ing my real photo and in­for­ma­tion and GitHub is far be­yond sorry”.

This next part of this post is all in part thanks to the in­di­vid­ual who passed on the de­tails to me and it only gets cra­zier. I got writ­ten ap­proval from Andrew (The Individual) to show his name/​photo unredacted. He blogs at un­fool­ing.com and may have a post up about this as well.

If you put on the shoes of Andrew. You would have been reached out to by a per­son us­ing a fake pro­file, name and email. They would be look­ing for a busi­ness part­ner with a very generic doc­u­ment in hopes to at­tract you to join af­ter a bit of small talk.

This in­di­vid­ual was in­ter­ested and that led to a doc­u­ment be­ing sent along af­ter con­sid­er­ing to ac­cept this po­si­tion.

This doc­u­ment spells out some weird be­hav­ior be­tween the lines and lacks any of­fi­cial busi­ness do­main, email or logo. Especially paired with a generic Google email ad­dress and a phone num­ber that re­solves to the Embassy in Panama does not seem right.

So Andrew like most po­ten­tial hires has some valid ques­tions be­fore jump­ing into this op­por­tu­nity.

I’m redact­ing the sites pro­vided for the sole rea­son that I can’t con­firm if they were ac­tu­ally de­vel­oped by this com­pany and don’t want to loop them into some­thing in­cor­rectly.

1/3 of the com­pa­nies re­sponded and claimed PND did not build their web­site nor had they ever heard of them. So I be­lieve this is a never end­ing web of lies.

What we do learn from this email is the web­site of the com­pany it­self - PND Design. So we take a look at their web­site and it does­n’t ap­pear to look that great.

So I con­tinue to go back in his­tory on Archive Machine un­til I find a change to the site de­sign.

This gives me an older com­pany name of PND Developing” which fi­nally gets me some re­sults on the web. It seems be­cause the web­site says Madison, Wisconsin and so does the LinkedIn page and the do­main matches - we found the right page.

So re­cap­ping - we have a busi­ness in Wisconsin, a phone num­ber in Panama with a generic Gmail. However, we do have a pro­file as­so­ci­ated with this com­pany and that led on quite the dis­cov­ery mis­sion.

We can find Plamen Dimitrov who ap­pears as­so­ci­ated with PND Design on LinkedIn and the name of this in­di­vid­ual looks pretty close ini­tial wise with PND. This en­tire thing could be lies on lies - so maybe even that can’t be trusted. However with the ini­tials in the Slack chan­nel be­ing PND we might as well in­ves­ti­gate. This in­di­vid­ual has a web­site as­so­ci­ated with him­self and this leads me to see an eerily re­la­tion be­tween the sites.

This in­di­vid­ual is as­so­ci­ated with a per­sonal site and a com­pany site that uses the ser­vices of two other sites that all act with sim­i­lar fea­tures and bro­ken de­signs. It looks like the se­cu­rity en­hance­ments of web browsers in the past few years have not been patched on these web­sites.

So we now have the fol­low­ing sites as­so­ci­ated with this and I can say with pretty good gut cer­tainty these are built/​hosted/​con­trolled by the same party.

You can re­verse those sites to find a cou­ple hun­dred of do­mains on that IP, then cross-check the list against match­ing Google Analytics IDs and find al­most 50 do­mains.

I clicked on one of the do­mains and it ac­tu­ally loaded - which was a sur­prise af­ter the four sites above not re­ally do­ing too well.

It seems I’ve found the pat­tern of in­stalling WordPress with an odd set of plu­g­ins. I’m not sure what the ob­ses­sion with no right click­ing is. So now we can con­tinue to find more web­sites built by this com­pany.

If we jump back to my sit­u­a­tion with this - we can look back at the in­di­vid­ual Andrew stuck in the mid­dle of this who still had some doubts with this job. He pro­ceeds to ask an­other ques­tion.

Getting a re­sponse from Maris” of:

This is a valid ques­tion with a non an­swer. No where in this re­sponse do I see why you have to pre­tend to be an­other de­vel­oper in or­der to do your job. There are plenty of busi­nesses that have a pro­ject man­ager in the states that sim­ply act as the com­mu­ni­ca­tion layer be­tween an off­shore de­vel­op­ment team and that could have been an ac­cept­able busi­ness model.

My guess is this be­comes the dif­fer­ence of hir­ing a per­son in­stead of a com­pany. Perhaps the con­tract jobs on Upwork are eas­ier to ob­tain with one sin­gu­lar per­son mas­querad­ing as an en­tity than an en­tire com­pany ap­ply­ing to han­dle some con­tract job.

So Andrew de­cides to go for­ward with this and ob­tains an in­vite to a Slack chan­nel where we im­me­di­ately see how crazy this story gets.

We can see PND is talk­ing and show­ing an ex­am­ple of what Andrew might have to do. The link was ac­tive at the time of my re­search and this in­ter­view oc­curred on February 28, 2022.

The ini­tial reach out to this in­di­vid­ual came from Maris. So this is crazy - PND cre­ates emails im­per­son­at­ing en­gi­neers then uses those emails to at­tract more folks to join their com­pany. I do won­der why Andrew did­n’t im­me­di­ately bounce at mul­ti­ple points dur­ing this, es­pe­cially when you re­al­ize the per­son you were re­cruited by gave you a fake name.

So am I ex­pected to be­lieve this com­pany is us­ing my name and fake email to at­tract more in­di­vid­u­als? I at­tempted to get this email ac­count re­moved, but then I re­al­ized that was a use­less en­deavor - no way Google would get in­volved in the drama of de­cid­ing what is im­per­son­ation or not.

So if we look at time­stamps - Andrew joined the Slack chan­nel around 9am on September 14, 2022. Around lunch the as­sumed leader known as PND be­gins to ask this in­di­vid­ual if he is will­ing to take the in­ter­view as fake me that same day. This is the same in­ter­view I ended up join­ing for real along­side an im­pos­tor.

It ap­pears this job ended for Andrew. While he thought he was be­ing brought on to de­velop - he was just go­ing to be an English speak­ing in­di­vid­ual to as­sume iden­ti­ties & roles of oth­ers.

This is a di­rect lie from what we saw in the ini­tial email from PND. It was ex­plained that you would assume the role of our de­vel­op­ers”. The im­por­tant word is here our” - I am not a de­vel­oper with this com­pany, yet my pro­file was be­ing used.

A fake Connor did end up join­ing the in­ter­view, al­beit late, who was not the in­di­vid­ual pic­tured above. So my guess be­tween 1:23pm and 5pm PND got to work to find an al­ter­na­tive per­son to as­sume my iden­tity which was prob­a­bly some­one in that Slack team.

Unfortunately for us the in­di­vid­ual who joined the Zoom in­ter­view im­per­son­at­ing me left im­me­di­ately when con­fronted about ly­ing, so noth­ing else could be learned from this.

So we can see the 35 mem­bers in this Slack, but I don’t feel com­fort­able post­ing that list. I have no idea who is real or fake and who may be work­ing for this com­pany un­aware of what is ac­tu­ally hap­pen­ing.

So I sent an email to two of them af­ter I found them on LinkedIn to fur­ther help in­ves­ti­gate this. One im­me­di­ately re­sponded un­aware of this be­hav­ior oc­cur­ring and left the group.

I do know there is an ex­treme amount of care from the as­sumed leader PND to not ex­pose them­selves who has not once used a real set of in­for­ma­tion or doc­u­ments when talk­ing to Andrew.

All par­ties are given only the in­for­ma­tion to com­plete their part of this scheme. I say this be­cause you don’t even know the com­pany you are in­ter­view­ing with - PND only gives you the name of the in­ter­viewer. Thankfully the Zoom link in the fake Connor Tumbleson in­ter­view leaked the com­pany in­volved.

This helps piece to­gether those odd in­ter­views some cowork­ers de­scribed to me when the in­ter­vie­wee has no idea what the pur­pose of the meet­ing is or com­pany. I’m start­ing to piece to­gether a huge scheme that prob­a­bly oc­curs in way more places than this Slack.

It ap­pears Maris was in Notion in­stead of Google Docs and I can not find the client as­so­ci­ated with that in­ter­view. I only have a generic in­ter­viewer name to go from. So if you hired a Maris in February 2022 - you may want to dou­ble check who you ac­tu­ally hired.

My guess since PND holds the fake Gmail ad­dresses - they may or­ches­trate every­thing be­tween Upwork, fake per­son and the client while the hired hand just at­tends meet­ings to be a voice.

So at least two peo­ple had their iden­tity as­sumed in hopes to ob­tain a job in my brief re­search. At this point I did the fol­low­ing:

* I emailed the in­di­vid­ual who pro­vided these pho­tos/​re­search ask­ing for per­mis­sion to post this with name.

* I emailed all three busi­nesses this com­pany claimed they built to ob­tain more in­for­ma­tion.

* I emailed two users from the Slack who I guessed may be in a sim­i­lar sit­u­a­tion af­ter find­ing on LinkedIn.

* I emailed the real Maris to loop them into this sit­u­a­tion.

* I re­ported the fake Upwork of me.

* I called the as­sumed owner of PND Design and left a voice­mail af­ter no one picked up.

Who knows how many jobs out there were ob­tained from an in­di­vid­ual im­per­son­at­ing some­one else. It seems scary still to think that some­one is us­ing my name, pro­file and achieve­ments to con­vince com­pa­nies to hire a fake it­er­a­tion of me. For that sole rea­son - I will not give up on my re­search.

* September 15, 2022 - Upwork re­moves the im­per­son­ator of me.

* September 16, 2022 - Person from Slack team I emailed re­sponds and an­nounces leaving the slack”.


Read the original on connortumbleson.com »

3 1,333 shares, 56 trendiness

The Smartest Website You Haven't Heard of

Most peo­ple I know haven’t even heard of it, but mc­mas­ter.com is the best e-com­merce site I’ve ever used.

McMaster-Carr is an in­dus­trial sup­ply com­pany. They sell nuts, bolts, bush­ings, bear­ings — pretty much any­thing an en­gi­neer needs to build stuff. I’ve pur­chased from them dozens of times over the past few years, both for per­sonal and school pro­jects.

But what makes their web­site so great? And why should an in­dus­trial sup­ply com­pany have the best e-com­merce site on the in­ter­net?

mc­mas­ter.com is great be­cause it does what it needs to, and noth­ing else.

First, let’s look at the vi­sual de­sign of the site. Minimal, mostly grayscale, with ac­cents of green and yel­low. There are no pop­ups, an­i­ma­tions, ban­ners, carousels, or videos — just a calm, sta­tic page with cat­e­gories and a search bar. Even the im­ages are grayscale, to avoid in­ad­ver­tently catch­ing your eye.

It’s not the most vi­su­ally stun­ning site, but that does­n’t mat­ter here - McMaster has cho­sen func­tion over form.

A user’s goal when they visit McMaster-Carr is to find their part as quickly as pos­si­ble. The web­site is de­signed en­tirely around that fact. Users rarely come just to browse, so there are no AI rec­om­men­da­tion al­go­rithms, fea­tured prod­ucts, new ar­rivals — that does­n’t make sense in this con­text. People visit McMaster-Carr with high in­tent to buy a spe­cific part, that’s it.

So how do we get from the 700,000 prod­ucts in their cat­a­log down to one part? Here’s what I do.

McMaster shows me sev­eral sub­cat­e­gories: hex head, socket head, set screws, etc. I’m look­ing for socket head, so I se­lect that one. Now I move my at­ten­tion to the left nav bar, which shows me sev­eral fil­ter­ing op­tions. Bolts are com­monly spec­i­fied by their thread size (e.g. 1/4″-20), and their length. I’m look­ing for a 1/4″-20 x 1″ bolt, mean­ing that the bolt’s di­am­e­ter is 1/4″ and its length is 1″, so I se­lect these fil­ters.There are over a dozen other fil­ters, such as ma­te­r­ial, hard­ness, and head size. Once I’ve ap­plied enough fil­ters, The main search win­dow shows in­di­vid­ual items, rather than sub­cat­e­gories. Here I can se­lect an item and add it to cart.

McMaster’s search in­ter­face is the main rea­son for its de­sign su­pe­ri­or­ity. Everything on this page is de­signed to get you to your part as quickly as pos­si­ble. The fil­ter sec­tions are sim­ple and el­e­gant, pro­vid­ing schematic il­lus­tra­tions when nec­es­sary. The il­lus­tra­tions are al­ways sim­pli­fied to con­vey only rel­e­vant in­for­ma­tion, as to not dis­tract you from the fo­cus of your search.

Results pages also show help­ful drop-downs which ex­plain the parts you’re look­ing at. It’s like an en­gi­neer’s hand­book and cat­a­log in one. Engineers are of­ten look­ing up ter­mi­nol­ogy on the fly any­ways, so hav­ing this in­for­ma­tion em­bed­ded into the site saves valu­able time.

McMaster’s fil­ters are not only use­ful for a tar­geted search, but also for de­cid­ing what it is you want. Sometimes I’ll search with only a gen­eral idea of the part I need, and then I’ll use the sub­cat­e­gory de­scrip­tions to de­ter­mine specifics. For ex­am­ple, I may know that I need some type of lock washer, but I’m un­sure which one is best for my ap­pli­ca­tion. I can use the im­ages and de­scrip­tions to de­cide on the right con­fig­u­ra­tion.

McMaster is able to pro­vide such in­tu­itive search­ing and fil­ter­ing be­cause every­thing that they sell is highly leg­i­ble — it’s all de­fined by quan­ti­ta­tive specs. There is noth­ing in­tan­gi­ble to deal with, like brands, prod­uct pho­tos, or other mar­ket­ing fluff. Even still, they do a much bet­ter job than other in­dus­trial web­sites like Grainger , DigiKey , or Home Depot .

As a point of com­par­i­son, Amazon does a ter­ri­ble job of fil­ter­ing items. Amazon has an or­der of mag­ni­tude more prod­ucts on its site, which ad­mit­tedly makes the job a lot more dif­fi­cult. However, even generic fil­ters, like price, suck. I won’t get too far into my dis­dain for ama­zon’s UI de­sign, other peo­ple have al­ready writ­ten too much about it [1] and that’s not the point, but it’s in­ter­est­ing to con­trast McMaster with what every­one sees as the” e-com­merce site.

Take Amazon’s price picker: Why is it two text boxes? Why not a slider? This has al­ways an­noyed me, since it’s much eas­ier for me to drag a slider than to man­u­ally type in my max price. And the quick-se­lect ranges are lit­er­ally the ex­act same no mat­ter the prod­uct. If I search for a pen, nearly every re­sult I want should be un­der $25. If I search for a tram­po­line, every re­sult I want should prob­a­bly be over $200. What the fuck?! I guess this some­how won the A/B test, but I can’t think of a rea­son why.

Finally, one of the most bril­liant parts of McMaster’s prod­uct is that for nearly every part, they have a CAD file that you can in­stantly down­load into your 3D mod­els. Mechanical en­gi­neers mock up de­signs in CAD pro­grams be­fore ac­tu­ally build­ing them, and hav­ing ac­cess to pre-mod­eled parts saves time. (Imagine hav­ing to man­u­ally model all your nuts and bolts.) McMaster even has ex­ten­sions for pop­u­lar CAD pro­grams which al­low you to im­port part files di­rectly, in­stead of us­ing their web­site. This makes en­gi­neer’s lives 10x eas­ier (not to men­tion mak­ing them more likely to pur­chase from McMaster-Carr). The clos­est anal­ogy to this is AR try-on, but that’s not even very ac­cu­rate. The point of AR try-on is to de­ter­mine whether you like the item you’re about to buy, whereas the point of McMaster’s CAD down­loads is to speed up an en­gi­neer’s work­flow. In most cases, they al­ready know which part they need, it’s just a mat­ter of com­plet­ing the CAD model be­fore they can start build­ing the real thing.

Mcmaster.com is nearly per­fect. It’s a web­site that would make Steve Krug smile. My only sug­ges­tion would be to make the search bar on the home page more promi­nent. It’s vi­su­ally over­whelm­ing to comb through dozens of prod­uct pho­tos, so I pretty much al­ways use the search bar to start nar­row­ing down items. The main area of the home­page is ef­fec­tively dead space, while the search bar is rel­a­tively tiny. New users might miss it, wast­ing time.

I de­cided to write about McMaster-Carr be­cause it is so rare to see such care­ful thought go into an in­dus­trial web app, far re­moved from the com­mo­tion of sil­i­con val­ley, web3, D2C, and the other typ­i­cal sub­jects of pixel per­fec­tion.

Mcmaster.com is a prod­uct that un­der­stands its cus­tomer. The min­i­mal, func­tional de­sign al­lows users to find their parts as quickly as pos­si­ble, noth­ing more or less. It’s an un­ex­pected re­minder to not get lost in the al­lure of smooth gra­di­ents, 3D an­i­ma­tions, or slick fonts, and in­stead re­lent­lessly fo­cus on what it is your cus­tomers re­ally want.

If some­thing is 100 per­cent func­tional, it is al­ways beau­ti­ful…there is no such thing as an ugly nail or an ugly ham­mer but there’s lots of ugly cars, be­cause not every­thing in a car is func­tional…some­times it’s very beau­ti­ful, if the per­son who de­signed it has very good taste, but some­times it’s ugly.” [2]

[1] Jeff Bezos is an in­fa­mous mi­cro-man­ager. He mi­cro-man­ages every sin­gle pixel of Amazon’s re­tail site. He hired Larry Tesler, Apple’s Chief Scientist and prob­a­bly the very most fa­mous and re­spected hu­man-com­puter in­ter­ac­tion ex­pert in the en­tire world, and then ig­nored every god­damn thing Larry said for three years un­til Larry fi­nally — wisely — left the com­pany. Larry would do these big us­abil­ity stud­ies and demon­strate be­yond any shred of doubt that no­body can un­der­stand that frig­ging web­site, but Bezos just could­n’t let go of those pix­els, all those mil­lions of se­man­tics-packed pix­els on the land­ing page. They were like mil­lions of his own pre­cious chil­dren. So they’re all still there, and Larry is not.” https://​gist.github.com/​chitch­cock/​1281611


Read the original on www.bedelstein.com »

4 904 shares, 35 trendiness

Make-A-Video by Meta AI

Make-A-Video is a state-of-the-art AI sys­tem that gen­er­ates videos from text.

Make-A-Video re­search builds on the re­cent progress made in text-to-im­age gen­er­a­tion tech­nol­ogy built to en­able text-to-video gen­er­a­tion. The sys­tem uses im­ages with de­scrip­tions to learn what the world looks like and how it is of­ten de­scribed. It also uses un­la­beled videos to learn how the world moves. With this data, Make-A-Video lets you bring your imag­i­na­tion to life by gen­er­at­ing whim­si­cal, one-of-a-kind videos with just a few words or lines of text.

A dog wear­ing a Superhero out­fit with red cape fly­ing through the sky

Bring your imag­i­na­tion to life and cre­ate one-of-a-kind videos

Add mo­tion to a sin­gle im­age or fill-in the in-be­tween mo­tion to two im­ages.

Create vari­a­tions of your video based on the orig­i­nal.

Let us know if you’re in­ter­ested in gain­ing ac­cess to any fu­ture re­leases of our Make-A-Video re­search

Meta AI is com­mit­ted to de­vel­op­ing re­spon­si­ble AI and en­sur­ing the safe use of this state-of-the-art video tech­nol­ogy. Our re­search takes the fol­low­ing steps to re­duce the cre­ation of harm­ful, bi­ased, or mis­lead­ing con­tent.

This tech­nol­ogy an­a­lyzes mil­lions of pieces of data to learn about the world. As a way to re­duce the risk of harm­ful con­tent be­ing gen­er­ated, we ex­am­ine, ap­plied, and it­er­ated on fil­ters to re­duce the po­ten­tial for harm­ful con­tent to sur­face in videos.

Since Make-A-Video can cre­ate con­tent that looks re­al­is­tic, we add a wa­ter­mark to all videos we gen­er­ate. This will help en­sure view­ers know the video was gen­er­ated with AI and is not a cap­tured video.

Our goal is to even­tu­ally make this tech­nol­ogy avail­able to the pub­lic, but for now we will con­tinue to an­a­lyze, test, and trial Make-A-Video to en­sure that each step of re­lease is safe and in­ten­tional.


Read the original on makeavideo.studio »

5 870 shares, 32 trendiness

Outdated vs. Complete

On August 22nd, I got an email out of the blue from Apple that no­ti­fied me that I had a new App Review mes­sage. It was for my app, WorldAnimals, a light-hearted game for guess­ing an­i­mal ono­matopoeia sounds in dif­fer­ent lan­guages.

Usually, you re­ceive a mes­sage af­ter you sub­mit a new ver­sion to the App Store for re­view. The re­viewer has found some­thing wrong and your app is re­jected. The no­tice ex­plains where you have vi­o­lated the App Store Review Guidelines and how you can rec­tify the is­sue to get your app up­date ap­proved. Maybe the app is crash­ing, the re­viewer can’t log in to test, or god for­bid the up­date de­scrip­tion men­tions the evil ri­val mo­bile plat­form–these are all ac­tual rea­sons I have been re­jected by the App Store.

The re­la­tion­ship be­tween de­vel­op­ers and App Store re­view­ers is tense at best. Most peo­ple are try­ing to build well-de­signed, use­ful mo­bile apps. Apple has in­sti­tuted App Store re­views to main­tain a high-qual­ity bar for apps and weed out spammy or ne­far­i­ous ac­tors, us­ing hu­man eval­u­a­tors to test in­di­vid­ual apps and pro­vide di­rect feed­back. However, ma­li­cious apps are rel­a­tively rare; ar­guably, Apple does­n’t do a great job fil­ter­ing them out any­way. So for the vast ma­jor­ity of de­vel­op­ers, App Store re­views add an ad­di­tional layer of fric­tion and time to ship­ping up­dates. And then in the in­evitable case when you need to push out an emer­gency fix for crashes hap­pen­ing to your app users, the App Store re­view process goes from an in­con­ve­nient an­noy­ance to an out­right road­block to im­prov­ing the user ex­pe­ri­ence.

I’ve been around the block, both as an in­die de­vel­oper and a full-time-em­ployed mo­bile de­vel­oper. I have re­leased fun, tiny games like WorldAnimals and pro­duc­tion SaaS mo­bile apps. When I was at Pinterest, I helped in com­mu­ni­ca­tions with our ded­i­cated App Store rep­re­sen­ta­tive who would ex­pe­dite Pinterest app up­dates through the re­view process. I have seen first-hand the lack of sup­port for in­die apps com­pared to the white glove ex­pe­ri­ence that large com­pa­nies get. Suffice it to say, I prob­a­bly have above-av­er­age knowl­edge of how this whole process works.

And still, I was sur­prised to re­ceive an App Review mes­sage. I had­n’t sub­mit­ted a new up­date for WorldAnimals. The app was still work­ing well, with zero crashes and a hand­ful of new down­loads every month. My boss had even shown me last week that he had down­loaded my app on his phone for his daugh­ter–we played the game to­gether dur­ing a work meet­ing and laughed at the silly an­i­mal sounds. In my mind, there was no rea­son I should be re­ceiv­ing a vaguely threat­en­ing mes­sage from Apple’s App Review sys­tem.

Well, it turns out, Apple’s prob­lem with my app was the fact that I was­n’t up­dat­ing it.

I opened the mes­sage and was greeted with the App Store Improvement Notice”. I was es­sen­tially told that I had­n’t up­dated my app in three years and now it counts as out­dated. I needed to up­date the app within 90 days or it would get au­to­mat­i­cally taken down.

The mes­sage I re­ceived from the App Store Review told me my app was oudated”.

Never mind the fact that my app has a 5-star rat­ing and was still be­ing down­loaded, with no com­plaints from any of my users. Also dis­re­gard the fact that I had other highly-rated apps up on the App Store, some of which had been up­dated much more re­cently than July 2019, clearly show­ing that I have not aban­doned these apps en­tirely. If there had been an ac­tual re­viewer who checked my out­dated app, they would have dis­cov­ered that I ar­chi­tected the app from the be­gin­ning to dy­nam­i­cally scale the UI so it re­sizes to fit the lat­est iPhone de­vices. All these could be sig­nals that in­di­cate to Apple that this is not a garbage-filled scam app that is low­er­ing the qual­ity of their App Store.

Many other de­vel­op­ers have com­plained about this dra­con­ian mea­sure. The de­ci­sion to re­move out­dated apps places a dis­pro­por­tional bur­den on in­die de­vel­op­ers and hob­by­ists be­cause they might not have time or re­sources to re­visit these old apps. Just hav­ing an ac­tive Apple de­vel­oper mem­ber­ship costs $99 a year. It feels a bit like ex­tor­tion when the plat­form, which you al­ready paid to pub­lish your app once, is now re­quir­ing you to con­tinue re­new­ing your mem­ber­ship to make that same app stay avail­able.

Beyond the fi­nan­cial cost, what is the most in­sult­ing to me about Apple’s pol­icy is how poorly thought out their mea­sure of quality” is for apps. The mes­sage con­tains two sep­a­rate state­ments about my app: (1) it has­n’t been up­dated in three years, and (2) it does­n’t meet a minimum down­load thresh­old.” Fixing ei­ther of those so-called prob­lems does­n’t mag­i­cally mean my app will be a high-qual­ity, pos­i­tive ex­pe­ri­ence for users.

There is ab­solutely no re­quire­ment for what is con­tained in the app up­date since Apple only states, the app will re­main avail­able if an app up­date is sub­mit­ted and ap­proved within 90 days.” At least in Google’s case, the Play Store re­quires an up­date to their min­i­mum tar­get level API which en­sures that de­vel­op­ers use a newer ver­sion of Android Studio.

The in­ten­tion be­hind Apple and Google’s poli­cies is to force de­vel­op­ers to make sure their apps run suc­cess­fully on the lat­est de­vices and op­er­at­ing sys­tems. Apple claims that the App Store im­prove­ment process will im­prove user ex­pe­ri­ence be­cause keeping apps up to date to con­form with mod­ern screen sizes, SDKs, APIs […] en­sures users can have a great ex­pe­ri­ence with any app they get from the App Store”. But my app was al­ready work­ing cor­rectly, mak­ing this up­date use­less and per­for­ma­tive.

My app was work­ing well even on the lat­est iPhone and iPad de­vices.

Even more frus­trat­ing is that while the app it­self runs fine on all the lat­est end-user de­vices, Apple’s de­vel­op­ment ecosys­tem has changed rapidly over the last three years. My old code sim­ply did not work any­more with the lat­est ver­sions of Xcode. So I had to spend four hours on Saturday up­grad­ing all my plat­form li­braries sim­ply so that I could com­pile the damn app. And all this ef­fort was ul­ti­mately in or­der to just change the build ver­sion num­ber from 1.0” to 1.1”. The UI and func­tion­al­ity re­mained un­changed since it had al­ready been work­ing as in­tended!

And to add in­sult to in­jury, Apple tells me I could have avoided all this pain if my app was be­ing down­loaded above a minimum down­load thresh­old”. The pol­icy is com­pletely silent on what this down­load num­ber needs to be to avoid get­ting flagged as out­dated–is it hun­dreds or thou­sands or hun­dreds of thou­sands of down­loads a month? This seems like an ex­plicit carve-out in the pol­icy for apps with ma­jor mar­ket­ing bud­gets. According to in­dus­try re­search, the to­tal mar­ket­ing spend for app in­stalls is pro­jected to be $61.1 bil­lion in 2022. So it seems like an in­cred­i­bly bad faith ar­gu­ment to claim that a higher down­load rate means bet­ter qual­ity apps. All a higher down­load rate means is that more money was prob­a­bly spent to mar­ket and op­ti­mize app in­stalls.

The over­all mes­sage that this crack­down sends is that Apple does­n’t care about about small and in­de­pen­dent de­vel­op­ers. For in­stance, the App Store could fac­tor in:

* Historical be­hav­ior of the de­vel­oper (ie. up­dat­ing other apps)

* Number of ac­tive ses­sions, es­pe­cially for the lat­est de­vices and plat­form ver­sions

These are all met­rics that the Apple al­ready au­to­mat­i­cally tracks, made avail­able to the de­vel­oper through the App Store Connect por­tal.

App Store Connect shows an overview of your app and in­cludes a va­ri­ety of met­rics, in­clud­ing ac­tive ses­sions and crashes.

The met­rics tab en­ables de­vel­op­ers to break down their app met­rics by de­vice and plat­form ver­sion.

It would be al­most zero cost to Apple to add these ad­di­tional checks to their fil­ter for out­dated apps–af­ter all, the data al­ready ex­ists in their sys­tem. So it does­n’t seem like mere over­sight that the pol­icy ne­glected to use a more nu­anced set of in­puts, it feels like Apple is ac­tively de­grad­ing the de­vel­oper ex­pe­ri­ence be­cause they con­sider us worth­less to their plat­form.

In the end, Apple will al­ways pre­fer the needs of mega-apps that have mil­lions of down­loads since these apps gen­er­ate the bulk of the rev­enue for the App Store. The im­pact of the App Store Improvement pol­icy is nonex­is­tent for VC-funded com­pa­nies. The high-growth apps try­ing to blitzs­cale their way to prod­uct-mar­ket-fit have been churn­ing out reg­u­lar up­dates all along with their mas­sive teams of mo­bile de­vel­op­ers. Small apps and their de­vel­op­ers will need to con­form to the whims of the plat­form or else dis­ap­pear en­tirely–this is and al­ways has been the risk of build­ing soft­ware in­side a walled gar­den.

I wish that the App Stores had a con­cept of a complete” app that does not need fur­ther up­dates. Emilia (@lazerwalker) put it re­ally well by de­scrib­ing cer­tain types of soft­ware as finished art­works”:

Games are not the only type of soft­ware that does­n’t need up­dates. Author Robin Sloan has a won­der­ful tap es­say” named Fish. The app was last up­dated in June 2018, there­fore outdated” by Apple’s stan­dards. Sloan has prob­a­bly con­tested the re­moval so it’s still avail­able on iOS, and there is al­ways an op­tion to read it on ma­cOS or Windows if needed. Other cre­ators might not be as lucky or have the money/​time to pro­vide their work on dif­fer­ent plat­forms.

It will be very dif­fi­cult to re­verse the in­cen­tives for Apple and Google and get them to start car­ing about these small gems. They have been killing apps from the very start, in fa­vor of the newest mo­bile de­vices and func­tion­al­ity. There is a whole trend on Tiktok #oldapps that are sim­ply videos of peo­ple boot­ing up old phones to play with apps that no longer can be run and rem­i­nisce about the joy that these apps cre­ated.

Day-by-day, month-by-month, the App Store will get a lit­tle less rich and vi­brant as apps start be­ing des­ig­nated as out­dated and get re­moved. Another con­se­quence of this hos­tile pol­icy is that in­die and hob­by­ist de­vel­op­ers may stop build­ing mo­bile apps. After all, the web is fun­da­men­tally a more sta­ble place for ex­per­i­men­tal soft­ware and finished art­works”, since back­wards-com­pat­i­bil­ity is the gold stan­dard and apps can run in­def­i­nitely.

After 4 hours of work to re-com­pile my app and 44 hours wait­ing in the re­view queue, WorldAnimals is now up­dated to a new ver­sion. I am safe for at least an­other three years be­fore get­ting au­to­mat­i­cally flagged for re­moval. Unless, that is, Apple de­cides there is a new thresh­old for outdated” and change their pol­icy once again.

WorldAnimals is now avail­able for an­other three years (hopefully).

I still love mo­bile de­vel­op­ment–a large part of my en­gi­neer­ing ca­reer has been build­ing mo­bile apps of all sizes, for small hobby side pro­jects and for huge uni­corn com­pa­nies. I am proud of WorldAnimals and want to make sure it’s still avail­able for down­load. But this out­dated pol­icy will make me se­ri­ously think twice about build­ing fun, ex­per­i­men­tal apps on iOS in the fu­ture.


Read the original on vivqu.com »

6 780 shares, 22 trendiness

Text-to-3D using 2D Diffusion

DreamFusion: Text-to-3D us­ing 2D Diffusion

Ben Poole

Google Research

Ajay Jain

UC Berkeley

Jonathan T. Barron

Google Research

Ben Mildenhall

Google Research




Recent break­throughs in text-to-im­age syn­the­sis have been dri­ven by dif­fu­sion mod­els trained on bil­lions of im­age-text pairs. Adapting this ap­proach to 3D syn­the­sis would re­quire large-scale datasets of la­beled 3D as­sets and ef­fi­cient ar­chi­tec­tures for de­nois­ing 3D data, nei­ther of which cur­rently ex­ist. In this work, we cir­cum­vent these lim­i­ta­tions by us­ing a pre­trained 2D text-to-im­age dif­fu­sion model to per­form text-to-3D syn­the­sis. We in­tro­duce a loss based on prob­a­bil­ity den­sity dis­til­la­tion that en­ables the use of a 2D dif­fu­sion model as a prior for op­ti­miza­tion of a para­met­ric im­age gen­er­a­tor. Using this loss in a DeepDream-like pro­ce­dure, we op­ti­mize a ran­domly-ini­tial­ized 3D model (a Neural Radiance Field, or NeRF) via gra­di­ent de­scent such that its 2D ren­der­ings from ran­dom an­gles achieve a low loss. The re­sult­ing 3D model of the given text can be viewed from any an­gle, re­lit by ar­bi­trary il­lu­mi­na­tion, or com­pos­ited into any 3D en­vi­ron­ment. Our ap­proach re­quires no 3D train­ing data and no mod­i­fi­ca­tions to the im­age dif­fu­sion model, demon­strat­ing the ef­fec­tive­ness of pre­trained im­age dif­fu­sion mod­els as pri­ors.

Given a cap­tion, DreamFusion gen­er­ates re­lightable 3D ob­jects with high-fi­delity ap­pear­ance, depth, and nor­mals. Objects are rep­re­sented as a Neural Radiance Field and lever­age a pre­trained text-to-im­age dif­fu­sion prior such as Imagen.

DreamFusion gen­er­ates ob­jects and scenes from di­verse cap­tions. Search through hun­dreds of gen­er­ated as­sets in our full gallery.

Our gen­er­ated NeRF mod­els can be ex­ported to meshes us­ing the march­ing cubes al­go­rithm for easy in­te­gra­tion into 3D ren­der­ers or mod­el­ing soft­ware.

Given a cap­tion, DreamFusion uses a text-to-im­age gen­er­a­tive model called Imagen to op­ti­mize a 3D scene. We pro­pose Score Distillation Sampling (SDS), a way to gen­er­ate sam­ples from a dif­fu­sion model by op­ti­miz­ing a loss func­tion. SDS al­lows us to op­ti­mize sam­ples in an ar­bi­trary pa­ra­me­ter space, such as a 3D space, as long as we can map back to im­ages dif­fer­en­tiably. We use a 3D scene pa­ra­me­ter­i­za­tion sim­i­lar to Neural Radiance Fields, or NeRFs, to de­fine this dif­fer­en­tiable map­ping. SDS alone pro­duces rea­son­able scene ap­pear­ance, but DreamFusion adds ad­di­tional reg­u­lar­iz­ers and op­ti­miza­tion strate­gies to im­prove geom­e­try. The re­sult­ing trained NeRFs are co­her­ent, with high-qual­ity nor­mals, sur­face geom­e­try and depth, and are re­lightable with a Lambertian shad­ing model.


au­thor = {Poole, Ben and Jain, Ajay and Barron, Jonathan T. and Mildenhall, Ben},

ti­tle = {DreamFusion: Text-to-3D us­ing 2D Diffusion},

jour­nal = {arXiv},

year = {2022},


Read the original on dreamfusion3d.github.io »

7 772 shares, 24 trendiness

Text-to-3D using 2D Diffusion

DreamFusion: Text-to-3D us­ing 2D Diffusion

Authors anonymized

Recent break­throughs in text-to-im­age syn­the­sis have been dri­ven by dif­fu­sion mod­els trained on bil­lions of im­age-text pairs. Adapting this ap­proach to 3D syn­the­sis would re­quire large-scale datasets of la­beled 3D as­sets and ef­fi­cient ar­chi­tec­tures for de­nois­ing 3D data, nei­ther of which cur­rently ex­ist. In this work, we cir­cum­vent these lim­i­ta­tions by us­ing a pre­trained 2D text-to-im­age dif­fu­sion model to per­form text-to-3D syn­the­sis. We in­tro­duce a loss based on prob­a­bil­ity den­sity dis­til­la­tion that en­ables the use of a 2D dif­fu­sion model as a prior for op­ti­miza­tion of a para­met­ric im­age gen­er­a­tor. Using this loss in a DeepDream-like pro­ce­dure, we op­ti­mize a ran­domly-ini­tial­ized 3D model (a Neural Radiance Field, or NeRF) via gra­di­ent de­scent such that its 2D ren­der­ings from ran­dom an­gles achieve a low loss. The re­sult­ing 3D model of the given text can be viewed from any an­gle, re­lit by ar­bi­trary il­lu­mi­na­tion, or com­pos­ited into any 3D en­vi­ron­ment. Our ap­proach re­quires no 3D train­ing data and no mod­i­fi­ca­tions to the im­age dif­fu­sion model, demon­strat­ing the ef­fec­tive­ness of pre­trained im­age dif­fu­sion mod­els as pri­ors.

Given a cap­tion, DreamFusion gen­er­ates re­lightable 3D ob­jects with high-fi­delity ap­pear­ance, depth, and nor­mals. Objects are rep­re­sented as a Neural Radiance Field and lever­age a pre­trained text-to-im­age dif­fu­sion prior such as Imagen.

Our gen­er­ated NeRF mod­els can be ex­ported to meshes us­ing an al­go­rithm based on march­ing cubes for easy in­te­gra­tion into 3D ren­der­ers or mod­el­ing soft­ware.

Given a cap­tion, DreamFusion uses a text-to-im­age gen­er­a­tive model called Imagen to op­ti­mize a 3D scene. We pro­pose Score Distillation Sampling (SDS), a way to gen­er­ate sam­ples from a dif­fu­sion model by op­ti­miz­ing a loss func­tion. SDS al­lows us to op­ti­mize sam­ples in an ar­bi­trary pa­ra­me­ter space, such as a 3D space, as long as we can map back to im­ages dif­fer­en­tiably. We use a 3D scene pa­ra­me­ter­i­za­tion sim­i­lar to Neural Radiance Fields, or NeRFs, to de­fine this dif­fer­en­tiable map­ping. SDS alone pro­duces rea­son­able scene ap­pear­ance, but DreamFusion adds ad­di­tional reg­u­lar­iz­ers and op­ti­miza­tion strate­gies to im­prove geom­e­try. The re­sult­ing trained NeRFs are co­her­ent, with high-qual­ity nor­mals, sur­face geom­e­try and depth, and are re­lightable with a Lambertian shad­ing model.


Read the original on dreamfusionpaper.github.io »

8 715 shares, 29 trendiness



Read the original on talk.quazel.com »

9 714 shares, 27 trendiness

Why “Go Nuts, Show Nuts” Doesn’t Work in 2022

For those who don’t know or re­mem­ber, Tumblr used to have a pol­icy around porn that was lit­er­ally Go nuts, show nuts. Whatever.” That was mem­o­rable and hi­lar­i­ous, and for many peo­ple, Tumblr both hosted and helped with the dis­cov­ery of a unique type of adult con­tent.

In 2018, when Tumblr was owned by Verizon, they swung in the other di­rec­tion and in­sti­tuted an adult con­tent ban that took out not only porn but also a ton of art and artists — in­clud­ing a ban on what must have been fun for a lawyer to write, fe­male pre­sent­ing nip­ples. This pol­icy is cur­rently still in place, though the Tumblr and Automattic teams are work­ing to make it more open and com­mon-sense, and the com­mu­nity la­bels launch is a first step to­ward that.

That said, no mod­ern in­ter­net ser­vice in 2022 can have the rules that Tumblr did in 2007. I am per­son­ally ex­tremely lib­er­tar­ian in terms of what con­sent­ing adults should be able to share, and I agree with go nuts, show nuts” in prin­ci­ple, but the ca­su­ally porn-friendly era of the early in­ter­net is cur­rently im­pos­si­ble. Here’s why:

Credit card com­pa­nies are anti-porn. You’ve prob­a­bly heard how Pornhub can’t ac­cept credit cards any­more. Or seen the new rules from Mastercard. Whatever crypto-utopia might come in the com­ing decades, to­day if you are blocked from banks, credit card pro­cess­ing, and fi­nan­cial ser­vices, you’re blocked from the mod­ern econ­omy. The vast ma­jor­ity of Automattic’s rev­enue comes from peo­ple buy­ing our ser­vices and auto-re­new­ing on credit cards, in­clud­ing the ads-free brows­ing up­grade that Tumblr re­cently launched. If we lost the abil­ity to process credit cards, it would­n’t just threaten Tumblr, but also the 2,000+ peo­ple in 97 coun­tries that work at Automattic across all our prod­ucts. App stores, par­tic­u­larly Apple’s, are anti-porn. Tumblr started in 2007, the same year the iPhone was re­leased. Originally, the iPhone did­n’t have an App Store, and the speed of con­nec­tiv­ity and qual­ity of the screen meant that peo­ple did­n’t use their smart­phone very much and mostly in­ter­acted with Tumblr on the web, us­ing desk­top and lap­top com­put­ers (really). Today 40% of our signups and 85% of our page views come from peo­ple on mo­bile apps, not on the web. Apple has its own rules for what’s al­lowed in their App Store, and the in­ter­pre­ta­tion of those rules can vary de­pend­ing on who is re­view­ing your app on any given day. Previous de­ci­sions on what’s al­lowed can be re­versed any time you sub­mit an app up­date, which we do sev­eral times a month. If Apple per­ma­nently banned Tumblr from the App Store, we’d prob­a­bly have to shut the ser­vice down. If you want apps to al­low more adult con­tent, please lobby Apple. No one in the App Store has any ef­fec­tive power, even multi-hun­dred-bil­lion com­pa­nies like Facebook/Meta can be dev­as­tated when Apple changes its poli­cies. Aside: Why do Twitter and Reddit get away with tons of su­per hard­core con­tent? Ask Apple, be­cause I don’t know. My guess is that Twitter and Reddit are too big for Apple to block so they de­cided to make an ex­am­ple out of Tumblr, which has only” 102 mil­lion monthly vis­i­tors. Maybe Twitter gets blocked by Apple some­times too but can’t talk about it be­cause they’re a pub­lic com­pany and it would scare in­vestors.There are lots of new rules around ver­i­fy­ing con­sent and age in adult con­tent. The rise of smart­phones also means that every­one has a cam­era that can cap­ture pic­tures and video at any time. Non-consensual shar­ing has grown ex­po­nen­tially and has been a huge prob­lem on ded­i­cated porn sites like Pornhub — and gov­ern­ments have rightly been ex­pand­ing laws and reg­u­la­tions to make sure every­one be­ing shown in on­line adult con­tent is of le­gal age and has con­sented to the ma­te­r­ial be­ing shared. Tumblr has no way to go back and iden­tify the fea­tured per­sons or the le­gal­ity of every piece of adult con­tent that was shared on the plat­form and taken down in 2018, nor does it have the re­sources or ex­per­tise to do that for new up­loads.Porn re­quires dif­fer­ent ser­vice providers up and down the stack. In ad­di­tion to a com­pany pri­mar­ily serv­ing adult con­tent not hav­ing ac­cess to nor­mal fi­nan­cial ser­vices and be­ing blocked by app stores, they also need spe­cial­ized ser­vice providers — for ex­am­ple, for their band­width and net­work con­nec­tions. Most tra­di­tional in­vestors won’t fund pri­mar­ily adult busi­nesses, and may not even be al­lowed to by their LP agree­ments. (When Starbucks started sell­ing al­co­hol at se­lect stores, some in­vestors were forced to sell their stock.)

If you wanted to start an adult so­cial net­work in 2022, you’d need to be web-only on iOS and side load on Android, take pay­ment in crypto, have a way to con­vert crypto to fiat for busi­ness op­er­a­tions with­out be­ing blocked, do a ton of work in age and iden­tity ver­i­fi­ca­tion and com­pli­ance so you don’t go to jail, pro­tect all of that iden­tity in­for­ma­tion so you don’t dox your users, and make a ton of money. I es­ti­mate you’d need at least $7 mil­lion a year for every 1 mil­lion daily ac­tive users to sup­port server stor­age and band­width (the GIFs and videos shared on Tumblr use a ton of both) in ad­di­tion to host­ing, mod­er­a­tion, com­pli­ance, and de­vel­oper costs.

I do hope that a ded­i­cated ser­vice or com­pany is started that will re­place what peo­ple used to get from porn on Tumblr. It may al­ready ex­ist and I don’t know about it. They’ll have an up­hill bat­tle un­der cur­rent regimes, and if you think that’s a bad thing please try to change the regimes. Don’t at­tack com­pa­nies fol­low­ing le­gal and busi­ness re­al­i­ties as they ex­ist.


Read the original on photomatt.tumblr.com »

10 678 shares, 26 trendiness

How to Build a Personal Webpage from Scratch

Modern web­pages are (primarily) com­posed of three types of files: HTML, CSS, and JavaScript. Basically,

Webpages also con­sist of ad­di­tional re­sources, such as im­ages or doc­u­ments. When you visit a web­page, your web browser re­quests the doc­u­ments from a server.

Static and dy­namic web­pages dif­fer in how the files are pre­pared be­fore they are sent to the vis­i­tor. A sta­tic web­page is es­sen­tially a col­lec­tion of files sit­ting on the server, which are sent di­rectly to the web­page vis­i­tor, whereas a (server-sideThis is in con­trast to a client-side dy­namic web­page which uses JavaScript, but only in your web browser.) dy­namic web­page typ­i­cally con­sists of a data­base as well as code to gen­er­ate the files on the fly­This code can ei­ther run in your browser, or the page ren­der­ing it­self can hap­pen on the server. when they are re­quested by the vis­i­tor.

For ex­am­ple, this web­site is a sta­tic web­page. On the other hand, any web­page which al­lows you to log-in and have user-spe­cific state is a dy­namic web­page. The ma­jor­ity of web pages on the in­ter­net are dy­namic web­pages.

When build­ing a sta­tic web­page, you can sim­ply pre­pare the en­tire web­page as a di­rec­tory con­tain­ing files. In fact, you can make a web­page (using your own de­vice as the server) sim­ply by writ­ing a bit of HTML with no CSS or JavaScript: cre­ate a file named in­dex.html with the con­tents

and, when you dou­ble-click on the file, it should open in your browser and show a (rather min­i­mal) page dis­play­ing the line content”.

Dynamic web­pages are built in a sim­i­lar way, ex­cept rather than gen­er­at­ing the pages in ad­vance, the files sent to the vis­i­tor are gen­er­ated as they are re­quested. A dy­namic web­page will typ­i­cally have a data­base used to store the site in­for­ma­tion, and a web server which uses the data­base to gen­er­ate con­tent when re­quested by the user. This al­lows sub­stan­tially more flex­i­bil­ity in con­tent de­liv­ery (e.g. web­page state, cus­tomiza­tion for the viewer, etc.) since the con­tent de­liv­ered to the web­page can de­pend on ar­bi­trary vari­ables whose val­ues are un­known when cre­at­ing the site. This also al­lows pro­ce­dural gen­er­a­tion of con­tent, which avoids repet­i­tive code. The main down­side is that, since the pages need to be gen­er­ated for each vis­i­tor, dy­namic web­sites are typ­i­cally more re­source in­ten­sive and slower to ren­der.

However, for a per­sonal blog or site used pri­mar­ily to dis­trib­ute in­for­ma­tion, rather than col­lect it, dy­namic con­tent gen­er­a­tion is not nec­es­sary! Here is a short list of rea­sons why you should pre­fer sim­ple sta­tic web­pages (if you do not al­ready know that you re­quire a dy­namic web­page):

* Longevity.

A sta­tic web­page is just a col­lec­tion of files, which you should also have saved on your com­puter.

So even in the worst case sce­nario—say your web server dis­ap­pears—you still have the files for your web­page and you can just put them up some­where else.

Static web­pages are also eas­ier to main­tain: if you have a dy­namic web­page, you need to keep the re­quired tools up to date oth­er­wise every­thing will cease to work.

* Portability.

If you de­cide that you want to host your web­page some­where else, this is straight­for­ward to do.

Static web­pages are also sim­ple enough that you can host them your­self on a low-power de­vice!

* Security.

Since sta­tic web­pages are sub­stan­tially sim­pler, they have a smaller at­tack sur­face and are more se­cure.

There is no un­der­ly­ing server serv­ing re­quests, or pro­cess­ing user in­put.

Even in hosted sit­u­a­tions, there can be prob­lems with the un­der­ly­ing con­tent man­age­ment sys­tem.

For ex­am­ple, many Wordpress sites were com­pro­mised through an ex­ploit which tar­geted the plu­gin sys­tem.

One down­side of man­u­ally prepar­ing a web­page is that there is of­ten a large amount of rep­e­ti­tion: for ex­am­ple, each ar­ti­cle on this web­page has dif­fer­ent con­tent but many shared lay­out fea­tures. In or­der to sim­plify this process, a com­mon tech­nique is to use a tem­plate proces­sor. This is a pro­gram which takes files writ­ten in a tem­plat­ing lan­guage (such as Jinja or Tera), com­bined with con­tent files writ­ten in a markup lan­guage (such as Markdown) and con­verts them into HTML, CSS, and JavaScript files. You first pre­pare the tem­plates, then write the con­tent files, and then use the tem­plate proces­sor to gen­er­ate the web­page files.

There are three main com­po­nents to sta­tic web­site gen­er­a­tion:


You should choose a tem­plat­ing en­gine and then pre­pare the web­site tem­plate.

I am per­son­ally a fan of Zola; some other com­mon op­tions are Jekyll and Hugo.


The most im­por­tant part of a web­page is the con­tent!

Beyond that, it’s nice if your web­page also looks de­cent.

You need to write base HTML files and CSS style sheets, as well as the web­page con­tent.


While it is pos­si­ble (and not too dif­fi­cult) to host your own sta­tic site server, it is typ­i­cally eas­i­est to use sta­tic site host­ing.

I use Cloudflare Pages.

You might also be in­ter­ested in GitHub Pages or Netlify.

Of course, tem­plat­ing is mainly a con­ve­nience fea­ture, and not strictly nec­es­sary when mak­ing a small web­site. I’ll dis­cuss the other two com­po­nents in the fol­low­ing sec­tions, along with some ad­di­tional top­ics in the fi­nal sec­tion.

HTML is a markup lan­guage, which means that the text rep­re­sents con­tent, rather than be­ing the con­tent vi­su­ally. Other well-known markup lan­guages in­clude LaTeX and Markdown.

Therefore when writ­ing con­tent for your web­page, it is im­por­tant to use an ed­i­tor which ac­cu­rately rep­re­sents the con­tents of the file you are edit­ing. This is in con­trast to soft­ware such as Microsoft Word, in which the con­tent that you en­ter on the page is dif­fer­ent than the un­der­ly­ing rep­re­sen­ta­tion. Some pop­u­lar graph­i­cal text ed­i­tors in­clude Atom and Sublime Text. If you do not want to in­stall any­thing, Notepad is a built-in text ed­i­tor on Windows. Similarly, TextEdit is built-in on ma­cOS. If you pre­fer a com­mand-line in­ter­face, you could con­sider Neovim or Emacs.

One sub­tlety is that not all text is the same. Underneath, text is just bi­nary data, so rules are re­quired to con­vert the bi­nary data into the tex­tual rep­re­sen­ta­tion: this process is known as char­ac­ter en­cod­ing. The most com­mon type of en­cod­ing used on web­pages is UTF-8, which is the trans­fer for­mat for the Unicode stan­dard.

ASCII is also a well-known en­cod­ing, but only sup­ports a very re­stricted num­ber of char­ac­ters. Certain older soft­ware, such as TeX, de­faults to files en­coded in ASCII:If you \usepackage[utf8]{inputenc}, you can use Unicode di­rectly in the .tex file. for ex­am­ple, to in­put di­rec­tional quo­ta­tion marks ” (which are Left Double Quotation Mark and Right Double Quotation Mark re­spec­tively), one would use `` and ’. However, un­less you are forced oth­er­wise, you should try to write all your con­tent in Unicode.

I’m go­ing to as­sume you know some ba­sics of HTML and CSS. There are lots of tu­to­ri­als on­line; here is a nice one. I’d rec­om­mend you read the ar­ti­cles on HTML ba­sics and CSS ba­sics.

In this sec­tion, I’ll give a com­plete (albeit stream­lined) de­scrip­tion of set­ting up a ba­sic func­tional web­page. We are go­ing to cre­ate 4 files:

├── 404.html

├── in­dex.html

├── style.css

└── writ­ing

└── in­dex.html

Let’s start with a rather min­i­mal HTML file. Call it in­dex.html in your (currently empty) web­site folder.

This is­n’t the most bare-bones pos­si­ble HTML file, but it is a good mod­ern start­ing point for all HTML con­tent on your site. Here’s an ex­pla­na­tion of some of the tags:

* and : these are the two main sec­tions of your HTML file.

con­tains the meta­data, and con­tains the con­tent that will show up on your screen when you visit the web­page.

* : de­clare that the con­tent is en­coded in UTF-8.

* en­sures that, if this page is opened on a browser with a small screen, it will not be in­cred­i­bly zoomed out.

This is the bare min­i­mum re­quired so your page looks pass­able on a phone.

You can read a bit about this here.

* : the content’ of the page, i.e. your ac­tual ar­ti­cle or blog post but with­out the nav­i­ga­tion, header, footer, etc.

Now if you open the file in­dex.html with your web browser (you can prob­a­bly just dou­ble-click it) you should get a page with two links at the top: About, and Writing.

Unfortunately the Writing link does noth­ing: we need to cre­ate that page. Create a new di­rec­tory called writ­ing and in that di­rec­tory cre­ate a file called in­dex.html. Then, fill it with pretty much the same con­tents as in­dex.html, but re­place the with the con­tents

and re­place the with some­thing slightly dif­fer­ent, say

You can also change the ti­tle and de­scrip­tion in this new page, as well. Now, if you click on the nav­i­ga­tion links, you have two work­ing pages!

We have a func­tional web­page, but it would be nice to make every­thing look a bit bet­ter. Create a file style.css, and add the line

to the of in­dex.html and

to the of writ­ing/​in­dex.html. This tells the browser to look for a file named style.css in the same di­rec­tory as in­dex.html and in the di­rec­tory con­tain­ing the file writ­ing/​in­dex.html, which con­tains styling in­for­ma­tion. While it is pos­si­ble to de­fine styles in­line in the HTML, this is bad prac­tice since it is harder to main­tain (as a gen­eral rule, HTML de­fines se­man­tics, whereas CSS de­fines style). Also, you should add some more con­tent to the sec­tion: per­haps a few more head­ers

and links my link. This will make the styling changes more clear as you make them.

Let’s be­gin with some ba­sic styling. First, add

body {

mar­gin: 0 auto;

max-width: 700px;

min-width: 0;

padding: 0 10px 25px;

font-fam­ily: Helvetica”, Arial”, sans-serif;

to the file style.css. This cen­tres the text body, pre­vents it from be­ing too wide on large screens, en­sures there is a bit of a space on the bound­ary when the screen is small, and fi­nally sets a new font (rather than the usual de­fault Times New Roman). The min-width: 0 is use­ful to pre­vent large el­e­ments from (accidentally) mak­ing the page very wide on screens nar­rower than 700 pix­els.

We can also ad­just the spac­ing so that the text is laid out a bit more nicely:

h2 {

mar­gin-top: 1em;

padding-top: 1em;

nav a {

mar­gin-left: 20px;

And ad­just the colour of the text it­self to some­thing a bit more pleas­ant:

body {

color: #444;

h1, h2, strong {

color: #222;

Then touch up the font sizes:

header {

mar­gin: 0px;

font-size: 23px;

ar­ti­cle {

font-size: 16px;

nav {

font-size: 18px;

let­ter-spac­ing: 1px;

h1 {

font-size: 26px;

h2 {

font-size: 23px;

Finally, let’s add a bit of char­ac­ter by styling the links:

a {

color: #ffa64d;

Our web­page looks a bit cleaner now!

However, we need to ad­dress some more se­ri­ous lay­out prob­lems: cur­rently, the nav­i­ga­tion is way too small, and the header does not stand out at all.

To fix this, we are go­ing to use a rel­a­tively new CSS tech­nique known as CSS Grid. A nice ref­er­ence for CSS Grid can be found here.


Read the original on rutar.org »

To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".

10HN is also available as an iOS App

If you visit 10HN only rarely, check out the the best articles from the past week.

If you like 10HN please leave feedback and share

Visit pancik.com for more.