HN user

ghoul2

1,297 karma

Embedded Linux consultant with 20 years of idea-to-product development (C/C++/Go/Python/Node, Linux Kernel, Buildroot/Yocto/Custom), hardware-software co-design. If you have a viable Idea, I can build it into a product - efficiently and fast. Please reach out on email.

email: 600kvv0rm@gmail.com

Posts12
Comments155
View on HN

India really has very deep penetration of 5g, and at very low cost. There might be a rare place that starlink might be needed but really I cannot image starlink having much consumer/retail uptake in india. Not needed, and too expensive. There might be commercial users - offshore rigs etc, but india is too densely populated for there to be many 'truly remote' locations.

India has still not permitted starlink to start ops.

There is a hilarious one in the Indian direct tax (Income tax) code right now:

If your (taxable) income is less than 7L (inr), no tax is assessed. If your income is greater than 7L, but upto 12L, tax is assessed, but a tax _rebate_ (a discount on payable tax) is granted for the exact amount of tax owed. This means net tax paid till 12L is zero. But if your income is 12L + 1, this rebate no longer applies, so the entire tax assessed (on the 7L+ income) is now due. This means that a person who earns 12L+1 INR makes ~70K inr less, post-tax, than the person who earns 12L INR.

After complaints, to correct this, they added another layer: If your taxable income is >12L but less than 12L+~70K (the tax thats due), then the maximum tax due is just the amount your income exceeds 12L bye. So you stagnate at the same post-tax salary from 12L to 12L+70K.

Its a fantastic project, but seems almost inactive now. I have a tiny PR pending for weeks, even reviewed, but not merged. I have another patch I have not submitted as I want to first navigate the earlier PR to completion. Both were bugs that bit me, and I ended up wasting quite a lot of time trying to find it:

1. go:embed supports "all:<pattern" while tinygo silently ignore it. I ripped my hair out trying to figure out why my files were not showing up in embedfs. PR pending.

2. go allows setting some global vars at the build cli (think build version/tag etc). In the code, one can define a default, and then the value provided (if any) on the cli can override it at build time. Tinygo fails to override the value at build-time, silently, if a default value is provided for the var in code. This PR I have not submitted yet, as its more intrusive.

I hope it picks up steam again soon. I love using go for embedded and CF worker use and tinygo makes both of these use cases much more viable than regular go. Honestly, I hope tinygo can be rolled over into the main go toolchain as "target arch".

