10 interesting stories served every morning and every evening.
The Apple Photos app sometimes corrupts images when importing from my camera. I just wanted to make a blog post about it in case anyone else runs into the problem. I’ve seen other references to this online, but most of the people gave up trying to fix it, and none of them went as far as I did to debug the issue.
I’ll try to describe the problem, and the things I’ve tried to do to fix it. But also note that I’ve (sort of) given up on the Photos app too. Since I can’t trust it to import photos from my camera, I switched to a different workflow.
Here is a screenshot of a corrupted image in the Photos app:
I’ve got an OM System OM-1 camera. I used to shoot in RAW + jpg, then when I would import to Photos app, I would check the “delete photos after import” checkbox in order to empty the SD card. Turns out “delete after import” was a huge mistake.
I’m pretty sure I’d been getting corrupted images for a while, but it would only be 1 or 2 images out of thousands, so I thought nothing of it (it was probably my fault anyway, right?)
But the problem really got me upset when last year I went to a family member’s wedding and took tons of photos. Apple Photos combines RAW + jpg photos so you don’t have a bunch of duplicates, and when you view the images in the photos app, it just shows you the jpg version by default. After I imported all of the wedding photos I noticed some of them were corrupted. Upon closer inspection, I found that it sometimes had corrupted the jpg, sometimes corrupted the RAW file, and sometimes both. Since I had been checking the “delete after import” box, I didn’t know if the images on the SD card were corrupted before importing or not. After all, the files had been deleted so there was no way to check.
I estimate I completely lost about 30% of the images I took that day.
Losing so many photos really rattled me, but I wanted to figure out the problem so I didn’t lose images in the future.
I was worried this was somehow a hardware problem. Copying files seems so basic, I didn’t think there was any way a massively deployed app like Photos could fuck it up (especially since its main job is managing photo files). So, to narrow down the issue I changed out all of the hardware. Here are all the things I did:
* Bought a new SD card direct from the manufacturer (to eliminate the possibility of buying a bootleg SD card)
* Switched to only shooting in RAW (if importing messes up 30% of my images, but I cut the number of images I import by half, then that should be fewer corrupted images right? lol)
I did each of these steps over time, as to only change one variable at a time, and still the image corruption persisted. I didn’t really want to buy a new camera, the MKii is not really a big improvement over the OM-1, but we had a family trip coming up and the idea that pressing the shutter button on the camera might not actually record the image didn’t sit well with me.
Since I had replaced literally all of the hardware involved, I knew it must be a software problem. I stopped checking the “delete after import” button, and started reviewing all of the photos after import. After verifying none of them were corrupt, then I would format the SD card. I did this for months without finding any corrupt files. At this point I figured it was somehow a race condition or something when copying the photo files and deleting them at the same time.
However, after I got home from RailsConf and imported my photos, I found one corrupt image (the one above). I was able to verify that the image was not corrupt on the SD card, so the camera was working fine (meaning I probably didn’t need to buy a new camera body at all).
I tried deleting the corrupt file and re-importing the original to see if it was something about that particular image, but it re-imported just fine. In other words, it seems like the Photos app will corrupt files randomly.
I don’t know if this is a problem that is specific to OM System cameras, and I’m not particularly interested in investing in a new camera system just to find out.
If I compare the corrupted image with the non-corrupted image, the file sizes are exactly the same, but the bytes are different:
aaron@tc ~/Downloads> md5sum P7110136-from-camera.ORF Exports/P7110136.ORF
17ce895fd809a43bad1fe8832c811848 P7110136-from-camera.ORF
828a33005f6b71aea16d9c2f2991a997 Exports/P7110136.ORF
aaron@tc ~/Downloads> ls -al P7110136-from-camera.ORF Exports/P7110136.ORF
-rw–––-@ 1 aaron staff 18673943 Jul 12 04:38 Exports/P7110136.ORF
-rwx––– 1 aaron staff 18673943 Jul 17 09:29 P7110136-from-camera.ORF*
The P7110136-from-camera. ORF is the non-corrupted file, and Exports/P7110136.ORF is the corrupted file from Photos app. Here’s a screenshot of the preview of the non-corrupted photo:
Here is the binary diff between the files. I ran both files through xxd then diffed them.
I’m not going to put any more effort into debugging this problem, but I wanted to blog about it in case anyone else is seeing the issue. I take a lot of photos, and to be frank, most of them are not very good. I don’t want to look through a bunch of bad photos every time I look at my library, so culling photos is important. Culling photos in the Photos app is way too cumbersome, so I’ve switched to using Darktable.
* Delete the ones I don’t like
* Process ones I do like
* Export both the jpg and the original raw file
* Import those to the Photos app so they’re easy to view and share
I’ve not seen any file corruption when importing to Darktable, so I am convinced this is a problem with the Photos app. But now, since all of my images land in Darktable before making their way to the Photos app, I don’t really care anymore. The bad news is that I’ve spent a lot of time and money trying to debug this. I guess the good news is that now I have redundant hardware!
...
Read the original on tenderlovemaking.com »
Three years ago, version 2.0 of the Wasm standard was (essentially) finished, which brought a number of new features, such as vector instructions, bulk memory operations, multiple return values, and simple reference types.
In the meantime, the Wasm W3C Community Group and Working Group have not been lazy. Today, we are happy to announce the release of Wasm 3.0 as the new “live” standard.
This is a substantially larger update: several big features, some of which have been in the making for six or eight years, finally made it over the finishing line.
64-bit address space. Memories and tables can now be declared to use i64 as their address type instead of just i32. That expands the available address space of Wasm applications from 4 gigabytes to (theoretically) 16 exabytes, to the extent that physical hardware allows. While the web will necessarily keep enforcing certain limits — on the web, a 64-bit memory is limited to 16 gigabytes — the new flexibility is especially interesting for non-web ecosystems using Wasm, as they can support much, much larger applications and data sets now.
Multiple memories. Contrary to popular belief, Wasm applications were always able to use multiple memory objects — and hence multiple address spaces — simultaneously. However, previously that was only possible by declaring and accessing each of them in separate modules. This gap has been closed, a single module can now declare (define or import) multiple memories and directly access them, including directly copying data between them. This finally allows tools like wasm-merge, which perform “static linking” on two or more Wasm modules by merging them into one, to work for all Wasm modules. It also paves the way for new uses of separate address spaces, e.g., for security (separating private data), for buffering, or for instrumentation.
Garbage collection. In addition to expanding the capabilities of raw linear memories, Wasm also adds support for a new (and separate) form of storage that is automatically managed by the Wasm runtime via a garbage collector. Staying true to the spirit of Wasm as a low-level language, Wasm GC is low-level as well: a compiler targeting Wasm can declare the memory layout of its runtime data structures in terms of struct and array types, plus unboxed tagged integers, whose allocation and lifetime is then handled by Wasm. But that’s it. Everything else, such as engineering suitable representations for source-language values, including implementation details like method tables, remains the responsibility of compilers targeting Wasm. There are no built-in object systems, nor closures or other higher-level constructs — which would inevitably be heavily biased towards specific languages. Instead, Wasm only provides the basic building blocks for representing such constructs and focuses purely on the memory management aspect.
Typed references. The GC extension is built upon a substantial extension to the Wasm type system, which now supports much richer forms of references. Reference types can now describe the exact shape of the referenced heap value, avoiding additional runtime checks that would otherwise be needed to ensure safety. This more expressive typing mechanism, including subtyping and type recursion, is also available for function references, making it possible to perform safe indirect function calls without any runtime type or bounds check, through the new call_ref instruction.
Tail calls. Tail calls are a variant of function calls that immediately exit the current function, and thereby avoid taking up additional stack space. Tail calls are an important mechanism that is used in various language implementations both in user-visible ways (e.g., in functional languages) and for internal techniques (e.g., to implement stubs). Wasm tail calls are fully general and work for callees both selected statically (by function index) and dynamically (by reference or table).
Exception handling. Exceptions provide a way to locally abort execution, and are a common feature in modern programming languages. Previously, there was no efficient way to compile exception handling to Wasm, and existing compilers typically resorted to convoluted ways of implementing them by escaping to the host language, e.g., JavaScript. This was neither portable nor efficient. Wasm 3.0 hence provides native exception handling within Wasm. Exceptions are defined by declaring exception tags with associated payload data. As one would expect, an exception can be thrown, and selectively be caught by a surrounding handler, based on its tag. Exception handlers are a new form of block instruction that includes a dispatch list of tag/label pairs or catch-all labels to define where to jump when an exception occurs.
Relaxed vector instructions. Wasm 2.0 added a large set of vector (SIMD) instructions, but due to differences in hardware, some of these instructions have to do extra work on some platforms to achieve the specified semantics. In order to squeeze out maximum performance, Wasm 3.0 introduces “relaxed” variants of these instructions that are allowed to have implementation-dependent behavior in certain edge cases. This behavior must be selected from a pre-specified set of legal choices.
Deterministic profile. To make up for the added semantic fuzziness of relaxed vector instructions, and in order to support settings that demand or need deterministic execution semantics (such as blockchains, or replayable systems), the Wasm standard now specifies a deterministic default behavior for every instruction with otherwise non-deterministic results — currently, this includes floating-point operators and their generated NaN values and the aforementioned relaxed vector instructions. Between platforms choosing to implement this deterministic execution profile, Wasm thereby is fully deterministic, reproducible, and portable.
Custom annotation syntax. Finally, the Wasm text format has been enriched with generic syntax for placing annotations in Wasm source code. Analogous to custom sections in the binary format, these annotations are not assigned any meaning by the Wasm standard itself, and can be chosen to be ignored by implementations. However, they provide a way to represent the information stored in custom sections in human-readable and writable form, and concrete annotations can be specified by downstream standards.
In addition to these core features, embeddings of Wasm into JavaScript benefit from a new extension to the JS API:
JS string builtins. JavaScript string values can already be passed to Wasm as externrefs. Functions from this new primitive library can be imported into a Wasm module to directly access and manipulate such external string values inside Wasm.
With these new features, Wasm has much better support for compiling high-level programming languages. Enabled by this, we have seen various new languages popping up to target Wasm, such as Java, OCaml, Scala, Kotlin, Scheme, or Dart, all of which use the new GC feature.
On top of all these goodies, Wasm 3.0 also is the first version of the standard that has been produced with the new SpecTec tool chain. We believe that this makes for an even more reliable specification.
Wasm 3.0 is already shipping in most major web browsers, and support in stand-alone engines like Wasmtime is on track to completion as well. The Wasm feature status page tracks support across engines.
...
Read the original on webassembly.org »
Slack is extorting us with a $195k/yr bill increase An open letter, or something
For nearly 11 years, Hack Club - a nonprofit that provides coding education and community to teenagers worldwide - has used Slack as the tool for communication. We weren’t freeloaders. A few years ago, when Slack transitioned us from their free nonprofit plan to a $5,000/year arrangement, we happily paid. It was reasonable, and we valued the service they provided to our community.
However, two days ago, Slack reached out to us and said that if we don’t agree to pay an extra $50k this week and $200k a year, they’ll deactivate our Slack workspace and delete all of our message history.
One could argue that Slack is free to stop providing us the nonprofit offer at any time, but in my opinion, a six month grace period is the bare minimum for a massive hike like this, if not more. Essentially, Salesforce (a $230 billion company) is strong-arming a small nonprofit for teens, by providing less than a week to pony up a pretty massive sum of money, or risk cutting off all our communications. That’s absurd.
The small amount of notice has also been catastrophic for the programs that we run. Dozens of our staff and volunteers are now scrambling to update systems, rebuild integrations and migrate years of institutional knowledge. The opportunity cost of this forced migration is simply staggering.
Anyway, we’re moving to Mattermost. This experience has taught us that owning your data is incredibly important, and if you’re a small business especially, then I’d advise you move away too.
This post was rushed out because, well, this has been a shock! If you’d like any additional details then feel free to send me an email.
...
Read the original on skyfall.dev »
To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the native apps for Mastodon for your platform.
...
Read the original on mastodon.social »
Over the past month or so, many YouTubers have been reporting major drops to their video view counts. Theories have run wild, but there’s one explanation involving ad blockers that makes the most sense, but YouTube isn’t confirming anything directly.
Since mid-August, many YouTubers have noticed their view counts are considerably lower than they were before, in some cases with very drastic drops. The reason for the drop, though, has been shrouded in mystery for many creators.
The most likely explanation seems to be that YouTube is not counting views properly for users with an ad blocker enabled, another step in the platform’s continued war on ad blockers. This was first realized by Josh Strife Hayes, who noticed that view counts on TV, phones, and tablets have been steady, while views on computers have dropped by around 50% since the mid-August trend started. TechLinked, a channel in the Linus Tech Tips family, confirmed similar numbers within its statistics.
This aligns with one of the possible explanations that YouTube itself hinted at in an acknowledgement of lower view counts.
Viewers Using Ad Blockers & Other Content Blocking Tools: Ad blockers and other extensions can impact the accuracy of reported view counts. Channels whose audiences include a higher proportion of users utilizing such tools may see more fluctuations in traffic related to updates to these tools.
The rest of the post addresses prior speculation that YouTube’s new AI-powered age verification tools were to blame — which YouTube adamantly says is not the case — while also offering other possible explanations such as “seasonal viewing habits” and competition on the platform.
YouTube says “there is no systemic issue that is impacting creators” regarding lower view counts.
This ad blocker situation does seem the most likely explanation, though. In a prior video, Linus Tech Tips had noted that while view counts were down, ad revenue was not. If computer views are the only ones down, it stands to reason that viewers using an ad blocker are not being counted correctly, especially if ad revenue isn’t taking a hit from the lower view counts. YouTube’s hint that ad blockers “can impact the accuracy of reported view counts” certainly suggests this is possible, even if it’s not firm confirmation.
...
Read the original on 9to5google.com »
...
Read the original on www.meta.com »
...
Read the original on www.meta.com »
We have an air bike in our basement. If you are unfamiliar with air bikes, they are similar to stationary bikes with foot pedals but also have handles you push and pull with your arms. It uses air resistance, so the harder you pedal and move your arms, the higher the resistance.
It’s also known as an assault bike. 😬
Which is apt, because it’s a butt-kicker of a workout. I use it about once a week, more frequently in the winter when it’s too cold to run, and less often in the summer when I can get outside more. And I kind of hate it!
Before I even drag myself to our basement, I’m already dreading it. The only way I can convince myself to do it is by finding a suitably engaging show I can distract myself with on my phone while I huff and puff.
Every time, I start my warm-up and think to myself,
“It’s only 30 minutes, I can do this!”
Like clockwork, within the first three minutes, I think, “Maybe I will only do ten minutes today and do some pilates or weights instead.”
After ten minutes, I think, “OK, surely I can make it to 20 minutes, and that will be enough”.
After 20 minutes, as I gasp for air and sweat soaks through my shirt, I think “Well, I already made it to 20 minutes… I guess I will just finish it.”
And then I proceed to huff and puff to the end, wherein I walk my wobbly legs back up the stairs to do a cooldown. At which point I think, “That suuuuuucked…” And then congratulate myself on finishing as I try to get my heart rate back to normal. 🥵
This mental dance happens, without fail, every single time I ride.
I share this anecdote because it illustrates how tricky motivation can be, especially when faced with something you don’t want to do or have been procrastinating on. There are any number of things you have to deal with in your life that you don’t want to. There are even things you might generally enjoy that feel like they are hanging over you.
The pattern often goes like this:
* Before you start, it feels daunting, and the prospect lingers in the back of your mind. You know it needs to be done, but you really, really don’t feel like it. You leave it until it starts to loom larger and larger.
* When you finally convince yourself to start, it’s not what you want to be doing, but it’s generally fine. It’s often not even as bad as you thought it would be, and it feels good to make progress.
* As you near the end, you can even push yourself a little to wrap it up and get it off your plate.
* When it’s over, you feel relieved, like a weight has been taken off your shoulders, and you are both pleased with yourself and a little annoyed that it took you so long to deal with.
Motivation is a topic that comes up with nearly all my clients, as they navigate the various complexities of their lives. In some ways, motivation seems simple. You ask yourself, “Why can’t I just make myself be motivated to do the thing?”, whatever the thing might be. However, as you beat yourself up about it, consider that many factors influence our decision-making and the feeling of being motivated.
Humans are complex creatures, with numerous brain chemicals and hormones influencing our overall physical and emotional state, which themselves are constantly impacted, sometimes drastically, by things like:
* Have you been sleeping well and enough?
* Have you been eating well and the right amount for you?
* Have you been imbibing in alcohol or other things?
* Have you been moving your body regularly?
* Do you have any physical or mental conditions?
* Are you in pain?
* Do you have significant life stressors at this time?
* What time of day is it?
* Where are you in your natural hormone cycles?
* How old are you?
* Have you had any conflicts in your life recently?
* Did you move your body in a way entirely within your usual routines, but apparently in a way that is no longer acceptable?
* Did you sleep in a slightly different position than usual, and now your back will never be the same again?
I could go on, but you get the idea.😅
All of these factors (and more) conspire to shift your mood, physical energy, and mental energy, often making it harder to muster the motivation to do things. What, then, can you do to move things in the right direction? How do you motivate yourself to do a thing you don’t want to do?
Here are several ways to help encourage action when you feel unmotivated.
There are many external and internal factors, as listed above, that contribute to motivation.
* When your body isn’t feeling good, it’s harder to make it do things.
* When your mind is tired, distracted, or overwhelmed, it’s challenging to focus and accomplish tasks.
* When the thing you need to do isn’t important to you or something you don’t like, it’s hard to make yourself do it.
When you know why you aren’t motivated, you can think about what you could change to make things easier on yourself. What factors do you have control over?
* Environment - Is there a place you can go or a thing you can add that will make it feel easier? For example, I have my writing desk set up in a quiet corner of my bedroom (not the office I share with my husband) to help make writing easier, even when I am not feeling it.
* Mood - Is there something that will help boost your mood? Go for a ten-minute walk, treat yourself to a donut, text your best friend for a pep talk, turn on your favourite tunes… anything that will give you a little pick-me-up.
* Body - Are there things you can do to take care of your body to make it feel better? Try some stretching, take a nap, meditate, read a book, get some fresh air, go for a run, eat a comfort meal, or do anything that will help your body feel less stressed.
* Negative or fear motivators - Is the thing you are not motivated to do being motivated by negative or fear motivators? These include things like fear of judgment, fear of conflict, shame, guilt, or obligation. These motivators only go so far and deserve further examination to determine their place in your priorities. Maybe they aren’t things you need to do in the first place.
The key point here is to identify where you have control and where you don’t, and then do your best to adapt your circumstances to make it easier to take action.
When you think about the various activities and tasks you do each day, what is it that encourages you to do them? Some of those things will be negative motivators, as I mentioned above, but others will be things you do for fun, because they are interesting or rewarding. These are some tactics to consider for things that might help motivate you:
You know what makes cleaning out the garage a lot better? Some good tunes. Throw on an audiobook while you cook dinner. Watch a good show while you huff and puff on the air bike! Think about the things you enjoy and consider how you can combine them with the thing you’re trying to motivate yourself to do.
Sometimes it can be challenging to push yourself to do something when there are no external motivators. Ask a friend to be your accountability buddy, or hire a professional to help you stay accountable for the thing you’re trying to do, such as a coach, trainer, teacher, or dietitian. I know that one of the significant value-added benefits my clients get from working with me for a few months is having someone they have to report back to on their progress!
Is there any way to turn the process or thing you are unmotivated to do into a game? Can you add rewards if you do a certain amount, or set a goal for how many days you make progress in a row? For example, one of my motivators for doing some kind of fitness every day is keeping up my streak! 2817 days in a row as of publishing. 😁
Beyond small planned rewards, having something to look forward to as you make progress on your task or activity can also help encourage you to continue moving forward. Maybe you take a day off, order your favourite takeout, or simply share it with someone you care about.
For more specifics on types of motivation, read my article, What Motivates You? Learn the Types of Motivation and How to Use Them, where I get into more detail about intrinsic and extrinsic motivation.
If part of why you feel unmotivated is that what you need to do feels big and overwhelming, often the best thing you can do is try to break it down into smaller, more manageable pieces. What is the smallest amount you can do to make a bit of progress?
* Commit to spending 5 minutes on it
* Choose a small corner of a room you need to clean
* Write the text, even if you don’t send it
* Plan in your calendar when you will do it, so you don’t have it sitting in the back of your mind
* Talk about it with your partner or a friend
* Switch tasks to take a break and come back to it
Often, getting over the hump of starting something is enough to help push you through it. Even if it isn’t, at the very least, you have made some amount of progress, which you can build on.
If the thing you need to do is something you need to do regularly, like writing, fitness, practicing an instrument, or cleaning, you can’t rely purely on motivation to drive you. Even for things you enjoy, it’s easy to push something off “until you feel like it”. But with so many factors affecting your mood and energy, the times when you feel like it will be fleeting. Instead of relying on motivation, try to establish a routine that fosters consistency.
* Plan your intentional week so you have an idea of when you intend to do it
* Book it in your calendar
* Set a certain amount of time you will put aside each day or week to chip away at it
A little bit, consistently, will go a long way.
Sometimes, when you are not feeling motivated to do something, it’s reasonable to just put it on the back burner. Maybe it’s just not a priority right now, and that’s totally fine! Ask yourself, is this a glass ball or a plastic ball? If it’s plastic, set it aside for a bit and focus your time and energy on other things.
It’s ok to decide now is not the right time, but make it an intentional decision instead of something you avoid and feel bad about!
If you’re struggling with motivation, you’re not alone! It’s normal, it’s natural, and there are tons of different, ever-changing factors that will change how you feel. Do your best to examine where you are at, control what you can control, and make progress where you can!
Need some help getting motivated? Get in touch!
...
Read the original on ashleyjanssen.com »
Ton Roosendaal is to stop down as chairman and Blender CEO on 1 January 2026. The news was announced during today’s keynote at the annual Blender Conference.
Roosendaal — the original author of the open-source 3D software, and its public figurehead for the past three decades — will pass on his roles to current Blender COO Francesco Siddi.
Roosendaal himself will move to the newly established Blender Foundation supervisory board.
Other new Blender Foundation board positions will also include Sergey Sharybin (Head of Development), Dalai Felinto (Head of Product) and Fiona Cohen (Head of Operations).
“We’ve been preparing for this since 2019,” said Roosendaal, “I am very proud to have such a wonderfully talented young team around me to bring our free and open source project into the next decade.”
We aim to update this story with a brief retrospective of Ton’s time as Blender CEO and the growth of Blender during that time, so check back for updates.
Read the official announcement that Ton Roosendaal is stepping down as Blender CEO
...
Read the original on www.cgchannel.com »
Operations too frequent.
Try again later Page not found, please try again later. Take me home
...
Read the original on news.futunn.com »
To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".
10HN is also available as an iOS App
If you visit 10HN only rarely, check out the the best articles from the past week.
If you like 10HN please leave feedback and share
Visit pancik.com for more.