YouTubeDrive is a Wolfram Language (aka Mathematica) package that encodes/decodes arbitrary data to/from simple RGB videos which are automatically uploaded to/downloaded from YouTube. Since YouTube imposes no limits on the total number or length of videos users can upload, this provides an effectively infinite but extremely slow form of file storage. YouTubeDrive depends externally on FFmpeg, youtube-upload, and youtube-dl. These programs must be downloaded and installed separately, and prior to first use, YouTubeDrive must be configured with their install locations. See below for details. YouTubeDrive is a silly proof-of-concept, and I do not endorse its high-volume use. Usage Example NOTE: A short time needs to pass between calls to YouTubeUpload and YouTubeRetrieve for YouTube to process the uploaded video. I find that 5-10 minutes suffices for small (less than 10MB) file uploads. The video YouTubeDrive produces in this example can be viewed at https://www.youtube.com/watch?v=Fmm1AeYmbNU. Installation Install FFmpeg, youtube-upload, and youtube-dl as your operating system dictates. Find an arbitrary test video, say test.mp4, and run youtube-upload --title="Test Video" test.mp4. Follow the displayed instructions to create an OAuth token for your YouTube account. This will be the YouTube account used for all YouTubeDrive uploads. Download and open YouTubeDrive.wl from this repository. In lines 75-77, enter the install locations of the FFmpeg, youtube-upload, and youtube-dl executables. Make sure to use proper string escape sequences (in particular, backslashes \ need to be escaped as double-backslashes \\ in Windows paths). 75 | FFmpegExecutablePath = "FFMPEG_PATH_HERE"; 76 | YouTubeUploadExecutablePath = "YOUTUBE-UPLOAD_PATH_HERE"; 77 | YouTubeDLExecutablePath = "YOUTUBE-DL_PATH_HERE"; For example, I use the following install locations on my system (Windows 10): 75 | FFmpegExecutablePath = "C:\\Games\\MiscExes\\ffmpeg.exe"; 76 | YouTubeUploadExecutablePath = Sequence["python", 77 | "C:\\Users\\dzhan\\AppData\\Local\\Programs\\" <> 78 | "Python\\Python35\\Scripts\\youtube-upload.py"]; 79 | YouTubeDLExecutablePath = "C:\\Games\\M
(read more)
Introduction The story began with a tweet about a new eBPF-based Security Observability and Runtime Enforcement solution, named Tetragon, posted by the CTO of the company (Isovalent) that created it. With a very cute logo, eBPF, Kubernetes, Linux kernel runtime and real-time security enforcer, capable of hooking into all layers of the operating system and application stack, the solution seemed to hit the ground running right from the start. All the features the tool provides can be found at its website: [1]. The "transparent security observability across the stack from the lower level up into the applications. File access, networking, storage, syscalls, escalations, function tracers, ..." sounds interesting, but what really caught our eye was the enforcement capabilities. On the website, in the section "Automatic Mitigation of Privilege & Container Escapes", the authors claim that "Tetragon adds the ability
(read more)
An (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System (BMS) Dyson vacuum batteries are designed to fail. Here's why: Series battery cells in a battery pack inevitably become imbalanced. This is extremely common and why cell balancing was invented. Dyson uses a very nice ISL94208 battery management IC that includes cell balancing. It only requires 6 resistors that cost $0.00371 each, or 2.2 cents in total for six. 1 Dyson did not install these resistors. (They even designed the V6 board, PCB 61462, to support them. They just left them out.) Rather than letting an unbalanced pack naturally result in lower usable capacity, when the cells go moderately (300mV) out of balance (by design, see step 3) Dyson programmed the battery to stop working...permanently. It will give you the 32 red blinks of death and will not charge or discharge again. It could not be fixed. Until now. 2 FU-Dyson-BMS is a replacement firmware for the microcontroller inside Dyson V6/V7 vacuum batteries. By using this firmware, your battery pack will not become unusable if the cells become imbalanced, you will just have reduced battery capacity as usual. It will also allow you to replace the battery cells to repair your battery, rather than be forced to replace it. Demonstration, disassembly, and programming video: https://www.youtube.com/watch?v=dwyA5rBjncg Revolutionary features: Cell balance LED indicator State of charge LED indicator Robust fault handling and logging Total runtime tracking Can be run in debug mode for near-real-time diagnostics Doesn't brick itself! Doesn't generate e-waste and try to take your money when your cells go out of balance! Why you would want this: You want to vacuum your apartment but your cells became slightly out of balance because you left the vacuum off the charger for too long and now your vacuum doesn’t work (ask me how I know) You want to replace a bad cell in your battery pack You want to understand what your battery is doing and why. You don’t like feeling like a cash cow being squeezed for all you’re worth. Compatible vacuums/batteries: Dyson V7 - Model SV11 - PCB 279857 - Compatible + Tested Dyson V6 - Model SV04/SV09 - PCB 61462 - Compatible + Tested Dyson V6 - Model SV04 - PCB 188002 - Compatible + Tested Note: the model numbers are kind of weird. There are three different ways to identify/categorize your vacuum: The advertised version number (V6, V7, etc) The actual model number printed on the battery (SV04, SV09, SV11) The part number printed on the battery PCB (61462, 279857, 188002). Some models like SV04 contain different versions of the battery PCB. Many of these PCB versions are extremely similar and I have no idea why Dyson seems to have made at least 5 different versions. I recommend you use the PCB part number for reference if possible, or the model number printed on the battery otherwise. I still use the V6, V7 names in some places since that is what most people are familiar with, and I keep changing my mind as to which identification method is better. Probably not compatible: (Although it’d be interesting to see PCB photos of them to be sure) V10 vacuums V11 vacuums Anything newer If you aren’t sure if your battery is compatible, please submit a Github issue with the highest quality photos possible of the battery PCB and provide the advertised model number (V6, V7, etc) and printed model number (SV09, SV11, etc) and I’ll try to tell you if it will work. How to install it: Warning: The firmware flash process is irreversible. It is not possible to restore the factory firmware. Summary: Be careful. Li-ion batteries are no joke and must be respected. You're working on a live battery pack that can output 100+ Amps if short-circuited. Disassemble battery pack to access PCB Make sure all cells are charged above 3V and that the pack LEDs do something when you press the button (with magnet on reed switch if using V7). This confirms the 3.3V rail is regulating and the PIC is awake/working. Remove conformal coating over programming connection points (if applicable) Connect PICkit to computer and, if you using a PICkit 3 or clone, install the PICkit 3 Programmer App and Scripting Tool v3.10. (https://www.microchip.com/en-us/tools-resources/archives/mplab-ecosystem) Connect PICkit to BMS board as shown below: 6. Wake up battery pack by pressing button and placing magnet on reed switch (if using V7 vacuum) 7. While maintaining tension on wires to BMS board, make sure PICkit can see the PIC16LF1847 microcontroller, then import and write the hex file from the latest GitHub release. For more details, see video linked at the top (https://www.youtube.com/watch?v=dwyA5rBjncg). Disclaimer: Lithium-ion batteries can be dangerous and must be respected. Proper cell balancing may reduce this danger which is why only trained professionals who implement cell balancing according to the manufacturer recommended best practices should work on them...wait...well that doesn't include Dyson either so I guess we're on our own. According to the internet, they can spontaneously catch fire, burn your house down, drain your retirement fund, and run away with your wife. Consider yourself warned, and please don't sue me if something goes wrong because I assume no liability and provide no warranty. See section 15 and 16 of the COPYING file for more details. Miscellaneous Thoughts on Repairing a Battery Pack If you left your battery in storage for a long time, you may have found it no longer turns on at all and won’t charge either. This is because the battery cells have self-discharged so low that the ISL94208 won’t even turn on, which means the microcontroller won’t turn on either. If you connect a constant current power supply directly to the terminals of the battery pack bypassing the BMS board, you can slowly recharge the cells until they are back within a normal voltage range (above 3V). I've found the PCBite probes to work well for easily connecting any cell or pack to a bench power supply. Soldering small wires to the nickel strips or jamming on alligator clips somehow would probably work too. I recommend charging at 50-100mA until all cells are over 3V. For safety, you don’t want to charge a battery that’s been depleted too far at the normal charge current (700mA). After all cells are above 3V, the BMS should power up as usual. If you aren’t getting the 32 red blinks of death, you might not even need to install this firmware (as much as it pains me to admit it). While you have the battery disassembled, I’d recommend making sure all the battery cells are within 100mV of each other, and manual charge the lower cells to get them in that range. Note: When charging cells that have been over-discharged, you should monitor them carefully to make sure they are taking a charge (the voltage is actually increasing), they aren't getting hot, and the cell voltages are gradually moving in to an acceptable range. Even if some of your cells are extremely out of balance, don't worry about that until you get them all above 3V. Having one cell at 1V and another at 2V might look really bad, but when they are back in range, they might look more like 3.1V and 3.2V. If your battery isn’t turning on at all, do the following (do not leave unattended while charging): Disassemble your battery pack. Measure the voltage of all of the battery cells. You’ll probably find one or many are below 3V. If your cells are all within 1V of each other and none are negatively charged: Using a bench power supply, charge the entire pack directly across the two large metal terminals that come off cell 1 and cell 6 and connect to the BMS board. This will bypass the BMS and charge the cells directly. Charge at 50-100mA constant current, with a voltage limit of 20V. If your cells are more than 1V from each other: Use a bench power supply to charge the low cells individually to match the higher cells. Then charger the entire pack directly as mentioned in the previous bullet point. If any cells are reverse charged, meaning they have a negative voltage where it should normally be positive, you’ll pr
(read more)
Tuesday May 24, 2022 by Ulf Hermann | Comments This is the third installment in the series of blog posts on how to adjust your QML application to take the maximum advantage of qmlsc. In the first post we've set up the environment. You should read that post first in order to understand the others. In the second post I've shown how to add type annotations to JavaScript functions. Now we need to make sure that all types we want to use in QML are visible at compile time. If you compile Qt Creator again, after our latest changes to the ButtonsBar.qml file, you may see some warnings like these: Warning: ButtonsBar.qml: Object type Timeline::TimelineTheme is not derived from QObject or QQmlComponent Warning: ButtonsBar.qml:59:34: Property "PanelStatusBarBackgroundColor" not found on type "Timeline::TimelineTheme" color: Theme.color(Theme.PanelStatusBarBackgroundColor) Clearly, qmlsc has trouble identifying the type of our TimelineTheme. This means the binding for the background color of our button is not compiled to C++. Let's see how long it takes to execute this binding in its unoptimized form. QML-profile Qt Creator and load our example trace in the instance being profiled as described in the first blog post. Then look at ButtonsBar.qml again in the editor. You should see a little label to the left of the binding we're interested in. Clicking that label focuses the respective events in the QML profiler. We note that the binding is called once, and on my computer it takes 14.2µs to evaluate. I won't repeat the point about it not being a statistically significant measurement anymore. This disclaimer holds for all such numbers from here on. Back to the original warning, though. Why is this type unknown to qmlsc? The base type of Timeline::TimelineTheme is Utils::Theme, as we can see in timelinetheme.h: class TRACING_EXPORT TimelineTheme : public Utils::Theme { Q_OBJECT [...] The Utils library, however, is not prepared to be integrated with a QML module. In particular, it does not generate a metatypes.json file. The QML module for our Tracing library needs s
(read more)
Home _______ _______ __ _ ______ _ _ _ ____ ____ ____ |______ | |______ | \ | | ____ |\/| | |___ |--< [__] | |_____ |______ | \_| |_____| Version: 1 This software is an implementation of "FLENG", a low level concurrent logic programming language descended from Prolog. A cross-compiler for UNIX-compatible systems is provided to translate programs written in FLENG into executable code for Z80 CPUs running CP/M, the Commodore 64 and the "Uxn" virtual computer system. executable. As FLENG is quite minimal in features, a translator from "F
(read more)
Among the underutilized HTML elements is the q tag, for quotes. This should, depending on user agent, render with appropriate opening and closing quote marks, without needing to specify them by hand. This sounds really convenient, to avoid ambiguity when quotes are nested inside quotes inside quotes. I said, “Alex told Bobby, “according to Chris, “Danny said “No way am I the one who’s confused,” when asked,” direct quote,” yesterday morning,” emphatically. Lucky Danny.The browser might even somewhat intelligently choose pairs of quotes that alternate with each nesting. In p
(read more)
If you deploy your applications in regions around the globe and need to keep database read latency low, you will want to physically have a database nearby. With PlanetScale Portals, you can now create read-only regions to support your globally distributed applications and better serve your users worldwide.Put your data where your users and applications are#Portals allow you to read data from regions closest to where you globally deploy your applications. Whether your application is deployed near Northern Virginia, Frankfurt, São Paulo, or any of our other PlanetScale regions, Portals can now provide lower read latency for your applications!Today, each database in PlanetScale reads and writes from a single region. But with Portals, you can add as many distributed read-only regions as you want. Without PlanetScale, it can be a hassle to set up a globally deployed database on your own. You might have to do capacity planning, deal with complicated pricing structures, and worry about your replication strategy or performance. Instead, with a couple of clicks, allow PlanetScale to operate your additional read-only regions for you.An example of the power of Portals#To make this more concrete, let’s look at the read latency between different regions:For an application deployed to Frankfurt, talking to a Northern Virginia database can add nearly an extra ~90ms PER query. By adding a read-only region in Frankfurt, we can reduce that to ~3ms per query. (Data based on select * from books limit 10.) Connecting to your new read-only regions#You connect to your new read-only regions with a connection string, just like connecting to any other PlanetScale database branch or other MySQL databases. This connection string is specific to both your read-only region and production branch. Let’s break down how this might look like in a Ruby on Rails application deployed in both São Paolo and Frankfurt.Code exampleNote: While the following example uses Ruby on Rails, depending on your application framework and how you deploy your application, there are often similar solutions for other technology stacks. For example, read the Fly.io and PlanetScale guide on using Fly's Global Application Platform alongside PlanetScale's read-only regions to deploy database regions close to your applications. In a Rails application, you can set up a connection to your read-only region. First, m
(read more)
Big news! The Tilt team is joining Docker. The Tilt project is joining too. We think this is a great fit and I will tell you why. The Problem Modern apps are made of so many services. They’re everywhere. Every team we talk to is trying to figure out how to set up environments to run their apps in dev.  Simple `start.sh` scripts inevitably grow into mini bespoke orchestrators. They need to start servers in the right order, update them in-place, and monitor when one is failing. We built Tilt, a dev environment as code for teams on Kubernetes, to help solve these problems. Whether your dev env is local processes or containers, in a local cluster or a remote cloud, Tilt keeps you in flow and your feedback loops fast. So how does this make sense at Docker? When we started building Tilt in 2018, we thought of Docker as the container company selling Swarm to enterprises. In 2019, the Docker’s Next Chapter blog post announced a change in focus to invest more in great tools for developers and development teams to help them spend more time on innovation, less time on everything else.  Tilt interoperates with Docker Buildkit, Docker Desktop, and Docker Compose. Improvements to these tools help Tilt users too! We always had a hunch that our product roadmaps might overlap. And in the years since Docker focused on developers, we’ve been converging more and more. Once we started talking more with Docker, we found more in common than just a problem space including: A product philosophy around deeply understanding devs’ existing workflows, so we can make dramatic improvements in user experience that feel magic; An engineering philosophy around patterns and flexibility so devs can adapt their tools to their needs; A business philosophy around building a sustainable company so we can continue to make great free, open-source tools for every developer. So you could say we got along. What’s next? What Does a Combined Tilt + Docker Look Like? Tilt will remain open-source. It’s great! You should try it! We’ll still be responding to issues and hanging out in the community slack channel. But this has never been about Tilt the technology. Or even about Kubernetes. Our history is full of experiments. Dan Bentley and I started hacking on ideas in 2017. We knew we were unhappy about microservice dev. But we weren’t sure what the first stepping stone might be. This was more of a research project than a company. Some examples: Our first prototype was a more interactive, developer-focused CI. We almost trolled ourselves into becoming a Bazel company. We bought two lab coats, poster board, glue, and glitter so we could show off our prototypes at the GothamGo conference. We built many weird demos: (1) Mishell (an interactive multi-service shell) represented by a French-speaking hermit crab named Michel, and PETS (Process for Editing Tons of Services) represented by three cats overwhelmed by microservice dev. Our teammate Han Yu had a blast with mascot design (yeah to Docker for animal mascots): The first version of Tilt was a bare-bones terminal app to update containers in a Kubernetes cluster. It resonat
(read more)
A little over a decade ago, there were some popular blogposts about whether Ruby was an acceptable Lisp or whether even Lisp was an acceptable Lisp. Peter Norvig was also writing at the time introducing Python to Lisp programmers. Lisp, those in the know knew, was the right thing to strive for, and yet seemed unattainable for anything aimed for production since the AI Winter shattered Lisp's popularity in the 80s/early 90s. If you can't get Lisp, what's closest thing you can get? This was around the time I was starting to program; I had spent some time configuring my editor with Emacs Lisp and loved every moment I got to do it; I read some Lisp books and longed for more. And yet when I tried to "get things done" in the language, I just couldn't make as much headway as I could with my preferred language for practical projects at the time: Python. Python was great... mostly. It was easy to read, it was easy to write, it was easy-ish to teach to newcomers. (Python's intro material is better than most, but my spouse has talked before about some major pitfalls that the Python documentation has which make getting started unnecessarily hard. You can hear her talk about that at this talk we co-presented on at last year's RacketCon.) I ran a large free software project on a Python codebase, and it was easy to get new contributors; the barrier to entry to becoming a programmer with Python was low. I consider that to be a feature, and it certainly helped me bootstrap my career. Most importantly of all though, Python was easy to pick up and run with because no matter what you wanted to do, either the tools came built in or the Python ecosystem had enough of the pieces nearby that building what you wanted was usually fairly trivial. But Python has its limitations, and I always longed for a lisp. For a brief time, I thought I could get there by contributing to the Hy project, which was a lisp that transformed itself into the Python AST. "Why write Python in a syntax that's easy to read when you could add a bunch of parentheses to it instead?" I would joke when I talked about it. Believe it or not though, I do consider lisps easier to read, once you are comfortable to understand their syntax. I certainly find them easier to write and modify. And I longed for the metaprogramming aspects of Lisp. Alas, Hy didn't really reach my dream. That macro expansion made debugging a nightmare as Hy would lose track of where the line numbers are; it wasn't until that when I really realized that without line numbers, you're just lost in terms of debugging in Python-land. That and Python didn't really have the right primitives; immutable datastructures for whatever reason never became first class, meaning that functional programming was hard, "cons" didn't really exist (actually this doesn't matter as much as people might think), recursive programming isn't really as possible without tail call elimination, etc etc etc. But I missed parentheses. I longed for parentheses. I dreamed in parentheses. I'm not kidding, the only dreams I've ever had in code were in lisp, and it's happened multiple times, programs unfolding before me. The structure of lisp makes the flow of co
(read more)
About ScienceDirect Shopping cart Contact and supportTerms and conditionsPrivacy policy We use cookies to help provide and enhance our service and tailor content and ads. By continuing you agree to the use of cookies. Copyright © 2020 Elsevier B.V. or its licensors or contributors. ScienceDirect ® is a registered trademark of Elsevier B.V.
(read more)
A few weeks ago I wrote about the Hare language and its lack of generic data structures. I don’t want to talk about this topic again, instead I want to discuss something more generic (pun i
(read more)
The Cat S22 Flip takes the cell phone back to what it should be… a phone.  Made for those who want a device as simple to use as it is tough, the Cat S22 Flip features physical buttons and a large touch screen, letting you choose how you interact with it. The Cat S22 Flip’s ‘Snap it to End it’ calling gives you confidence that when it is closed the call is over. Android™ 11 (Go Edition) Programmable PTT Button IP68 & MIL-SPEC 810H Drop tested up to 6ft on to steel Waterproof to a depth of 5
(read more)
MonsterWriter The most enjoyable desktop app for writing a thesis or paper.
(read more)
May 24, 2022 Series overview This article is part of the series systemd by example. The following articles are available. Introduction This is the fourth article in a series trying to understand systemd by creating small containerized examples. In Part 1, we created a minimal systemd setup in a container. In Part 2 we took a close look at systemd’s dependency management. In Part 3 we saw the basics of services and how to define them. In this post, we will see another way to add dependencies for units. This technique is most commonly used when adding new units to the system that should be activated during bootup. Recap of dependencies Let’s briefly recap systemd dependencies (see Part 2: Dependencies for more details). There are two types of dependencies: ordering dependencies, specified with the directives Before= and After=, and requirement dependencies, with the most common directives Wants= and Requires=. In this post, we are concerned with the latter dependency type. If a.service has a requirement dependency on b.service, then whenever a.service is activated, so is b.service. We have used this several times already. For example, in the minimal setup of Part 1, default.target has a Requires= dependency on systemd-journald.service, so when the system boots, default.target gets activated and with it the journald service. Similarly, halt.target has a Requires= dependency on halt.service, so when the system is shut down, systemd activates halt.target, which causes the execution of halt.service. Now assume that we want to add a new service to our system, for example a webserver that we want to start as soon as the system boots up. To do this, we first need to write a service unit file that describes how to start the webserver, and then we need to add a requirement dependency to default.target to ensure that the service is activated on system start. This means that the information about the service is spread across two different places: the service file contains how the webserver is started, and default.target specifies when the service started. To make matters worse, the information is usually contained in different directories: default.target lives in /
(read more)
Nassau Hall, photographed in 2013Princeton University, Office of Communications, Denise Applewhite Classics professor Joshua Katz was fired Monday by Princeton’s trustees, according to a University statement released Monday evening. “The dismissal followed an investigation initiated in February 2021, after the University received a detailed written complaint from an alumna who had a consensual relationship with Dr. Katz while she was an undergraduate under his academic supervision,” the statement says. “That relationship was the focus of a 2018 disciplinary proceeding against Dr. Katz, which resulted in a penalty of unpaid suspension for academic year 2018-2019 and three years of probation following his return to the Faculty in 2019.”   The alumna did not participate in the University’s 2018 investigation but came forward in 2021. The investigation that followed found that Katz “misrepresented facts or failed to be straightforward” during the 2018 investigation and discouraged the alumna from speaking and from “seeking mental health care although he knew her to be in distress, all in an effort to conceal a relationship he knew was prohibited by University rules,” the statement says. “These actions were not only egregious violations of Univ
(read more)
Pinned Symbian OS Kernel C++ 196 44 Repositories Type Select type All Public Sources Forks Archived Mirrors Templates Language Select language All
(read more)
Master Series MX MECHANICAL Wireless Illuminated Performance Keyboard Master Series MX MECHANICAL Wireless Illuminated Performance Keyboard Claim your complimentary 1-month Adobe Creative Cloud* subscription when you purchase from Logitech.com. Learn More Dimensions
(read more)
Please enable cookies. We are checking your browser... www.researchgate.net Why do I have to complete a CAPTCHA? Completing the CAPTCHA proves you are a human and gives you temporary access to the web property. What can I do to prevent this in the future? If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware. If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.
(read more)
DigitalOcean is committed to providing products that serve developers throughout their journey, and access to serverless computing has been one of the most popular requests from DigitalOcean users who want to spend less time managing their infrastructure and more time building impactful applications. In recent years, serverless computing has gained tremendous popularity among developers building modern apps, and according to IDC’s IaaSView buyer survey, 25% of cloud IaaS buyers intend to utilize serverless functions in the next 12 months. In September 2021, DigitalOcean acquired Nimbella to accelerate our introduction of serverless computing, and today we’re delighted to announce the general availability of our serverless product, DigitalOcean Functions. DigitalOcean Functions is a fa
(read more)
Here's a new Haskell WAT?! Haskell has a type Rational for working with precisely-valued fractional numbers, and it models the mathematical concept of a rational number. Although it's relatively slow compared with Double, it doesn't suffer from the rounding that's intrinsic to floating-point arithmetic. It's very useful when writing tests because an exact result can be predicted ahead of time. For example, a computation that should produce zero will produce exactly zero rather than a small value within some range that would have to be determined. Rational is actually a (monomorphic) specialization of the more general (polymorphic) type Ratio (from Data.Ratio). Ratio allows you to specify the underlying type used for the numerator and denominator. For example, to work with rational numbers using Int as the underlying type you can use Ratio Int. For the common case of using Integer as the underlying type, the type synonym Rational is provided: type Rational = Ratio Integer It's tempting to use Ratio with a fixed-width type like Int because Int is much faster than Integer. However, let's see what can happen if you do this: λ> import Data.Int λ> import
(read more)
  You block advertising 😢Would you like to buy me a ☕️ instead?Now and then, fierce debates ignite on Twitter about whether the term Software Architecture is misleading or even harmful. The argument goes as follows: Code is ever evolving while buildings are static. Furthermore, making changes to code is easy and cheap and making changes to buildings is borderline impossible. Therefore rigorous planning of an architect is justified when building a house but a waste of time when writing code.I always felt that this way of thinking is flawed. And when I recently did some work to prepare for the renovation of a balcony, it became clear to me that Software Architecture and real Architecture are very similar indeed. So let’s dissect the arguments and look at the glaring similarities.First misconception: changing software is cheapThe notion that making changes to a big software project is cheap is utterly flawed. At least it’s not reflected in my reality. Sure, renaming a variable or function here and there really is not very expensive. But the same goes for replacing a carpet in your house. On the other hand, making a significant change to a particular feature that requires the combined effort of three programmers, one designer, and a project owner, is a different (user) story.I assume people think making adaptions to software is cheap because most of us never had to foot the bill for a five-person development team. While many people roughly know how much it costs to do some (in our view) minor renovations. Also, spending 1.000 € me money feels a lot more expensive than spending 1.000 € company money.Of course, some things are easier to change than others. But a
(read more)
Informed Tip of the Week: Take a look at our recent series of posts covering Informed’s premise and our business model. We will be adding additional content over the next few weeks. This is obviously an old chart in the background! At the beginning of the year, I wrote about most of the obvious bubbles out there and how they all were nearing the end. I specifically cited tech stocks, meme stocks, bond yields, and crypto. Not bad! But this isn’t pat on the back time. This is the time to reexamine the thesis. Is this the beginning of the fall or the end? I’m not going to review every asset class, but I think it’s worth examining one in more detail: crypto. The conclusion: it’s over. In two or three years, people won’t even talk about crypto. It will become a small corner of the investment world limited to the true believers who refuse to surrender. Names will be taken off arenas. Matt Damon will return to making movies instead of commercials. El Salvador will revert to using whatever worthless currency they had before Bitcoin. Bitcoin as an alternative currency has already been debunked. The true believers just haven’t realized it yet. It’s not just because a stablecoin failed. It’s so much more than that. Let’s explore… Not An Inflation Hedge The original case for Bitcoin was fiat currency couldn’t be trusted because of evil governments who would debase their currencies. Because bitcoin was limited in supply, it
(read more)
(View on desktop for best experience.) Podcast Modder Interviews Bethesda Store Nexus Mods It may be hard to believe, but as of 2022, Bethesda Softworks’ The Elder Scrolls III: Morrowind is 20 years old. For so many who have played the game, the music, and the memories of playing have inspired deep nostalgia. For others, the ability to mod the game captured imaginations and inspired creativity. So, on this 20-year anniversar
(read more)
Everyone who knows me IRL (and, I suppose, who follows me online for long enough), knows that I have a… special relationship with LaTeX. I think it has something to do with its obscurity, when it wasn’t specifically made to be obtuse, and then being so good at what it does — which is typeset documents. It doesn’t help that people consistently make impressive things with it, thus showing that it’s not just theoretically Turing-complete, but really something you can bend to your will, provided you’re willing to grapple with books from the 70s and obscure PDFs
(read more)
Simple web page with a Go backend to control an esp32 remotely throught MQTT protocol Installation Firstly you need to edit the esp32/esp32.ino file filling this variables with your data: char WIFI_SSID[] = ""; char WIFI_PASS[] = ""; char MQTT_ADDR[] = ""; char MQTT_USER[] = ""; char MQTT_PASS[] = ""; Then you can upload this code to your ESP32 card. Now we can build Go backend, simply run from your terminal to compile the project: This generate the backend executable called esp32-mqtt. Usage We need first to run the Mosquitto broker (follow installation instruction for your OS
(read more)
A fully interactive, real-time, and modern text-based browser rendered to TTYs and browsers Why use Browsh? Not all the world has good Internet. If you only have a 3kbps internet connection tethered from a phone, then it's good to SSH into a server and browse the web through, say, elinks. That way the server downloads the web pages and uses the limited bandwidth of an SSH connection to display the result. However, traditional text-based browsers lack JS and all other modern HTML5 support. Browsh is different in that it's backed by a real browser, namely headless Firefox, to create a purely text-based version of web pages and web apps. These can be easily rendered in a terminal or indeed, ironically, in another browser. Do note that currently the browser client doesn't have
(read more)
Fifteen years ago, Street View began as a far-fetched idea from Google co-founder Larry Page to build a 360-degree map of the entire world. Fast forward to today: There are now over 220 billion Street View images from over 100 countries and territories — a new milestone — allowing people to fully experience what it’s like to be in these places right from their phone or computer. And Street View doesn't just help you virtually explore, it’s also critical to our mapping efforts — letting you see the most up-to-date information about the world, while laying the foundation for a more immersive, in
(read more)
Can positivity be toxic? We’ll investigate the concept of toxic positivity. From this, we'll learn how we can communicate authentically.  What is toxic positivity?  ‘Toxic positivity’ is a relatively new term. It refers to positivity to the point of excess. It is predominantly a social media phenomenon. But, it has bled into our behaviour in daily life. Ironically, it fosters a negative culture. One that denies lived experiences and alienates people from a sense of community. When do I need to be aware of toxic positivity? Toxic positivity can crop up in a few different ways: On social media Instagram is notoriously a highlight reel rather than a window. It’s your prerogative to post whatever you want on social media. You may use your own feed as a wa
(read more)
To say that the material world alone exists is not terribly informative unless we have some account of what matter is.  Those who are most tempted to materialism are also inclined to answer that matter is whatever physics says it is.  The trouble with that is that physics tells us less than meets the eye about the nature of matter.  As Poincaré, Duhem, Russell, Eddington, and other late nineteenth- and early twentieth-century philosophers and scientists were keen to emphasize, what physics gives us is the abstract mathematical structure of the material world, but not the entire nature of the concrete entities that have that structure.  It no more captures all of physical reality than a blueprint captures everything there is to a house.  This is, of course, a drum I’ve long banged
(read more)
Amazon announced the Graviton 3 processor and C7g instance family in November 2021, but it took six months before they were ready for general availability; in the mean time, however, as the maintainer of the FreeBSD/EC2 platform I was able to get early access to these instances. As far as FreeBSD is concerned, Graviton 3 is mostly just a faster version of the Graviton 2: Most things "just work", and the things which don't work on Graviton 2 — hotplug devices and cleanly shutting down an instance via the EC2 API — also don't work on Graviton 3. (Want to help get these fixed? Sponsor my work on FreeBSD/EC2 so I have a few more paid hours to work on this.) The one notable architectural difference with the Graviton 3 is the addition of Pointer Authentication, which makes use of "unuse
(read more)
In its draft law to combat child sexual abuse, the EU Commission describes one of the most sophisticated mass surveillance apparatuses ever deployed outside China: CSAM scanning on everybody's devices. As an email service we regularly receive monitoring orders from German authorities. We have analyzed this data to find out whether monitoring orders are issued to prosecute child molesters. CSAM scanning The EU Commission's draft regulation on preventing and combating child abuse is a frontal attack on civil rights. And the EU Commission is pushing for this draft to become law with Trump-like exaggerations. As citizens we can expect more from the EU Commission. The least we can ask for when the Commission wants to introduce surveillance mechanisms that will immensely weaken Europe’s cy
(read more)
Here’s the summary of the hardware and the software that powers Healthchecks.io. Hardware Since 2017, Healthchecks.io runs on dedicated servers at Hetzner. The current lineup is: HAProxy servers: 4x AX41-NVMe servers (Ryzen 3600, 6 cores)Web servers: 3x AX41-NVMe servers (Ryzen 3600, 6 cores)PostgreSQL servers: 2x AX101 servers (Ryzen 5950X, 16 cores) All servers are located in the Falkenstein data center park, scattered across the FSN-DCx data centers so they are not all behind the same core switch. The monthly Hetzner bill is €484. Software Ubuntu 20.04 on all machines.Systemd manages services that need to run continuously (haproxy, nginx, postgresql, etc.)Wireguard for private networking between the servers. Tiered topology: HAProxy servers cannot talk to PostgreSQL servers.Netd
(read more)
SupabaseBuild in a weekend. Scale to billions.Apply to Supabase and hundreds of other fast-growing YC startups with a single profile.Apply to role ›About the role!Join Supabase Supabase is an Open Source and fully remote company building developer tools for hundreds of thousands of indie developers, startups, and businesses. We’re seeking a Head of Documentation to, well ... write documentation. You’ll guide developers to use databases, authentication, file storage, edge functions, REST APIs, GraphQL, and realtime data streaming. We believe that documentation is more than just a tool. It’s part of our product. The documentation is where developers take their first step on their side project. We know our docs need a lot of work, and that’s why we need you. If you have ideas for w
(read more)
Ask HN: Serious mathematics books that can replace a good teacher? 41 points by newsoul 1 hour ago | hide | past | favorite | 28 comments Mathematics is best learned under the guidance of a mentor. But not everyone has access to mentors all the time. That's where books come in. Good books. Books that can be substitute for a mentor or sometimes even better.Which books (preferably not pop-sci) fall into this category? If someone has a nonstandard analysis text that they endorse as really good, I would love to hear about that. It would be a shame to tell a kid about deltas and epsilons. No. Books can't understand
(read more)
Mr. Derek Taylor (DistroTube) uploaded a video on his YouTube channel about a fellow YouTube poster named Roel Van de Paar.  While DistroTube creates well-produced and informative content about Linux and free and open source software, Mr. Van de Paar has adopted a different posting approach. He takes Stack Exchange questions and answers and creates text-based videos containing nothing but those questions and answers. Mr. Van de Paar has recently been posting more than one video per minute, and has now uploaded more than 2,000,000 videos to YouTube. (He has posted more YouTube videos than anyone else.)Is it time for a new content-posting strategy here at The New Leaf Journal?  (I kid.)
(read more)
Unprecedented evidence from internal police networks in China’s Xinjiang region proves prison-like nature of re-education camps, shows top Chinese leaders’ direct involvement in the mass internment campaign. The Xinjiang Police Files are a major cache of speeches, images, documents and spreadsheets obtained by a third party from confidential internal police networks. They provide a groundbreaking inside view of the nature and scale of Beijing's secretive campaign of interning between 1-2 million Uyghurs
(read more)
microcontrollers are overrated introduction This is an LED array that lights up in response to motion and sends waves across the array. The array consists of identical "units" connected in a grid, with 16 units per board. Boards are tileable to make an arbitrarily large array. What makes this array unique is that the LEDs are controlled entirely by analog circuitry. No digital logic anywhere! (Except perhaps the switching regulators on each board.) All "computation" is done by operational amplifiers (opamps). There is no need for it to boot up or communicate with anything else, and the dimming and wave effect are completely smooth with no modulation or discrete levels. concept and design A Long Time Ago(TM) I was curious about the uses of opamps. I learned that they were capable
(read more)
Way back in April 2018, GitLab 10.7 introduced the Web IDE to the world and brought a delightful multi-file editor to the heart of the GitLab experience. Our goal was to make it easier for anyone and everyone to contribute, regardless of their development experience. Since its introduction, tens of millions of commits have been made from the Web IDE, and we've added features like Live Preview and Interactive Web Terminals to enhance the experience. Now, we're excited to share some big changes we have in store for the Web IDE in coming milestones. What makes an IDE? Over the years, we've learned a lot about how you all are using the Web IDE. We've compared it to our Web Editor in the repository view. We've spoken to developers, designers, product managers, and technical writers alike. Almost universally, we hear that the Web IDE is great for small changes: a quick change to a config file, an update to a Markdown file, or a typo fix in a merge request. These lightweight changes make up the vast majority of the Web IDE usage. And for those use cases, it's super convenient and intuitive. But to grow, and to really earn the moniker “IDE,” what are we missing? What keeps developers from making more complex changes in the Web IDE? What can we do to elevate the experience? We hear about missing features and functionality like a collapsible file panel that supports contextual actions and drag and drop or tighter integration with merge requests. We've learned that there's no single feature that's a deal-breaker for most developers; it's the sum total of a lot of little user experience gaps. The Web IDE is built on top of the fantastic open source project, Monaco. What made M
(read more)
High-speed video reveals a big difference in how salamanders react to falling. While ground-dwelling (nonarboreal) salamanders seem helpless during freefall in a vertical wind tunnel, arboreal salamanders maneuver confidently. This suggests that the tree-dwellers have adapted to routine falls, and perhaps use falling as a way to quickly move around in the canopies of the world’s tallest trees. The white spots are paper disks attached with water in order to track the motion of the head, body and tail. (Video produced by Roxanne Makasdjian with footage courtesy of Christian Brown) Salamanders that live their entire lives in the crowns of the world’s tallest trees, California’s coast redwoods, have evolved a behavior well-adapted to the dangers of falling from high places: the ability to parachute, glide and maneuver in mid-air. Flying squirrels, not to mention numerous species of gliding frogs, geckos, and ants and other insects, are known to use similar aerial maneuvers when jumping from tree to tree or when falling, so as to remain in the trees and avoid landing on the ground. Similarly, the researchers suspect that this salamander’s skydiving skills are a way to steer back to a tree it’s fallen or jumped from, the better to avoid terrestrial predators. “While they’re parachuting, they have an exquisite amount of maneuverable control,” said Christian Brown, a doctoral candidate at the University of South Florida (USF) in Tampa and first author of a paper about these behaviors. “They are able to turn. They are able to flip themselves over if they go upside down. They’re able to maintain that skydiving posture and kind of pump their tail up
(read more)
May 23, 2022 / 6:01 PM / MoneyWatch Some 3 million Americans will enroll in graduate programs this year — only to work toward degrees that often aren't worth the time or money, according to an education policy analyst. Many undergraduates earn their bachelor's degrees and go straight to graduate school in hopes of gaining a new degree or skills that will make them more attractive to prospective employers."The reason people go makes sense. They go to get a good job and make more money," said James Murphy, senior policy analyst at advocacy group Education Reform Now. But recent research shows that 40% of masters programs in the U.S. have no positive return. "If you take in the cost of attending and the time spent not working, what you get out of that master's degree doesn't even pay for itself," Murphy told CBS News.  In some cases, they even have a negative return on investment — meaning degree holders spend more on graduate school than they can reasonably expect to earn later on. "You end up making less money by getting this degree. So that's pretty bad," Murphy added. That's compounded by the fact that some 60% of degree seekers take out loans to pay for graduate school programs, and end up saddled with student loan debt. Murphy said the federal government issues loans recklessly to students who end up carrying more debt than they can pay off. Meanwhile, universities get rich from tuition fees. "It's the universities who are seeing giant piles of money out there and grabbing it," Murphy said.  In the past decade alone, roughly 9,000 new master's degree programs have sprouted. But new different career types have not."This is essentially universities seeing the money that's out there and getting it," Murphy said. He urged students to consider whether or not a master's degree makes sense before they enroll in a program. First, ask yourself why you want to get a master's degree. "If your answer is to make more money, get a better job, and that's your only answer, it's probably not a grea
(read more)
Introducing Indigo — the native macOS app which will revolutionise the way you configure and run local web servers on your Mac.Sign up for the beta Bare metal. With the best of virtualized.Run all the same services as your production stack, isolated but directly on your Mac.No Docker, no virtual machines, no hassles.Remove or rebuild your stacks anytime you want to start fresh.Each stack configuration is stored in a single file. Build your entire dev environment on a new Mac with a single click.Run all the things.Nginx, Apache, PHP, MySQL... Indigo comes with everything you’ll need to get your projects running locally in no time. Run all your projects—as many servers and PHP versions as you want—all at once if you like.Say hello to instant.No more waiting for your files to sync into your containers or VM. Indigo brings you the reliable, bare metal performance you always knew your Mac was capable of.Set your Mac free.Indigo will remind you just how powerful your Mac actually is. It will run silent and cool, just like it should. Warning: you may need to find some other way to keep your workspace warm.Completely standalone.Indigo installs its services completely independent of anything macOS or Homebrew has installed. Run them all at once if you want!Batteries included.Acc
(read more)
Tether claims its dollar-pegged token is "fully backed."Justin Tallis | Afp | Getty ImagesInvestors have yanked more than $10 billion out of tether in the past two weeks amid heightened regulatory scrutiny over stablecoins.Tether, the world's largest stablecoin, has seen its circulating supply plunge from a record $84.2 billion on May 11 to around $73.3 billion as of Monday, according to data from CoinGecko. About $1 billion was withdrawn late Friday evening.The cryptocurrency, which is meant to be pegged to the U.S. dollar, temporarily dipped as low as 95 cents on May 12 after another type of stablecoin, terraUSD — or UST — plunged well below $1. That resulted in a sell-off in UST's associated luna token, which in turn wiped out more than $40 billion in holders' wealth.The fallout from the collapse of Terra, the blockchain behind UST and luna, sent shockwaves through the crypto market, with bitcoin and other cryptocurrencies tumbling sharply. That's causing concern for regulators."Whenever there's a failure or a catastrophe in crypto, the fear is always that someone will misread the situation and overcorrect in a position that's not helpful for the entire community writ large," Kathleen Breitman, a co-creator of the Tezos blockchain, told CNBC."As much as I relish seeing things that don't make sense fail, there's always a tinge of like, 'Are people going to extrapolate from this that everything that's a stablecoin is unsound?' That's always the big fear."Unlike tether, UST wasn't backed by fiat currency held in a reserve. Instead, it relied on some complex engineering where price stability was maintained through the destruction and creation of UST and its sister token luna. Investors were lured in by the promise of 20% savings yields from Anchor, Terra's flagship lending platform, a rate many investors said was unsustainable.Terra creator Do Kwon had also accumulated billions of dollars' worth of bitcoin and other tokens through his Luna Foundation Guard fund, but nearly all of the funds were depleted in a futile effort to save UST."While we have witnessed an erosion in investor confidence, we should not throw all stablecoins out the window," said Stephen A
(read more)
Date Make Model Number of Cars Location State / Province Country Collision Fatalities Injuries Description 5/23/2022 Unknown 1 Route 3, Brooklyn IL 0 0 Car purchased a week prior 5/23/2022 Unknown 1 Austin TX 0 0 Car in flames on side of road 5/22/2022 Model S 3 3851 Bird Road, Miami FL 0 0 Car ignited in Tesla Sales Center parking lot, s... 5/21/2022 Model 3 1 California City CA 0 0 Parked car burst into flames 5/20/2022 Model Y 1 Mountain Hwy and Hunter, Vancouver 0 0 Car stopped and shut down before bursting into f... 4/24/2022 Unknown 1 Fifth Avenue and 77th Street, Brooklyn NY 0 0 Parked car spontaneously combusted 4/9/2022 Unknown 1 Amherst Street, Nashua NH 0 0 Car crashed into tree, caught on fire 4/3/2022 Unknown 2 4th Street, between Broadway and Colorado Avenue, Santa Monica CA 0 1 Crash caused ignition 4/3/2022 Unknown 1 Prestons, Southwest Sydney 1 0 Cat died after car caught fire in garage and bur... 3/4/2022 Model S 1 Palisades Interstate Parkway, Nanuet NY 0 0 Car crash caused fire 3/3/2022 Unknown 1 Fillmore CA 0 0 Fire after crash into ditch 1/8/2022 Model 3 3 Denmark 0 0 Charging fire 11/23/2021 Model 3 1 1500 Temple Drive, Maple Glen PA 0 0 Car was charging 11/22/2021 Qin Pro 1 Beijing 0 0 Car was charging in underground parking garage 10/15/2021 Model 3 1 Interstate 65-S, West Lafayette IN 0 0 Car crashed into guardrail's metal spike left fr... 10/2/2021 Unknown 1 500 S. Greenville Avenue, Allen TX 0 3 Crashed into tree in median 9/30/2021 Model 3 1 Charles Street and W. Towsontown Boulevard, Baltimore MD 0 0 9/30/2021 E-Citaro Bus 2 Stuttgarter Straßenbahn AG, Stuttgart 0 0 Bus depot fire 9/29/2021 Unknown 1 Enterprise Park, Calverton NY 0 0 Stored vehicle possibly damaged by Hurricane Ida 9/27/2021 Model S Plaid 1 Tesla Service Center, Marietta GA 0 0 Car caught fire at Tesla service center 9/16/2021 Chevy Bolt EV 1 Canton GA 0 0 Fire in garage 9/14/2021 Model 3 1 Alhambra Circle and Coral Way, Coral Gables FL
(read more)
Organized philanthropy, like most things, looks different on the inside than it does from the outside. “Philanthropy” comes from the Greek for “love of humanity,” and public perceptions of it have usually centered on donors and how humanity-loving they really are. The good guys are generous rich people who give to causes we all approve of, like combatting climate change; the bad guys give in order to launder their reputations (like the opioid-promoting Sackler family) or to advance unsavory goals (like the anti-environmentalist Kochs). Either way, the salient questions about philanthro
(read more)
LONDON (AP) — A leading adviser to the World Health Organization described the unprecedented outbreak of monkeypox in developed countries as “a random event” that appears to have been caused by sexual activity at two recent raves in Europe.Dr. David Heymann, who formerly headed WHO’s emergencies department, told The Associated Press that the leading theory to explain the spread of the disease was sexual transmission at raves held in Spain and Belgium. Monkeypox has not previously triggered widespread outbreaks beyond Africa, where it is endemic in animals. “We know monkeypox can spre
(read more)
Fentanyl test strips (FTS) are a simple, inexpensive, and evidence-based method of averting drug overdose. FTS are small strips of paper that can detect the presence of fentanyl in any drug batch—pills, powder, or injectables. This tool might be lifesaving for the teenager experimenting for the first time, the individual in the throes of a severe opioid use disorder, the concert-goer looking for a trip, the person using a preferred substance obtained from a new source, or the individual years into recovery. FTS also support the dignity and well-being of people who use drugs (PWUD), enabling them to make educated decisions about their safety. And yet after years of press and discussions of the strips’ utility, FTS aren’t as widely available as one would expect them to be. It is time to take a more critical look at the importance of destigmatizing this tool and increasing its distribution and availability, while highlighting the grave risks in not doing so. Empowerment In A Test Strip Fentanyl, a synthetic opioid 50 to 100 times more powerful than morphine, is commonly found in unregulated drugs, as it is cheap to make and easily mixed or “cut” into drugs. It can be found in heroin or cocaine or formed into “pills” that are sold on the street in the guise of other substances such as MDMA, alprazolam, oxycodone, and others. Because of this, many users are unaware of the composition of drug they are taking or whether it contains traces of fentanyl. This lack of knowledge can be deadly; as we’ll discuss later, fentanyl is responsible for an increasing number of drug overdoses. Since their creation in 2011 by the biotech company BTNX, FTS have been distributed mainly at harm-reduction sites, such as needle and syringe programs, or through a distributor’s website, but they could be sold at any bodega or dollar store. They are inexpensive ($1 each), simple to use, and can be carried in a wallet or purse. The single-use strips work like other over-the-counter testing products: The user dips the strip into water containing a small amount of well-mixed drug residue and waits a few minutes for the result. The appearance of a single line signifies the presence of fentanyl or fentanyl analogues such as acetylfentanyl, and two red lines signifies its absence. By testing a drug batch with a single fentanyl test strip, the user is provided valuable inf
(read more)
I have the kind of garden plot where you’re lucky to even push a shovel into the ground. The rocky clay is so hard it’s not only exhausting to work, it broke my neighbor’s tractor when he tried to till it. That’s why I ended up building raised beds to grow food, and we offer them as a general recommendation to budding gardeners because it’s an easy, reliable method that works pretty much anywhere. And — very important in these times — they help you get growing fast.However, raised beds won’t last forever. Wood rots — even pressure-treated wood. Metal rusts away. Stone beds can last nearly forever, but they’re a pain to build, and even then compost disappears and the beds sink unless you refill them every so often.Long term, we want to build up our native soil so we don’t need the crutch of raised beds. Dumping a box of compost on top of the ground can go a long way toward improving the soil, as it adds organic matter and beneficial bacteria that loosen and liven up dead soils. At least in theory.But some of us need more help. David the Good, one of my favorite gardening authors and YouTubers, has been tracking the journey of his friend Elizabeth. She started with concrete-like soil and has successfully turned it into a beautiful and productive garden. Not only that, but she uses no commercial inputs and has thus closed her dependency loops. Let’s see how she did it.Lasagna Gardening FailNo-till gardening is the hottest thing going in the horticultural world. In traditional gardening and farming, you use tools and machines to till or pulverize the ground until it’s loose enough for delicate human-cultivated plants to grow in it. That’s a lot o
(read more)
Trial Status: Active This phase I trial tests the safety, side effects, and best dose of CF33-hNIS-antiPDL1 in treating patients with triple negative breast cancer that has spread to other places in the body (metastatic). CF33-hNIS-antiPDL1 is an oncolytic virus. This is a virus that is designed to infect tumor cells and break them down. Inclusion Criteria Documented informed consent of the participant and/or legally authorized representative * Assent, when appropriate, will be obtained per institutional guidelines Agreement to research biopsies on study, once during study and end of study, exceptions may be granted with study principal investigator (PI) approval >= 18 years Eastern Cooperative Oncology Group (ECOG) =< 2 Histologically confirmed metastatic triple negative breast cancer. Triple negative status will be defined as estrogen receptor (ER) and progesterone receptor (PR) =< 10% by immunohistochemistry (IHC) and
(read more)
A small group of quality assurance workers at an Activision Blizzard-owned game studio have unionized, marking the arrival of the first labor union at a major U.S. gaming company.The workers at Raven Software, which is a Wisconsin subsidiary of Activision, voted to form the union Game Workers Alliance with the Communications Workers of America. Nineteen workers voted in favor of the union, with three voting against, the National Labor Relations Board tallied Monday. Two additional challenged ballots were uncounted, but do not change the outcome. The union victory at the video game giant could serve as a foothold for other workers in the gaming industry looking to organize. Workers have increasingly criticized practices in the industry, including temporary contracts with little job security and grueling working conditions during weeks-long pushes to meet game deadlines. North America saw its first video game union form at the end of 2021 at Vodeo Games, an indie studio with about a dozen employees.The vote comes during a transitional and tumultuous period at Activision Blizzard, with Microsoft announcing its intentions to purchase the company for nearly $69 billion in January. Activision Blizzard has in recent years faced high-profile claims of sexual misconduct and unequal pay. The Santa Monica video game giant creates some of the most well-known franchises in the industry, including “Call of Duty,” “Diablo” and “World of Warcraft.” Raven Software, a subsidiary acquired in 1997, leads the company’s “Call of Duty” development. Raven Software workers walked off the job in early December after several members of the quality assurance department were let go at the end of their contracts. Between 70 and 75 workers from Raven and other parts of Activision Blizzard went on strike. The work stoppage lasted more than a month and culminated in workers announcing their intent to unionize in January.Days after workers announced their intent to unionize, Raven management announced plans Jan. 24 to break up the department of quality assurance workers and distribute them to other teams. Activision Blizzard then lobbied the NLRB to expand the group of workers eligible to vote in the union election. The Communications Workers of America said expanding the pool of eligible voters was a strategy to dilute support for the union. The NLRB dismissed Activision Blizzard’s petition in late April, allowing the election to move forward.Activision Blizzard spokesperson Jessica Taylor said in an emailed statement that “an important decision that will impact the entire Raven Software studio of roughly 350 people should not be made by 19 Raven employees.”During the months-long union campaign, public officials scrutinized the actions of the video game giant amid allegations that it engaged in union-busting tactics. Prosecutors with the U.S. labor board determined Monday, hours before the vote count, that the company illegally threatened staff and enforced a social media policy that violated workers collective action rights. Taylor denied the charges. “These allegations are false. Employees may and do talk freely about these workplace issues witho
(read more)
This RFC outlines the biggest update to Next.js since it was introduced in 2016:Nested Layouts: Build complex applications with nested routes.Designed for Server Components: Optimized for subtree navigation.Improved Data Fetching: Fetch in layouts while avoiding waterfalls.Using React 18 Features: Streaming, Transitions, and Suspense.Client and Server Routing: Server-centric routing with SPA-like behavior.100% incrementally adoptable: No breaking changes so you can adopt gradually.Advanced Routing Conventions: Offscreen stashing, instant transitions, and more.The new Next.js router will be built on top of the recently released React 18 features. We plan to introduce defaults and conventions to allow you to easily adopt these new features and take advantage of the benefits they unlock.TimelineThis RFC will be divided into two parts:Part 1 (This Post): Overview of the new routing system and how it integrates with React Server Components and Data Fetching.Part 2 (Next Post): Advanced routing examples and conventions, and how Next.js will use Suspense behind the scenes for streaming and selective hydration.MotivationWe've been gathering community feedback from GitHub, Discord, Reddit, and our developer survey about the current limitations of routing in Next.js. We've found that:The developer experience of creating layouts can be improved. It should be easy to create layouts that can be nested, shared across routes, and have their state preserved on navigation.Many Next.js applications are dashboards or consoles, which would benefit from more advanced routing solutions.While the current routing system has worked well since the beginning of Next.js, we want to make it easier for developers to build more performant and feature-rich web applications.As framework maintainers, we also want to build a routing system that is backwards compatible and aligns with the future of React.TerminologyThis RFC introduces new routing conventions and syntax. The terminology is based on React and standard web platform terms. Throughout the RFC, you'll see these new terms linked back to their definitions below.Tree: A convention for visualizing a hierarchical structure. For example, a component tree with parent and children components, a folder structure, etc.Subtree Part of the tree, starting at the root (first) and ending at the leaf (last).URL Path: Part of the URL that comes after the domain.URL Segment: Part of the URL path delimited by slashes.How Routing Currently WorksToday, Next.js uses the file system to map individual folders and files in the Pages directory to routes accessible through URLs. Each Page file exports a React Component and has an associated Route based on its file name. For example:Next.js also supports Dynamic Routes (including catch all variations) with the [param].js, [...param].js and [[...param]].js conventions.Layouts: Next.js offers support for simple component-based layouts, per-page layouts using a component property pattern, and a single global layout using a custom app.Data Fetching: Next.js provides data fetching methods (getStaticProps, getServerSideProps) which can be used at the page (route) level. These methods are used to dete
(read more)
Please enable cookies. We are checking your browser... www.researchgate.net Why do I have to complete a CAPTCHA? Completing the CAPTCHA proves you are a human and gives you temporary access to the web property. What can I do to prevent this in the future? If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware. If you are at an office or shared network, you can ask the network administrator to run a scan across t
(read more)
Four years ago, I wrote a blog post titled Minimalism in Programming, in which I tried to formulate an argument as to why it’s usually a good idea to try to minimize complexity in your programm
(read more)
Schema.org is a collaborative, community activity with a mission to create, maintain, and promote schemas for structured data on the Internet, on web pages, in email messages, and beyond. Schema.org vocabulary can be used with many different encodings, including RDFa, Microdata and JSON-LD. These vocabularies cover entities, relationships between entities and actions, and can easily be extended through a well-documented extension model. Over 10 million sites use Schema.org to markup their web pages and email messages. Many applications from Google,
(read more)
How to Make Automatic Supercuts I’ve been working on some long-needed updates to Videogrep, my command-line tool that automatically generates supercuts. These updates were motivated in
(read more)
Interact is a framework for friendly online introspection of the running program state in an intuitive command-line interactive way. You may be looking for: Book (master). Crate docs of interact_prompt: latest, master Crate docs of interact: latest, master Interact is useful for server programs that otherwise receive no input. You can use Interact to make your server receive commands using the special prompt from the interact_prompt crate. The commands can be used to browse your server's internal state, modify it, and call method functions that were specified in interact derive attributes. Interact is implemented for stable Rust, using only safe mode. Introduction While dynamically-typed interpreted languages offer the advantage of being able look at a running program state using a prompt, compiled languages often do not provide that feature. Being hard as it is to introduce interpreters into compiled languages, the Interact project aimes to provide a midway solution using stable Rust. How to make your server Interact-able Custom-derive types using #[derive(Interact)]. Use #[interact(skip) for problematic fields. No need to worry about Rc, RefCell, Arc, Mutex, even with reference loops. Handling for that exists, as demonstrated further. Register process-global or TLS-local state via interact_prompt's registry. Invoke interact_prompt either directly or in its own OS thread (async not supported yet). Interact Prompt features Provide Rust-like expressions to explore from the root nodes, e.g. node.some_map["value"].field.sub_field. Full auto-complete and completion hints for type names, field names, enum names, function names, and punctuation. Modify the state from the prompt: at places where mutable access is possible in compile time, you can assign to fields of inner structs in run-time via appending = . It is possible to call method functions that were linked in using special interact attributes. State prints have an adjustable limit - if the state is too big it can be automatically capped so your terminal is not overwhelmed. Reference cycles (via Rc or otherwise) are handled gracefully in reflected values - a unique number is printed at the all the common sites: the first encounter and the repeats. Data indirection is supported - for example Actix's Addr<T> can be traversed into, exposing the full server state (see the example in the book). Interact mini-example with a recorded demo The program below registers states and invokes the Interact prompt on the main thread. extern crate interact; use interact::Interact; use interact_prompt::{LocalRegistry, Settings}; use std::{cell::RefCell, rc::Rc}; #[derive(Interact)] struct Point { x: i32, y: i32, } #[derive(Interact)] struct State { maybe_point: Option<Point>, complex: ((((usize, usize), u32, (u32, (u32,))), u32), u32), behind_rc: Rc<RefCell>, behind_rc2: Rc<RefCell>, } fn main() -> Result<(), interact_prompt::PromptError> { let rc = Rc::new(RefCell::new(3)); let state = State { maybe_point: Some(Point { x: 3, y: 3 }), complex: ((((0, 0), 0, (0, (0,))), 0), 0), behind_rc: rc.clone(), behind_rc2: rc,
(read more)
IEEE Account Change Username/Password Update Address Purchase Details Payment Options Order History View Purchased Documents Profile Information Communications Preferences Profession and Education Technical Interests Need Help? US & Canada: +1 800 678 4333 Worldwide: +1 732 981 0060 Contact & Support
(read more)
unprecedented photorealism × deep level of language understanding unprecedented photorealism deep level of language understanding There are several ethical challenges facing text-to-image research broadly. We offer a more detailed exploration of these challenges in our paper and offer a summarized version here. First, downstream applications of text-to-image models are varied and may impact society in complex ways. The potential risks of misuse raise concerns regarding responsible open-sourcing of code and demos. At this time we have d
(read more)
2022-05-02: I have started rewriting this article for improved style, reduced snark, more accurate information and I also added a new section about control flow that should be easier to digest and better expresses my thoughts on the topic. The section about memory has been removed and will reappear as another entry to appear later. You probably heard of SPIR-V. Otherwise, SPIR-V is a binary format for writing programs that run on the GPU, and it is designed to be consumed by OpenCL and Vulkan. As well as those two, OpenGL 4.6 added support for SPIR-V shaders, and WebGPU’s WGSL is essentially a close cousin. In the case of Vulkan specifically, SPIR-V replaces GLSL as the default way to feed code to the GPU. GLSL is a human-readable programming language with a lot of syntactic forms that needs to be parsed correctly, and it has been a steady source of implementation bugs, runtime overhead and intellectual property concerns (as you essentially ship the source of every shader in your app!). SPIR-V, much like Vulkan itself, trades API surface area for dramatically less driver complexity: by offering an intermediate language for feeding the driver, you put all the complexity and risk of bugs when implementing the high level language outside of the driver. This is -IMO- an unquestionable upgrade. We can now genuinely expect shaders to “just work” on another vendor. We can use any shading language we want, or make up our own, or even implement our own Vulkan software driver with considerably less work to do. SPIR-V, I argue, is a major component of Vulkan’s success, and I hope it continues to expand in this direction. In this series, I’ll be talking about SPIR-V as compiler target and a language for GPUs, from the perspective of a graphics hobbyist turned research compiler author. We’ll be focused on mostly compute aspects, at least for now, since for graphics I believe SPIR-V is acquitting itself quite well and I don’t have a lot to say. Merging compute and graphics: not quite. The SPIR-V specification defines it as an intermediate language for graphical shaders and compute kernels. The same specification is indeed shared for both OpenCL kernels and Vulkan shaders - this often leads to the claim that Vulkan is an OpenCL replacement, since they share an intermediate language. Sadly, while they are defined in the same document, SPIR-V for Vulkan shaders and SPIR-V for OpenCL kernels are disjoint subsets. To be more precise, OpenCL kernels use the Kernel execution model and capability, while Vulkan compute shaders use the GLCompute1 model and the Shader capability. For brevity I will from now on refer to SPIR-V programs using the Shader capability as shaders, and likewise for those using the Kernel capability. There is no interoperability between kernels & shaders: Vulkan won’t run Kernels and OpenCL won’t run Shaders, not even compute ones. As you might have guessed, compute shaders are quite different to CL kernels, and lack certain important features. I want to stress that all PC graphics hardware that runs Vulkan also has support for OpenCL and/or an even more capable dedicated compute API like CUDA o
(read more)
elm/virtual-dom version 1.0.3 was released a few days ago, and it includes a few security patches that help prevent JavaScript code injection through tags or HTML attributes/properties. elm/virtual-dom is the package that gives all the primitives that elm/html, mdgriffith/elm-ui, rtfeldman/elm-css and others use to create anything visual. So if you’re making a web application with Elm, you are using this package. How to upgrade First, let me give you guidelines on how to upgrade. For Elm applications: You can manually change the version for elm/virtual-dom in your elm.json to 1.0.3. You can find it either under dependencies, potentially in the direct object but more likely in the indirect dependencies. { "type": "application", "source-directories": [ "src" ], "elm-version": "0.19.1", "dependencies": { "direct": { "elm/browser": "1.0.2", "elm/core": "1.0.5", "elm/html": "1.0.0" }, "indirect": { "elm/json": "1.1.3", "elm/time": "1.0.0", "elm/url": "1.0.0", - "elm/virtual-dom": "1.0.2" + "elm/virtual-dom": "1.0.3" } }, "test-dependencies": { "direct": {}, "indirect": {} } } Packages can also depend on elm/virtual-dom. As a package author, you can change your dependency’s requirement to "elm/virtual-dom": "1.0.3 <= v < 2.0.0" to force your users to use the more secure versions of elm/virtual-dom. But since application developers will need to update their dependencies anyway to get your increased requirements, I wouldn’t recommend going out of your way to publish a new version. What were the problems? I will not go into the details of why or how Elm prevents injecting JavaScript code, as I’ll be publishing a more extensive article on that soon. But in summary, one of the things that we want to avoid is having (illustrative, not actually vulnerable) code like the following included in our Elm projects. view : Model -> Html Msg view model = div [] [ NormalLooking.code , script [] [ text """ var cookie = document.cookie; var request = new XMLHttpRequest(); // ...code sending personal information with a HTTP request... """ ] , Also.NormalLooking.code ] If you were to use a package from the Elm package registry, and you used one of its functions that looked like the one above, then the users of your web application would be running the contents of the script that could have malicious effects, such as sending their personal information to some servers, or whatever else you can do using JavaScript code in a browser. Elm actively fights against script injection in order to prevent this kind of exploit, and to keep the language pure (and therefore reliable). Unfortunately, all prior versions of the package included several flaws in the prevention methods, which I’ll explain henceforth. Unchecked VirtualDom.nodeNS import VirtualDom main = VirtualDom.nodeNS "http://www.w3.org/2000/svg" "script" [] [ VirtualDo
(read more)
Credits Carrie Arnold is a freelance health and science writer living in Virginia. At the age of 20, I committed my first mass murder. I didn’t, of course, mean to. But my good intentions meant nothing to the small mound of deceased fruit flies in the bottom of the vial. My goal was simply to anesthetize them and then search their wrinkled, vellum wings and bulging eyes for mutations. It was a classic introductory genetics experiment, one taught to countless aspiring biologists for a century. I doused a cotton ball with ether, the fruity-smelling liquid that would render the flies temporarily unconscious (and easier to count). The instructor warned us to make sure the flies were completely knocked out, so they didn’t wake up mid-experiment. So I left the ether-soaked cotton on the vial an extra minute or two. Just to be safe. It wasn’t the first time I killed an animal in the name of science. I dissected a fetal pig in a high school biology class. I massacred bacteria by the billions as a student research technician and budding microbiologist. The only twinge of guilt I felt when dissecting worms as a 12-year-old was when my mom served spaghetti with meat sauce for dinner, and the noodles on my plate looked all too similar to the slimy earthworms I had earlier dispatched to Valhalla with a scalpel.  And so I told myself that the flies had lived a good life, with plenty of overripe bananas and opportunities to swipe right on Drosophila Tinder. They died for a good cause.  I’m not heartless. Had I accidentally gassed several dozen kittens, I would have yeeted myself off the nearest building, overcome with guilt. These were flies. It was no big deal. Most biologists would agree with me. “When I started studying bees in the late 1980s, the prevailing view was not just that they’re not conscious, but that they are just incapable of any kind of emotion,” Lars Chittka, a sensory and behavioral ecologist at Queen Mary University of London, told me recently. “The whole notion would have seemed just absurd.” However, a growing collection of new experiments is challenging the old consensus. Far from being six-legged automatons, they can experience feelings akin to pain and suffering, joy and desire. When Chittka gave bumblebees an extra jolt of sucrose, their favorite food, the bees buzzed with delight. Agitated, anxious honeybees, on the other hand, responded with pessimism when researchers shook them to simulate a predatory attack. Other researchers found that they “scream” when under threat. Ants display rudimentary counting abilities, can understand the concept of zero and make tools. Fruit flies learn from their peers. Cockroaches have complex social lives. Fruit flies drown themselves in booze when deprived of mating opportunities. Some earwigs and other insects play dead when threatened by a predator. In other words, insects have thoughts and feelings. The next question for philosophers and scientists alike is: Do they have consciousness? Nearly 400 years ago, the French philosopher and polymath René Descartes formulated a devastatingly simple answer to the quest
(read more)
While the move from the 5.x releases to 6.x doesn’t actually have any technological significance, it’s still made me feel contemplative about the chapters ahead. The planned focus areas for Gutenberg phases 3 and 4 are multilingual support in core and Google Docs-style collaboration in the block editor. These sound like great features, but just like full site editing, they also sound like features that already have great plugins available.The rule of thumb is that the core should provide features that 80% or more of end users will actually appreciate and use.WordPress PhilosophyI’ve been thinking about this 80% rule in regards to the latest WordPress release. Is there any sort of usage
(read more)
Preamble I don't really have much experience with microcontrollers. I've played around with some arduinos before and the main entry point for my home network is a Raspberry Pi, but that's about it f
(read more)
Let’s say you want to implement a sorting function in Go. Or perhaps a data structure like a binary search tree, providing ordered access to its elements. Because you want your code to be re-usable and type safe, you want to use type parameters. So you need a way to order user-provided types.There are multiple methods of doing that, with different trade-offs. Let’s talk about four in particular here:constraints.OrderedA method constraintTaking a comparison functionComparator typesconstraints.OrderedGo 1.18 has a mechanism to constrain a type parameter to all types which have the < operator defined on them. The types which have this operator are exactly all types whose underlying type is
(read more)
The last company I worked for was a mid-stage startup with growing pains.What had started out as a nimble organization able to create impressive soft
(read more)
Shuvomoy Das Gupta April 13, 2020 Recently, I came across a few old and new interviews of Donald Knuth, where he sheds light on his work habits, how he approaches problems, and his philosophy towards happiness. I really enjoyed reading the interviews. In this blog, I am recording his thoughts on approaching a problem, organizing daily activities, and the pursuit of happiness. Seeing both the forest and the trees in research. "I've seen many graduate students working on their theses, over the years, and their research often follows a pattern that supports what I'm trying to explain. Suppose you want to solve a complicated problem whose solution is unknown; in essence you're an explorer entering into a new world. At first your brain is learning the territory, and you're making tiny steps, baby steps in the world of the problem. But after you've immersed yourself in that problem for awhile then you can start to make giant steps, bigger steps, and you can see many things at once, so your brain is getting ready for a new kind of work. You begin to see both the forest and the trees." How Knuth works on a project. "When I start to investigate some topic, during the first days I fill up scratch paper like mad. I mean, I have a huge pile of paper at home, paper that's half-used, used on only one side; I've kept a lot of partially printed sheets instead of throwing them away, so that I can write on the back sides. And I'll use up 20 sheets or more per hour when I'm exploring a problem, especially at the beginning. For the first hour I'm trying all kinds of stuff and looking for patterns. Later, after internalizing those calculations or drawings or whatever they are, I don't have to write quite so much down, and I'm getting closer to a solution. The best test of when I'm about ready to solve a problem is whether or not I can think about it sensibly while swimming, without any paper or notes to help out. Because my mind is getting accustomed to the territory, and finally I can see what might possibly lead to the end. That's oversimplifying the truth a little bit, but the main idea is that, with all my students, I've noticed that they get into a mental state where they'
(read more)
How do you survive a cash crunch? Most startup leaders are asking this question right now. Many smart people are writing about the macro trends. I spoke with founders, angels, and VCs and compiled some practical advice.Private markets are reverting to the meanThe wild 2020-2021 ride of startups raising at 100x multiples is coming to a stop. The private market is no longer flush with printed cash, and venture firms are pulling back.Revenue multiples for public SaaS companies (source: BVP Cloud Index)Raising will be harderCongrats if you managed to raise recently. If you are raising right now, you should wrap it up. Nobody knows how long it will take for the market to be founder-friendly again, but it could be a while. explaining to LPs why I invested in so many pre-revenue series Bs last year pic.twitter.com/sMUDthykuN— Turner Novak 🍌🧢 (@TurnerNovak) May 15, 2022 You might think the best VCs always invest in good companies anyway. This is true, but venture funds ultimately answer to LPs. Fundraising is a marketplace, and investors aren't charities.If the supply becomes constrained, investors will use the leverage to lower prices and negotiate better terms. Hot rounds and pre-emptions will become less common. Make your runway lastThe common advice is to raise
(read more)
There’s a certain phenomenon I often wonder about, one that only seems to occur with culture war topics. I usually try to avoid culture war, but it’s impossible to discuss this phenomenon without an example and I don’t see the point of tiptoeing around. So, abortion. For better or for worse, the vast majority of people I know favor Roe v. Wade. Still, I think I understand the view of people on the other side. The question before the court in Roe v. Wade was not “Would the world be better if abortion were legal?” The question was, “Does the US Constitution prohibit states from making abortion illegal?” The decision basically goes like this: The Constitution doesn’t mention abortion. But what about privacy? Well, it doesn’t mention privacy either. But many previous court decisions have recognized a right to privacy anyway, sometimes justified by the 14th amendment’s rule that states can’t deprive people of “liberty”. Denying women the right to an abortion would have bad effects. No one can say when personhood begins, so a state’s right to protect the people within its border doesn’t extend to fetuses. Thus, the US Constitution prohibits states from criminalizing abortion. (The full text is surprisingly readable, I recommend it.) Is this a ridiculous opinion? I don’t think so. But I can see why someone might disagree with it. For one, what’s the “privacy” thing? When Roe v. Wade was decided in 1973, most states still made it a felony to have consensual sex with an adult in your own home—if that adult happened to have the same sex as you. The Supreme Court heard a challenge to these laws in 1986 and confirmed that yup, they were fine. But then, in 2003, they decided these laws were unconstitutional because of the 5th and 14th amendments. So, here’s a timeline: The 14th amendment was passed in 1868. For 135 years, it was perfectly consistent with that amendment for states to put people in jail for having the wrong kind of sex. Then, one day, it wasn’t anymore. I probably don’t need to tell you that I think these laws were wrong. And I know that
(read more)
1.Easy to operate: Built for mere mortals#The most exciting advancements in DevOps have been those that freed developers from complex operations that overwhelmed their day-to-days. This has revolutionized development workflows. Engineering teams are now built around product and business goals, not maintenance and servicing. But databases have not caught up. Product teams still need to wait on the experts to perform overly complicated database operations tasks.The Future Database has to fit into everyone’s DevOps workflows. It must be usable by any developer and leveraged by every team within a technical org. It won’t be gated or ‘hands-off’ but built with cross-functionality in mind. How? With a user experience fluid enough to be understood by casual data consumers and mastered by data admins. The database needs to be safe enough to be operable by everyone, and do the right thing when something goes wrong - swap 2 AM pages for more rollbacks and errors caught as part of the standard workflow.With the Future Database, database admins will no longer be required to certify their knowledge in backups and capacity planning, or worry over disaster recovery. Developer-friendly features like database branching, database developer environments, autoscaling, and usage-based billing will just be commonplace.2.Fundamentally reliable#Some database companies are focused on building future databases around ease-of-use and translatability from Javascript. Those are enticing features. But some of those solutions sacrifice reliability and safety to do that. As billions of people around the world do more, businesses are grappling with how to process the unprecedented increase in transactions.Apps that worked fine a few years ago are hitting new scaling limits. The databases that will fuel the next era of digital transactions must be battle-tested and proven at ridiculously high demands. A database is nothing without trust. With engineers being asked to guarantee uptime as their apps quickly scale, there might be a temptation to make concessions around reliability. But you shouldn’t have to choose. Future databases should respect ACID (ACID-compliant may be a relic of the
(read more)
It was recently pointed out to me that a simple “hello world” style application built with Open Watcom C/C++ 1.9 does not run on Win32s version 1.30, even though the same executable runs just fine on Windows NT 3.51, Windows 95, or Windows 10. More specifically, the program crashes rather early on Win32s. With the help of map files and source code, I established that the crash occurs in an internal function called __setenvp, which tries to dereference a null pointer stored in an internal variable _RWD_Envptr. The _RWD_Envptr variable is filled in by the GetEnvironmentStrings API in the C runtime startup code. The GetEnvironmentStrings API call ends up importing GetEnvironmentStringsA from KERNEL32.DLL. And clearly GetEnvironmentStringsA is failing on Win32s, although it w
(read more)
Earlier today, Sebastian Siemiatkowski, Klarna’s CEO and co-founder, shared this message with all employees across the business.  Hello everyone. I am no stranger to sharing good and bad news. However, today is the hardest one to date. As much as we may like it to be the case, Klarna does not exist in a bubble. We serve 400,000 merchants and 150m consumers, which means that we have a profound impact on the world. At the same time, we are highly influenced by it. And when we set our business plans for 2022 in the autumn of last year, it was a very different world than the one we are in today. Since then, we have seen a tragic and unnecessary war in Ukraine unfold, a shift in consumer sentiment, a steep increase in inflation, a highly volatile stock market and a likely recession. All of
(read more)
Ask HN: How deep do you go? 12 points by martialg 56 minutes ago | hide | past | favorite | 9 comments When you’re learning about a new topic or technology that you want to incorporate into your workflow, how do you know how to scope the learning and when to stop? Everyone learns a new thing and it seems magical. We tend to over-apply it while we're finding its limits. So I try to do that intentionally, up-front, when there's nothing at stake.I plan to fail. As spectacularly as possible. Then I have to figure my way out of it - time to finally read those docs in detail!I usually try to do a (toy) project that seems ridiculous. I try to misapply the tech if possible to some domain it's unfit for. Finishing the project isn't important. I just need to fail a lot and learn.Once I stop failing so often or once the failures are smaller, that means I'm familiar enough to not embarrass myself too much. I look for things that are immediately applicable to me.A tangential example is to think about how Amazon Basic
(read more)
Blood work was supposed to be the last step in Isela’s application for life insurance. But when she arrived at the lab, her appointment had been cancelled."That was my first warning," Isela said. She contacted her insurance agent and was told her application was denied because something on her medication list indicated that Isela uses drugs. Isela, who works in an addiction treatment program at Boston Medical Center (BMC), scanned her med list. It showed a prescription for the opioid-reversal drug naloxone, brand name Narcan."But I’m a nurse, I use it to help people," Isela remembered telling her agent. "If there is an overdose, I could save their life."That's a message public health leaders aim to spread far and wide. "BE PREPARED. GET NALOXONE. SAVE A LIFE," summarized an advisory from the U.S. surgeon general in April.But life insurers consider the use of prescription drugs when reviewing policy applicants. And it can be difficult to tell the difference between someone who carries naloxone to save others and someone who carries naloxone because they are at risk for an overdose.Primerica is the insurer Isela says turned her down. The company says it can’t discuss individual cases. But in a prepared statement, Primerica noted that naloxone has become increasingly available over the counter."Now, if a life insurance applicant has a prescription for naloxone, we request more information about its intended use as part of our underwriting process," said Keith Hancock, the vice president for corporate communications. "Primerica is supportive of efforts to help turn the tide on the national opioid epidemic."Isela applied to a second life insurer and was again denied
(read more)
By Megan Parker and Sam Wheating Apache Airflow is an orchestration platform that enables development, scheduling and monitoring of workflows. At Shopify, we’ve been running Airflow in production for over two years for a variety of workflows, including data extractions, machine learning model training, Apache Iceberg table maintenance, and DBT-powered data modeling. At the time of writing, we are currently running Airflow 2.2 on Kubernetes, using the Celery executor and MySQL 8. Shopify’s Airflow Architecture Shopify’s usage of Airflow has scaled dramatically over the past two years. In our largest environment, we run over 10,000 DAGs representing a large variety of workloads. This environment averages over 400 tasks running at a given moment and over 150,000 runs executed per day. As adoption increases within Shopify, the load incurred on our Airflow deployments will only increase. As a result of this rapid growth, we have encountered a few challenges, including slow file access, insufficient control over DAG (directed acyclic graph) capabilities, irregular levels of traffic, and resource contention between workloads, to name a few. Below we’ll share some of the lessons we learned and solutions we built in order to run Airflow at scale. Fast file access is critical to the performance and integrity of an Airflow environment. A well defined strategy for file access ensures that the scheduler can process DAG files quickly and keep your jobs up-to-date. Airflow kee
(read more)
In the Linux kernel project, the first Git-managed project in existence, due to proper use of Git tags, v4.11-rc7-87-g28cf22d0ba28 is equivalent to 28cf22d0ba28. The nicer string is the output of git describe. Any command that excepts the latter behaves the same when the former is passed instead. When git is presented with [anystring]-g[hash], it throws away the [anystring]-, and treats [hash] part as the desired commit. Git tags let us prettify any Git hash with the software version from which it is derived. However in many projects Gi
(read more)
Student volunteers and workers stock the shelves and take an inventory at the CARE food pantry at Kennesaw State University in Georgia.Credit: Melissa Golden/Redux/eyevine Salaries for PhD students in the biological sciences fall well below the basic cost of living at almost every institution and department in the United States, according to data collected by two PhD students.The crowdsourced findings, submitted by students, faculty members and administrators and presented on an interactive dashboard, provide fresh ammunition for graduate students in negotiat
(read more)
Spectrum of the Sun, taken with the NARVAL very high-resolution spectrograph installed at the Télescope Bernard Lyot, Observatoire Midi-Pyrénées. Spectra such as this, in particular the properties of the dark absorption lines that are clearly visible in this image, allow astronomers to deduce a star's temperature and chemical composition. Credit: M. Bergemann / MPIA / [email protected] What do you do when a tried-and-true method for determining the sun's chemical composition appears to be at odds with
(read more)
I recently started a new job that communicates on Slack instead of email. This may seem like a small difference, but in fact it is a paradigm shift. Put simply: email encourages private conversations, and Slack encourages public ones. Most Slack conversations happen in public channels, while most emails happen in limited groups. Even when a Slack channel has just a few members, it is still public to the entire company. Emails, on the other hand, are usually totally private or restricted to groups that are technically public but not easily discoverable. (Note that making Slack channels private and emailing everyone all the time are both possible but atypical workflows.) This openness actually improves engineering quality because it steers discussions towards convergence on the cor
(read more)
Like other browsers, Firefox’s functionality is influenced by your operating system, hardware, graphics cards, additional software, and even the fonts you install. Some website technologies, like HTML5 Canvas, can even uniquely identify you based on how your computer draws images. Some websites, particularly those using HTML5 Canvas, look at this unique combination of factors and assign you a number, or a “fingerprint”, which makes you identifiable across the Web. This “fingerprint” is potentially used to profile you for targeted content without the use of cookies. Firefox already has
(read more)
Arguably, the primary job of any military organization is moving enormous amounts of stuff from one place to another as quickly and efficiently as possible. Some of that stuff is weaponry, but the vast majority are things that support that weaponry—fuel, spare parts, personnel, and so on. At the moment, the U.S. military has two options when it comes to transporting large amounts of payload. Option one is boats (a sealift), which are efficient, but also slow and require ports. Option two is planes (an airlift), which are faster by a couple of orders of magnitude, but also expensive and require runways. To solve this, the Defense Advanced Research Projects Agency (DARPA) wants to combine traditional sealift and airlift with the Liberty Lifter program, which aims to “design, build, and f
(read more)
Getting caught in a storm while on any roadway can be quite scary, but if that happens, avoid stopping amid live traffic for any reason. This includes taking shelter under an overpass, a dangerous act that was reported to have occurred on Saturday as a destructive derecho swept through southern Ontario and Quebec. SEE ALSO: Derecho leaves nearly 1,000 km of damage, fatalities in its wake The Weather Network Storm Hunter and meteorologist Mark Robinson explains why this move is "spectacularly dangerous." As a veteran storm chaser who has driven through the core of a storm, even one that isn't possibly producing a tornado but still has "near blinding rain," Robinson has been forced to stand on his brakes to prevent his car from slamming into a vehicle in front of him under a bridge. "D
(read more)
Welcome to the Convivial Society, a newsletter exploring the relationship between technology and culture. This is what counts as a relatively short post around here, 1800 words or so, about a certain habit of mind that online spaces seem to foster. Almost one year ago, this exchange on Twitter caught my attention, enough so that I took a moment to capture it with a screen shot, thinking I’d go on to write about it at some point. Set aside for a moment whatever your particular thoughts might be on the public debate, if we can call it that, over vaccines, vaccine messaging, vaccine mandates, etc. Instead, consider the form of the claim, specifically the “anti-anti-” framing. I think I first noticed this peculiar way of talking about (or around) an issue circa 2016. In 2020, contemplati
(read more)
I wanted to conduct a little experiment, and it turned into a few experiments in one. I was watching a youtube video about creating 3D scenes purely in CSS. At first, it seems pretty ridiculous. Surely this has to be too much effort, but then as it came together, it wasn’t that difficult. CSS has more potential as a lightweight 3D rendering language than I may have suspected.So I figured what we need is a side by side comparison. I could just watch more videos, or look at some demos, but it’s helpful to retype things and change them around a little bit for more understanding.This post is pretty long and boring if you aren’t interested in scrolling past lots of code. Here’s a link right to the finale and assessment.As an additional meta experiment, I wanted as much of the live dem
(read more)
In a historic shift, Finland’s Green Party voted overwhelmingly to adopt a fully pro-nuclear stance at its national meeting. The party manifesto now states that nuclear is “sustainable energy” and demands the reform of current energy legislation to streamline the approval process for SMRs (small modular reactors). Finland’s is the first Green Party to adopt such a position. “I am very happy and proud,” said Tea Törmänen, who attended the conference as a voting member as chair of the Savonia/Karelia chapter of Viite, the pro-science internal group of the party. “This is a historical moment in the history of the green movement, as we are the first green party in the world to officially let go of anti-nuclearism.” The action was taken at the two-day Vihreät De
(read more)
On March 9, 1862, the Union warship Monitor met its Confederate counterpart, Virginia. After a four-hour exchange of fire, the two fought to a draw. It was the first battle of ironclads. In one day, every wooden ship of the line of every naval power became immediately obsolete.On December 7, 1941, the Japanese bombed Pearl Harbor. If the battle of the ironclads settled once and for all the wood-versus-iron debate, Japanese carrier-based aircraft settled the battleship-versus-carrier debate by sinking the cream of America’s battleship fleet in a single morning.On April 14, 2022, the Ukrainians sank the Russian cruiser Moskva with a pair of Neptune anti-ship missiles. And that success posed an urgent question to the world’s major militaries: Has another age of warfare just begun? After 2
(read more)
Disclaimer: I work at Uber and am partially responsible for bringing zig cc to serious internal use. Opinions are mine, this blog post is not affiliated with Uber. I talked at the Zig Milan meetup about “Onboarding Zig at Uber”. This post is a little about “how Uber uses Zig”, and more about “my experience of bringing Zig to Uber”, from both technical and social aspects. The video is here. The rest of the post is a loose transcript, with some commentary and errata. @mo_kelione is still my temporary twitter handle from 2009. TLDR: Uber uses Zig to compile its C/C++ code. Now only in the Go Monorepo via bazel-zig-cc, with plans to possibl
(read more)
You may have heard that mixing tabs and spaces is a very bad idea, and are already questioning the sanity of this idea. Let's frame the issue a little bit. The problem with most of what you have heard about code formatting is that people talk about the false tabs vs spaces dichotomy. A lot. The issue as framed as though it were about indenting when it is really about formatting. If you mix tabs and spaces in your indenting you will have one of the worst experiences possible and will want to pull out all your hair. One argument you may hear the spaces camp use is that using only tabs for formatting will cause all your code to be out of alignment when viewed at a different tab width. This is true only if you used tab characters for alignment, which is a terrible idea. TL;DR
(read more)
You may have heard that mixing tabs and spaces is a very bad idea, and are already questioning the sanity of this idea. Let's frame the issue a little bit. The problem with most of what you have heard about code formatting is that people talk about the false tabs vs spaces dichotomy. A lot. The issue as framed as though it were about indenting when it is really about formatting. If you mix tabs and spaces in your indenting you will have one of the worst experiences possible and will want to pull out all your hair. One argument you may hear the spaces camp use is that using only tabs for formatting will cause all your code to be out of alignment when viewed at a different tab width. This is true only if you used tab characters for alignment, which is a terrible idea. TL;DR
(read more)
Multithreading is something that is often misunderstood by even senior programmers. I do a lot of interviewing and I have noticed that a large proportion of candidates have only vague notions of how to make a completely thread-safe datastructure. Of course, the safest threaded code is code that does not share any data between threads at all. Sadly, it is impossible for most problems to avoid completely non-shared data so we have to deal with concurrent access somehow. This post demonstrates three simple techniques and is not the last word on the subject. Rather it is a general overview of the hows and whys of basic thread safety. The code examples are in C++ but the general techniques apply to any language that allows threading. If you want to follow along at home see the correspondi
(read more)
Prerequisites🔗 Make sure that you have Flutter installed and verify that the doctor command succeeds. I will run a Linux application and only care about Linux support for now. > flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 3.0.0, on Fedora Linux 36 (Container Image) 5.17.6-300.fc36.x86_64, locale en_GB.UTF-8) ... [✓] Linux toolchain - develop for Linux desktop ... You also need to have rustc and cargo. Start with a tutorial🔗 Flutter Rust bridge has a tutorial that we can use first to verify we have the dependencies needed. Their documentation is great by the way. I am running Fedora Silverblue 36 and will execute the next commands in a toolbox. Let's install the dependencies: cargo install flutter_rust_bridge_codegen dart pub global activate ffigen sudo dnf -y install rustfmt Clone the repo and try to run their example: git clone https://github.com/fzyzcjy/flutter_rust_bridge && cd flutter_rust_bridge flutter_rust_bridge_codegen --llvm-path /usr/lib64/libclang.so.14.0.0 \ --rust-input frb_example/with_flutter/rust/src/api.rs \ --dart-output frb_example/with_flutter/lib/bridge_generated.dart \ --c-output frb_example/with_flutter/ios/Runner/bridge_generated.h cd frb_example/with_flutter/ flutter run -d linux Dart's ffigen needs LLVM and apparently it doesn't know how to find one on Fedora. So I had to set a CPATH env var and pass a llvm-path flag. Thanks sisou for a nifty script to make ffigen work! export CPATH="$(clang -v 2>&1 | grep "Selected GCC installation" | rev | cut -d' ' -f1 | rev)/include" If you are on Ubuntu you might not need to do any of that. Make sure you
(read more)
We released the first prototype of Ghost on April 29th in 2013. Today, almost exactly 9 years later, we're releasing Ghost 5.0. So what's new? Well. There's a short version and a long version, and we wrote down both so you can either save time, or go deep. Choose your own adventure.If you just want the highlights of what the deal with 5.0 is, here's the lowdown:In the last 2 major versions of Ghost we introduced (first beta, then public) memberships, premium subscriptions, and email newsletters. In Ghost 5.0 we've significantly expanded those capabilities with support for custom premium tiers, multiple newsletters, special offers, detailed audience segmenting, and expanded analytics.In the last year we added (lots) more custom cards to the editor, now with native support for videos, podcasts, gifs, products, callouts, headers, and even NFTs (though that last one turned out to be pretty marmite). It's the same clean, signature Ghost editor — but now it can support much more diverse types of content.We've upgraded existing themes and introduced some powerful new themes, including one particularly nice one for news sites called Headline.As well as design improvements throughout admin, we also added design settings for themes as well as email newsletters right inside Ghost - so it's even easier to make quick changes without needing to touch any code.Speed. Overall performance under load is up 20%+ while resource use is down 22%. Ghost was already really fast, but we've made quite a few optimisations that have continued to make things faster.For developers: Ghost's production stack is now Ubuntu 20,  Node 16, MySQL8. If
(read more)
Web3 has been called many things: an idea, a movement, a new iteration of the internet. It’s the ‘future’ of the internet, proposed by cryptocurrency enthusiasts, based on public blockchain. This is a no-hype, down-to-earth breakdown of everything we have learned about Web3. What is Web3? Originally coined by Gavin Wood, co-founder of Ethereum, Web3 refers to a decentralized online ecosystem on the blockchain. It has become a buzzword, used within the crypto/NFT/DeFi (decentralized finance) community. What is a blockchain? A blockchain is a database that is distributed across the nodes of a computer network. They are known as distributed ledger technology (DLT). The blockchain is designed to record and distribute data, but editing or changing it is impossible. For use as a banking ledger, it makes sense because obviously you don't want people editing their bank account balance. An infrastructure for the internet? Not so much. What is a NFT? NFT stands for non-fungible-token. You can think of them as one-of-a-kind digital trading cards. NFTs can be anything digital, such as drawings or music. Originally, NFTs were intended to be a way for artists to protect their work by adding a digital signature that can never be forged or removed. The files themselves are too large to be stored onto the blockchain itself. As a workaround, the URL of an NFT is what gets recorded instead. This page was edited and expanded on 12/12/21. It's being driven by predatory marketing tactics The purpose of marketing is to create demand in a market, to make people desire commodities and increase purchases of said commodities. A marketer is tasked to sell the product and not necessarily to educate potential buyers on the details of how the product operates. In cryptocurrency markets, every coinholder has a financial incentive to be their
(read more)
In the 1990s, sewing machine manufacturers were dealing with two seemingly disconnected problems: Young people weren’t interested in learning to sew, and it was incredibly expensive to produce the digital interfaces that were becoming standard on modern machines. An unexpected collaborator came about to fix both issues: Nintendo and its Game Boy Color. First in Japan and then in the United States, companies released products that combined the centuries-old mechanisms of a sewing appliance with a plug-in Game Boy.  While the product had mixed popularity and limited success in garnering a broader sewing audience, the partnership reflects an experimental period of research and development. Given the constraints of relatively primitive digital technology at the time, video game consoles became unexpectedly adaptable devices. Although many of these accessories and peripherals now sit on shelves, reduced to quirky relics, enthusiasts are increasingly dedicated to cementing their place in video game history. A Pocket Computer The successor to the original Game Boy, the Game Boy Color was released in October 1998, providing a color screen and more sophisticated platform than the original device. Retailing for around $70, the Game Boy Color amassed a library of 576 gam
(read more)
Starting in the spring of 2020, school boards and superintendents across the country faced a dreadful choice: Keep classrooms open and risk more COVID-19 deaths, or close schools and sacrifice children’s learning. In the name of safety, many districts shut down for long periods. But researchers are now learning that the closures came at a stiff price—a large decline in children’s achievement overall and a historic widening in achievement gaps by race and economic status.The achievement loss is far greater than most educators and parents seem to realize. The only question now is whether state and local governments will recognize the magnitude of the educational damage and make students whole. Adults are free to disagree about whether school closures were justified or a mistake. But either way, children should not be stuck with the bill for a public-health measure taken on everyone’s behalf.I am part of a team from the American Institutes for Research, Dartmouth College, Harvard, and the educational-assessment nonprofit NWEA that has been investigating the impact of remote and hybrid instruction on student learning during the 2020–21 academic year. We have assembled testing results from 2.1 million elementary- and middle-school students in 10,000 schools in 49 states and Washington, D.C., and combined those with data on the number of weeks schools were in-person, remote, or hybrid during 2020–21. Our team compared student-achievement growth in the period before the pandemic, from fall 2017 to fall 2019, with the period from fall 2019 to fall 2021. For years, districts have regularly been using NWEA tests to measure how students’ performance in reading and math changes during a school year; in a typical week of in-person instruction before the pandemic, the average student improved 0.3 points in math (on the NWEA’s scale) and 0.2 points in reading.During the spring semester of 2020, though, nearly all schools went remote. Distractions, technical glitches, and the many other pitfalls of online education made it far less effective than in-person school.Read: The biggest problem for American schoolsOne-fifth of American students, by our calculations, w
(read more)
Ask HN: Tips for Reducing the Number of Inboxes 25 points by jhylands 48 minutes ago | hide | past | favorite | 20 comments Does anyone have any tips for handling the fact that there is an ever growing number of apps to check messages on. I have to check linked in, email, texts, messenger, whatsapp, signal, telegram, slack etc Everyone seems to have their preference I have loads of friends who only use messenger, some who only use signal. As a dyslexic I find it super hard to keep up and end up missing and forgetting loads of things as a result. Does everyone just deal with it? Or is there a way to centralise my communication without hiring a pa? Things that have helped at least mitigate this problem include:- For things which don't spam you (e.g. messengers like Signal or WhatsApp), use similar settings for the various apps on your phone. If you don't want a lot of noise, set them to show you unread messages as badges and put them on the front page of your phone- For things which are used infrequently or do spam you, set up email alerts when possible (e.g. when someone @-mentions you on one of your thousand Slack workspaces), combined with email filters which put things in folders which you can check much like the badged apps.- If a message comes in on a rarely-checked channel and you don't get it for a long time, respond with an apology on a more preferred channel (e.g. a friend messages you on LinkedIn and you respond with an email or message on Signal).- Accept that you have to let some messages slip through, and trust that your relationships can handle some people having to try a second channel to reach you, some of the time. Why do you have to check anything manually? Just install their apps and receive push notifications for them. You can also make the notifications silent to reduce distractions.Or if your phone supports notification badges on icons, just place their icons on home screen and you'll notice what app has updates by just checking the badge c
(read more)
23 May 2022Because this article received somewhat more attention than I expected/feel comfortable with, I’ll take it down for a moment. Sorry. I’ll leave the disclaimer: Disclaimer: This article has been primarily written to clear up my mind, and to potentially receive constructive, uplifting or critical comments from others. I feel like it helps me cope with a frustrating and difficult situation. I do not intend to attack anyone.
(read more)
Why did this happen? Please make sure your browser supports JavaScript and cookies and that you are not blocking them from loading. For more information you can review our Terms of Service and Cookie Policy. Need Help? For inquiries related to this message please contact our support team and provide the reference ID below. Block reference ID:
(read more)
Intro - the status quo sucks Since the days of the character mapped display, programmers have argued over whether tabs or spaces should be used to line up text. While both strategies can be used if all of a project's programmers can agree on how many spaces wide a tab should be, experience has taught us that this is not always the case. Even if all of the programmers working on a project are diligent enough to stick to only using tabs or spaces and have tabs set to the agreed number of spaces, there is still a problem if any programmers wish to use modern proportional fonts (because a space is no longer the same width as every other character). The reason why we have not yet settled conclusively on either tabs or spaces is that both camps can point to problems in the others' approach. The truth is that both are right to be critical - both solutions are inadequate as neither allows different programmers to look at the same file and have their indentation and columns as wide or as thin as they'd like without text getting misaligned. Using spaces to align columns is obviously a kludge, but tabs as they stand now are broken. The solution - move tabstops to fit the text between them and align them with matching tabstops on adjacent lines For as long as we continue to define each tabstop as being a multiple of N characters we will never be able to solve this problem satisfactorily. The problem is that we're using tabs and spaces to format text for aesthetic reasons rather than treating them semantically - tabs are for indenting and aligning text, spaces are for separating keywords. The simple solution is to redefine how tabs are interpreted by the text editor. Rather than saying that a tab character places the text that follows it at the next Nth column, we should say that a tab character is a delimiter between table cells in a manner more reminiscent of how they're used in tab separated value (TSV) files. When used for text or code I call this format "Tab Separated Columns". Seen in this light, we can see that space aligned files are analogous to the old fixed width data files, and we all know the advantages that delimited files have over those. For one thing, you can use sed or other tools to substitute strings in files and everything will still line up when you load them in the editor. Another advantage is that proportional fon
(read more)
Tobias Augspurger · May 23, 2022 Why actions rooted in open source culture can make a big impact. Earth's uniqueness in creating a stable environment for life in a completely hostile space is a miracle. Various life forms have taken billions of years to build up the natural resources humans depend on, such as a protective atmosphere, fertile soil, stable weather, and clean drinking water. As a movement to democratize technology development and knowledge creation, open source has the potential to become the central driver in preserving this stability. Here are four different ways you can preserve the livability of the planet by using, supporting, and participating in open source projects, and more than 20 resources to help you get started. Measure, optimize, and reduce¶ Before taking action, it is important to assess your impact on the environment in a scientific way. With more accurate information, you can focus your efforts where the most potential lies. Open science discloses the models behind these measurements, which reduces uncertainties in the long term through continuous improvement and observation. Open source tools make it possible to remain objective and make meaningful comparisons to guide decision making. These decisions happen constantly, both in the consumption of everyday resources and in the use and development of digital products. Software developers find their work in digital products all over the world. Mea
(read more)
Plenary Session ▶ Opening: What's at stake?May 17 - 10:00 - 10:15 ▶ Miriam Rasch: Being Autonomous in an Automated WorldMay 17 - 10:15 - 10:50 ▶ Keeping the Internet PublicMay 17 - 10:50 - 11:20 ▶ Tamar Sharon: Sphere Transgression by Tech GiantsMay 17 - 11:25 - 11:45 ▶ What's at stake in your domain?May 17 - 11:45 - 12:00 ▶ Spoken wordMay 17 - 13:05 - 13:10 ▶ The Battle Against Fake News May 17 - 13:10 - 13:50 ▶ Spoken WordMay 17 - 13:50 - 13:55 ▶ Dutch Best PracticesMay 17 - 13:55 - 14:35 ▶ Digital Powerwash 🧼May 17 - 15:20 - 15:50 ▶ Raising Awareness Through ArtMay 17 - 15:50 - 16:20 ▶ Business as Usual?May 17 - 16:20 - 17:00 ▶ 'Too much in the head' by Marina Orlova May 17 - 17:00 - 17:20 ▶ Presenting PubHubsMay 18 - 10:00 - 10:45 ▶ What's Next?May 18 - 15:15 - 17:00 ▶ Spoken WordMay 18 - 16:45 - 16:50EU / International ▶ International session 1May 17 - 13:00 - 14:45 ▶ International session 2May 17 - 15:15 - 17:00Public values in practice ▶ Trine Falbe: It’s time to change your digital strategy May 17 - 13:00 - 13:40 ▶ PrivacyMay 17 - 13:45 - 14:40 ▶
(read more)
I spend a lot of my time reading content on the internet, mostly text, nothing too fancy.1 Sometimes I find a blog that I love. It loads fast. It looks good and clean. My adblocker doesn’t light up. The content is great and is not your basic, cookie-cutter SEO goop. “This is a good website” I say. Then proceed to devour every article until my eyes hurt and I realise sleep is something of a necessity to humans. The rest of the websites on the Internet look like they’re about to have a fucking heart attack. Yes. Javascript has its place. My company JustSketchMe runs a web app that is JS based as we’re doing rendering of 3D objects in browser. This makes sense (especially when compared to my other project Bear Blog which is entirely text-based). I’m also a fan of interactive JS experiments and web apps with slick interfaces (I’m looking at you Trello). But that isn’t what this rant is about. This rant is about reading content on the internet. Some of the biggest writing (and reading) platforms and websites are bloated to the extent that they are unusable without a screen reader. Maybe that’s just me. But when there are banners and popups, dynamic content and unnecessary interruption (especially sticky video) I either leave the page or switch to the reader view. This extra hassle and distraction has a cost. It doesn’t only cost user patience. It costs time and bandwidth. Most of the content I read is on my mobile phone. Loading a local news website, or even an article on Medium takes way too long, and delivers a poor user experience. I’m tempted to define a usable threshold for the size of a website. Something like “any website over 1mb is too large”. This sounds good but encourages us to fit our work into that box as opposed to toning down the context and content entirely. If today’s 1mb website is the new cool standard, next year’s elegant design will have that increased by a factor of 10. No. We need to think about it less in terms of explicit size, and more in terms of adding and subtracting value for the reader. Once we get that right, bloat will not be an issue. 2 One thing we need to understand when building websites optimised for reading is that text is small. Harry Potter and the Deathly Hallows is a pretty thick book by most measures, and only clocks in at about 500kb of text. How is it that this review of 1/18th of the book on Medium is 5.4 times the size of the entire book? There are many solutions to this problem, and we know what they are: Don’t add unnecessary shit (especially stock photos that don’t add value to your articles). Be kind to your readers 3. Don’t make it necessary to have a reader view. All these new-fangled methods of pre and post loading content; using fancy compressions; and chunking JS are ways of fooling yourself into thinking your page isn’t obese right up until you break the scale. In the words of Maciej Cegłowski: “If you're only going to the corner store, ride a bicycle.” -- Enjoyed the article? I write about 1-2 a month. Subscribe via email or RSS feed. I had to block YouTube a while back due to my addictive personality; I can’t be trusted with that shit. God
(read more)
Introduction In this post, I will show some @decorators that may be useful for Data Scientists. It may also be useful to revisit previous Bytepawn posts on decorators: Building a toy Python @dataclass decorator Python decorator patterns all Bytepawn posts tagged with python The ipython notebook is up on Github. @parallel Let's assume I write a really inefficient way to find primes: from sympy import isprime def generate_primes(domain: int=1000*1000, num_attempts: int=1000) -> list[int]: primes: set[int] = set() seed(time()) for _ in range(num_attempts): candidate: int = randint(4, domain) if isprime(candidate): primes.add(candidate) return sorted(primes) print(len(generate_primes())) Outputs something like: Then I realize that I could get a "free" speedup if I run the original generate_primes() on all my CPU threads in parallel. This is pretty common, it makes sense to define a @parallel: def parallel(func=None, args=(), merge_func=lambda x:x, parallelism = cpu_count()): def decorator(func: Callable): def inner(*args, **kwargs): results = Parallel(n_jobs=parallelism)(delayed(func)(*args, **kwargs) for i in range(parallelism)) return merge_func(results) return inner if func is None: # decorator was used like @parallel(...) return decorator else: # decorator was used like @parallel, without parens return decorator(func) With this, with one line we can parallelize our function: @parallel(merge_func=lambda li: sorted(set(chain(*li)))) def generate_primes(...): # same signature, nothing changes ... # same code, nothing changes print(len(generate_primes())) Outputs something like: In my case, my Macbook has 8 cores, 16 threads (cpu_count() is 16), so I generated 16x as many primes. Notes: The only overhead is having to define a merge_func, which merges the results of the different runs of the function into one result, to hide the parallelism from outside callers of the decorated function (generate_primes() in this case). In this toy example, I just merge the lists and make sure the primes are uniques by using set(). There are many Python libraries and approches (eg. threads vs processes) to achieve parallelism. This example uses process parallelism with joblib.Parallel(), which works well on Darwin + python3 + ipython and avoids locking on the Python Global Interpreter Lock (GIL). @production Sometimes we write a big complicated pipeline, with extra steps which we only want to run in certain environments. Eg. do something on our local dev environment, but not in production or vica versa. It'd be nice to be able to decorate functions and get them to only run in certain environments, and do nothing elsewhere. One way to achieve this is with a few simple decorators: @production for stuff we want to only run on prod, @development for stuff we only want to run in dev, we can even introduce an @inactive which just turns the function off altogether. The benefit of this approach is that this way the deployment history and current state is tracked in code/Github. Also, we can make these changes in one
(read more)
Mountains of sugar have been found in the ocean under seagrass meadowsPublished on May. 22, 2022, 7:25 PMIsabella O'Malley, M.Env.ScReporterPublished on May. 22, 2022, 7:25 PMThe sugar deposits in the seagrass meadows form “one of the largest piles of sugar on Earth,” according to the researchers.ADVERTISEMENTEXPLOREFeaturedSolutionsImpactsCausesClimate FactsOur StoryOUR STORYLearn about The Weather Network's commitment to covering climate change and sustainability.READ MORECLIMATE FACTSREAD MORE
(read more)
We're seeing higher than usual traffic, please try again shortly.
(read more)
FRANKFURT — European Central Bank President Christine Lagarde is making no bones about her feelings toward the value of crypto assets — namely, there isn't any. "I have said all along the crypto assets are highly speculative, very risky assets," Lagarde told Dutch television show College Tour in an interview to be aired on Sunday. "My very humble assessment is that it is worth nothing. It is based on nothing, there is no underlying assets to act as an anchor of safety." The comments come as the crypto market, more broadly, is taking a beating. Earlier this month, Bitcoin lost 20 percent of its value in a single week. Lagarde revealed she had never invested in crypto a
(read more)
What’s the first text game with a “transcript” (back-and-forth natural language interaction between a human and computer)? The answer may surprise you, because back-and-forth interactions were n
(read more)