I long time ago, I was operating a "social network" which allowed image uploads. (India local, didn't amount to much as was shutdown.).

Immediately at launch, we started having a huge amount of (image) pron being uploaded into the pages. We put in some rate limits etc, but did not want to put any major restrictions of user signups etc as that would hurt signup figures (important to the ceo!).

We already had some content review people thru a temp agency on site, so we checked with them and they were fine doing this manual filtering of these images for us. All young (early 20s) women. While my team built a quick "dashboard" for them to be able to do this image filtering quickly and conveniently, I had a detailed conversation with them as I was very concerned about having them review this kinda stuff for 8 hours a day, 5 days a week. Truly nasty stuff.

They were _perfectly_ clear that they had no issues with it, and they told me in so many words to not give it a second thought and to let them get back to work.

It was a surprise, but it was a point of realization: there are much worse things they could be doing. And looking a porn has shock value only the first time. I was under-estimating these women and assuming they were some "snowflakes" who could not deal with something this silly and non-threatening.

Just my own person anec-data.

As a RA-ship student in the US, I still had taxed withheld on my meager grad student "salary", and was required to file a 1040NR-EZ. I obviously did not want to spent 50$ at H&R block, to claim like 200$ back. Fortunately the local library had sessions where you could grab a blank form (the library had boxes full of them), and someone walked a bunch of us (i think there were like 40 in the room), to filling it out. The session mailer had already listed the stuff we were supposed to bring with us at the session. Even if someone forgot, they could leave a place holder and take care of it later.

The session was an hour long, and I was done with my return by the end of the hour. I dropped it off in the mail on my way back from the library and that was the end of it. From the subsequent year onwards, a pre-printed form arrived in the mail with like 90% of the stuff prefilled, and it took like 5 minutes to fill out the rest and drop it in the post box.

I honestly didn't think it could have been any easier - of course, not having taxes withheld from a far-below-minimum wage salary would have been nicer.

When I lived in the US(5 yrs), early 2000s, from my second year onwards, I used to receive a pre-filled 1040NR-EZ with my W2 info already printed/filled-in on it. Typically, I would just add a deduction, and mailed it back. Does that program not exist? Or was it only for NR?

I have always counted to 20 on one hand. even as a kid. base, lower joint, upper joint, top. times 5 - including the thumb: my motor memory is trained so that i switch seamlessly from keeping the curse on top of the finger using my thumb, and then, once i cross 16, switch to using the index finger to "cursor" the thumb.

I asked this question on another post and was downvoted, trying again: don't we lose the "contextualization" that LLM embeddings do (embedding on Token X contains not just information about X, but also of all tokens that came before X in the context, causing different embedding for "flies" in "time flies like an arrow" vs "fruit flies like a banana")?

The image embeddings, as I currently understand, are just pixel values of a block of pixels.

What am I missing?

But does this not miss the "context" that the embeddings of the text tokens carry? An LLM embedding of a text token has a compressed version of the entire preceding set of tokens that came before it in the context. While the image embeddings are just representations of pixel values.

Sort of at the level of word2vec, where the representation of "flies" in "fruit flies like a banana" vs "time flies like an arrow" would be the same.

Isn't this "as intended" in the westminster-style system? The govt is formed by MPs from the majority party (or alliance). By definition they MUST be able to pass ALL money bills, which only require a simple majority. Any failure to pass a money bill is equivalent to the govt no longer holding a majority support in parliament. And that means either the king/president/govgen invites someone else from the current parliament who they have good reason to believe DOES (potentially) have support of majority of the parliament, or dissolve the parliament and call fresh elections if there is no such majority.

I am not quite sure why an action with such a clear established precedent be considered foreign interference? or was it the case that there WAS a suitable candidate with a possible majority but they were NOT invited by the govgen to try and win a trust vote in parliament?

well, Jio (Indias largest ISP, with ~300M customers) has cloudflare r2 blocked. And for a while even. I am sure its due to some bucket serving out pirated movies, but this is a bit insane. And neither Jio nor Cloudflare seem to want to figure this out.

I have stuff on R2, I don't personally use Jio, and the office has multiple ISPs but not Jio. Customers had randomly complained that some of the icons were broken/some files could not accessed, but never followed up our request for browser console/network snapshots, and our testing always showed everything working fine (we were very small with a handful of customers, at the time).

Finally, purely by chance, office network was having issues, so one of my QA people switched to their mobile hotspot, and they were on Jio. And then they could see all the broken stuff, but weren't sure why. Stuff escalated to me, and it finally clicked!

Easy to work-around by using a custom domain, though painful if you want to do access control/signed urls/etc as CF still only supports them on the r2.cloudflare urls. Had to put a worker in front.

Father passed away today morning. At least he is not suffering anymore. I don't know why I am posting this here. Just a tribute, maybe.

He was born to poor parents, and the eldest of 7 children. His father could never have paid for his education, but he has brilliant from the very start, and they lived in a village town, where the school had been built by a kind, local rich man, and my father studied his entire life on scholarship. He was the first person from his district to earn a masters degree (in electronics), and in his era, his bachelors and masters were each earned from the very top university of the country. Again, all on scholarship. Started a job as a professor, but quickly switched, first to a premier research labs, working on the very first satellites/payloads built in my country, and then later to being a technocrat in the state government: his qualification and ability were so high that he joined as the ranking technocrat of the state, and remained that till his retirement. Right around his job change, he got married and had three children - me and my two sisters.

During all this, he also earned an executive MBA.

After retirement, he didn't feel like sitting idle, and started a new career as the head of department (for two departments: computer engineering and electrical engineering) at a good, well regarded engineering college/university. He did this for 12 years, when he had a brain stroke, and then I asked him to not work anymore.

He recovered from the brain stroke, but more strokes/falls happened at a steady pace. He passed away at 79. The end was pretty painful, and I wish he had not had to go thru all that.

He lived a simple, harsh life - He never cared for comforts, or money, or luxuries. But he was genuinely content. In the end, all he really asked for was to "lets go home" (from the hospital). Fortunately, we did manage to get him discharged and his final few days were at home.

be at peace, pop. I love you.

I don't agree. At all. My father is right now in a very bad state: he can't recognize me, doesn't know if he is at home or in the hospital, is being fed thru a tube, and entirely dependent. He no longer has the mental ability left to decide on this on his own, but if he were, I am sure he would choose to go rather than live like this. He is not in excessive pain - he just has nothing left that can be called "life".

Unfortunately, in the place we live, there is no legal framework for choosing this anyway. So he is unable to chose, and I am unable to chose for him either. I absolutely hate to have him be in this state - such a brilliant man, reduced to this.

He had a (brain)stroke, and my grandfather on the mothers side also died of a stroke. So genetically speaking, my chances look (relatively) bleak. I know for a fact I won't want to go-on if I ever reach anywhere as bad as his current condition. But there's no option available to me either. I will have to suffer similarly, and the people I end up being dependent on will have to suffer similarly and watch me suffer similarly.

I think being able to decide when you want to "go" is and should be a fundamental right - a natural right - every person should have. And we would, if it weren't for this false religious crap being foisted upon the world.

Thats how it works in India. All authorized repeating charges ("mandates") are listed on a portal maintained by the card issuer. you can go in anytime and simply cancel the mandate from there. This is mandatory under banking regulations.

Credit cards are also required to be "tokenized" when stored at a merchant or payment aggregator - the user authorizes the bank to allow the merchant or the aggregator to "store" the card details for use later, and the bank then issues a card token, tied to the specific merchant/aggregator. They are not allowed to store the original card info at all - just this token. This makes the token not worth stealing, as it can be only used by that merchant, and is trivial to de-auth if needed, with or without merchant cooperation.

Thats how it works in India: all your "repeating" charge authorizations show up on a portal maintained by the issuing bank. All services that charge via these authorizations send an SMS alert before they debit the next charge. At any time, you can go into the portal and cancel any of these authorizations. No need to talk to the charging co at all, though still, best to first cancel from them. Jus that they know its trivial for the user to go and cancel the auth, so no one makes it difficult to cancel.

Google does this: 100% discount for upto 100K of usage the first year, and 25% discount upto 100K for the second year.

But I disagree: I think what AWS does is a LOT better: credits last two years, which is a lot more practical (if i migrate to AWS for the credits, I have two years during which I don't have to consider migrating again), plus with the upfront payment plans, I can even stretch the credits to a third year. I like that a LOT better.

Sigh. I have been kicking this horse forever as well: an "optimization" implies just a performance improvement.

Tail call elimination, if it exists in a language, allows coding certain (even infinite) loops as recursion - making loop data flow explicit, easier to analyze, and at least in theory, easier to vectorize/parallelize, etc

But if a language/runtime doesn't do tail call elimination, then you CAN'T code up loops as recursion, as you would be destroying you stack. So the WAY you code, structure it, must be different.

Its NOT an optimization.

I have no idea who even came up with that expression.

Given that the comparison function doesn't have the transitive property (if line a > line b and line b > line c that implies line a > line c), does this sort really work?

The 'allpair' variant, which aggregates the score across all n*(n-1) comparisons will work, but the other two couldn't possibly have stable results - it would depend on the order of the items in the input.

Whoa. Are you me?

Same here. Lived in India, my fathers' friend (based in the UK) gifted him a ZX Spectrum. I was hooked from the day I typed 10 PRINT "myname" on it. Taught myself Z80 assembly, just from the appendix in the Spectrum programmers manual that listed the opcode encodings and mnemonics (mostly just guessing what the opcode did from the mnemonic) - at around 10 years old, I could hand-write and hand-encode the assembly code without needing to lookup the opcode encodings.

I was 6 years old at the time.

Completely determined the trajectory of my life/career.

Honestly, the main point of the story here isn't the weird billing processes.

Its, yet again, the utter refusal by CF to provide even basic support. Even for paying users. Even for users who bought the so-called "pro" plan, mainly so that they can access the support that comes with it.

I myself had a metering/billing issue that:

1. I first posted on the forum. Instead of responding there, I was told by staff to raise a ticket. 2. No response to the ticket. Autoclosed after ~1 month. 3. I immediately reopen it. No response, autoclosed after ~1 month. 4. Repeat, for 5 months. 5. Then, I wrote an angry rant in the ticket, and finally the support response arrives: "the customer is misinterpreting the reported numbers, they mean X, not Y". Fair, enough, not obvious from the UI, but could you not have told me this without so much ... friction?

I love what CF has built (I even own a small amount of stock!). Its not perfect, but its far more of a serveless/cloud model than any other player. Makes so many things so much easier.

But, _PLEASE_, CF: improve tooling, and commit to a basic level of support.

sigh. They picked "devi" for India. "Devi" is not a last name. Literally it means "goddess". Its used as a suffix to indicate "woman"/"lady". If they picked "Devi" for India, they should have picked "Mr"/"Mrs" for the US.

I agree, definitely a game changer. Finally made me a convert.

re latency: yes, latency can get quite high, for large contexts. minutes, 10s of minutes when you try to max out the context.

gemini 1.5 pro is very good. far from perfect, but the long context window helps it stay focussed when iterating on a code base. I tried chatgpt, etc, but it was obvious (to me) that I was wasting more time trying to get these models to work right - I could have just coded it myself faster. But Gemini 1.5 pro has changed that. For moderate-sized stuff (mainly automation, ops scripts etc), its now my goto. And I discovered its much better at golang than even at python. I have converted quite a few fairly-complex python/shell scripts, with feature additions and cleanups, to golang code using gemini 1.5 pro. Just give it the original code, ask it to redo it in golang, and then keep prompting it to add feature-after-feature. One main advantage of this is golang can be cross-compiled to other OSen, and generated a single, stand-alone binary - this means I can distribute these scripts/utilities easily - while I could not do the same for python or shell, as people who would use them are on windows typically.

So gemini 1.5 pro has enabled scenarios which were remaining un-done earlier: It was too much work to deploy and keep updated the bash/python scripts on other peoples computers, and it was not worth my time to develop these automations in golang from the get-go. But with this, I hand out management scripts like candy to other users, dramatically reducing dependence on me.

In the late 90s, DOS-era, I was working on a simulation in Matlab. Something just wasn't working right - as per the limited docs. Getting very frustrated, I typed "f_ck you" on the matlab prompt. It came back with "Your place or mine?".

This was so unexpected, I burst out laughing. Definitely released some stress. I went looking for how this worked: turns out matlab had a "command" called "f_ck" and it had 10-something fixed messages as responses hard-coded into it. It would return one of these randomly.