News

Opening Keynote Meeting C++ 2019 - Howard Hinnant - Design Rationale for the chrono Library - YouTube

Opening Keynote Meeting C++ 2019 - Howard Hinnant - Design Rationale for the chrono Library Slides: https://meetingcpp.com/mcpp/slides

RubyConf 2019 - Fixing Performance & Memory problems by Frederick Cheung - YouTube

RubyConf 2019 - Fixing Performance & Memory problems by Frederick Cheung Performance problems got you down? Do memory leaks strike fear in ...

RubyConf 2019 - Fixing Performance & Memory problems by Frederick Cheung Performance problems got you down? Do memory leaks strike fear in your heart? In thi...

You Can Have Collaborative Software That’s Wary of the Cloud | WIRED

Research lab Ink & Switch wants to harness the benefits of productivity and communication without forcing users to give up control of their...

Research lab Ink & Switch wants to harness the benefits of productivity and communication without forcing users to give up control of their data.

The Product-Minded Software Engineer

Product-minded engineers are developers with lots of interest in the product itself. They want to understand why decisions are made, how pe...

Product-minded engineers are developers with lots of interest in the product itself. They want to understand why decisions are made, how people use the product, and love to be involved in making product decisions. They're someone who would likely make a good product manager if they ever decide to give

Zsh prompt with asynchronous Git status | Vincent Bernat

Invoking Zsh vcs_info function before rendering the prompt can be a bit slow on large repositories. Executing it asynchronously solves this...

Invoking Zsh vcs_info function before rendering the prompt can be a bit slow on large repositories. Executing it asynchronously solves this issue.

Fun With Flags | Gopher Academy Blog

In a previous article we discussed why command line applications are important and talked about few guidelines. In this article we’ll see...

In a previous article we discussed why command line applications are important and talked about few guidelines. In this article we’ll see how we can use the built-in flag package to write command line applications.

Software tests as a documentation tool - ITNEXT

I’m working on a big UI Testing Best Practices project on GitHub, I share this post to spread it and have direct feedback. Documenting is...

I’m working on a big UI Testing Best Practices project on GitHub, I share this post to spread it and have direct feedback. Documenting is generally hard, it requires precise and meticulous work and…

Laying the groundwork

'Hidden' Android apps pose big problem for developers - Android Authority

A new problem on the Google Play Store involves "hidden" Android apps. Searching specifically for these apps won't bring up the expected re...

A new problem on the Google Play Store involves "hidden" Android apps. Searching specifically for these apps won't bring up the expected results.

Journal 2019.24 - spec and-, tools.deps.graph – Inside Clojure

Tales of Developing Clojure

01-background

Python Poker - Multiplayer · GitHub

GitHub is where people build software. More than 40 million people use GitHub to discover, fork, and contribute to over 100 million project...

GitHub is where people build software. More than 40 million people use GitHub to discover, fork, and contribute to over 100 million projects.

Spring Data R2DBC goes GA

<p>On behalf of the team and everyone that contributed, I am delighted to announce that Spring Data R2DBC 1.0 is generally available from <...

<p>On behalf of the team and everyone that contributed, I am delighted to announce that Spring Data R2DBC 1.0 is generally available from <a href="https://repo.spring.io/">repo.spring.io</a> as well as Maven Central! </p> <p>Spring Data R2DBC 1.0 is a non-blocking database client library for the <a href="https://r2dbc.io/2019/12/02/r2dbc-0-8-0-goes-ga">just released R2DBC specification</a> that lets you build reactive applications that use SQL databases. The most notable features of Spring Data R2DBC are:</p> <ul> <li>Functional-reactive declaration of data access</li> <li>Fluent API</li> <li>Support for Transactions</li> <li>Named parameter support (Dialect-aware)</li> <li>Repositories</li> <li>Kotlin Coroutines extensions</li> </ul>

Dolphin Emulator - Dolphin Progress Report: November 2019

One of the most enjoyable parts about being a part of emulation is seeing the classic gaming community use the tools we provide to find hid...

One of the most enjoyable parts about being a part of emulation is seeing the classic gaming community use the tools we provide to find hidden bits of joy that would be impossible to reach otherwise. Freelook has found secret after secret hidden away just off-screen, and there's even a youtube series that focuses entirely on them! Savestates basically made speedrunning and TASing possible, allowing for quick testing of routes and sequence breaks to push games to their limits. But communities can go far beyond that, with tools now allowing us to look directly at game files and exposing unreleased and rare relics. In the past couple of months, we've had two incredibly interesting leaks: A TGC file ripped from a store preview disc containing a pre-release version of The Legend of Zelda: The Wind Waker and a very early prototype of the never released Spider-Man 4.

AI Dungeon 2: Creating Infinitely Generated Text Adventures with Deep Learning Language Models – Perception, Control, Cognition

Imagine an infinitely generated world that you could explore endlessly, continually finding entirely new content and adventures. What if yo...

Imagine an infinitely generated world that you could explore endlessly, continually finding entirely new content and adventures. What if you could also choose any action you can think of instead of being limited by the imagination of the developers who created the game? This is the vision of AI Dungeon 2. In the first AI…

Making Chika Dance 60 FPS with AI. - YouTube

This awesome footage is made by Loliconics and can be found here: https://youtu.be/m6k_t8yEyvE Depth-Aware Video Frame Interpolation [DAIN]...

This awesome footage is made by Loliconics and can be found here: https://youtu.be/m6k_t8yEyvE Depth-Aware Video Frame Interpolation [DAIN] is a project that...

How to Create a Multi-Module Spring Boot Project using Gradle’s Kotlin DSL | 12 Days of Kotlin

An example of using the Gradle Kotlin DSL for a multi-module Spring project

Ruby, Where do We Go Now? | Meta Redux

This article is part of the “Meta Advent 2019” series. I’ve committed to writing a new blog post here every day until Christmas. A wh...

This article is part of the “Meta Advent 2019” series. I’ve committed to writing a new blog post here every day until Christmas. A while ago I wrote an article, where I made the case Ruby seems to have lost its way. I thought I had exhausted the topic, but a few of the recent developments around the Ruby 2.7’s development lead me to revisit it. Ruby 2.7 has become infamous at this point for several highly controversial changes that were either quickly revised or removed. A classic tell-tale of good project management and a clear vision for the future, right? Let’s examine a few of those ill-fated changes in no particular order… Flip-flops Forever Remember how the flip-flop operator (..) was finally deprecated in Ruby 2.6 after years of discussions? Well, it just got (quietly) reinstated. I find it really amusing how this went down - 3 (!!!) people complained about the deprecation and Matz quickly responded with: I hear the negative feedback from the community. OK, I give up. The warning should be removed. – Matz There are numerous other instances where he ignored the complaints of way more people. Go figure. As usual, there was no real discussion on the ticket - just a decision. Not to mention that no one even thought to try to solicit more community feedback on the subject. I learned about the removal of the deprecation when someone posted this on Twitter… None of this is new, in Ruby-land it’s business as usual. It’s just becoming progressively more frustrating for me. Numbered Parameters Revisited Remember the highly controversial numbered block parameter syntax? # now [1, 2, 3].each { |i| puts i } (1..10).map { |i| i * 3 } (1..9).each_slice(3).map { |x, y, z| x + y + z } # Ruby 2.7 [1, 2, 3].each { puts @1 } (1..10).map { @1 * 3 } (1..9).each_slice(3).map { @1 + @2 + @3 } After quite the backlash this syntax was revised to something more reasonable: [1, 2, 3].each { puts _1 } (1..10).map { _1 * 3 } (1..9).each_slice(3).map { _1 + _2 + _3 } A great success, right? Matz made a couple of interesting comments on this mega-thread. My favourite one was: Yes, I admit { @1[@2] = “Go Fish: #{@2}” } is cryptic. But {@1 * @2} is not. So use numbered parameters with care (just like other features in Ruby). The possibility to make code cryptic itself should not be the reason to withdraw a feature. The problem is introducing it or this could break existing code. That is the problem. Numbered parameters are a compromise to simplify block expression without breaking compatibility. FYI, I am not fully satisfied with the beauty of the code with numbered parameters, so I call it a compromise. – Matz So, he accepted something that he wasn’t perfectly happy about. OK, I can understand the need for compromises from time to time. But I totally hate this line of reasoning “The possibility to make code cryptic itself should not be the reason to withdraw a feature.”. I think that adding features for the sake of adding them is not a reason to add something either. I also think that we should be careful with the impact of features on tools and with all the accidental complexity they bring (e.g. now Ruby parsers are more complex). Not to mention the fact that no one could make a strong case for introducing this feature in the first place. I’m still not sure what’s the grand problem it solves… The Totally Useless Pipeline Operator This was probably the most ridiculous part of Ruby 2.7’s development cycle. At some point the pipeline operator landed in master: # now foo() .bar(1, 2) .display # Ruby 2.7 foo() |> bar 1, 2 |> display Everyone who has actually used the pipeline operator in Elixir (the source of inspiration for this change), however, knows that it behaves nothing like this. Here Ruby’s team basically came up with different syntax for . (method invocation) with a lower precedence that allowed you to do questionable things like: (a..b).each {} a..b |> each {} I won’t go into much details about this misguided operator. After all, a lot of great articles exist about it already.1 For me the important things here are: This feature was not well thought-out It generated a massive backlash It was quickly reverted Sounds familiar, doesn’t it? The Rise and Fall of the Method Reference Operator Ruby 2.7 was supposed to introduce a method reference operator: [2, 4, 8, 16, 32].map { |n| Math.log2(n) } [2, 4, 8, 16, 32].map(&Math.:log2) Well, not anymore. This feature was recently reverted. There were some good reasons for it to be reverted, which serves to underline my point that a lot of changes to Ruby recently were made without thinking much about their implications. Matz, made one particularly interesting comment on this ticket: In recent years, we have added/discussed a lot of features inspired by functional programming. But those features are not designed with a grand design. Those are rather ad hoc additions. We felt the future, more functional Ruby should be designed with the big picture of functional Ruby programming, which we lack currently. Besides that, I don’t like the specific operator (.:) which looks like braille. So you don’t have to consider this revert as a rejection of this whole idea, but an invitation to the next try. – Matz I was really glad to see this, as it seems that Matz also understands that without a solid vision in the end we’ll just get one big mess. I’m a bit sad about the .: operator being reverted, as this was a feature I could see myself using, but that’s a small price to pay for a better future of Ruby. Parameter Forwarding Weirdness Just when I had some hope about the future I came across another “brilliant” addition to Ruby 2.7 - parameter forwarding. It’s best explained with an example: def foo(...) bar(...) end This defines a method foo, that can have any parameters whatsoever and simply forwards all of them to bar. I don’t know about you, but I always wanted something like this!2 There are some plans to make it a bit more generic and support forwarding a subset of all parameters: def foo(a, b, ...) if a.even? bar(b, ...) end end Still, I think this is another random addition that doesn’t solve real problems and just adds mental and technical complexity. Epilogue So, we made it to the end of this somewhat bitter and rantish article. So, what’s the takeaway from all of this, if any? It’s good that Ruby’s team listens to user feedback, but it might also be nice for them to actually start asking about feedback in some more open/structured manner prior to making language changes. Especially given their recent track record with the Ruby community… You can’t really expect everyone to be monitoring all tickets in Ruby’s issue tracker, right?3 I’ve often dreamt of a state where Ruby’s team actually announces in advance the focus for the next release (a.k.a. a roadmap), so interested parties can actually go and help with the tasks at hand. That should not require that much extra work - just a bit of good old planning. Some voting system on tickets and annual surveys might be a good idea as well - other programming communities are making good use of those. Many people are excited about Ruby 3.0, but I’m not. It’s a major release in theory, but in practice it will add relatively little to what we have today. It’s not even clear if the new concurrent programming model will make it there or not at this point. Ruby 2.7 has showed better than ever the chaos in Ruby’s development and the lack of a clear direction/destination. There are some signs that Matz understands this as well, so I’m still optimistic about the future. I think Matz should take a page from Rich Hickey’s4 book and take a bit of hammock-time to figure out where he wants to take Ruby next. So, Ruby, where do we go now? That’s my favourite one https://dev.to/baweaver/ruby-2-7-the-pipeline-operator-1b2d. ↩ You can’t here my voice, but that’s sarcasm here. ↩ Especially given the fact that the vast majority of ideas for language changes are just ignored and stay dormant for ages. ↩ The author of Clojure. ↩

A Guiler's Year of Racket - YouTube

by Christopher Webber At: FOSDEM 2019 https://video.fosdem.org/2019/K.4.201/guileracket.webm Having used Guile for the previous number of y...

by Christopher Webber At: FOSDEM 2019 https://video.fosdem.org/2019/K.4.201/guileracket.webm Having used Guile for the previous number of years and being an ...

JMC 7 GA Release

Go advanced concurrency patterns: part 3 (channels) - Blog Title

FOSDEM 2019 - Alternative languages for safe and secure RISC-V programming

2019 Wrapped

Welcome to the end of a decade. Ready for your 2019 Wrapped?

Developer Economics Survey | Developer tools, apps, design, games

The Developer Economics survey is run by independent analyst firm /Data, reaching over 40,000+ developers in 167 countries annually. It is ...

The Developer Economics survey is run by independent analyst firm /Data, reaching over 40,000+ developers in 167 countries annually. It is for Software developers: professionals, hobbyists & students, working across all major areas: mobile, web, desktop, cloud, IoT, AR/VR, games, ML & data science.

lithium/libraries/http_backend at master · matt-42/lithium · GitHub

Lithium provides a set of free C++17 multi-platform libraries - matt-42/lithium