Piratebay strikes back - <AUTHOR> http://blog.brokep.com/2009/10/08/fail-in-nl/ <comment><USER2> according to:

[http://webwereld.nl/nieuws/63922/pirate-bay-doet-aangifte- te...](http://webwereld.nl/nieuws/63922/pirate-bay-doet-aangifte-tegen-brein- en-kuik---update-2.html)

(dutch) Update 22.03 uur: Joris van Manen, advocaat voor de stichting Brein, laat in een reactie weten dat het Experian-rapport voor Brein "geen enkele rol" speelt in de zaak tegen de beheerders. Het was destijds bij een brief aan de rechtbank toegevoegd in de zaak tegen Reservella. "We doen helemaal geen beroep meer op dat rapport. Het is ons bekend dat de gegevens erin niet kloppen."

Update 22.25 uur: Tim Kuik zegt in een reactie dat Brein zich inderdaad niet beroept op dat rapport in de zaak tegen de beheerders. Volgens hem is het rapport wel degelijk authentiek en afkomstig van Experian, maar bleek het niet te kloppen.

"Dit is afleiding, het zoveelste rookgordijn. Deze jongens blijven verstoppertje spelen. We hebben genoeg bewijs dat de beheerders verantwoordelijk zijn voor The Pirate Bay," aldus Kuik.

Persoonlijk doet de aangifte hem weinig. "Sunde zégt dat hij aangifte doet. We weten het nog niet. Ach, ik merk het wel. Van die vorige aangifte is in elk geval ook nooit meer iets vernomen."

Translation:

Update 22:03: Joris van Manan, legal council for Brein respons that the Experian report is no longer playing "any role" in the case against the owners [of tpb]. The report was added with a letter to the court in the case against Reservella. "We don't base anything on that report. We know that the data in there isn't correct"

Update 22:25: Tim Kuik responds that Brein indeed doesn't base anything on that report. According to him the report is authentic and it came from Experian, but it turned out not to be correct.

"This is just a distraction, the nth smokecurtain. These boys continue to play hide and seek. We have enough proof that as administrators they are responsible for The Pirate Bay", according to Kuik.

He's not bothered personally by the filing of charges. "Sunde says he's going to file. We don't know that yet. I'll fin out about it. That previous filing was never heard from.".

\--

That may all be true, but I can't believe that the court is going to be happy with a party that has apparently not retracted a report that it knew to contain false information.

Also, if Experian says they didn't make that report and Brein says they did, where did it really come from ? If it can be pinned on Brein that they did falsify information it is going to hurt them tremendously. One thing they do is continuously harping on being on the right side of the law, if they falsify evidence then that veil is pierced once and for all.

It will be very interesting to see how this plays out over time, but I don't think 'we're not using that report' is going to make this go away.

<comment><USER3> I'm willing to bet 100 euros that Brein will get away with it.

<comment><USER2> In court, probably yes. But in the press, probably not.

<comment><USER3> I don't know what has happened to most of my fellow countrymen for the last 10 or 15 years but they don't really give a shit. They're of the "if you've got nothing to hide, you've got nothing to fear"-mentality.

</comment></comment></comment></comment><comment><AUTHOR> BREIN appears to have forged evidence. Piratebay files criminal charges against them.

<comment><USER4> Thanks for a short summary. But the post was a great read still!

</comment></comment><comment><USER5> BREIN is the organisation that puts inane 'Downloading is theft' (which it a simple lie, as any lawyer can tell you) commercials at the start of movies in the cinema and on DVD - not possible to skip them of course! Talking down to their paying public like they do, it's like they really WANT people to stop paying for movies and pirate them.

<comment><USER6> _as any lawyer can tell you_

As a point of order they would almost certainly tell you it a) depends on the country, b) has been untested in the majority of countries so it is _neither_ right nor wrong and anyway it probably would count as theft in a civil case sense.

However I agree BREIN are a bit crazy - and the video they add to DVD's is inane.

On the other hand better that than suing individuals I suppose :D (even though that happens too :()

<comment><USER7> No, the crime is copyright infringement. Almost all countries have signed the Berne Convention treaty, and made copyright infringement illegal according to national law.

Theft is a different crime that has been illegal pretty much for as long as there has been laws.

Pirating a movie is illegal because it is copyright infringement, not because it is theft. Therefore, calling it theft is a lie, as any lawyer can tell you.

<comment><USER6> Actually the World Intellectual Property Organization Copyright Treaty is the more applicable one :) (it's an extension to the Berne treaty to make it cover software). Unfortunately whilst both treaties are very specific in some aspects they are unchallenged very unspecific in other important areas.

Also; they establish a civil crime not a criminal one. Theft laws may still apply here in the UK, as it is I know the only massive obstacle to infringement as theft (here in the UK) is the final article - all about the intention to deprive permanently. There are movements by certain pressure groups to get it clarified where the line is drawn.

And anyway - the point the video is trying to make is that it is a "moral" theft. I think it's fair to say the copyright holder has the right to say they feel that morally a "pirate" is "stealing" from them :)

(Im not defending them or the video - or trying to suggest it _should_ be theft)

<comment><USER8> > _And anyway - the point the video is trying to make is that it is a "moral" > theft. I think it's fair to say the copyright holder has the right to say > they feel that morally a "pirate" is "stealing" from them :)_

The actual problem being that they don't state it that way. They don't state that it's a 'moral' theft and not a legal theft. They just state it as 'theft.' It's a PR campaign, plain and simple. They want to influence people to see stealing a car, or stealing 'candy from a baby' as the exact same thing as downloading a movie without paying for it.

</comment></comment></comment></comment></comment><comment><USER9> Oh shit! Have fun with those forgery charges..

<comment><USER10> This is so hilarious, I'm absoutely loving it.

The amount of raw, undistilled incompetence boggles the mind.

Fighting a lost case and losing the case is one thing. Forging court documents and losing _everything_ : PRICELESS.

It also speaks volumes about the mental capabilities of the individuals at work here. How absurdly stupid do you have to be to forge a document that can be trivially cross-checked with a phone-call at the issuing agency? This is not something where you can weasel out later with an "oops, didn't mean to". It's plain out fraud and I don't think judges have much humor in that regard.

Anyways, I think I'm gonna forge me a nice tax-return statement now and sue my state over it...

</comment></comment><comment><USER11> I'm happy for the guys behind pirate bay they are making a killing, every time an article like this crops up on pages like this or digg/reddit its more marketing.

start-ups take note- controversial is king!

<comment><USER12> Software start-ups should in particular note: If you're selling B2C and your target market is technically savvy, the folks who will pirate and distribute your work are considered heroes by many you've hoped to sell to.

<comment><USER13> They provide a better product for less money. That's called capitalism.

The fact that it's _my_ product is unfortunate, but ultimately, I have to compete with them. I can only do that if I can make it easier to deal with my company than with the Pirate Bay. (Which is exactly how iTunes and Spotify work, for instance. You _can_ compete with free: you do it by being _convenient_ , and by finding ways to add value where it wouldn't otherwise exist.)

