Hacker News new | past | comments | ask | show | jobs | submit | vivty's favorites login

Over the last 10 years, I've gotten every job except one through Hacker News or a referral from a co-worker I met at a job. I got way more callbacks fresh out of school as a 21-year-old living in Canada (aka no USA work permits) via Hacker News than any other channel.

Focus on sending 3-4 _excellent_ applications a day rather than 3000-4000 AI-generated garbage ones. Also, go through your text message history and text every person on there the following:

``` Hi $NAME! I just saw you on $SOCIAL_MEDIA doing $THING and I thought about you? What's the latest with you? No rush to respond if you're busy.

wait for response

Great to hear! I'm currently looking for a software engineering job, do you know anyone who's hiring? ```

You do those two things consistently, you'll have three job offers within 3-4 months.

Now the tricky part is getting the confidence to ACTUALLY DO THE ABOVE. What helped me is going outside and getting involved in ANY club. In the past for me it's been salsa dancing, stand up comedy, and taking a cooking class. Replace those with any other activity you're remotely interested.

Good luck. You got this. The first job or two in tech is tricky. After 3-4 years it gets way easier.


I've spent last 8+ years working on various booking engines for a world's major travel company. From the provided information it's a bit hard to see the full requirements so I'll just mention some of the aspects I had to deal with. Managing availability isn't as straightforward as it looks on the first glance.

There are things like:

* in-advance-known closeouts

* sporadic closeouts (e.g. due to the bad weather conditions)

* sell-outs

* varying availability by date/start time

* links to partner services who can partially reduce the availability count

* allotments (availability quotas for different sellers)

* resources linked to availabilities (which is another dimension)

* the list goes on and on...

Anyway, back to the data structures.

After many iterations I've settled with using Guava's Table (yes, we use Java). There are many ways to model this, e.g. you can have start times as rows and dates as columns.

It might not sound as sexy as you'd expect but it's super easy to visualise the model in your head and read/maintain the code later.

Then you can use Guava Range functionality for dates or times and do intersections etc. Hope this helps.


Smart Biology has absolutely stunning animations for visualization of biological concepts. The course builds an entire cell from the ground up.

https://www.smart-biology.com/


This an evergreen IMHO, and it’s very good:

https://cryptopals.com/


His book, "Understanding Software Dynamics", is one of the best technical books I've ever read. Top 3 for me.

It's worth noting that if you're interested in making your own custom silicon, you can get it done quite inexpensively. It's not a fast process, but if you want to try your hand at building something that is all you, you can!

This isn't want SiFive was doing - they're providing engineering expertise. Here you're allowed to put together all your own logic gates into... a thing.

https://tinytapeout.com/


Some other useful things about Chebyshev approximations:

1. You can use a Fourier transform to get the coefficients in O(n log n) time.

2. So, multiplying two approximations only takes O(n log n) time.

3. Also, adding, integrating, or taking the derivative only take O(n) time.

This is why chebfun/chebpy can run so fast while magically finding roots/derivatives/etc. A couple other interesting facts:

1. Remember the double-angle formula? There's a more general recursion for the Chebyshev polynomials:

\[ T_n(x) = 2x T_{n-1}(x) - T_{n-2}. \]

So, e.g.

\[ T_2(cos(theta)) = cos(2*theta) = 2cos(theta)^2 - 1 = 2cos(theta)T_1(cos(theta)) - T_0(cos(theta)) \]

2. Computers actually use this recursion to calculate sines and cosines! So, it's a little inefficient to code your Chebyshev polynomials using `math.sin`.

3. Using generating functions, you can get a closed form for T_n(x) that only takes O(log n) time to calculate. (Note: assuming you count multiplications as constant. However, you actually need O(log n) bits to accurately represent x, so it's more accurately O((log n)^2 log log n).)


A great book on this subject is Approximation Theory and Approximation Practice:

https://people.maths.ox.ac.uk/trefethen/ATAP/

Also chebfun!

https://www.chebfun.org/


PRNGs are one of those things that need to have global state if you want to get decent statistics out of them. You cannot have sets of threads fetching the same value from the PRNG - it will totally destroy how random the PRNG is. Thread-local PRNGs with separate seeds is the way to go if you need parallelism, and it was the author's solution, but I can easily see not knowing that and running into this.

I switched to Zellij[1] a few years back, and I've been enjoying Sixel support since sometime in 2022. If you're looking to shake up your workflow, I find it's a vastly superior experience to tmux out of the box. It ships with all the features I would otherwise add through external plugins and convoluted configuration scripts by default while remaining significantly more stable and more performant.

[1] https://zellij.dev/


I’ve done this before as a swe. We used Go and our chat system had auth, file sharing, 1:1 and group messaging, and other features.

It was honestly not that hard to code, maybe 4-5k loc including all the type definitions. Took around two weeks to make after spending a week or two learning and doing PoCs. It ran on a dedicated instance and can handle like 500k concurrent conversations.


CUDA programming (writing CUDA kernels) might be a good direction too.

GPU race is getting really hot and there is a lot of work being done to squeeze every ounce of performance especially for LLM training and inference.

One resource I would recommend is “Programming massively parallel processors” [1]

I am also learning it as my hobby project and uploading my notes here [2]

[1] https://shop.elsevier.com/books/programming-massively-parall...

[2] https://github.com/mandliya/PMPP_notes


If you want to "go low" in the operating system, you could write a Linux kernel module:

https://sysprog21.github.io/lkmpg/

https://blog.sourcerer.io/writing-a-simple-linux-kernel-modu...

If you want to "go low" in the way hardware works, you could try and write an interrupt handler on an embedded device.

If you want to "go low" in how optimizations work in application development, you could try and implement microbenchmarks and look at flamegraphs.

https://github.com/brendangregg/FlameGraph

https://bheisler.github.io/criterion.rs/book/index.html


[insert Sean Bean “One does not simply read to become…” meme]

I don’t make a living as a writer but writing has made my living. Here’s my advice to improve as a writer in general, not as a writer of a specific genre or purpose, and not to improve a specific piece of writing.

0. All advice needs salt.

1. Recognize that all writing is personal and all reading is subjective. No one has a perfect lens. Be willing to be wrong. Even if you’re right, guaranteed someone else thinks you’re wrong.

2. Are you writing to be authentic or writing to be popular? Writing to persuade or to inspire? To amuse or confront? All of those may be in conflict at times. Recognize and accept the conflict, then make your choices in peace. See rule #1.

3. Everyone loves simple language.

4. But try not to be bland. This is the value of rhythm, voice, word choice, tropes and schemes, idioms, patterns, and so on.

5. There really is something to copying other people’s writing as a way of finding your own writing voice. So you need to read widely to find people worth copying. In general, avoid the angry advice writers.

6. Practice. Click the Publish button once in a while. You don’t end up pitching for the Yankees by reading about baseball.

7. Writing is pretty fantastic, isn’t it?

8. Language evolves. Just like foxes and toaster ovens. Accept it. Thank people for their critique of your apparent misuse of language and then please continue challenging the rules.

9.

10. Leave something to the imagination. Think of it like an offering to the gods.

11. No one cares about your writing as much as you do. See rule #1.


Fluent Forever book has helped me a lot with Language learning. It shows you how to learn a language mainly using flashcards, apart from other things.

I'm recommending you some things that have completely changed my experience using Anki for language learning:

- Don't use translations. Use images instead. For learning how to say dictionary put a picture of a dictionary. It will be easier to remember. Also, you usually won't find a perfect translation for a word.

- Use cloze cards for grammar. Instead of learning the rules, understand them and put four sentences with placeholders and repeat them. This process will make this way of constructing sentences stuck in your head.


Pretty low might be an overstatement, but €60.000 it is in the lower end for an experienced SRE, DevOps engineer or developer in Denmark. I'd say it's a reasonable salary for someone with a few years of experience. Personally I'd expect something like €80.500 per year as a devops or SRE, and I'm not that good.

€35.000 per year... You could make that as a cleaner or by working the cash register at a supermarket (you might need to take a few extra shifts, but it's certainly possible).

The good news is that the Danish IT industry is short on qualified people and can deal with you not speaking Danish.


It's super easy actually. All one needs is to be a freelancer in the EU and use W-8BEN form in the US. No additional taxes, just EU ones.

Some suggestions from the german DIY scene:

A step up from the overnight sensations, the Twiggy BR: http://www.hifi-forum.de/index.php?action=browseT&forum_id=2... Built them myself, hard to improve on price-performance ratio. They have no right to sound this great given their size & budget.

The Bantams are supposed to be very good as well, suitable for eg desktop use, haven't heard or built them myself yet: https://techtalk.parts-express.com/forum/speaker-project-gal...

There is also a more fancy version called Bantam Onyx, for when looks matter: http://www.hifi-forum.de/viewthread-205-1154.html

Reference class monitors DXT-MON 182, 36-20000Hz, completely flat frequency response: https://heissmann-acoustics.de/dxt-mon-182/


Related to writing scripts on Mac OS, I highly recommend rumps (https://rumps.readthedocs.io) to show anything you want in your status bar.

For example, I have one script that uses rumps to show how many outdated homebrew packages I have (and also as a convenient shortcut to update those packages in the dropdown menu). I also have a second script that uses it to show a counter for open pull requests that I need to review (with links to individual PRs in the dropdown menu). It's great!

Result looks like this: https://imgur.com/yy6GlYk.jpg


> Do you have a hardcore introduction with even more detail / perhaps even with examples of implementations?

Hard to beat the actual technical references when you want something hardcore!

The actual CUDA documentation is good:

https://docs.nvidia.com/cuda/cuda-c-programming-guide/index....

In particular, "Section 5: Performance Guidelines": https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.... gives a lot of micro-architectural details, including those nasty "bank conflicts" that people keep talking about. Honestly, the original documentation says it best with just a few paragraphs on that particular manner:

> To achieve high bandwidth, shared memory is divided into equally-sized memory modules, called banks, which can be accessed simultaneously. Any memory read or write request made of n addresses that fall in n distinct memory banks can therefore be serviced simultaneously, yielding an overall bandwidth that is n times as high as the bandwidth of a single module.

>

> However, if two addresses of a memory request fall in the same memory bank, there is a bank conflict and the access has to be serialized. The hardware splits a memory request with bank conflicts into as many separate conflict-free requests as necessary, decreasing throughput by a factor equal to the number of separate memory requests. If the number of separate memory requests is n, the initial memory request is said to cause n-way bank conflicts.

See? Its really not that hard or unapproachable. Just read the original docs, its all there.

AMD's documentation is scattered to the winds, but the same information is around. I'd say that your #1 performance guidelines are from the ancient optimization guide from 2015. Its a bit dated, but its fine: http://developer.amd.com/wordpress/media/2013/12/AMD_OpenCL_...

Chapter 1 and Chapter 2 are relevant to today's architectures (even RDNA, even though some details have changed). Chapter 2: GCN, applies for all AMD GPUs from the 7xxx series, through the Rx 2xx series, Rx 3xx, 4xx, 5xx, Vega, and CDNA (aka: MI100) architectures.

RDNA does not have as good of an architectural guide. Start with the OpenCL guide for optimization, and then "update" your knowledge with the rather short RDNA guide: https://gpuopen.com/performance/

For assembly language details:

* CUDA's PTX is basically assembly language: https://docs.nvidia.com/cuda/parallel-thread-execution/index...

* PTX is a portable assembly language: NVidia continuously updates their GPUs. Volta was very well studied by this paper: https://arxiv.org/abs/1804.06826. I'd suggest reading this AFTER you learn the basics of PTX.

* AMD publishes their assembly language for each generation. Vega is probably a good starting point: https://developer.amd.com/wp-content/resources/Vega_Shader_I...


I am a professional technical writer. When I started out, I desperately looked for tips and tricks. Internet was (and is) full of tips but I could not find a tech-writing bibliography.

I will soon publish a bibliography of books and guides regarding technical writing. I promise to paste a link here when I am finished, which I believe I will be in a day or two.


I post this from time to time, incluing here: https://news.ycombinator.com/item?id=28422944 with some editing. Recycling some replies. More context on https://news.ycombinator.com/item?id=26182988

- https://news.ycombinator.com/item?id=19924100 (understanding codebases, etc.)

- https://news.ycombinator.com/item?id=26591067 (testing pipelines, scaffolding, issue templates)

- https://news.ycombinator.com/item?id=22873103 (making the most out of meetings, leveraging your presence)

- https://news.ycombinator.com/item?id=22827841 (product development)

- https://news.ycombinator.com/item?id=20356222 (giving a damn)

- https://news.ycombinator.com/item?id=25008223 (If I disappear, what will happen)

- https://news.ycombinator.com/item?id=24972611 (about consulting and clients, but you can abstract that as "stakeholders", and understanding the problem your "client", who can be your manager, has.)

- https://news.ycombinator.com/item?id=24209518 (on taking notes. When you're told something, or receive a remark, make sure to make a note and learn from it whether it's a mistake, or a colleague showing you something useful, or a task you must accomplish.. don't be told things twice or worse. Be on the ball and reliable).

- https://news.ycombinator.com/item?id=24503365 (product, architecture, and impact on the team)

- https://news.ycombinator.com/item?id=22860716 (onboarding new hires to a codebase, what if it were you, improve code)

- https://news.ycombinator.com/item?id=22710623 (being efficient learning from video, hacks. Subsequent reply: https://news.ycombinator.com/item?id=22723586)

- https://news.ycombinator.com/item?id=21598632 (communication with the team, and subsequent reply: https://news.ycombinator.com/item?id=21614372)

- https://news.ycombinator.com/item?id=21427886 (template for taking minutes of meetings to dispatch to the team. Notes are in GitHub/GitLab so the team can access them, especially if they haven't attended).

- https://news.ycombinator.com/item?id=24177646 (communication, alignment)

- https://news.ycombinator.com/item?id=21808439 (useful things for the team and product that add leverage)

- https://news.ycombinator.com/item?id=20323660 (more meeting notes. Reply to a person who had trouble talking in corporate meetings)

- https://news.ycombinator.com/item?id=22715971 (management involvement as a spectrum)

- https://news.ycombinator.com/item?id=25922120 (researching topics)

- https://news.ycombinator.com/item?id=26147502 (keeping up with a firehose of information)

- https://news.ycombinator.com/item?id=26123017 (fractal communication: communication that can penetrate several layers of management and be relevant to people with different profiles and skillsets)

- https://news.ycombinator.com/item?id=26179539 (remote work, use existing tooling and build our own. Jitsi videos, record everything, give access to everyone so they can reference them and go back to them, meetings once a week or two weeks to align)

Write better. Always.


<sarcasm>If you are planning to build a Notion competitor, I recommend Slate</sarcasm>. Seriously though, if you need to support Android or CJK, you should understand Slate’s limitations before you buy into it. I think ProseMirror is the best choice today because it has been around for a long time and has battle-tested MutationObserver logic. Lexical is worth considering depending on your risk appetite. It also uses MutationObserver and appears to approach Android correctly. I haven’t read enough of the code to recommend it yet. In Slate, Android is a second-class citizen with an extremely bare-bones MutationObserver reconciler. The main codebase only uses beforeInput.preventDefault which doesn’t work on Android.

In the decade I spent working on RenderMan at Pixar, I learned just how immensely useful it was to have an image viewer running in a separate process talking to the renderer over a socket or pipe. (The Image Tool, or "It" is RenderMan's viewer.) Having it stay up even if you kill the render or it crashes for some reason and being able to flip back and forth to easily compare test renders across recompiles is game changing.

If I were to start writing a new renderer, the first thing I'd do is to hook it up to an external image viewer over some protocol. These days, I find myself liking TEV (https://github.com/Tom94/tev) a lot as a simple open-source image viewer that supports this and most other basic features that I'd want. See the links in the README for Python and Rust implementations of its protocol.


Easy setup with:

- traefik (nginx proxy with auto letscencrypt)

- portainer (docker container management)

- fail2ban (basic security)

- logwatch (server / security stats by mail)

- munin (server stats)

- restic (cloud backup)

- unattended-upgrades (auto install security updates)

- apticron (weekly info)

- n8n (automatisation for e.g. quick info via telegram, if something not work)

Run every app that you want in your container.


It's not directly your answer but I highly recommend this for elderly relatives and anyone susceptible to scams: I grabbed the signing certificates for Anydesk, Logmeinrescue and all the common "remote management" apps, and block them in Applocker.

I've taken the phone call that says "I have the police on the phone and they need me to do something but the computer keeps blocking it, what do I do??". That's how you know you just saved them from a horrible mistake.


I use https://paddle.com/ for a paid Chrome extension (https://www.checkbot.io/).

The major reason I use Paddle over Stripe is Paddle deal with all EU VAT and other country specific tax + admin for you which Stripe still don't (as far as I know). If you're a small team or solo, you really don't want to be burdened with the extra work here and the scope for complicated and scary tax related mistakes.

Each month Paddle send me a single payment and I record those as business income - that's it, done.

Edit: Pricing is 5% + $0.50 per transaction. As far as I know, Fastspring is more expensive and Gumroad is cheaper, and both take care of tax for you the same as Paddle.


Sorry to hear it.

# Here are some of the things that I've done. Here's to hoping it's effective.

1) Everyone uses Bitwarden[0] to store their passwords. We have an Organisation account which makes sharing passwords easy. I check master passwords against HaveIBeenPwned, and ask they use the generated Bitwarden passwords for their accounts.

2) The least tech-saavy amongst my family either get Chromebooks (which I despise because Google), or they get a Windows machine that I lock down pretty hard [1]. The lock-down may look draconian to power users, but they've yet to mention they can't do something they want to.

3) Its listed in the link in (2), but I make sure everyone runs uBlock Origin. It's far more useful than an antivirus.

4) I have a few catch-all emails I encourage my family to use for subscriptions. When asked for an email, use [website name]@[family member code].[domain].[tld]. That way, unless spearfished, you're likely to know the true providence of an email.

