profile
viewpoint
Kornel kornelski @ImageOptim United Kingdom https://kornel.ski Rust, image compression, web performance.

ImageOptim/ImageOptim 6639

GUI image optimizer for Mac

imazen/imageflow 3359

High-performance image manipulation for web servers. Includes imageflow_server, imageflow_tool, and libimageflow

cloudflare/boringtun 2791

Userspace WireGuard® Implementation in Rust

kbknapp/cargo-outdated 552

A cargo subcommand for displaying when Rust dependencies are out of date

3Hren/msgpack-rust 500

MessagePack implementation for Rust / msgpack.org[Rust]

cloudflare/lol-html 492

Low output latency streaming HTML parser/rewriter with CSS selector-based API

ImageOptim/libimagequant 305

Palette quantization library that powers pngquant and other PNG optimizers

kornelski/7z 285

Because 7-zip source code was in a 7z archive [mirror]

ImageOptim/mozjpeg-rust 36

Safe Rust wrapper for the MozJPEG library

frewsxcv/rust-crates-index 17

Rust library for retrieving and interacting with the crates.io index

pull request commentsindresorhus/Gifski

Improve file size estimate

Regarding naive estimate:

  • Show a min-max range. "20MB-50MB" makes it clearer how imprecise it is.

  • Once you get any better estimate, remember the ratio between the naive and the better estimates. Apply that ratio to later naive estimates. This will give you decent estimates real time for changing parameters.

sindresorhus

comment created time in 15 hours

issue commentmozilla/mozjpeg

Default compression profile mismatch between libjpeg and libjpeg-turbo APIs

It's been done for tests. I didn't expect anyone to use this library for the turbo API.

I guess it will need a smarter switch. Maybe read an env var?

PJK136

comment created time in 16 hours

issue commentImageOptim/gifski

cargo install gifski failed on Windows

Please close the issue at rust-lang/cargo. It's not a cargo bug.

liudonghua123

comment created time in 16 hours

issue commentImageOptim/gifski

cargo install gifski failed on Windows

Try:

cargo install gifski --no-default-features

it looks like gifsicle feature isn't Windows-compatible.

liudonghua123

comment created time in 16 hours

Pull request review commentmozilla/mp4parse-rust