I've downloaded quite a bit of stuff from various torrent sites, but you know what's funny? I've never downloaded anything that I could have purchased from the copyright holder instead. Whose fault is that?

</comment></comment></comment><comment><USER14> Any US citizens use Pirate Bay less? I applaud them for forcing media's hand which prompted great sites like Hulu and Justin.TV(lol - best of the bunch). It maybe time to throw in the towel; downloading no longer cuts it for me, prefer streaming.

</comment><comment><USER15> To be honest, I hope these guys are going to jail.

You must be a fool to believe that they don't own the pirate bay anymore, or are not associated with the keyman islands shell company running the company.

Alone mininova disclosed making > 1 million of profit a year, piratebay's profit must be much bigger, all from the copyrighted works of others.

Most of you wouldn't support piratebay anymore if your program/source code showed up there, except if it's opensource.

<comment><USER16> I think it would more apt if both sides go to jail, neither is the answer to the future of artistic works. On one side a bunch of cartels that IMO should be investigated by the monopolies and mergers commission and on the other freetards that don't provide a realistic revenue model for artists.

<comment><USER17> The pirates aren't freetards. I resent your accusation.

The current model isn't working if it's so easily subverted. The solution is to figure out a model that's pirate-proof. They exist.

<comment><USER18> Pirate-proof in the sense that works can't be pirated? Or pirate-proof in the sense that piracy is unnecessary because works are already free? I'm pretty sure the former is impossible.

<comment><USER17> The former's impossible in the paradigm where the only way to make money off music is to sell songs. That's not true, though.

A few of the models I'm going to be experimenting with: Raising money _before_ you release an album, with certain perks given to people that pay the money for release. Offering special exclusives that people can choose to pay for, that most people interested in just music won't bother pirating. That's why I'm excited for the iTunes LP: It's an idea that's worth money even after you own the music, that appeals to fans and less to casual criminals.

I'm currently thinking of launching an ARG with a future music project. I think that launching a video game through an album distribution would be really fun and potentially really profitable.

</comment></comment></comment></comment></comment><comment><USER19> well, it's good to believe Reservella is not connected to TPB, but it must be run and owned by someone. TPB claims that the ownership was transferred to this company in 2006. Now how they can be continually discussing a sale of TPB if they don't own it? Anonymous offshore companies are useless under the scrutiny they get. Sooner or latter it will be known who controls it and in this case, I believe, to our major disappointment.

<comment><USER8> > _Now how they can be continually discussing a sale of TPB if they don't own > it?_

So far as I know none of the people that are being charged here stand to gain any money from the sale of ThePirateBay. The company that owns it is the one that stands to profit. This was my impression ever since I heard about the possible sale.

</comment></comment><comment><USER20> This war is already lost for copyrights protectors, the question is when they stop bother us.

<comment><USER21> By us, people who steal stuff?

<comment><USER22> I honestly don't get why this is so heavily down voted. I want my "original hacker's news" back. What's next in the /. -> k5 -> hn chain?

<comment><USER23> _I honestly don't get why this is so heavily down voted._

Because it's a lie? "Piracy" isn't theft. Abortion isn't murder. You can argue that they're wrong, but this kind of misrepresentation is the lowest possible way of discusion. In fact it's an admission that people doesn't look at copyright infringement as wrong, so it must be tagged with a stronger word.

This debate is not going away, because that's the politics of our time. So please, at least let's keep it a little more intelligent than that.

<comment><USER24> dude, this debate is not "going away" because it's grey.

abortion at 8 months 29 days is undoubtedly murder. abortion at 8 months 28 days is undoubtedly murder. Now work backwards, when is it no longer murder?

<comment><USER25> That argument is a form of definition-mongering.

It's basically "because you can't provide an EXACT line that separates these things there's no separation at all!"

But that's plainly not a convincing argument.

<comment><USER24> since when does grey = no separation?

what a weird comment!

</comment></comment></comment></comment></comment></comment></comment><comment><USER26> Charging people in courts far away... the defendants not even knowing about it (or even two courts with hearings at the same time!)

Isn't that what the Scientology church do?

<comment><USER27> It happens. You can even serve legal notice "by publication". So if you can't track someone down and the judge approves it, it's perfectly legal to serve notice by posting an ad in the local newspaper (which of course the recipient will never see).

If this weren't the case, screening your mail judiciously would be the ultimate legal defense against all civil litigation.

<comment><USER8> Isn't that why there is a business to serving subpoenas? Couldn't this be utilized in the same way?</comment></comment></comment>


Scala 2.12.3 Released - <AUTHOR> https://github.com/scala/scala/releases/tag/v2.12.3 <comment><USER2> Since Kotlin has been officially supported by Google for Android, Scala has a strong competition which I hoped to become Java3 one day. [https://developer.android.com/kotlin/index.html](https://developer.android.com/kotlin/index.html)

<comment><USER3> Scala never had a good tooling story on Android, now even less that they moved into Java 8 bytecode.

<comment><USER4> Google is bringing Java 8 support, and from what I understood from one of their engineers, they are working on supporting invokeDynamic as well, so we might get the whole package: [https://android- developers.googleblog.com/2017/03/future-of-...](https://android- developers.googleblog.com/2017/03/future-of-java-8-language-feature.html?m=1)

Scala 2.12 has moved to Java 8 indeed, however this means modern features that are used for encoding Scala: invokeDynamic and default interface methods.

These should make Scala compiled code faster and more stable in regards to backwards compatibility. Both Java 6 and 7 have need EOLed. We cannot stand still because of Android's shitty support.

Google has effectively fractured the ecosystem, pulling off what Microsoft couldn't do with J#, and they got away with it. I actually think that they preferred to announce Kotlin as being a first class citizen as a marketing trick in order to offset the lack of support for Java 8.

Even so, Scala does in fact have great Android support:

1\. Scala 2.11 will remain supported for some time, language-level features have already been backported from 2.12 and Typelevel.org also has a commitment to support it even further

2\. We have great integration with the tool chain, see [https://github.com/scala-android/sbt-android](https://github.com/scala- android/sbt-android)

3\. For a pretty cool open source project made with Scala, that uses functional programming libraries like Cats and Monix, see: [http://www.9cards.io](http://www.9cards.io)

So if you think about it, given all the other tooling available, compared with other languages Scala actually has stellar support, along with actual projects ;-)

<comment><USER3> > Google has effectively fractured the ecosystem, pulling off what Microsoft > couldn't do with J#, and they got away with it.

Mostly because of the SV love, that Microsoft lacked.

Sun and Oracle were right all along.

> Even so, Scala does in fact have great Android support:

I don't agree with it, because for me having to deal with SBT, outdated android plugins in InteliJ and GUI DSLs instead of Gradle, Android Studio and Studio GUI designer isn't a synonym for great.

Maybe it changed during the last two years, but that was the scenario I faced.

<comment><USER5> I think it has very much changed. In any case, open source tools are there to be improved by the community. If you feel sbt is not solving your problems in the right way or could be improved, please get in touch with us. We're always happy to make the tool easier to use, at all levels.

<comment><USER3> I am not really into Scala, just wanted a better alternative to Java 6 on Android.

Finally getting some kind of official support for Java 8 and addition of Kotlin solved that problem.

</comment></comment></comment></comment></comment></comment><comment><USER6> Re: compilation speed, a story with happy end: Achieving 3.2x Faster Scala Compile Time

Diagnostics:

\- A method that takes an additional, implicit parameter that needs to be filled in by the compiler

\- the Scala compiler synthesized an argument for that parameter using macros

\- instead of using an existing value in the implicit scope

Conclusion: that's why a small source file took so long to typecheck.

Details at [https://jobs.zalando.com/tech/blog/achieving-3.2x-faster- sca...](https://jobs.zalando.com/tech/blog/achieving-3.2x-faster-scala- compile-time/)

</comment><comment><USER7> Compile time might be the only thing I truly dislike about scala.

<comment><USER8> With incremental compilation I find it's not a problem anymore. Obviously, ymmv, depending on your project size, used libraries, and other factors.

</comment></comment><comment><USER9> Are there any stats for the compiler speed difference?

<comment><USER10> [https://scala-ci.typesafe.com/grafana/dashboard/db/scala- ben...](https://scala-ci.typesafe.com/grafana/dashboard/db/scala-benchmark)

<comment><USER11> Maybe I'm reading these graphs wrong but isn't 2.12.x almost always at about the same level as 2.13 for 2017 compilations? Both of which don't seem that much faster than 2.11.

<comment><USER5> You're not reading them wrong. There are two things that made 2.13 faster than 2.12, one of which is suprising.

1\. Ports from 2.12.x: [https://github.com/scala/scala/pull/6001](https://github.com/scala/scala/pull/6001).

2\. The removal of Scala parallel collections from the Standard library: [https://github.com/scala/scala/pull/5603](https://github.com/scala/scala/pull/5603). Read discussion to find out why.

<comment><USER12> >"The removal of Scala parallel collections from the Standard library"

Does this just mean that the import statement has to be changed, or does it mean that I need to use SBT to dynamically download yet another thing?

</comment></comment></comment></comment></comment><comment><USER13> Too bad major projects got stuck on 2.10 and there is no safe way to upgrade to anything newer. We were running into issues even upgrading to 2.11 with Spark.

<comment><USER5> Which are these major projects? Spark?

As far as I'm concerned, they are working on a way to upgrade to Scala 2.12. But closure serialization is the main blocker IIRC, for now.

<comment><USER14> Spark has been a massive disappointment with their Scala support.

I appreciate they have legitimate reasons and am not critical of them for it. It's just that many users of Spark are doing so through vendors like Cloudera, Hortonworks, Amazon EMR etc. And so, since companies often don't have the money/time to just continuously upgrade production Hadoop clusters often users are stuck on older versions of Spark for a very long time e.g. months or years.

This translates to if you're working in Big Data everything you touch must support 2.10.

</comment></comment></comment><comment><USER15> > All 2.12.x releases will be fully binary compatible with 2.12.0

That's the scary bit of detail about Scala releases, so far - I find that an upgrade of the compiler is only possible if you've ready to build up everything.

<comment><USER5> What do you mean? That you depend on other dependent projects releasing versions compatible with 2.12? Isn't this reasonable?

<comment><USER16> Not really, if a library is stable and doesn't need any change it's likely that the developer will not bother to recompile it, or even will abandon it, making it unusable (unless you compile a new version yourself). You also need that all your dependencies are updated before you can upgrade yourself. I haven't touched Scala in a while so I don't know if it is still the case but it seems like a serious problem, in the long run it will be the cause of many lost libraries.

In Java you can use an old dusty library from 15 years ago without a problem.

<comment><USER17> I still disagree in this specific case.

2.12 was a major release; even a semi-active developer would recompile. If a dependency did break, then sbt just helped you avoid using an unmaintained library.

</comment></comment></comment></comment><comment><USER18> Is it binary compatible with the previous version?

<comment><USER19> Yes, it is stated on the page

> As usual for minor releases, Scala 2.12.3 is binary compatible with the > whole Scala 2.12 series.

</comment></comment><comment><USER20> Woohoo</comment>


Show HN: PraiseMe-Receive Personalized Confidence Boost - <AUTHOR> https://praisemeapp.com/ <comment><USER2> Would be interesting to see a quantitative study of how helpful this type of thing is (e.g. compare student performance on a test with and without the confidence booster).

<comment><USER3> who needs confidence boost the most? the students?

<comment><USER2> Not sure who needs it the most, but many studies show large percentages of graduate students are mentally distressed. It could help there. I was just giving an example of how to quantify how much it helps.

<comment><USER3> makes sense.</comment></comment></comment></comment>


Show HN: pauldufour.com - <AUTHOR> http://pauldufour.com/?

<comment><AUTHOR> I thought my resume needed a design update, since I haven't touched the design since 2007. I am in the web field, so I figured the best idea was to create an online resume. What do you think? Any and all feedback is welcome.</comment>


Mypy – static type checking for Python 3 - <AUTHOR> https://github.com/JukkaL/mypy <comment><USER2> Just a few days ago Guido proposed to adopt the Mypy syntax for type annotations in Python 3.5. There is a big discussion going on on the python- ideas mailing list about that and the general idea of having optional static typing in Python:

[https://mail.python.org/pipermail/python- ideas/2014-August/0...](https://mail.python.org/pipermail/python- ideas/2014-August/028618.html)

[https://mail.python.org/pipermail/python- ideas/2014-August/0...](https://mail.python.org/pipermail/python- ideas/2014-August/028742.html)

Recommended reading for those interested in the topic.

<comment><USER3> This is probably the best thing i've heard about python in the last 2 years. Guido's point are all 100% valid.

Python should take example on Typescript. It's light and smart. And that's enough to cover 99% of the cases.

Just let me specify that function foo's first parameter is an array of "stuff", and i'll be the happiest man. Leave the complicated cases for future versions.

</comment></comment><comment><USER4> I wrote a decorator-driven library to do optional type checking at runtime with no need for a special interpreter :)

[https://github.com/kislyuk/ensure](https://github.com/kislyuk/ensure)

(Having optional static type checks in the core interpreter would be nice, though Alex Gaynor's concerns linked in another comment are very valid.)

<comment><USER5> I think one of the strengths of Mypy's approach is the fact that it _doesn't_ do type checking at runtime. It may be inconvenient to have a separate step for type checking, but it also doesn't impart any runtime performance penalty.

</comment></comment><comment><AUTHOR> Former HN discussion at: [https://news.ycombinator.com/item?id=4561973](https://news.ycombinator.com/item?id=4561973)

Although it seems that MyPy has done a lot of progress since, most notably adopting Python 3 syntax for type annotations.

</comment><comment><USER6> Has anyone used this with Django? If it works well I might replace Ruby with Mypy.

Doing iOS (with Swift) for a while has made me dislike not having static typing.

</comment><comment><USER7> It would be awesome to combine pypy and mypy. Pypy could probable use static typing to gain some speed.

<comment><USER8> Alex Gaynor, one of the PyPy developers said (on the mailing-list where Guido proposed this):

 _You 're right. None of this would provide_ any _value for PyPy._

[https://mail.python.org/pipermail/python- ideas/2014-August/0...](https://mail.python.org/pipermail/python- ideas/2014-August/028623.html)

<comment><USER9> Why is that?

<comment><USER5> Because in a dynamically typed language like Python, it is perfectly feasible that the type declared in the code, and type-checked before the program runs, is different when the piece of code actually _runs_. Pypy uses runtime types to make decisions about optimizations, and since those may be different than the types declared at compile time, it will always have to inspect the runtime type anyway.

<comment><USER9> Then the type annotation is wrong, and it shouldn't be there. Type annotations only make sense if you know exactly what the types may be at runtime. I still don't see why correct annotations couldn't help PyPy.

<comment><USER5> Type-checking _via_ those annotations, are, like Guido said, basically a souped-up linter. With a dynamic language like Python, there is _never_ a guarantee that the types that type-checked during compilation are the types that will be observed during runtime. Type-checking Python code via function annotations is nothing like type checking a Haskell program, where you can be reasonably certain that a program that type-checks will run correctly.

Even if you write a program that you can provably show will never have any runtime types that differ from compile time types, Pypy can't assume that will be the case with every program that it tries to run. I don't have any specific knowledge of the optimizations that Pypy runs, but if one of the core contributors of Pypy says it can't be done, I'm inclined to believe him.

<comment><USER9> It is trivial to write a function that always returns a specific type, e.g., def f(): return 1

Therefore your claim that there is "_never_ a guarantee" is simply false. I was asking: what if you DO want PyPy to assume that your types are correct, why couldn't that help?

<comment><USER5> Monkeypatching means that `def f(): return 1` could be turned into `def f(): return "i am now a string!"` at runtime, so I stand by my original statement.

EDIT: Here is a trivial example of a program that type checks at compile time but doesn't present the same types at runtime. Obviously you would never do this in production code, but the same effect could be accomplished simply by doing an `import somemodule`.

[http://codepad.org/OarBYXfZ](http://codepad.org/OarBYXfZ)

<comment><USER9> Your replacing what 'f' is bound to; this would include replacing any type annotations, and triggering any system that relies on type annotations to drop/reset its optimizations for 'f'. You're not actually rewriting the original function to return something different; this would probably also be possible, but would be considered as even more of a dirty trick.

It is unfortunate that such dynamicity is the default in Python, when in reality it is rarely needed. So it would be advantageous to be able to tell the optimization system: this function is not going to change dynamically (on an opt-in basis).</comment></comment></comment></comment></comment></comment></comment></comment></comment>


Indian Workers in U.S. Fear Trump H-1B Visa Crackdown - <AUTHOR> https://www.wsj.com/articles/indian-workers-in-u-s-fear-trump-h-1b-visa-crackdown-1488191404 <comment><AUTHOR> Among the companies/institutions that have replaced Americans in IT with Indians: 1\. Disney of Florida 2\. Southern California Edison 3\. Abbott Laboratories 4\. University of California at San Francisco

[http://www.foxbusiness.com/features/2016/03/01/disney- worker...](http://www.foxbusiness.com/features/2016/03/01/disney-workers- forced-to-train-their-foreign-replacements.html)

[http://www.computerworld.com/article/2879083/it- outsourcing/...](http://www.computerworld.com/article/2879083/it- outsourcing/southern-california-edison-it-workers-beyond-furious- over-h-1b-replacements.html)

[http://www.chicagotribune.com/business/ct-abbott-layoffs- dur...](http://www.chicagotribune.com/business/ct-abbott-layoffs- durbin-0302-biz-20160301-story.html)

[http://www.mercurynews.com/2016/11/03/after-pink-slips- ucsf-...](http://www.mercurynews.com/2016/11/03/after-pink-slips-ucsf-tech- workers-train-their-foreign-replacements/)</comment>


Open-Source Virtual Background - <AUTHOR> https://elder.dev/posts/open-source-virtual-background/ <comment><USER2> I'd love to see something like this as a plugin for OBS. I've been using it lately due to all the video conferencing we're all growing to love since it's got basic color correction/manual controls for my webcam feed.

It's got the option for "real" chromakey, but like the author, I don't have a green screen, Amazon isn't scheduling any deliveries for another month, and I don't feel like a trip to the fabric store would count as "essential" travel (especially if it's only so I can screw around with stupid backgrounds).

Tried a few different sheets/blankets I had at home, but none are a suitable color or uniform/matte enough to work well, even with proper lighting. I admit this is such a non-issue and only something I want to play around with, but it would be fun nonetheless.

<comment><USER3> I agree, a plugin like this for OBS would be amazing.

I, too, have been playing with the chromakey in OBS, and like you tried a bunch of different sheets and blankets. The one that worked the best I discovered by accident; my wife was pulling out a puzzle, and with it she pulled out a green felt puzzle mat (really just a large rectangle of green felt). It was _perfect._ But I had to get it from her so I could use it on my meeting before she started her puzzle. After some brief, tense negotiating, I was able to snag it. All I have to do is the dishes for another month!

It works really well, but this would be way better and easier to set up.

<comment><USER2> I mean...in fairness I could probably figure out how to get hold of a sheet (seriously, of all the ugly colored sheets and blankets they sell at the local Target, there isn't a bright green or even blue??)

Likewise there are loads of cheap ones on Amazon or I could even get some bright paint and do a wall (or maybe dye my current non-chromakey white sheet background). It's just a matter of suspended/delayed deliveries and state orders to avoid unnecessary travel--including shopping for things like home furnishings.

It makes sense. There are plenty of important reasons why I should stay home and Amazon should focus on delivering essentials. I guess it's the definition of being spoiled/privileged that _this_ is what I'm musing about.

<comment><USER4> Been struggling with this myself the last few days! I don't NEED to go out or order all of this fancy video conferencing equipment for my weekend virtual happy hour but it's way more fun being locked inside if I do.

I was fortunate enough that the previous owners left behind a god-awful teal paint that works amazingly as a 'blue' chromakey.

For a huge upgrade in camera I'm using the OBS Camera app on iOS which wirelessly beams an NDI stream to my desktop.

For lighting I've just played around with various lamps from my house.

The one thing I did order was a USB microphone because I couldn't stand the thought of wearing a headset or adding latency with wireless earbuds.

<comment><USER2> My lighting is currently a mix of a clamp-on utility light with parchment paper diffuser (key), a window (fill), and a cheap old desk gooseneck lamp pointed at my sheet (I had used it as cheapo outdoor movie screen and now it acts as a clean background for current VTC needs).

Cam is the basic 1280x720 Microsoft Lifecam USB webcam I've had for years but is still much better than any laptop cam due to placement flexibility and better optics. OBS lets me color correct and exposes the manual controls for focus, exposure, etc.

I did grab a USB headset from work before work-from-home started, but I found it had a frayed wire and isn't any good. Instead I am using my (wired) cell headphones with their integrated mic instead of the USB headset.

I dug out an old USB audio interface I had packed away and tried it with a Shure vocal mic, but that led me down another hole of messing with Voicemeeter to tweak EQ and noise reduction because it's really meant to be held right up to your mouth (for singing, etc) and picks up background noise if I have the levels up high enough to use as a desk/stand mic. For the time being I am sticking with the headphone/mic for simplicity's sake.

None of this is what I'd use if I had been handed a couple hundred bucks to put together a VTC setup but it's all stuff I had laying around and looks/sounds so much better than everyone who's just using built-in laptop cam/mic/speakers.

</comment></comment></comment></comment></comment><comment><USER5> Good article, thanks. BTW, this is the method Jitsi-meet uses. They also use BodyPix. [https://github.com/jitsi/jitsi- meet/blob/master/react/featur...](https://github.com/jitsi/jitsi- meet/blob/master/react/features/stream-effects/blur/JitsiStreamBlurEffect.js)

<comment><USER6> Where is the virtual background option in Jitsi? I couldn't find it.

<comment><USER7> On Jitsi Meet, in the browser, there is a menu on the bottom right. Click it and there are loads of options there including blur background.

<comment><USER8> I'm confused. Parent was asking about virtual background. I've checked with meet.jit.si using Chrome and there is no virtual background option in the menu.

<comment><USER6> It seems that Jitsi uses the tensorflow NN to detect the background, but only for the purpose of blurring it, not replacing it with a virtual background.

</comment></comment></comment></comment></comment><comment><USER9> Found something similar yesterday, which is basically deepfake for avatars - [https://github.com/alievk/avatarify](https://github.com/alievk/avatarify)

<comment><USER10> Nice. How could I get this to run on Windows?

<comment><USER9> I'm guessing you can use something like [1] to create a virtual device on Windows

[1] [https://webcamoid.github.io](https://webcamoid.github.io)

<comment><USER3> I've found the VirtualCam plugin for OBS works better, but YMMV

</comment></comment></comment></comment><comment><USER11> Since it looks like your webcam is mounted to a stationary PC and you're only really writing this for yourself, wouldn't it be a lot easier to just subtract out a static picture of your background from the feed?

<comment><USER12> This breaks down in daylight (brightness shifts due to sun moving/clouds) or whenever anything shifts ever so slightly. Even shadows may make things appear where they shouldn't.

Chroma keying is the stable version of this idea: the single background color of a separately and well lit background removes these issues.

<comment><USER13> [https://www.amazon.com/Webaround-Portable-Webcam- Background-...](https://www.amazon.com/Webaround-Portable-Webcam-Background- Chroma/dp/B06Y2G2YP5)

<comment><USER14> I'm in a 1 bedroom apartment with my fiance who is also work from home now, there isn't really space to put a physical green screen behind me.

If you have the space, and good lighting it's a much simpler approach.

It's also less fun though, and I could do this with what I had on hand pretty quickly.

</comment></comment></comment></comment><comment><USER15> I'm working on something very similar right now, so it's great to see that this is actually possible with currently available open-source resources. I'm trying to re-create Skype's background blur feature, but that I can use in OBS (obsproject.com) so I can apply it just to my webcam without messing up the other stream elements for online lectures. I've been using the the DeepLab model from tensorflow research repo to do segmentation, but BodyPix seems even better for the job. If it performs any better, this might be the break I was looking for...

<comment><USER3> I am eagerly anticipating this. I use OBS and chromakey to have some fun on my MS Teams meetings, but it's a hassle to set up the green screen every time I want to be a bit cheeky.

Do you have a github/gitlab/something else link?

<comment><USER15> I set up a GitLab repo, but I haven't pushed any code yet. I think you can set it up to notify you when there's a release, which I will try to get out in the following week. [https://gitlab.com/franga2000/obs-background-blur- filter](https://gitlab.com/franga2000/obs-background-blur-filter)

</comment></comment></comment><comment><USER16> This is pretty awesome work, but I just wanted to point out that Zoom doesn't actually require a green screen. If you uncheck the "I have a green screen" button, choosing your own virtual background still looks really good, although of course you're not going to get any crazy effects like this script adds.

<comment><USER17> Depends on your hardware. I have a Win machine, but need a green screen because I don't have the horsepower.

<comment><USER18> And your software. I have a dual-booting machine, the green screen is required in Linux but not in Windows.

</comment></comment></comment><comment><USER19> Using video loopback opens up some great creative possibilities for fun with video conferencing.

There's one thing I'd love to achieve though, which seems not possible on Linux desktop (specifically kubuntu)....

I want to be able to use the loopback as the source for screen share instead of webcam; i.e. to use the loopback as the conference presentation.

Has anyone got any ideas how to achieve this? Given most conference solutions on Linux do not seem to support either 'share this window' or 'share this screen region'. It seems to be the whole desktop or nothing.

<comment><USER20> _Has anyone got any ideas how to achieve this?_

Yes. Thanks for giving me a reason to write this up.

1\. Download and install OBS. OBS will be your video processor; among other things it's super easy to make it capture the whole screen or individual windows.

2\. Install the v4l2 loopback kernel module[1]. This makes it possible to have a virtual webcam. On Ubuntu 19.10, this was as easy as _apt install v4l2loopback-dkms_ and then _modprobe v4l2loopback_.

3\. Install the OBS plugin obs-v4l2sink[5]. This exports the OBS output to the new virtual webcam device. I just installed the deb file provided by the project[2]. In OBS, under Tools, select v4l2sink and Start.

That's all I had to do. Surprisingly straightforward. At least Chrome and Firefox[3] will now pick up a "Dummy Video Device" webcam that streams the window, or whatever scene I set up in OBS.

In my case, the primary advantage was that this virtual webcam is streamed in Jitsi Meet at a higher quality/framerate than the regular desktop share feature. It's also _much_ lower latency than both Twitch and Youtube Live streaming (Jitsi Meet/WebRTC: <1s, Twitch: 5s, Youtube: 15s[4]; YMMV).

You also get to enjoy the rich feature set OBS provides for Twitch streams; for one thing, you can include the real webcam video.

Bonus: Desktop audio "just worked" in Firefox, which offers the pulseaudio monitor (loopback) device as an input. Chrome doesn't -- probably the intended behaviour. I'm sure there's a workaround.

[1] [https://github.com/umlaeute/v4l2loopback](https://github.com/umlaeute/v4l2loopback)

[2] [https://github.com/CatxFish/obs-v4l2sink/releases](https://github.com/CatxFish/obs-v4l2sink/releases)

[3] For some reason, Gnome's Cheese won't

[4] Microsoft's Mixer allegedly has super-low-latency streaming (FTL protocol), but new account are cleared manually and I haven't had the chance to try

[5] For Windows, you can use OBS Virtualcam [https://obsproject.com/forum/resources/obs- virtualcam.539/](https://obsproject.com/forum/resources/obs-virtualcam.539/)

<comment><USER19> Thanks for the info, but I already have all of this part working.

The problem is that v4l2loopback only provides a virtual _webcam_ (video source), not a virtual _screen_ - the two are different and are handled differently both by browsers (webrtc) and desktop conference apps (Slack, Teams, etc).

I guess the other issue is that conference apps treat webcam and screen capture differently; usually if someone is sharing a screen, then that feed takes over the full view for all participants so they you can actually read the content.

I don't want my screen recording only to show up in my _webcam_ view, which is usually just a tiny thumbnail.

<comment><USER4> OBS will handle the screen grabbing. At least on Ubuntu 18.04 I can select individual windows or even the whole screen.

<comment><USER21> The parent is pointing out functionality that only pops up for explicit screensharing -- changing your camera to a screen grab won't trigger these.

In particular, one I've found very useful with Zoom is being able to zoom in to a small region and scroll around. I also suspect Zoom prioritized resolution (for content clarity) over frame rate for screen sharing, which probably doesn't apply when it's just a "webcam" in the eyes of the client. I'm guessing your window capture would get decimated in terms of quality.

</comment></comment></comment></comment></comment><comment><USER22> You mention the ~10FPS performance.

It seems like moving all that data backwards and forwards between Python and Node might be a bottleneck, no?

<comment><USER14> I need to profile it more closely, I actually don't remember the exact FPS etc. but I don't expect that to be the limiting factor.

The inference / ml is expensive (which I did profile initially...), and I suspect not really optimized on this backend. It appears to be faster with webGL in the browser.

I sorta stopped worrying about it once it was "good enough" to show up to a few meetings with, but with all the attention I'll probably take another look.

It does look like someone ported bodypix to python, I'll probably try that next.

[https://github.com/ajaichemmanam/simple_bodypix_python](https://github.com/ajaichemmanam/simple_bodypix_python)

<comment><USER23> I had success by replacing the get_mask function with:

        from keras.models import load_model

        model = load_model('models/transpose_seg/deconv_bnoptimized_munet.h5', compile=False)

        def get_mask(frame):
            # Preprocess
            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

            simg = cv2.resize(frame, (128, 128), interpolation=cv2.INTER_AREA)
            simg = simg.reshape((1, 128, 128, 3)) / 255.0

            # Predict
            out = model.predict(simg)

            # Postprocess
            msk = out.reshape((128, 128, 1))
            mask = cv2.resize(msk, (frame.shape[1], frame.shape[0]))

            return mask

The model file I got from: [https://github.com/anilsathyan7/Portrait- Segmentation](https://github.com/anilsathyan7/Portrait-Segmentation)

<comment><USER24> Thanks! That helped me in my attempt at this: [https://github.com/wasmitnetzen/dynjandi](https://github.com/wasmitnetzen/dynjandi)

</comment></comment></comment></comment><comment><USER25> Okay now please use your skills around AI and Virtual Webcams to Create a script that just generates a Picture of me that nods at the right moments during a zoom call ;)

</comment><comment><USER26> Really good write up of a flexable approch.

If you just want an easy greenscreen [https://obsproject.com/](https://obsproject.com/) has a very good chromakey filter and a V4L2loopback plugin [https://github.com/CatxFish/obs-v4l2sink](https://github.com/CatxFish/obs-v4l2sink)

</comment><comment><USER27> I love the added hologram effect! That is a very creative addition.

</comment><comment><USER28> Pytorch has Deeplab available on their hub (I'm sure TF has something similar).

It's a couple of lines to use: [https://pytorch.org/hub/pytorch_vision_deeplabv3_resnet101/](https://pytorch.org/hub/pytorch_vision_deeplabv3_resnet101/)

</comment><comment><USER29> Fascinating write-up Ben, who would have known that you were a genius with image processing as well as running containers :-) Love the gory details and I didn't know about pyfakewebcam either.

Do you have a live video recorded showing how quickly it can process a stream?

<comment><USER14> The demo at the end of the page is a video (webm), but there's not a ton of motion to reference besides the blinking.

IIRC it's something like 10FPS currently which is sufficient enough for meetings so far (about 1/3 what you might get with sufficient bandwidth in most video conference tools).

There's definitely room to improve it.

<comment><USER14> Amusingly the current bottleneck is actually reading from the webcam with the suboptimal ~default capture config. Without doing anything else that's ≤ 10fps. Low hanging fruit still :-)

</comment></comment></comment><comment><USER30> Great read! I am curious then why the Linux client doesn't supports this, if all it takes is to send out our webcam stream data to be processed server- side?

P.S. What happens when they do e2ee on the webcam stream?

<comment><USER31> I think server side processing is really not a good idea for this. Zoom is really seeing a lot of use right now. It would not be sustainable for them to not take advantage of all the computing power of the clients.

<comment><USER30> I am thinking the same now. The OP solution requires a server to do the the processing, but I am not sure this is the case for the Zoom client.

The Zoom client also requires minimal hardware requirements from the processor iirc.

</comment></comment></comment><comment><USER32> Brilliant!

Now, I know that there are many companies that force people to be on with a live video feed, and that many don't really like it.

How about recording a 3-min clip and playing that in an infinite loop - creating a fake feed (remember Keanu Reeves' Speed?) - so that people can avoid not being seen, but still get things done better? A mask on the face is a simple addition to avoid detection. As the saying goes, modern problems require modern solutions!

<comment><USER14> You could actually pipe in a video clip with just ffmpeg and v4l2loopback pretty easily without writing any code I think :-)

The virtualvideo readme has an example of looping a single frame. [https://github.com/Flashs/virtualvideo#errorhandling](https://github.com/Flashs/virtualvideo#errorhandling)

</comment></comment><comment><USER33> Is there something Python _can 't_ do? Can't wait for a React/Vue like framework for Python.

<comment><USER34> I've always wondered why Skulpt didn't get more traction: [https://skulpt.org/](https://skulpt.org/)

</comment></comment><comment><USER35> Thanks for sharing! I have been working on the exact same project with Tensorflow & BodyPix, really helpful to compare notes & see the pyfakewebcam approach!

<comment><USER14> :-) Great minds think alike!

I'm iterating on it again tonight, and tentatively virtualvideo [1][2] gives better results by just piping frames into ffmpeg vs pyfakewebcam

[1]: [https://github.com/Flashs/virtualvideo/](https://github.com/Flashs/virtualvideo/) [2]: [https://pypi.org/project/virtualvideo/](https://pypi.org/project/virtualvideo/)

I'll have to update the post or do a follow-up at some point.

</comment></comment><comment><USER36> Very interesting,

The magic is pyfakewebcam and v4l2loopback, I was looking foe a way to turn myself into a potato on Teams. The bit I was missing was how to create a virtual webcam.

</comment><comment><USER37> Awesome stuff Ben! Could this be deployed via kind by passing the necessary mounts into a node, then mounting those mounts via hostPath in the pods?

</comment><comment><USER38> Pretty cool write up of how this can be replicated with opencv and out of the box libraries like bodypix. I imagine Zoom is using something like this too.

</comment><comment><USER39> Did anyone find a good loopback video driver ("virtual webcam") that works on recent macOS?

<comment><USER14> I haven't tried yet but there's some work related to this going on in OBS [https://github.com/obsproject/rfcs/pull/15#issuecomment-6054...](https://github.com/obsproject/rfcs/pull/15#issuecomment-605419627)

</comment></comment><comment><USER40> I really like it. But why not keep Tensorflow in python? What is the reason for using node?

<comment><USER41> FTA: "BodyPix is currently only available in TensorFlow.js form, so the easiest way to use it is from the body-pix-node library."

</comment></comment><comment><USER42> Beautiful hack. What about accessories à la Instagram or Facebook?

</comment><comment><USER43> Pretty insane to use Docker & web-requests for high frame rate video chat with something which runs just fine even on CPU.

<comment><USER14> Docker made it easier to package up the dependencies (especially aligning cuda etc.), and containers are my dayjob :-)

The web requests are just an easy mode of IPC to pass around some bags of bytes, "high frame rate" is at most 30 qps ... that part isn't really interesting performance wise and this isn't a production tool :-)

I'm not sure I'd be so confident about tensorflow.js being so fast on the CPU ... you can see a marked difference in the backends httpss://www.tensorflow.org/js/guide/platform_environment

<comment><USER44> So this is super cool, and I would love to use it, but sadly, in your write-up you mention _requires_ nVidia hardware, which sadly, I don't have :(

Any follow up on making this more generic, e.g. with AMD/Intel setups?

</comment></comment></comment><comment><USER45> Really cool.</comment>