Hacker Newsnew | past | comments | ask | show | jobs | submit | ratatoskrt's commentslogin

I disagree.


No mobile support. I get that a desktop UI framework doesn't want to target smartphones, but I think iPads (and bigger Android tablets) can cope well with more traditional desktop paradigms.


Interested in this as well. I'm currenlty using Skia (through skia-safe) but I'd be quite open to try another renderer if there are performance improvments.


Many countries do not legally permit the extradition of their own citizens. In Germany, extradition is generally only allowed to other EU countries, which meant the German government’s options were quite limited.


I don't know, I don't think there are many open-source third-party firmware implementations for these kinds of chipsets out there, so it seems pretty well obscured.


I think often it's also a combination of what you described and big companies being super risk-averse. Why risk breaking regulations if you can just say no?

Then again, lots of Wi-Fi-enabled devices support simply changing their region setting and will happily let you use different Wi-Fi bands or increase signal power.


True but those bands are still official wifi bands somewhere.

On software-defined radios you can often use them way out of spec, way more so than using a forbidden channel. But in a totally different band. A good example is the RTL-SDR stick which was designed to be a TV received but can be used as a wideband SDR these days. That's a receive-only device so it's not that critical to regulators. Once you can transmit, it becomes more of a problem.

An example of a more problematic transmission device is the Raspberry Pi PWM pin. That's been used to transmit all sorts of stuff on many bands. Because it was never designed to transmit anything, it causes all kinds of weird harmonics and artifacts. It's a really bad idea to use it for that. Most people just do it under controlled circumstances.


> why not compile-time error for reading memory that hasn't been written?

so... like Rust?


Curiously, C# does both. It uses compile-time checks to stop you from accessing an uninitialized local and from exiting a struct constructor without initializing all fields; and yet, the CLR (the VM C# compiles to) zero-initializes everything anyway.


It has to because the analysis to detect that fields are initialized in the constructor body is unsound. Since you have access to `this` inside the constructor, you can call other instance methods which may access fields before they have been initialized.

Java has the same problem.