AVIF alpha channel support

 fn read_infe<T: Read>(src: &mut BMFFBox<T>) -> Result<ItemInfoEntry> {     Ok(ItemInfoEntry { item_id, item_type }) } +fn read_iref<T: Read>(src: &mut BMFFBox<T>) -> Result<TryVec<ItemReferenceEntry>> {+    let mut entries = TryVec::new();+    let version = read_fullbox_version_no_flags(src)?;+    if version > 1 {+        return Err(Error::Unsupported("iref version"));+    }++    let mut iter = src.box_iter();+    while let Some(mut b) = iter.next_box()? {+        let from_item_id = if version == 0 {+            be_u16(&mut b)? as u32+        } else {+            be_u32(&mut b)?+        };+        let item_count = be_u16(&mut b)?;+        for _ in 0..item_count {+            let to_item_id = if version == 0 {+                be_u16(&mut b)? as u32+            } else {+                be_u32(&mut b)?+            };+            entries.push(ItemReferenceEntry {+                item_type: b.head.name.into(),+                from_item_id,+                to_item_id,+            })?;+        }+    }+    Ok(entries)+}++fn read_iprp<T: Read>(src: &mut BMFFBox<T>) -> Result<TryVec<AssociatedProperty>> {+    let mut iter = src.box_iter();+    let mut properties = TryVec::new();+    let mut associations = TryVec::new();++    while let Some(mut b) = iter.next_box()? {+        match b.head.name {+            BoxType::ItemPropertyContainerBox => {+                properties = read_ipco(&mut b)?;+            }+            BoxType::ItemPropertyAssociationBox => {+                associations = read_ipma(&mut b)?;+            }+            _ => return Err(Error::InvalidData("unexpected ipco child")),+        }+    }

I see you prefer strictly validating parser, rather than merely parser that can read spec-compliant files.

In this case I think code could be simpler if validity was checked separately after parsing.

kornelski

comment created time in 17 hours

Pull request review commentmozilla/mp4parse-rust

AVIF alpha channel support

 impl<'a, T: Read> BMFFBox<'a, T> {     } } -impl<'a, T: Read + Offset> BMFFBox<'a, T> {-    /// Check whether the beginning of `extent` is within the bounds of the `BMFFBox`.-    /// We assume extents to not cross box boundaries. If so, this will cause an error-    /// in `read_extent`.-    fn contains_extent(&self, extent: &ExtentRange) -> bool {-        if self.offset() <= extent.start() {-            let start_offset = extent.start() - self.offset();-            start_offset < self.bytes_left()-        } else {-            false-        }-    }--    /// Read the range specified by `extent` into `buf` or return an error if the range is not-    /// fully contained within the `BMFFBox`.-    fn read_extent(&mut self, extent: &ExtentRange, buf: &mut TryVec<u8>) -> Result<()> {-        let start_offset = extent-            .start()-            .checked_sub(self.offset())-            .expect("box does not contain extent");-        skip(self, start_offset)?;-        match extent {-            ExtentRange::WithLength(range) => {-                let len = range-                    .end-                    .checked_sub(range.start)-                    .expect("range start > end");-                if len > self.bytes_left() {-                    return Err(Error::InvalidData("extent crosses box boundary"));-                }-                self.take(len).try_read_to_end(buf)?;-            }-            ExtentRange::ToEnd(_) => {-                self.try_read_to_end(buf)?;-            }-        }-        Ok(())-    }-}-

I agree there's still room for improvement, but I'd prefer to tackle it separately.

The existing approach to matching between items and extents can be O(n^2), so a malicious file could use it for DoS. It should be refactored into something more elegant that sorts extents by start offset. Or perhaps changed entirely into an API that can stream the data instead of buffering it all.

kornelski

comment created time in 17 hours

Pull request review commentmozilla/mp4parse-rust

AVIF alpha channel support

 fn read_infe<T: Read>(src: &mut BMFFBox<T>) -> Result<ItemInfoEntry> {     Ok(ItemInfoEntry { item_id, item_type }) } +fn read_iref<T: Read>(src: &mut BMFFBox<T>) -> Result<TryVec<ItemReferenceEntry>> {+    let mut entries = TryVec::new();+    let version = read_fullbox_version_no_flags(src)?;+    if version > 1 {+        return Err(Error::Unsupported("iref version"));+    }++    let mut iter = src.box_iter();+    while let Some(mut b) = iter.next_box()? {+        let from_item_id = if version == 0 {+            be_u16(&mut b)? as u32+        } else {+            be_u32(&mut b)?+        };+        let item_count = be_u16(&mut b)?;+        for _ in 0..item_count {+            let to_item_id = if version == 0 {+                be_u16(&mut b)? as u32+            } else {+                be_u32(&mut b)?+            };+            entries.push(ItemReferenceEntry {+                item_type: b.head.name.into(),+                from_item_id,+                to_item_id,+            })?;+        }+    }

It'd be nice to automate it, but it could be tackled as a separate refactoring.

Perhaps it could be automated by having BMFFBox keep a mutable reference to its BoxIter, and BMFFBox's drop could "poison" the iterator to return an error if the previous box hasn't been read fully.

kornelski

comment created time in 17 hours

Pull request review commentmozilla/mp4parse-rust

AVIF alpha channel support

 pub fn read_avif<T: Read>(f: &mut T, context: &mut AvifContext) -> Result<()> {         check_parser_state!(b.content);     } -    // If the `mdat` box came before the `meta` box, we need to fill in our primary item data-    let primary_item_extents =-        primary_item_extents.ok_or(Error::InvalidData("primary item extents missing"))?;-    for (extent, data) in primary_item_extents+    let meta = meta.ok_or(Error::InvalidData("missing meta"))?;++    let alpha_item_id = meta+        .item_references         .iter()-        .zip(primary_item_extents_data.iter_mut())-    {-        if data.is_empty() {+        // Auxiliary image for the primary image+        .filter(|iref| {+            iref.to_item_id == meta.primary_item_id+                && iref.from_item_id != meta.primary_item_id+                && iref.item_type == b"auxl"+        })+        .map(|iref| iref.from_item_id)+        // which has the alpha property+        .filter(|&item_id| {+            meta.properties.iter().any(|prop| {+                prop.item_id == item_id+                    && match &prop.property {+                        ImageProperty::AuxiliaryType(urn) => {+                            urn.as_slice()+                                == "urn:mpeg:mpegB:cicp:systems:auxiliary:alpha".as_bytes()+                        }+                        _ => false,+                    }+            })+        })+        .next();

I can add a check. It's amusing that the format uses complicated mechanism for arbitrary many to many relationships only to define a fixed 1:1 relationship :)

kornelski

comment created time in 17 hours

Pull request review commentmozilla/mp4parse-rust

AVIF alpha channel support

 struct ItemInfoEntry {     item_type: u32, } +/// See ISO 14496-12:2015 § 8.11.12+#[derive(Debug)]+struct ItemReferenceEntry {+    item_type: FourCC,+    from_item_id: u32,+    to_item_id: u32,

I've written it this way because a flattened structure is easier to create and easier to use. It's functionally equivalent to spec's structure, so there's nothing lost AFAIK.

I haven't seen files where one-to-many relationship would be actually needed, so I expect it to be pretty much always used with only a single to ID. Heap-allocating for just one 4-byte ID is wasteful, and creating SmallTryVec for just this case would be an overkill.

kornelski

comment created time in 17 hours

PullRequestReviewEvent
PullRequestReviewEvent

issue comment3Hren/msgpack-rust

Question about zero-copy decoding

I'm not sure, since I haven't used zero-copy decoding myself. Have you tried using &[u8] instead?

akiradeveloper

comment created time in a day

CommitCommentEvent

created tagfrewsxcv/rust-crates-index

tag0.16.0

Rust library for retrieving and interacting with the crates.io index

created time in 2 days

push eventfrewsxcv/rust-crates-index

Kornel

commit sha 62f793ac4637a3ed5df7b54b4f67598f95b0be5f

Bump SemVer crate

view details

Kornel

commit sha d6a310d678d107c99108e702648c654d44a3c105

Docs

view details

push time in 2 days

issue closedrust-analyzer/smol_str

1.46 requirement is problematic

Due to https://github.com/rust-lang/rust/issues/75992 I'm unable to update to Rust 1.46-1.48, and currently smol_str is the only crate in my dependency tree that breaks on Rust 1.45.

Could you make the new const fn feature conditional, or yank the latest release?

closed time in 2 days

kornelski

created tagfrewsxcv/rust-crates-index

tag0.15.5

Rust library for retrieving and interacting with the crates.io index

created time in 2 days

push eventkornelski/crev-proofs

Kornel

commit sha 3d349dd563cf21d366eea54635f42bb486953bcc

Add review for smartstring v0.2.5

view details

push time in 2 days

push eventfrewsxcv/rust-crates-index

Kornel

commit sha 7e945b37dc94a442438bd1d8c2da9ee81ac3f0ad

Remove smol_str due to MSRV

view details

push time in 2 days

issue commentrust-analyzer/smol_str

1.46 requirement is problematic

I usually agree with the "latest stable Rust" philosophy and follow that in my crates, but this time Rust 1.45 is the last Rust version that has actually been stable :)

kornelski

comment created time in 2 days

issue openedrust-analyzer/smol_str

1.46 requirement is problematic

Due to https://github.com/rust-lang/rust/issues/75992 I'm unable to update to Rust 1.46-1.48, and currently smol_str is the only crate in my dependency tree that breaks on Rust 1.45.

Could you make the new const fn feature conditional, or yank the latest release?

created time in 2 days

issue closedImageOptim/mozjpeg-rust

Add mozjpeg-rust as encoder to image crate

As https://github.com/image-rs/image is getting more mature it would make sense to add mozjpeg as an full featured jpegencoder. What do you think?

closed time in 2 days

godofdream

created tagImageOptim/libimagequant

tag2.13.0

Palette quantization library that powers pngquant and other PNG optimizers

created time in 2 days

created tagkornelski/pngquant

tag2.13.0

Lossy PNG compressor — pngquant command based on libimagequant library

created time in 2 days

push eventkornelski/pngquant

Kornel Lesiński

commit sha b15515fbf0fafbf8ed706fc6ac97243b9be5ed7c

Bump

view details

push time in 2 days

push eventImageOptim/libimagequant

Kornel Lesiński

commit sha b9ceb0ce11e1b6e05d08f129862bcf53683c2b9b

Bump

view details

push time in 2 days

push eventImageOptim/libimagequant

Matt Waltz

commit sha eb31cf35128e83c4bfff280a93a2678663aecd81

initialize likely_colormap_index This is needed to avoid uninitialized usage later on, which is reported by valgrind as shown below. ==11283== Conditional jump or move depends on uninitialised value(s) ==11283== at 0x13D99C: pngquant_quantize (libimagequant.c:2000) ==11283== by 0x1384B8: liq_histogram_quantize_internal (libimagequant.c:1018) ==11283== by 0x138334: liq_image_quantize (libimagequant.c:992) ==11283== by 0x138249: liq_quantize_image (libimagequant.c:970) ==11283== by 0x12679B: image_quantize (image.c:486) ==11283== by 0x126BA8: main (main.c:92) ==11283== ==11283== Use of uninitialised value of size 8 ==11283== at 0x141A9B: nearest_search (nearest.c:174) ==11283== by 0x1355C6: kmeans_do_iteration (kmeans.c:85) ==11283== by 0x13DAAC: pngquant_quantize (libimagequant.c:2015) ==11283== by 0x1384B8: liq_histogram_quantize_internal (libimagequant.c:1018) ==11283== by 0x138334: liq_image_quantize (libimagequant.c:992) ==11283== by 0x138249: liq_quantize_image (libimagequant.c:970) ==11283== by 0x12679B: image_quantize (image.c:486) ==11283== by 0x126BA8: main (main.c:92) ==11283== ==11283== Use of uninitialised value of size 8 ==11283== at 0x141D4D: nearest_search (nearest.c:175) ==11283== by 0x1355C6: kmeans_do_iteration (kmeans.c:85) ==11283== by 0x13DAAC: pngquant_quantize (libimagequant.c:2015) ==11283== by 0x1384B8: liq_histogram_quantize_internal (libimagequant.c:1018) ==11283== by 0x138334: liq_image_quantize (libimagequant.c:992) ==11283== by 0x138249: liq_quantize_image (libimagequant.c:970) ==11283== by 0x12679B: image_quantize (image.c:486) ==11283== by 0x126BA8: main (main.c:92)

view details

Kornel

commit sha bbde661e508841d7b06d41d5be2377ec3747d073

Deprecated std error

view details

Kornel Lesiński

commit sha eb74b4ecccd5e2429dfc3eda9f0e9e245205e27b

Support OpenMP in clang

view details

Kornel Lesiński

commit sha cfda87055eceddaebe3329eda4648fed13b4af97

Remove IE6-bug workaround

view details

Kornel Lesiński

commit sha 1d3fdecadfbe3adf255894326fc402ad716e8ffe

End sooner when on the wrong track

view details

Kornel Lesiński

commit sha 215235633a2471ab164c16a2823d03d986a36efa

Allow sqrt to execute out of order

view details

Kornel Lesiński

commit sha 649d06976bbf0c5ada180340abfa05c738dabb1e

Linearize leaf searches

view details

Kornel Lesiński

commit sha 3740112a252a5b37489ff7b3ee0b2f7d513275e6

Use error-adjusted weighed average in voronoi

view details

Kornel Lesiński

commit sha b9ceb0ce11e1b6e05d08f129862bcf53683c2b9b

Bump

view details

Kornel Lesiński

commit sha 1176b319f91a1c1360a365358b63c34ccdaf9a05

Merge branch 'master' into msvc * master: Bump Use error-adjusted weighed average in voronoi Linearize leaf searches Allow sqrt to execute out of order End sooner when on the wrong track Remove IE6-bug workaround Support OpenMP in clang Deprecated std error initialize likely_colormap_index

view details

push time in 2 days

push eventkornelski/cavif-rs

Kornel Lesiński

commit sha 3b90ef229e2608edc78814ab22974685b7b99692

Bump

view details

push time in 2 days

release kornelski/cavif-rs

v0.6.4

released time in 2 days

push eventkornelski/cavif-rs

Kornel Lesiński

commit sha a95b3c285db85696999bf7f7eefd051680491d30

New args parser

view details

push time in 2 days

created tagkornelski/cavif-rs

tagv0.6.4

AVIF image creator in pure Rust

created time in 2 days

issue commentImageOptim/mozjpeg-rust

Add mozjpeg-rust as encoder to image crate

image-rs is pure Rust. This crate is based on libjpeg-turbo, which is mostly C.

In the long term it would be cool to take SIMD-accelerated routines from libjpeg-turbo and replace C glue code with Rust, but that's a lot of work.

godofdream

comment created time in 4 days

issue commentsindresorhus/Gifski

Show warning when framerate is set above 50 fps

Alternating frame delays are implemented and allow GIF to approximately specify any framerate it wants. That's separate from browsers actually honoring the choice. 60fps requires at least some frames to have delay=1, which isn't supported.

phaseOne

comment created time in 4 days

pull request commentsindresorhus/Gifski

Limit frame rates to 50 FPS

Alert when opening a video may be too much, since user may not even intend to use 60fps.

I'd default the slider to 20fps (personally I think any higher framerate is too much for GIF), and display this warning only if user drags the slider to 60fps. After it's been displayed once, cap the slider to 50fps.

sindresorhus

comment created time in 4 days

delete branch kornelski/rust

delete branch : resizedefault

delete time in 4 days

PR closed ImageOptim/mozjpeg-rust

Update mozjpeg-sys version and make version spec more flexible

Howdy,

This PR updates the dependencies for mozjpeg-sys and arrayvec, removes the features = ["union"] as that's now the default behavior, and adjusts those deps to be a bit more flexible for semver patch updates.

+3 -3

2 comments

1 changed file

tehprofessor

pr closed time in 4 days

PullRequestReviewEvent

pull request commentsindresorhus/Gifski

Improve file size estimate

Alternative solution, which I think we've discussed previously, is to start the actual final conversion in the background, and use it for the estimate. When user presses start, instead of restarting, just reuse the in-progress conversion. This will have disadvantage of using frames from the beginning for the estimate, but OTOH it will make conversion seem faster, since it will get a head start.

sindresorhus

comment created time in 5 days

pull request commentsindresorhus/Gifski

Improve file size estimate

Looks good.

I see you're adding 10% just in case. I have an idea to make it more scientific: measure frame sizes in bytes, and compute standard deviation of frame sizes. If the deviation is large, then the estimate is uncertain and should be inflated. If all frame sizes are about the same, then the estimate is likely to be accurate.

sindresorhus

comment created time in 5 days

pull request commentkornelski/vpsearch

Add examples for custom search methods

Thank you

gijs-s

comment created time in 5 days

push eventkornelski/vpsearch

Gijs van Steenpaal

commit sha 78692d31ad31387b423e18cc7b30aa2d46260001

Add example usage of radius based custom search and 'BestCandidate'

view details

Gijs van Steenpaal

commit sha 222b9c75a73f9ca830cdbeee6b663f62cf376475

Add another example of knn custom search

view details

Gijs van Steenpaal

commit sha 5b11a68b96b6f0d37c1fb05c01347ca284ea7d74

Ensure 'Distance' can be used in debug printing

view details

Gijs van Steenpaal

commit sha 59d388ad1a0901edf08e305c49b5e311f3bdf52b

Remove the Debug and Default bounds on the Distance type

view details

Kornel

commit sha c8734ef036f5ae74062e8cd4d100165dba35f3dd

Merge pull request #3 from gijs-s/rust

view details

push time in 5 days

PR merged kornelski/vpsearch

Add examples for custom search methods

Thanks for the library! I found it really useful but thought it would be really nice to include some examples of the uses of find_nearest_custom, this pull request adds two new examples that can be used to find all the neighbours in a radius or the N nearest neighbours.

This also adds the Default and Debug traits to the Distance item, this makes it easier to build / debug these BestCandidate implementations.

This fixes: https://github.com/kornelski/vpsearch/issues/1

+269 -2

2 comments

3 changed files

gijs-s

pr closed time in 5 days

issue closedkornelski/vpsearch

Is it possible to return at most N nearest neighbors?

According to the API doc, there is a find_nearest function. However, by default, it can only return the nearest neighbor node. How can I find out at most N nearest neighbors? This is import for interpolation.

closed time in 5 days

astrojhgu

pull request commentkornelski/vpsearch

Add examples for custom search methods

Thanks for the examples.

Unfortunately, addition of Default and Debug to the change of Distance bounds is a breaking change. I'd prefer to avoid breaking changes.

gijs-s

comment created time in 5 days

delete branch kornelski/elgamal

delete branch : patch-1

delete time in 5 days

issue commentmmstick/cargo-deb

[Question] Specifying multiple packages in 'depends'

Comma-separated list should work. Can you specify what is not working?

Chaostheorie

comment created time in 6 days

PR closed ImageOptim/website

Improve. Docs spam
+2 -2

1 comment

1 changed file

Jerry9889

pr closed time in 7 days

issue commentrust-lang/cargo

Configurable directory for temp files that isn't the target dir

Related PRs:

https://github.com/rust-lang/cargo/pull/8686 https://github.com/rust-lang/cargo/pull/8063

kornelski

comment created time in 7 days

issue commentkornelski/cavif-rs

[FR] Output to a specific filename+path

Indeed, it looks like unknown args fail like that. Thanks for pointing that out. I'll switch to a smarter arg parsing library.

aelvan

comment created time in 8 days

delete branch kornelski/rustface

delete branch : bigbench

delete time in 8 days

Pull request review commentrust-lang/cargo

Mark temporary directories as excluded from macOS Spotlight

 fn exclude_from_time_machine(path: &Path) {     // Errors are ignored, since it's an optional feature and failure     // doesn't prevent Cargo from working }++/// Absolute path to an on-disk temporary directory.+/// It may be system-wide or user-specific depending on system conventions.+/// Used in layout.rs, only needed on Unix systems.+#[cfg(unix)]+pub fn persistent_temp_path() -> Option<PathBuf> {+    #[cfg(target_os = "macos")]+    {+        // "Library/Caches" should be obtained via NSFileManager's+        // URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask+        // However, cocoa-foundation doesn't have bindings for it yet.+        // This path has remained stable for two decades,+        // so hardcode it for simplicity (dirs crate does the same).+        Some(home::home_dir()?.join("Library/Caches/Cargo"))+    }+    #[cfg(not(target_os = "macos"))]+    {+        // XDG standard+        if let Some(path) = env::var_os("XDG_CACHE_HOME") {+            let path = PathBuf::from(path);+            if path.is_absolute() {+                return Some(path.join("cargo"));+            }+        }+        // FHS standard+        // This is not using /tmp, because /tmp could be using ramfs.+        let path = Path::new("/var/tmp");+        if path.exists() {+            return Some(path.join("cargo"));+        }+        None

I think no crate can help you if your intention is to invent your own non-standard scheme anyway.

Jabs like that are unhelpful. Please don't do that.

kornelski

comment created time in 8 days

PullRequestReviewEvent

PR opened atomashpolskiy/rustface

Bigger benchmark sets

3-element vecs are not representative and make benchmarks noisy.

+28 -16

0 comment

1 changed file

pr created time in 8 days

create barnchkornelski/rustface

branch : bigbench

created branch time in 8 days

Pull request review commentrust-lang/cargo

Mark temporary directories as excluded from macOS Spotlight

 fn exclude_from_time_machine(path: &Path) {     // Errors are ignored, since it's an optional feature and failure     // doesn't prevent Cargo from working }++/// Absolute path to an on-disk temporary directory.+/// It may be system-wide or user-specific depending on system conventions.+/// Used in layout.rs, only needed on Unix systems.+#[cfg(unix)]+pub fn persistent_temp_path() -> Option<PathBuf> {+    #[cfg(target_os = "macos")]+    {+        // "Library/Caches" should be obtained via NSFileManager's+        // URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask+        // However, cocoa-foundation doesn't have bindings for it yet.+        // This path has remained stable for two decades,+        // so hardcode it for simplicity (dirs crate does the same).+        Some(home::home_dir()?.join("Library/Caches/Cargo"))+    }+    #[cfg(not(target_os = "macos"))]+    {+        // XDG standard+        if let Some(path) = env::var_os("XDG_CACHE_HOME") {+            let path = PathBuf::from(path);+            if path.is_absolute() {+                return Some(path.join("cargo"));+            }+        }+        // FHS standard+        // This is not using /tmp, because /tmp could be using ramfs.+        let path = Path::new("/var/tmp");+        if path.exists() {+            return Some(path.join("cargo"));+        }+        None

I've considered using a library, but it this area is full of abandoned projects and half-abandoned forks, so I didn't see any suitable crate.

I think the best option would be to use a cargo-specific variable/setting for customizing this dir.

kornelski

comment created time in 8 days

PullRequestReviewEvent

push eventsparkle-project/Sparkle

Gwynne Raskind

commit sha 7a8ead559b09b6be5d6997effd324c6367a7a51c

Clean up generate_keys/main.swift quite a bit - more comments, better output to console, cleaner error reporting

view details

Gwynne Raskind

commit sha 741ec1a08b20d2dd1e6feb27e414122616805c40

Further cleanup generate_keys and its new "lookup-only mode".

view details

Gwynne Raskind

commit sha 93e4fd9424ab174d3ad9c7a4c8d789188c6d0ff9

Fix generate_appcast so links to localized release notes are embedded as full URLs instead of unescaped filenames. This makes them load reliably in complex contexts (such as the presence of characters like spaces in the filenames).

view details

Kornel

commit sha 94d05336a6c59ebca6ed2c3ee5907a782b9a8692

Merge pull request #1664 from skelpo/improve-generator-tools

view details

push time in 8 days

PR merged sparkle-project/Sparkle

Cleanup generate_keys and fix URLs for localized release notes

This PR includes the following changes:

  • generate_keys/main.swift reorganized somewhat and cleaned up significantly. The code has been heavily commented, failure messages are displayed consistently (and where the context allows, using ANSI color), error messages and informational text has been rewritten for grammar and clarity, and top-level code has been encapsulated in function context for consistency. The remaining vestiges of the abandoned "syncable keychain item" implementation have been removed.

  • generate_keys now has a "lookup mode", enabled by passing the -p flag on the command line. In this mode, generate_keys looks up whether a key already exists - if so, it outputs the public key as a single line of Base64 and immediately exits with success; if not, an error is printed and it exits with failure. This mode is intended to assist other tools and scripts in retrieving the public signing key automatically, without having to hardcode Sparkle's keychain matching parameters or any assumptions about how the data in the keychain item is laid out. An obvious use of this would be in a shell script Xcode build phase which automatically updates the value of SUPublicEDKey in an app's Info.plist.

  • generate_appcast now generates full URLs for links to localized release notes in an appcast, utilizing the same logic used to generate the link to "base" release notes (use a release notes URL prefix if specified, otherwise use the feed URL if available). Previously, localized release notes links would be specified only as filenames. Before:

<sparkle:releaseNotesLink>https://bucket.s3.amazonaws.com/release%20notes-123.html</sparkle:releaseNotesLink>
<sparkle:releaseNotesLink xml:lang="de">release notes-123.de.html</sparkle:releaseNotesLink>
<sparkle:releaseNotesLink xml:lang="zh">release notes-123.zh.html</sparkle:releaseNotesLink>

After:

<sparkle:releaseNotesLink>https://bucket.s3.amazonaws.com/release%20notes-123.html</sparkle:releaseNotesLink>
<sparkle:releaseNotesLink xml:lang="de">https://bucket.s3.amazonaws.com/release%20notes-123.de.html</sparkle:releaseNotesLink>
<sparkle:releaseNotesLink xml:lang="zh">https://bucket.s3.amazonaws.com/release%20notes-123.zh.html</sparkle:releaseNotesLink>

This change guarantees that localized release notes always load correctly when applicable even when their filenames contain otherwise problematic characters such as spaces - previously, in many cases they would simply fail to load.

+172 -124

1 comment

3 changed files

gwynne

pr closed time in 8 days

pull request commentsparkle-project/Sparkle

Cleanup generate_keys and fix URLs for localized release notes

That's great. Thank you

gwynne

comment created time in 8 days

issue commentkornelski/cavif-rs

[FR] Output to a specific filename+path

I don't understand. caviv -o file.avif file.jpg works.

aelvan

comment created time in 8 days

Pull request review commentrust-lang/cargo

Mark temporary directories as excluded from macOS Spotlight

 fn exclude_from_time_machine(path: &Path) {     // Errors are ignored, since it's an optional feature and failure     // doesn't prevent Cargo from working }++/// Absolute path to an on-disk temporary directory.+/// It may be system-wide or user-specific depending on system conventions.+/// Used in layout.rs, only needed on Unix systems.+#[cfg(unix)]+pub fn persistent_temp_path() -> Option<PathBuf> {+    #[cfg(target_os = "macos")]+    {+        // "Library/Caches" should be obtained via NSFileManager's+        // URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask+        // However, cocoa-foundation doesn't have bindings for it yet.+        // This path has remained stable for two decades,+        // so hardcode it for simplicity (dirs crate does the same).+        Some(home::home_dir()?.join("Library/Caches/Cargo"))+    }+    #[cfg(not(target_os = "macos"))]+    {+        // XDG standard+        if let Some(path) = env::var_os("XDG_CACHE_HOME") {+            let path = PathBuf::from(path);+            if path.is_absolute() {+                return Some(path.join("cargo"));+            }+        }+        // FHS standard+        // This is not using /tmp, because /tmp could be using ramfs.+        let path = Path::new("/var/tmp");+        if path.exists() {+            return Some(path.join("cargo"));+        }+        None

What "important" part do you mean?

I am afraid that touching XDG is going to attract bikeshed fiesta. I'm tempted to remove it for that reason, and go straight for /var/tmp instead.

kornelski

comment created time in 8 days

PullRequestReviewEvent

push eventkornelski/rustface

Kornel

commit sha 610284368107b3ef8de537dfb6e6b978acf05ab0

Use slices for image data

view details

push time in 9 days

delete branch kornelski/rustface

delete branch : slices

delete time in 9 days

pull request commentatomashpolskiy/rustface

Use slices for image data

I'm not sure about speed, because I can't set a baseline in criterion. Hey, it's even same issue you've had: https://github.com/bheisler/criterion.rs/issues/193

kornelski

comment created time in 9 days

create barnchkornelski/rust

branch : resizedefault

created branch time in 9 days

PR opened atomashpolskiy/rustface

Use slices for image data
  • Makes extend_from_slice manage img_buf's capacity, which avoids reallocations
  • safe copy_u8_to_i32 generates the same assembly for the inner loop
  • ImageData can actually have a correct lifetime
+60 -68

0 comment

9 changed files

pr created time in 9 days

push eventkornelski/rustface

Kornel

commit sha 5d8a1f4c15e9807b6cd4cca71733460bafb46b7e

Use slices for image data

view details

push time in 9 days

create barnchkornelski/rustface

branch : slices

created branch time in 9 days

PullRequestReviewEvent

PR opened rust-lang/rust

Remove deprecated unstable Vec::resize_default

It's been deprecated for 15 releases.

+0 -44

0 comment

1 changed file

pr created time in 9 days

push eventkornelski/rustface

Kornel

commit sha 3e71c3fab4efdf33a4e598dd5a6b5a875951528d

Update dependencies

view details

Kornel

commit sha 9c192ae1e6d5f2e66c61400528838fc6a1b78574

Edition 2018

view details

Kornel

commit sha 2a8a0c2ef1c8a9060ae4e716e128ae72a2413dfb

Safer function

view details

Kornel

commit sha 217e68148645d1cce51991578ceda40f4d395474

Read model from any stream, not just Vec

view details

Jurriaan Barkey Wolf

commit sha 04f8850e7861c5e4366e980dd09461a28d88b0ea

bumped version number

view details

Lex Childs

commit sha 444c92b0ad81a7b951d2fc5ae470ac937e67e308

Add feature to make use of rayon optional

view details

Jurriaan Barkey Wolf

commit sha e79db289c09b1b118e044f20a4c4e9e6a06d4c5d

Corrected feature flag section (feature list was incorrectly specified and ignored)

view details

Jurriaan Barkey Wolf

commit sha abbb569e3d96efaf7d017bc935122056843db7fe

updated Rayon version

view details

Jurriaan Barkey Wolf

commit sha 6ba002f9e10004df4916b624069c8448350acda6

DRYed out copied iterator chains

view details

Jurriaan Barkey Wolf

commit sha 315de474c6a656d2dc7694d1bda322175c110705

updated README

view details

Jurriaan Barkey Wolf

commit sha 678384fbbc5b61c63a4b35c59ac4175fbd484cdf

Added changelog and bumped version number

view details

Andrei Tomashpolskiy

commit sha 304c46bcf55bd97e96fc773e3100df119d56a833

Update README.md

view details

Kornel

commit sha a812a0246c6b2e95787a0b5e9aefde7d2917ed65

Replace vector_inner_product with a safe function

view details

Kornel

commit sha 4fa6420cbccf1d2002ee0ecbb43f14e6ef27fc03

Mark pointer-dereferencing math functions as unsafe

view details

Kornel

commit sha 4e1fd981016773deeea17f965cb63c6e3e24f9a0

Replace square with a safe function

view details

Jurriaan Barkey Wolf

commit sha 1052cd080135ca57917f85b3b32cbf99f7b12e5c

updated README

view details

Kornel

commit sha e6cb75f752ba2a267dec44765e23516388a62144

Use slices for image data

view details

push time in 9 days

issue commentbheisler/criterion.rs

error: Unrecognized option: 'save-baseline'

I've run into the same problem (rust 1.47, criterion = "0.3"), and the workaround doesn't seem to work.

If I run cargo bench, I get proper benchmarks. If I run cargo test --release --bench benchmarks, I get only a series of:

Testing <test name>
Success

Testing <another test name>
Success
`

and it ends immediately, without performing any actual benchmarking.
jjhbw

comment created time in 9 days

delete branch kornelski/rustface

delete branch : safermath

delete time in 9 days

push eventkornelski/dssim

Kornel Lesiński

commit sha 159d623a55fe8ba9b27e381e6b30657080617678

Tiny fixes

view details

push time in 9 days

push eventkornelski/dssim

Kornel Lesiński

commit sha 485b2241829d1ba6b373664fdc92dee301c28bf1

Move image loading to the lib part

view details

push time in 9 days

push eventkornelski/dssim

Kornel Lesiński

commit sha 2855ed8073363c5d78a86e24a1c1db492e51e0b4

Bump

view details

push time in 9 days

pull request commentrust-lang/rfcs

Let Cargo put data into platform-specific directories

I've started working on moving cache folders: https://github.com/rust-lang/cargo/pull/8686 It's quite tricky to make all the tests pass :/

tbu-

comment created time in 9 days

push eventImageOptim/libimagequant

Kornel Lesiński

commit sha 1d3fdecadfbe3adf255894326fc402ad716e8ffe

End sooner when on the wrong track

view details

Kornel Lesiński

commit sha 215235633a2471ab164c16a2823d03d986a36efa

Allow sqrt to execute out of order

view details

Kornel Lesiński

commit sha 649d06976bbf0c5ada180340abfa05c738dabb1e

Linearize leaf searches

view details

Kornel Lesiński

commit sha 3740112a252a5b37489ff7b3ee0b2f7d513275e6

Use error-adjusted weighed average in voronoi

view details

push time in 10 days

issue closedImageOptim/gifski

Artifacts present in 1.2.0 that are not in 1.1.1

When converting a MP4 source to GIF with gifski 1.2.0 commandline program for mac, I get some jarring visual artifacts that are not present when converting the same file with gifski 1.1.1.

Input is 1080p@24FPS. I get the same types of artifacts with different output sizes and qualities.

This is a screenshot of the GIF playing in Chrome. I get similar artifacts with any other viewer.

image

closed time in 10 days

justinruggles

issue commentImageOptim/gifski

Artifacts present in 1.2.0 that are not in 1.1.1

Fixed in 1.2.2

justinruggles

comment created time in 10 days

issue closedImageOptim/gifski

Cut-off results

Just tried the CLI, installed 1.2.0 via brew on MacOS 10.14.6

I was really confused, running this command gifski -o gifski-test.gif WaterOnlyFrame*.png, which showed like this in the Finder preview & Preview app

screenshot

The png frames are 2418x1482 in size and at the bottom not cut like this. Then, while writing this issue I realized that the result is actually less cut than in Finder, though the last drop is still cut-off like shown here

gifski-test

& easier to catch in this slower one gifski -o gifski-test_fps2_small.gif -r 2 WaterOnlyFrame*.png

gifski-test_fps2_small

I would've expected it to be similar to the source frames in size, not cut off & better in colors, though I understand that the last one might be an issue with the translucent watercolory effect, as another one I tried is good in colors, just really small and cut off at the bottom as well, what am I doing wrong? 🤔

I thought it'll give me the same dimensions but I'm able to change that with the args opposed to it massively shrinking it and I have to "keep" it the expected size by setting the args.

Original png Frames WaterOnlyFrame1 WaterOnlyFrame2 WaterOnlyFrame3

closed time in 10 days

CanRau

issue commentImageOptim/gifski

Cut-off results

Fixed

CanRau

comment created time in 10 days

release ImageOptim/gifski

1.2.2

released time in 10 days

push eventkornelski/cargo

Weihang Lo

commit sha 3042ec68b6e5405ecdec73fc25f5fa99704d77e7

Add --name hint for `new` when package name is retricted

view details

Weihang Lo

commit sha 9cda385ab327ff765f84193c85e4daf7e6d76b59

Test for --name hint

view details

Weihang Lo

commit sha c00ad7922dee8882df1f39b93c0a56ce5ef20401

Fix test for windows reserved filename error message

view details

Weihang Lo

commit sha f92961923b35d726e96c14d2dba88ffc4a0c36d4

Sweep unrelated message from unnecessary workspace infromation

view details

Weihang Lo

commit sha 392b902f06dedaa4a8f514e7ad64c0bcefe1c7b3

Only `--path` and cwd crate installation need workspace info

view details

Weihang Lo

commit sha 71cae39de00c39e0a903faf070d55675f3d792a0

Test for crate installation without emitting messages from cwd

view details

Weihang Lo

commit sha 45cfd0cd126d08a3adbf8aa78e91bf6d122d5445

Fix formatting

view details

Weihang Lo

commit sha a527caa24855ec3551281e91c8e1d7909e533254

test: check stderr containment explicitly

view details

Weihang Lo

commit sha 2fbce89dd625bcd49ce7fd75f02d793ce0e1b658

Rephrase message of restricted crate name

view details

Weihang Lo

commit sha c6fcb0e2efa74131cf456ddf8f3e26a5e65d5aad

Fix unintenional newline in stderr assertion

view details

bors

commit sha f110fd9fc1d8117143ce5e92be8871f588723fb1

Auto merge of #8681 - weihanglo:fix/redundant-messsage-local-crate-install, r=ehuss Sweep unrelated message from unnecessary workspace infromation Resolves #8619 Only pass workspace information when the source is from a local crate installation.

view details

bors

commit sha 2c10f2611f123c6964efe46711ad0b945891ee08

Auto merge of #8675 - weihanglo:fix/name-help, r=Eh2406 Add --name suggestion for cargo new Resolves #8613 Since `check_name` have already got a parameter to show name help, I reuse the logic and sync the behavior between `cargo init` and `cargo new`. The divergence seems to be intentionally made in #7959: _...Only print the --name suggestion for `cargo init`._ Feel free to discuss.

view details

Mikastiv

commit sha cb3f9f4046251347999c5e4e9524df24737504de

updated yank error message

view details

Mukund Lakshman

commit sha 8d610e1d28c907bf33c40abed7e16ac735a4826b

Display formatted output for JSON diffing in tests.

view details

bors

commit sha 60151333640eb81408c8c4ed1af72a52b2a4a201

Auto merge of #8692 - yaymukund:improve-tests-json-diffing, r=alexcrichton Display formatted output for JSON diffing in tests. This affects all tests that use `validate_upload`. Before <img src="https://user-images.githubusercontent.com/590450/92583169-da972000-f289-11ea-9f27-f09071a023b1.png" width="400"> After <img src="https://user-images.githubusercontent.com/590450/92583195-e2ef5b00-f289-11ea-9ee5-a32f630a6472.png" width="400">

view details

Mikastiv

commit sha 51fa3a4d28c9cf9ebea6d7adef3a949025827ef9

--vers arg now required for yank cmd

view details

Eric Huss

commit sha 9efa0d55265a740d850ef2d5e6bec72014d497eb

Fix non-determinism with new feature resolver.

view details

bors

commit sha 7f44ba46d3de2e72da2b43ff42524db36326c700

Auto merge of #8701 - ehuss:unique-unit-dep-hash, r=alexcrichton Fix non-determinism with new feature resolver. This fixes a problem where Cargo was getting confused when two units were identical, but linked to different dependencies. Cargo generally assumes `Unit` is unique, but the new feature resolver can introduce a situation where two identical `Unit`s need to link to different dependencies. In particular, when building without the `--target` flag, the difference between a host unit and a target unit is not captured in the `Unit` structure. A dependency shared between normal dependencies and build dependencies can need to link to a second shared dependency whose features may be different. The solution here is to build the unit graph pretending that `--target` was specified. Then, after the graph has been built, a second pass replaces `CompileKind::Target(host)` with `CompileKind::Host`, and adds a hash of the dependencies to the `Unit` to ensure it stays unique when necessary. This is done to ensure that dependencies are shared if possible. I did a little performance testing, and I couldn't measure an appreciable difference. I also ran the tests in a loop for a few hours without problems. An alternate solution here is to assume `--target=host` if `--target` isn't specified, and then have some kind of backwards-compatible linking in the `target` directory to retain the old directory layout. However, this would result in building shared host/normal dependencies twice. For *most* projects, this isn't a problem. This already happens when `--target` is specified, or `--release` is used (due to #8500). I'm just being very cautious because in a few projects this can be a large increase in build times. Maybe some day in the future we can be more bold and force this division, but I'm a little hesitant to make that jump. Fixes #8549

view details

bors

commit sha 8777a6b1e8834899f51b7e09cc9b8d85b2417110

Auto merge of #8697 - Mikastiv:pr-8695, r=ehuss updated yank error message Fixes #8695

view details

Eric Huss

commit sha 157ed9f79a55212ac9c39b0c3aa3534c6411b45e

Add test for whitespace behavior in env flags.

view details

push time in 10 days

created tagImageOptim/gifski

tag1.2.2

GIF encoder based on libimagequant (pngquant). Squeezes maximum possible quality from the awful GIF format.

created time in 10 days

push eventImageOptim/gifski

Kornel Lesiński

commit sha 7ecefd85ec7d061e3831da993e29060ebca3ba0e

Fix GIF size when the first frame has transparent edges

view details

Kornel Lesiński

commit sha 08392458acf94abc6ab10b67b63caf30ba30192f

Update Rust gif crate

view details

push time in 10 days

pull request commentsindresorhus/Gifski

Workaround macOS 11 issue with decoding some videos

Maybe ignore errors if they're less than x% of frames that succeeded?

sindresorhus

comment created time in 10 days

PR opened atomashpolskiy/rustface

Safer math

Criterion reports the replacements are faster.

+40 -56

0 comment

5 changed files

pr created time in 11 days

create barnchkornelski/rustface

branch : safermath

created branch time in 11 days

pull request commentsindresorhus/Gifski

Workaround macOS 11 issue with decoding some videos

This does NOT fix the issue for me. In my case a decoding error also happens at 33% of the video.

bla 20.45.37.mov.zip

sindresorhus

comment created time in 12 days

pull request commentrust-lang/rust

linker: MSVC supports linking static libraries as a whole archive

There has been a user report that this change broke MSVC builds:

cl Compilateur d'optimisation Microsoft (R) C/C++ version 19.26.28806 pour x64 Copyright (C) Microsoft Corporation. Tous droits réservés.

link Microsoft (R) Incremental Linker Version 14.26.28806.0 Copyright (C) Microsoft Corporation. All rights reserved.

petrochenkov

comment created time in 12 days

issue commentimazen/imageflow

imageflow server returns 500 for some jpegs

The error message suggests these are BMP files, not JPEGs.

twirlse

comment created time in 12 days

Pull request review commentrust-lang/rust

Issue 72408 nested closures exponential

-error: reached the recursion limit while instantiating `test::<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Nil>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`+error: reached the recursion limit while instantiating `test::<Cons<Cons<Cons<Cons<Cons<...>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`

It's tricky, because the part of the code that understands type's structures doesn't track its printed length. The part that truncates the text length doesn't understand the type.

VFLashM

comment created time in 13 days

PullRequestReviewEvent

Pull request review commentrust-lang/rust

Issue 72408 nested closures exponential

-error: reached the recursion limit while instantiating `test::<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Cons<Nil>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`+error: reached the recursion limit while instantiating `test::<Cons<Cons<Cons<Cons<Cons<...>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`

Final truncation is based on number of characters (32 each side).

VFLashM

comment created time in 13 days

PullRequestReviewEvent

issue openedqarmin/czkawka

Find duplicate files without reading their full content

You could use approach of https://github.com/kornelski/dupe-krill to hash only as little as necessary, instead of hashing whole files.

created time in 14 days

created tagcrev-dev/cargo-crev

tagv0.18.0

A cryptographically verifiable code review system for the cargo (Rust) package manager.

created time in 14 days

push eventcrev-dev/cargo-crev

Kornel Lesiński

commit sha 04c6d46c7f7ba5eebbc563214b45a400e8d800b4

Update deps

view details

push time in 14 days

more