5) We have a NAS that is 3-2-1 backed-up, and encourage everyone to keep sensitive information there. Hopefully this is enough to avoid cryptolockers extorting us.

# Things I want to do

5) It would be better if we used one of those self-hosted random email generators to prevent maliciously constructed email domains at our catch-all instilling false confidence.

6) I'd like to install PiHole [2].

7) I have a Twilio number that goes straight to voice mail and sends me the audio files and forwards SMS. I'd like to create these for my family (maybe using extension numbers?) so they can use them on forms.

[0] https://bitwarden.com/

[1] https://noteaureus.org/post/tutorials/sysadmin/win4unsavvy/

[2] https://pi-hole.net/


Watch this excellent talk in 2012 by Gail Goodman titled "When software and people mix" at Business of Software: https://vimeo.com/54076835

She talks about the "long, slow, SaaS ramp fo death". She gets into practical details on how they went on from starting in October 2000, having a 100 customers at $30/month by April for a total of $3,000/month total revenue. She also talks about specific things they did to distribute the product, get more clients, charge more, etc.

Just watch the first 5 minutes and you'll know you will want to watch the rest.


https://www.refactoringui.com/book and https://hellowebbooks.com/learn-design/ are good introductions for non-designers. Color selection, a bit of font theory, spacing, best use of icons.

refactoringui is by the author of tailwind CSS framework. Later launched https://tailwindui.com/#components It costs money, I use the screenshots for inspiration only.


Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: