HN user

Rangi42

444 karma
Posts1
Comments127
View on HN
FLTK 1.4 Released 2 years ago

Theme author here! I designed those for a few of my C++ programs years ago, back before FLTK had high-DPI support. (I wasn't involved with porting them to fltk-rs, but I'm glad FLTK for Rust has them available!)

At 100% scaling, they look they way they're supposed to.[1] But at other scales, particularly non-integer ones, their drawing code will need updating to use the new fl_override_scale()/fl_restore_scale() API.[2] (Now that 1.4.0 is officially out, I expect to get back to maintaining those programs.)

[1] https://i.imgur.com/A7CvKFe.png [2]: https://groups.google.com/g/fltkgeneral/c/gcqn9EeA7_A/

Location: New York City, NY

Remote: Yes

Willing to relocate: No

Technologies: Java, Spring, C, C++, Python, Spark, SQL, MongoDB, Angular, HTML5, CSS3, Javascript, Typescript, Git, Windows, Linux

Résumé/CV: https://www.linkedin.com/in/remyoukaour/

Email: remy.oukaour@gmail.com

Experience: 3 years full-stack fintech development; 2 years academic research; various web development; BS+MS in Computer Science

I've worked on a variety of projects in the past few years, from web app frontends and backends to an automated trading system, as well as retro assembly programming in my spare time (it's the polar opposite of Java+Spring's high-level abstraction). I'm seeking full-time employment but would also be open to short-term positions.

With C++17's compile-time conditionals, plus good old C preprocessor macros, you could do this:

    #define MATCH_VARIANT(x) [](auto& x)
    #define CASE_VARIANT(x, T) constexpr (std::is_same_v<std::decay_t<decltype(x)>, T>)
    
    MATCH_VARIANT(arg) {
        if CASE_VARIANT(arg, string) {
            printf("string: %s\n", arg.c_str());
            // ...
        }
        else if CASE_VARIANT(arg, int) {
            printf("integer: %d\n", arg);
            // ...
        }
        else if CASE_VARIANT(arg, bool) {
            printf("bool: %d\n", arg);
            // ...
        }
    }
(MATCH_VARIANT could be extended to allow capturing vairables, or just omit that macro, it saves less typing than CASE_VARIANT anyway.)

Location: New York City, NY

Remote: Willing to consider

Willing to relocate: No

Technologies: C++, C, Python, Java, PHP, SQL, HTML/CSS, Javascript, Windows, Linux, Git, GUI design, technical writing

Résumé/CV: https://www.linkedin.com/in/remyoukaour/

GitHub: https://github.com/roukaour/

Email: remy.oukaour@gmail.com

I left Stony Brook University in 2017 with a Master's in Computer Science, and am currently seeking a software development position. I'm open to contract, part-time, or full-time opportunities. I care about writing code that's not just correct, but documented for the developers' sake and designed for the users' sake.

Location: New York City, NY

Remote: Willing to consider

Willing to relocate: No

Technologies: C++, C, Python, Java, PHP, SQL, HTML/CSS, Javascript, Windows, Linux, Git, GUI design, technical writing

Résumé/CV: https://www.linkedin.com/in/remyoukaour/

GitHub: https://github.com/roukaour/

Email: remy.oukaour@gmail.com

I left Stony Brook University in 2017 with a Master's in Computer Science, and am currently seeking a software development position. I'm open to contract, part-time, or full-time opportunities. I care about writing code that's not just correct, but documented for the developers' sake and designed for the users' sake.

As the paper's abstract states, "Quadratic cost uniquely makes the marginal cost proportional to votes purchased". The full paper shows their proof and the assumptions behind it, such as "an individuals’ value for votes is likely to be approximately linear in the number of votes she casts so long as her utility is driven by the impact she has on the vote total, as argued by Mueller (1973, 1977) and Laine (1977)".

If merely 100 less-wealthy voters out of the whole population couldn't coordinate to buy a few extra votes—and they wouldn't even have to explicitly communicate, it would just take 100 people who individually hear about the issue and decide to vote more—then how important can the issue really have been to them?

I believe this is what is meant by "the collective decision rapidly approximates efficiency as the number of voters increases".

That translates fairly well into Python, with its set type and list/set/dict comprehensions.

    def setrange(first, next, last):
        return set(range(first, last+1, next-first))
    
    fizz = setrange(3, 6, 100)
    buzz = setrange(5, 10, 100)
    fizzbuzz = fizz & buzz
    fizz -= fizzbuzz
    buzz -= fizzbuzz
    num = setrange(1, 2, 100) - fizz - buzz - fizzbuzz
    line_map = dict({n: "Fizz" for n in fizz}.items() +
        {n: "Buzz" for n in buzz}.items() +
        {n: "FizzBuzz" for n in fizzbuzz}.items() +
        {n: n for n in num}.items())
    for i in range(1, 100+1):
        print(line_map[i])
Some SETL features Python lacks:

• No ellipsis notation for ranges; must use the "range" function and add one to the maximum value, or define a custom "setrange" function

• Can't concatenate dictionaries; must concatenate their "items" lists and convert back to a dictionary

• No consistent map-lookup notation; collections are indexed with brackets, but functions are called with parentheses

From the Google Maps & Earth Help Forum[1]:

Why does Google maps use the inaccurate, ancient and distorted Mercator Projection?

Maps uses Mercator because it preserves angles. The first launch of Maps actually did not use Mercator, and streets in high latitude places like Stockholm did not meet at right angles on the map the way they do in reality. While this distorts a 'zoomed-out view' of the map, it allows close-ups (street level) to appear more like reality. The majority of our users are looking down at the street level for businesses, directions, etc... so we're sticking with this projection for now.

[1] https://productforums.google.com/forum/#!topic/maps/A2ygEJ5e...

Apparently those are names for 50 and 100 BTC.

From this presentation[1] or the source code[2]:

    1 Lovelace = 1 Bitcoin
    1 Goldwasser = 10 Bitcoin
    1 Rackoff = 25 Bitcoin
    1 Pedersen = 50 Bitcoin
    1 Williamson = 100 Bitcoin
But yes, those are meaningless names in themselves. Metric prefixes like "hectobitcoin" would be better.

[1] https://sar.informatik.hu-berlin.de/teaching/2013-w/2013-w%2... [2]: https://github.com/Zerocoin/libzerocoin/blob/master/Coin.h#L...

"Unambiguous" is not the same as "trivial". C code generally reads left to right, so a trivial syntax for declaring, say, an array of const pointers to functions that take a const pointer to a char and return a const pointer to a char, would have tokens for those things in that order.

I'm all for some kind of social support system to help people through automation. Unemployment benefits, basic income, subsidized retraining, those have their merits. But how does giving someone a do-nothing job, where everyone (including the worker) knows they're dead weight, respect their dignity?

Effectively legal? It is legal. I can privately crawl the web for all references to "John Doe", "johndoe.com", "/u/johndoe28", etc, and save them, because it's all content that John Doe chose to make publically available, whether on his own website or on forum posts or Facebook or what.

There's probably some point at which the ways I use that data can be classified as stalking or harassment, but simply collecting it is allowed.

Nommu Linux 10 years ago

TempleOS already does this. ("This" being "no virtual addresses".)

If you can rely on the developer to use gotos in clear patterns like that, then great. But if there is a recognizable pattern, it's an opportunity for the language to provide an alternative like with{} or try{}finally{}.

That's a false dichotomy, especially since they're getting more flak for deleting the controversial photo than they would have for removing it. It's pretty easy to distinguish between a historically significant photo, to keep, and 4chan-style offensive trolling, to delete. There is a gray area, but this was clearly on the right side of it.

That cursor bug has bothered me on Xubuntu 16.04. I didn't realize how old it was. Is there a workaround besides "awkwardly save your work and restart using the keyboard and an invisible cursor"? (Please nobody say "stop using a mouse"; just try editing graphics without one.)

If cornering 80% of the market is so terrible, the EU should make it illegal to sell the Nth Android phone that pushes past 79%, and/or make it illegal for the customer to buy such a phone.

The absurdity of such a proposed law should make it obvious that Google is doing nothing wrong by selling popular devices with a certain operating system.