HN user

kyle_u

175 karma
Posts2
Comments32
View on HN

Location: Denver, CO

Remote: Yes

Willing to Relocate: No

Technologies: Go, TypeScript, Scala, Rust, C#, Java, Python, C/C++, SQL, HTML/CSS, JavaScript

Résumé/CV: https://kyleu.dev/resume

GitHub: https://github.com/kyleu

Email: hn@kyleu.dev

I've been creating software for more than 25 years, and coding is still my true passion. I specialize in software performance, simplicity, developer experience, and solving the difficult problems that arise with complex distributed systems. In my last role, I served as a Principal Engineer for a large engineering team, designing and building a large global web commerce platform where I created architecture, frameworks, and backend services, mostly in Golang and TypeScript.

I've built many open-source projects, with Project Forge (https://github.com/kyleu/projectforge) being the best representation of my work. It’s a solo project with almost 100KLoC, and has delivered significant value to the organizations I collaborate with, despite being currently unannounced and under-documented.

I'm seeking full-time employment as a Principal Software Engineer or similar role. I'm eager to bring my extensive experience to a new team, contribute to exciting projects, and work alongside other passionate developers. Feel free to drop me a line at hn@kyleu.dev if you think we could be a good match.

Fevo | New York City or Remote (NA/Europe) | Full time | https://fevo.com

Fevo is an ecommerce platform specializing in social selling. We help people buy things and enjoy them together. Come build things with us!

What we do: We've been changing the ticketing industry since 2016, and now we are expanding into hospitality, travel, insurance and luxury industries.

Things we love about Fevo

- We've been fully remote since before COVID, though we have an office in the meatpacking district.

- Excellent compensation; we work hard and Fevo takes good care of us financially. All employees have stock options.

- We welcome diversity, and are an inclusive workplace. We're excited to work with you.

- We create useful software using exciting technologies, with an established and talented global team.

Stack

- Backend: Golang (we've already upgraded to 1.18), some modern Java (via Quarkus)

- Frontend: Typescript, React, Redux

- DB: Postgres

We are looking for enthusastic engineers with 3+ years of experience. We are open to candidates in North America and Europe, and we require that your workday has some overlap with core-east coast hours (9-5 EST).

Please reach out to hn@fevo.com to apply or discuss. A full list of roles we are hiring for is at https://jobs.lever.co/fevo

No recruiters were involved with putting together this post - it was written solely by engineers at Fevo.

Having it client/server eliminates the possibility of cheating, lets me get exact timings for analytics and data mining and whatnot, and lets me implement cool things like "Observe Game" (coming soon!).

After the feedback from this thread, I'm going to move to a "hybrid" model where the model logic all happens locally, but still fires websocket events to the server. Best of both worlds.

Holy crap, I've been waiting for someone to ask me that (I need more coding friends). The entire game is client/server. The client is pure JavaScript, and communicates with the server using only a few messages (select card, move card, etc). Normally, it connects via WebSocket to my Play Framework/Scala app, and the server processes moves and sends the results and a list of potential moves back to the client.

If you download any of the native apps (iOS, Android, Linux, Win, OS X), you can play offline. This is the magic of Scala.js. The same code that my server uses gets compiled down to JS, and the client calls it directly, forgoing the socket connection. You can also see offline mode in the browser by replacing the word 'play' with 'offline'.

Thanks! Phaser.io has a great tweening/animation system I use for some things, but the momentum animation was just a few lines of custom code. You basically just set the angle to a smoothed (distance travelled in last 500ms).

In practice, for my game, I use a single positive signed int as the initial seed for the Scala/Scala.js PRNG (Amazingly, they implement the same algorithm), meaning only two billion or so possible games. If I re-seeded the PRNG each time I moved a card ordering, then the full [52!] shuffles could be generated. I only use initial seed, so that a given seed will always generate the same shuffle/deal order.

I'll probably open source it in the future, there's a lot of code there, and not much money to be made in Solitaire. I did extract some of the best general parts of the app (the admin, authentication, etc) into a project template I call Boilerplay (https://github.com/KyleU/boilerplay). If anyone's interested, I could also publish my pipeline to turn the Scala.js webapp into native apps for OSX, Windows, Linux, iOS, and Android.