(Dart, which I work on, does not. In Dart, you really truly can't observe an instance field before it has been initialized.)


This is a pain. I recently switched from Java (and its whole Optional/null mess) to C#. I was initially impressed by its nullable checks, but then I discovered 'default'. Now I gotta check that Guids aren't 0000...? It makes me miss the Java situation.


You don't need the "default" keyword to run into that. A simple "new Guid()" gives you all-zeroes (try it!). Nice and foot-gunny.


> A simple "new Guid()" gives you all-zeroes

In C#, to have all zeroes, you would do "Guid.Empty"


(continued from my comment above) Apologies, I am missing some text on here. No sure what happened. I might have deleted before I submitted. I cannot edit this comment, but I need to clarify and correct it...

"new Guid()" is equiverlant "Guid.Empty"

Personally, I would prefer writing "Guid.Empty" as it is cleaner. It also helps ensure you understand reading other developers code... their intensions.

Afterall, a lesser experienced developer may not know (or simply forgot) that "new Guid()" does not create a new, unique value. So writing "new Guid()" looks more misleading.

var myGuid1 = new Guid(); // all zeroes, or a value?

var myGuid2 = Guid.Empty; // Ah.. all zeroes.

It is ESPECIALLY cleaner when doing comparison :-

if(myGuid2 == Guid.Empty) { }

To set a Guid, you would do :-

myGuid2 = Guid.NewGuid(); // This makes sense.


Only if you go out of your way to author a method with (Guid someGuid = default) argument. I've never seen it happen with Guids, if someone gives you default(Guid) - they did it on purpose, it's no different to explicitly setting `0` to an integer-typed UserID property.

If supplying Guid is optional, you just make it Guid?.

To be fair, I don't think offering default(T) by default (ha) is the best choice for structs. In F#, you have to explicitly do `Unchecked.defaultOf` and otherwise it will just not let you have your way - it is watertight. I much prefer this approach even if it can be less convenient at times.


That’s likely because p/invoke is quite common.


No, that's just the memory model of CLI and the choice made by C#. By default, it emits localsinit flag for methods which indicates that all local variables must be zero-initialized first. On top of that, you can't really access unitialized memory in C# and F# anyway unless you use unsafe. It's a memory safety choice indeed but it has nothing to do with P/Invoke.


The main motivation to use unsafe is p/invoke.

Without unsafe, zero init is not needed.


> The main motivation to use unsafe is p/invoke.

This is opposite to the way unsafe (either syntax or known unsafe APIs) is used today.


Explicit use of unsafe is used for things like avoiding allocation, sure.

All use of p/invoke is also unsafe though, even if the keyword isn’t used. And it’s much more common to wrap a C library than to write a buffer pool.


To be fair, Git itself is a bit of a pain, and GitHub's main achievement is/was to make it somewhat bearable.


I regard the Git docs as being fully equal to scientific Wikipedia articles.

Everything is fully and completely explained, in terms which mean nothing.


I find both Wikipedia and Git docs typically more useful than this. Much more.

(They ain't perfect, of course.)


https://en.wikipedia.org/wiki/Declination

"In astronomy, declination (abbreviated dec; symbol δ) is one of the two angles that locate a point on the celestial sphere in the equatorial coordinate system, the other being hour angle. The declination angle is measured north (positive) or south (negative) of the celestial equator, along the hour circle passing through the point in question."

Anyone who doesn't know what declination is, know from reading the introductory paragraph of this scientific Wikipedia article?

Anyone? no? :-)

I rest my case, m'lud.


I've never heard of it before, and it makes perfect sense what it is from that intro.

On a celestial sphere (planet, star, etc) the declination angle (being 0 is at the equator, being 90 degrees is the north pole of the sphere, being -90 degrees, is at the south pole).

You also need another angle known as the "hour angle" to locate a point on the sphere. It doesn't explain what that is, but as can be seen on Wikipedia, you can easily click on that word to go to the entire page that explains what it is.

What don't you understand?


Well, you misunderstood / mis-guessed what celestial sphere means. Interestingly enough, your mis-understanding also sort-of works.


Well that was a whole other topic. And luckily it links to a page that explains the whole topic of what a "celestial sphere" is. Going to the page, I see I was indeed wrong about what it was, but now I see it is an abstract sphere, with a radius that can be whatever size you want, and that is centered on the Earth, or on the observer.

Once again, not so difficult to figure out even if you have no experience in the specific technical field of a Wikipedia article. So I have no idea what /u/casenmgreen's problem is.


I think I see casenmgreen's is trying to get at. But they just picked an example that (to you and me) just isn't all that complicated nor bad.


> Anyone who doesn't know what declination is, know from reading the introductory paragraph of this scientific Wikipedia article?

Why should this be a metric one would want Wikipedia to meet? It's an encyclopedia, not an astronomy course.

Of course, the brilliance of Wikipedia is that if you think you can write a clearer intro, you can do so! You could even add it to the simple language version of the page - https://simple.wikipedia.org/wiki/Declination


To be fair, most of the its difficulty is realized when you're stuck with a teammate rewriting history. Who, much like anyone anyone doing the same, hasn't bothered reading a book explaining things.


If you don't rewrite history in git, I don't want to bisect in your repos.

If you push rewritten history to master, you're a git.

Conclusion: learn your tools.


Not a single soul besides the one rewriting history knows what they're in for after the fact.

It's a recipe for disaster.

Unless you mean squashing commits, which I don't consider rewriting history, just a retelling of the fact. Still, it's something one can only do very sporadically, or at known periods of time. I

'm sure others would be more pedantic about it and this wasn't clear above.


The modern workflow is just to let GitHub squeeze yor shit commits into one and then rebasing that.


Hardly anything modern about it, but it's a way of keeping a somewhat sane history. Certainly better than merging 'fix' 'fix' 'fix comments' into master.

The thing is, we could have done better (and have been) since before git even existed.


The "squash everything" mantra turns git commit history into a series of snapshots devoid of any logical notion about how code evolves.

Squashed commits are strictly worse than plain, non-fast-forwarded merges from rebased branches.


Depends on your commits. If it’s untested noise I’d much rather they’re squashed so bisect doesn’t meander in trash.


Bisecting with --first-parent takes care of this.


There are legit reasons to have a series of commits within one PR, and rebase and merge them as is, and use amend/fixup and force pushes to maintain them cleanly.

It's not my favourite process, but...


That problem is solved by preventing forced pushes. Rewriting history locally is encouraged.


Prevent forced pushes on protected branches (develop, main, hotfix etc.). I don't care if somebody force pushes their private feature branch.


Force pushing onto PR branches is the only way to make the commit history in them sane.

But GH's PR process is broken anyways. I miss Gerritt.


No, git's CLI is terrible mess.


In some sense, git is actually like advanced zip versioning system. A commit is literally just a snapshot of code base except it tell you what is the previous version of this version.

Also, git store the files in a smarter way so file size won't explode like zip versioning.


> A commit is literally just a snapshot of code base except it tell you what is the previous version of this version.

Or previous versions. Plural. Yes.

Well, that's one half of git. The other half is tooling to work with the snapshots and their history, eg to perform merges.


On the other hand, the other part of git aren't really strictly work only for git. Create and apply diff also works for plain folder without git history. They are big part of the ecosystem while not bound to git in a strict way either.


The changes have been committed and pushed to a branch of the main (Apache-licensed) repo, with the clear intention of eventually being merged into the main branch. So it’s hard to argue the code isn’t published under the same licence as everything else. Still, I think they should have created their own website.


Ugh... I guess legally it's okay (as the whole code including the website seems to be Apache-licensed) but the optics are not great...


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

Search: