🏡


to read (pdf)

  1. I don't want your PRs anymore
  2. JitterDropper | OALABS Research
  3. DomainTools Investigations | DPRK Malware Modularity: Diversity and Functional Specialization
  4. EXHIB: A Benchmark for Realistic and Diverse Evaluation of Function Similarity in the Wild
  5. Neobrutalism components - Start making neobrutalism layouts today

  1. June 16, 2026
    1. 🔗 Confessions of a Code Addict Page Tables from First Principles rss

      This is the fourth video in our virtual memory series based on the article/ebook I wrote. In the last few videos, we covered what virtual memory is, its size, and the address space layout of a process. In this video, we learn how the kernel stores virtual-to-physical address mappings in the form of a page table, what that looks like, and how the hardware performs an address translation by walking the page table.

      But instead of jumping directly to page tables, we derive the design from first principles like real system designers. We start from the problem statement of efficiently storing virtual address mappings and performing lookups efficiently, and from there, we iteratively arrive at the final solution that looks like modern-day page tables. I believe that this way, not only you would understand page tables better, but also develop the design chops needed to build solutions in other domains.

      In the next video, we will talk about protection bits in virtual pages. Till then, if you haven't read the original article/book, I recommend checking that out. You can also get it in the form of a beautiful PDF for offline reading using the link below.

      Get Virtual Memory Ebook

      Read more

    2. 🔗 r/reverseengineering VAXD - lightweight PE EXE/DLL disassembler and patch-assistance tool for Windows rss
    3. 🔗 HexRaysSA/plugin-repository commits sync repo: +1 plugin, +3 releases, ~1 changed rss
      sync repo: +1 plugin, +3 releases, ~1 changed
      
      ## New plugins
      - [ida-nativeaot](https://github.com/dump-guy/ida-nativeaot) (1.0.2, 1.0.1, 1.0.0)
      
      ## Changes
      - [diaphora](https://github.com/joxeankoret/diaphora):
        - 3.4: archive contents changed, download URL changed
      
  2. June 15, 2026
    1. 🔗 IDA Plugin Updates IDA Plugin Updates on 2026-06-15 rss

      IDA Plugin Updates on 2026-06-15

      New Releases:

      Activity:

      • augur
        • 7a3ce1ce: refactor: use AsRef bounds for all pub fn
      • diaphora
      • ffxiv_bossmod
      • haruspex
        • e4104920: refactor: use AsRef bounds for all pub fn
      • ida-fusion-mcp
        • bb75a854: feat: add router-native idalib parity tools
        • 28822cf7: docs: design router-native idalib integration
        • 1e448889: fix installer missing IDA scan roots
      • ida-ios-helper
        • ee8218ee: Merge pull request #18 from doronz88/feature/swift
        • 482c9aa4: swift_types: Gate IDA-9.4 native ABI behind version check (compat 9.0…
        • 1e6e3028: swift_dump_import: Synthesize class structs + slot-resolve named meth…
        • fd91fa8d: swift_dump_import: Auto-name + type Swift class methods via ipsw swif…
        • 4d55eb0e: swift_types: Per-callsite ClosureCtx typing for Dispatch sync closures
        • 4696de9e: swift_types: Expand FUNCTIONS_SIGNATURES with stdlib + Foundation + b…
        • 7e1dd83a: swift_types: Mark Swift throws functions with __spoils + renam…
        • 915f2c6e: swift_types: Erase __chkstk_darwin calls from the prolog
        • 35bb94b3: swift_oslog: Collapse Swift _os_log_impl(…) build-up into a one-liner
        • cb511173: swift_types: Rename Swift opaque-storage buffer lvars to _buf
        • 171f200c: swift_types: Rename Swift opaque-storage prolog lvars and type the VW…
        • 31de1467: swift_types: Type each Swift mangled name in __swift5_typeref as a C …
        • 4e1d62e9: swift_types: __swiftClassCall (x20 self) typing + post-print cfunc in…
        • 6e809337: scripts: Add headless probe_func + idat IPC server for plugin iteration
      • ida-nativeaot
        • 546b831b: docs: add UI screenshots + hero image; drop washi keyword; bump to v1…
        • a93072d4: v1.0.1 - rename to ida-nativeaot.*, name-sync fixes, search and overv…
      • ida_rpc
        • ee39b999: Fix pytest collection of ida-rpc integration script
        • 609b235f: Add loader discovery, forced selection via --loader, and loader-spe…
        • c4304e00: Fix read_bytes issue
      • rhabdomancer
        • 69528487: refactor: use AsRef<Path> bounds for all pub fn
    2. 🔗 roboflow/supervision supervision-0.29.0 release

      🚀 Added

      • Added sv.VertexEllipseAreaAnnotator, sv.VertexEllipseOutlineAnnotator, and sv.VertexEllipseHaloAnnotator for visualizing keypoint uncertainty as covariance ellipses. (#2277, #2286)

        import cv2
        

        import supervision as sv from rfdetr import RFDETRKeypointPreview

        image = cv2.imread("") model = RFDETRKeypointPreview()

        key_points = model.predict(image)

        annotator = sv.VertexEllipseAreaAnnotator( sigma=[1.0, 2.0, 3.0], color=[sv.Color.GREEN, sv.Color.YELLOW, sv.Color.RED], opacity=0.4, ) annotated = annotator.annotate(image.copy(), key_points)

      rf-detr-ellipse-promo-2.mp4

          import cv2
      import supervision as sv
      from rfdetr import RFDETRKeypointPreview
      
      image = cv2.imread("<SOURCE_IMAGE_PATH>")
      model = RFDETRKeypointPreview()
      
      key_points = model.predict(image)
      
      annotator = sv.VertexEllipseOutlineAnnotator(
          sigma=[1.0, 2.0, 3.0],
          color=[sv.Color.GREEN, sv.Color.YELLOW, sv.Color.RED],
          thickness=2,
      )
      annotated = annotator.annotate(image.copy(), key_points)
      

      rf-detr-ellipse-promo-3.mp4

          import cv2
      import supervision as sv
      from rfdetr import RFDETRKeypointPreview
      
      image = cv2.imread("<SOURCE_IMAGE_PATH>")
      model = RFDETRKeypointPreview()
      
      key_points = model.predict(image)
      
      annotator = sv.VertexEllipseHaloAnnotator(
          sigma=[1.0, 2.0, 3.0],
          color=[sv.Color.GREEN, sv.Color.YELLOW, sv.Color.RED],
          opacity=0.6,
      )
      annotated = annotator.annotate(image.copy(), key_points)
      

      rf-detr-ellipse-promo-1.mp4

      🌱 Changed

      box_nms_demo box_nmm_demo obb_nms_demo obb_nmm_demo

      • sv.Detections.area is now OBB-aware. When oriented box coordinates are present, the property returns the polygon area of the rotated bounding box (via the shoelace formula) instead of the axis-aligned box area. (#2306)

      • sv.InferenceSlicer now detects OBB outputs from callbacks and automatically falls back to sequential processing to avoid thread-safety issues when thread_workers > 1. (#2256)

      • Fixed sv.oriented_box_iou_batch to correctly handle non-square canvases. Previously, rasterization assumed square dimensions, leading to incorrect IoU values for tall or wide images. (#2282)

      🔧 Fixed

      • Fixed sv.process_video audio stream handling. The audio muxing path now correctly creates temp files on the same filesystem, decodes ffmpeg errors, and avoids muxing incomplete output. (#2252)

      • Fixed sv.Detections.from_vlm returning None for class_id on empty VLM parses. Now returns an empty int ndarray. (#2239)

      • Fixed sv.Detections.from_inference to preserve class_name as a string-dtype array when predictions are empty. Previously it returned an untyped empty array. (#2270)

      • Fixed sv.HeatMapAnnotator divide-by-zero crash when called with empty detections. (#2269)

      • Fixed COCO export emitting 0-indexed category_id values. Now correctly emits 1-indexed IDs as per the COCO specification. (#2276)

      • Fixed COCO annotation and image IDs not being chainable across dataset splits. IDs are now sequential across train/val/test. (#2267)

      • Fixed sv.DetectionDataset.as_yolo losing OBB rotation when exporting oriented bounding boxes. (#2289)

      • Fixed YOLO dataset loading to sort class names by numeric keys when the data.yaml uses integer class IDs. (#2296)

      • Fixed letterbox utility to support grayscale images. (#2297)

      • Fixed file extension filters to normalize casing (e.g. .JPG now matches .jpg). (#2298)

      ⚠️ Deprecated

      Deprecated | Removal | Replacement
      ---|---|---
      KeyPoints.confidence | 0.32.0 | KeyPoints.keypoint_confidence
      merge_inner_detection_object_pair | 0.32.0 | None (internal use only)
      merge_inner_detections_objects | 0.32.0 | None (internal use only)
      merge_inner_detections_objects_without_iou | 0.32.0 | None (internal use only)
      validate_detections_fields | 0.32.0 | None (internal use only)
      validate_vlm_parameters | 0.32.0 | None (internal use only)
      validate_fields_both_defined_or_none | 0.32.0 | None (internal use only)
      validate_xyxy | 0.32.0 | None (internal use only)
      validate_mask | 0.32.0 | None (internal use only)
      validate_class_id | 0.32.0 | None (internal use only)
      validate_confidence | 0.32.0 | None (internal use only)
      validate_tracker_id | 0.32.0 | None (internal use only)
      validate_data | 0.32.0 | None (internal use only)
      validate_xy | 0.32.0 | None (internal use only)
      validate_key_point_confidence | 0.32.0 | None (internal use only)
      validate_key_points_fields | 0.32.0 | None (internal use only)
      validate_resolution | 0.32.0 | None (internal use only)
      validate_custom_values | 0.32.0 | None (internal use only)
      validate_input_tensors | 0.32.0 | None (internal use only)
      validate_labels | 0.32.0 | None (internal use only)

      🏆 Contributors

      @SkalskiP (Piotr Skalski), @Borda (Jirka Borovec), @kounelisagis (Agis Kounelis), @RitwijParmar (Ritwij Aryan Parmar), @Khanz9664 (Shahid Ul Islam), @satishkc7 (SATISH K C), @Ace3Z (Mahbod Tajdini), @madhav-c, @RubenHaisma (Ruben Haisma), @adhavan18 (Tamil Adhavan), @Bortlesboat (Andrew Barnes), @Lourdhu02, @tarunbommawar27, @YousefZahran1 (Youssef Ibrahim), @JFrench- Enterprise, @Patel- Prem (Premkumar Patel)

    3. 🔗 roboflow/supervision supervision-0.28.0 release

      🔦 Spotlight

      Memory-efficient masks with sv.CompactMask

      Segmentation models produce one full-resolution bitmap per instance. On a 1920×1080 image with 28 detections that is ~55 MB of mask data. Most pixels are background. sv.CompactMask stores only the tight bounding-box crop, RLE-encoded — the same 28 masks drop to ~237 KB of crops, a 240× reduction before RLE kicks in.

      It's a drop-in replacement: annotators, filters, and area all work unchanged.

      supervision-sam3

      import supervision as sv
      
      # any segmentation model — RF-DETR Seg, YOLO-Seg, SAM3
      detections = model.predict(image)  # sv.Detections with dense masks
      
      dense_mb = detections.mask.nbytes / 1024 / 1024
      compact = sv.CompactMask.from_dense(
          masks=detections.mask,
          xyxy=detections.xyxy,
          image_shape=image.shape[:2],
      )
      detections.mask = compact  # swap in — API unchanged
      
      # filter by pixel area without materialising dense masks
      large = detections[compact.area > 1000]
      
      # annotators call .to_dense() internally
      annotated = sv.MaskAnnotator().annotate(image.copy(), detections)
      

      SAM3 text-prompted segmentation

      SAM3 segments objects by free-text prompt — no class list, no bounding boxes. sv.Detections.from_sam3() parses both PCS (multi-prompt) and PVS (video) response formats into a standard sv.Detections, with class_id set to the prompt index.

      import requests, base64
      import supervision as sv
      
      PROMPTS = ["person", "bag"]
      
      with open("image.jpg", "rb") as f:
          img_b64 = base64.b64encode(f.read()).decode()
      
      response = requests.post(
          f"https://api.roboflow.com/inferenceproxy/seg-preview?api_key={API_KEY}",
          json={
              "image": {"type": "base64", "value": img_b64},
              "prompts": [{"type": "text", "text": p} for p in PROMPTS],
          },
          headers={"Content-Type": "application/json"},
      )
      sam3_result = response.json()
      
      h, w = cv2.imread("image.jpg").shape[:2]
      detections = sv.Detections.from_sam3(sam3_result=sam3_result, resolution_wh=(w, h))
      # class_id == 0 → "person", class_id == 1 → "bag"
      

      🔄 Migration

      VideoInfo.fps is now float

      NTSC frame rates (23.976, 29.97, 59.94) were silently truncated. fps is now the true float — cast at call sites that need an integer.

      Before

      info = sv.VideoInfo.from_video_path("clip.mp4")
      buf = collections.deque(maxlen=info.fps)
      trace = sv.TraceAnnotator(trace_length=info.fps)
      

      After

      info = sv.VideoInfo.from_video_path("clip.mp4")
      buf = collections.deque(maxlen=int(info.fps))
      trace = sv.TraceAnnotator(trace_length=int(info.fps))
      

      sv.ByteTrack deprecated — use ByteTrackTracker

      Tracker implementations now live in the dedicated trackers package. sv.ByteTrack remains available in 0.28–0.29 with DeprecationWarning; removal in 0.30.0.

      Before

      tracker = sv.ByteTrack()
      detections = tracker.update_with_detections(detections)
      

      After

      # pip install trackers
      from trackers import ByteTrackTracker
      
      tracker = ByteTrackTracker()
      detections = tracker.update(detections)
      

      🚀 Added

      • Memory-efficient masks withsv.CompactMask. Sparse segmentation masks are now stored as a crop region plus RLE-encoded data instead of full-resolution bitmaps, cutting memory use by 10–100× for typical instance-segmentation outputs. It's a drop-in change — sv.Detections.mask, filtering, merging, and area all keep working without materialising the full array. (#2159)

      • SAM3 detection and PVS support infrom_inference. sv.Detections.from_inference now parses SAM3 detection and point-video-segmentation outputs, both from the local inference package and from Roboflow-hosted server responses. (#2103, #2152)

      • Compressed COCO RLE masks infrom_inference. Inference responses with rle or rle_mask fields containing a compressed counts string (as produced by pycocotools) are decoded directly into binary masks, skipping the lossy polygon round-trip. (#2178)

      • Standardlogging module instead of print. Diagnostic output is now emitted under the supervision logger, so applications can capture, filter, or silence it through standard logging configuration. (#2154)

      • RGBA hex codes insv.Color. sv.Color.from_hex accepts 8-digit hex (#ff00ff80), and Color.as_hex() round-trips alpha when not fully opaque. New top-level helpers: sv.hex_to_rgba, sv.rgba_to_hex, and sv.is_valid_hex. (#2004)

      • Dynamic kernel sizing in blur and pixelate annotators. BlurAnnotator(kernel_size=None) and PixelateAnnotator(pixel_size=None) (the new default) compute the kernel per detection as a fraction of the shorter bounding-box side, giving visually consistent results across object scales. (#709)

      • sv.ImageAssets for sample images. A counterpart to the existing video assets — downloads sample images for examples and tutorials. (#932)

      • Boundary warnings inInferenceSlicer. Emits a warning when callback detections fall outside tile boundaries, helping you spot coordinate-system bugs in custom callbacks early. (#2186)

      ⚠️ Breaking Changes

      • sv.VideoInfo.fps is now float, not int. Frame rates like 23.976, 29.97, and 59.94 are no longer truncated. If you pass fps to APIs that require an integer (deque(maxlen=...), TraceAnnotator(trace_length=...)), wrap with int(...). (#2210)

      • sv.rle_to_mask returns bool, not uint8. This matches the long-declared signature. Code that does mask * 255 still works via NumPy broadcasting, but explicit casts like mask.view(np.uint8) will break. Add .astype(np.uint8) if you relied on the undocumented integer output. (#2178)

      See the migration guide below for before/after snippets.

      🌱 Changed

      • Metric arrays usefloat32 instead of float64. sv.MeanAveragePrecisionResult and related arrays (mAP_scores, ap_per_class, iou_thresholds, precision/recall) drop to float32, reducing memory and speeding up computation. Numerical results may differ in the last few digits. (#2169)

      • rle_to_mask and mask_to_rle moved. New canonical path: supervision.detection.utils.converters. The old supervision.dataset.utils import still works but is deprecated. (#2178)

      🗑️ Deprecated

      • normalized_xyxy argument renamed to xyxy in denormalize_boxes. sv.denormalize_boxes(normalized_xyxy=...) still works but emits a FutureWarning; switch to xyxy=. Scheduled for removal in 0.30.0.

      • sv.ByteTrackByteTrackTracker (external trackers package). Install with pip install trackers; the method renames from update_with_detections() to update(). Scheduled for removal in 0.30.0. (#2215)

      • supervision.keypointsupervision.key_points. Also deprecated: the LMM enum (use VLM), from_lmm (use from_vlm), create_tiles in supervision.utils.image, ensure_cv2_image_for_processing in supervision.utils.conversion, and the keypoint validators in supervision.validators. (#2214)

      🔧 Fixed

      • PolygonZone no longer double-counts overlapping zones. When two polygons contain the same anchor, each zone now reflects its own containment instead of every zone claiming the detection. (#1991)

      • LineZone respects class identity across reused tracker IDs. Trackers that recycle tracker_id across classes no longer leak crossing state from one object to another. (#1868)

      • process_video raises immediately on callback errors. Previously the exception was swallowed and the process hung until the writer was flushed. (#2022)

      • DetectionDataset populates class_name. Loaded annotations now carry data["class_name"], matching what model connectors produce. (#2156)

      • ByteTrack preserves externally assigned tracker_id. No longer overwrites caller-assigned IDs on the first update. (#1364)

      • Confusion matrix double-counting fixed. evaluate_detection_batch now correctly matches multiple predictions to the same target, so FP/FN counts match expectations. (#1853)

      • MeanAverageRecall mAR@K is now COCO-compliant. Computed using top-K detections per image; previous values were inflated relative to pycocotools. (#2136)

      • Detections.is_empty() handles empty tracker_id. Returns True for zero-row detections regardless of whether tracker_id is None or an empty array. (#2209)

      • CSVSink and JSONSink slice custom_data per row. NumPy arrays, lists, and tuples whose length matches the detection count are now indexed per row, instead of being written whole for every detection. (#2199, #2216)

      • TraceAnnotator smooth mode handles stationary tracks. Deduplicates anchor points and falls back to a raw polyline when splprep cannot fit fewer than 4 unique points. (#2217)

      • load_coco_annotations rejects path-traversal annotations. Refuses file_name entries that escape the images directory via ../ or absolute paths. (#2218)

      • OBB datasets no longer blow up memory. Loading oriented-bounding-box datasets stopped allocating full-image masks per box. (#2187)

      • KeyPoints boolean mask indexing fixed. Uniform-count selection now works correctly when all instances share the same keypoint count. (#2188)

      • DetectionDataset.as_coco() preserves area and iscrowd. No longer dropped silently in the round-trip. (#2185)

      • force_mask=True precision and COCO empty-polygon export. Annotation conversion no longer loses precision, and COCO export tolerates empty polygons across formats. (#1746, #1086, #265)


      🏆 Contributors

      A huge thank you to everyone who shipped this release:


      Full changelog : 0.27.0...0.28.0

    4. 🔗 @HexRaysSA@infosec.exchange You know the drill: Stop by our sponsor table at mastodon

      You know the drill: Stop by our sponsor table at @recon to get a sneak peek at IDA 9.4, learn about our new malware extensions, share your feedback for some primo swag, or just say hi.

      We're also partnering with BlackHoodie again this year, and our own Arnau Gàmez i Montolio will be closing out Sunday with the final session.

    5. 🔗 roboflow/supervision 0.29.0rc1 release

      releasing 0.29.0rc1

    6. 🔗 r/reverseengineering Factoring "short-sleeve" RSA keys with polynomials rss
    7. 🔗 @binaryninja@infosec.exchange Join us live on June 24th at 1pm ET as Zenyard launches with Binary Ninja! mastodon

      Join us live on June 24th at 1pm ET as Zenyard launches with Binary Ninja! Zenyard’s AI reverse engineering assistant helps to analyze binaries faster and with greater accuracy. We'll be taking a deep dive into what makes Zenyard's integration stand out, have it rebuild Swift code for us, and have it reason about code-flows among multiple binaries. https://youtube.com/live/JG15oxrWgp0

    8. 🔗 r/reverseengineering GitHub - Zypherion-Technologies/HallWatch: Usermode detector that catches indirect syscalls. rss
    9. 🔗 sacha chua :: living an awesome life 2026-06-15 Emacs news rss

      Lots of discussion around Karthik's latest blog post Even More Batteries Included with Emacs (Reddit, HN, lobste.rs). Check it out!

      Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, Mastodon #emacs, Bluesky #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

      You can comment on Mastodon or e-mail me at sacha@sachachua.com.

    10. 🔗 r/reverseengineering Need DRM Bypass on course website to download video , DM (paid) , rss
    11. 🔗 earendil-works/pi v0.79.4 release

      New Features

      • Automatic first-run theme selection - pi detects the terminal background on first run and defaults to the dark or light theme. See Selecting a Theme.
      • Standalone binary integrity checksums - GitHub release assets now include SHA256SUMS files for verifying standalone binary downloads. See Quickstart Install.

      Added

      • Added SHA256SUMS integrity files to standalone binary GitHub release assets (#5739).
      • Added first-run interactive theme detection from the terminal background (#5385 by @vegarsti).

      Fixed

      • Fixed bash tool output collection to keep draining stdout/stderr after the child exits while descendants still write, avoiding truncated late output (#5753 by @Mearman).
      • Fixed /tree help rendering to show compact wrapped controls instead of truncating them on narrow terminals (#5055).
      • Fixed SIGTERM/SIGHUP interactive shutdown to keep signal handlers installed until terminal cleanup completes, preventing signal-exit from re-sending the signal and leaving the terminal in raw/Kitty keyboard mode (#5724).
      • Fixed extensions documentation to clarify that pi.getActiveTools() returns active tool names while pi.getAllTools() returns tool metadata (#5729).
      • Fixed question and questionnaire extension examples to wrap long prompt, option, and help text instead of truncating it (#5708 by @xl0).
      • Fixed package commands such as pi list, pi install, and pi update to terminate after completing even if an extension leaves background handles open (#5687).
      • Fixed pi update for pnpm global installs whose configured global-bin-dir no longer matches the active pnpm home (#5689).
      • Fixed npm package specs that use ranges or tags (for example @^1.2.7) so installed package resources still load instead of being treated as mismatched exact pins (#5695).
      • Fixed inherited Anthropic 1-hour prompt-cache write cost accounting to price 1-hour cache writes at 2x input instead of the 5-minute cache-write rate (#5738 by @theBucky).
      • Fixed inherited GitHub Copilot Claude adaptive-thinking effort metadata to match manually checked Copilot model capabilities (#4637).
      • Fixed inherited OpenCode/OpenCode Go completion model metadata to omit long-retention cache fields for routes that reject prompt_cache_retention (#5702).
      • Fixed inherited overlay compositing over CJK wide characters so borders stay aligned when an overlay starts inside a full-width cell (#5297).
      • Fixed inherited WezTerm inline Kitty image rendering during full redraw fallbacks so image padding rows are reserved before the placement is drawn without regressing tall-image placement (#5618, #4415).
      • Fixed custom provider config so plain uppercase API key and header values remain literals instead of being treated as legacy environment references; use explicit $ENV_VAR syntax for environment variables (#5661).
    12. 🔗 r/reverseengineering /r/ReverseEngineering's Weekly Questions Thread rss

      To reduce the amount of noise from questions, we have disabled self-posts in favor of a unified questions thread every week. Feel free to ask any question about reverse engineering here. If your question is about how to use a specific tool, or is specific to some particular target, you will have better luck on the Reverse Engineering StackExchange. See also /r/AskReverseEngineering.

      submitted by /u/AutoModerator
      [link] [comments]

    13. 🔗 exe.dev Announcing the exe.dev iOS app rss

      We're delighted to announce that exe.dev has an iOS app now in the App Store. There's a lot to write about how we built it, but today let's talk about the why. After all, the exe.dev dashboard and Shelley already work on mobile browsers.

      They say the best camera is the one you have with you. The best terminal is the one you have with you too. We couldn't build the following features without building an app, so an app it is:

      Notifications. Agentic conversations are high-latency, and it's useful to be notified when it's your turn. Nothing on iOS comes close to the native notifications experience. Of course, we built this with an exe integration: other software you build on your VM can use the same notify.int.exe.xyz integration to ping your phone.

      Share sheet. Many prompts begin with a screenshot. Take one, click share, and click on exe.dev to start an agentic conversation. Whether it's a UI element that's out of alignment or a Slack message you received, the share sheet speeds up "time to agent is working on it."

      exe.dev in the iOS share
sheet

      Voice. We built a voice mode that can harness the power of having real computing resources available to you.

      SSH. There are several excellent SSH clients already available for SSH, but the process of creating a key and registering it with exe.dev is cumbersome. We do not yet support mosh (it's on the roadmap!) which makes roaming prone to dropping connections. Having a terminal client in our app side-steps that. We have happy users that have persistent Claude Code sessions in their terminals. Paste works, by the way.

      Multiplexing Shelley. One of our taglines is "a VM for every idea." Instead of walking through each VM in turn to find unfinished business, the iOS app provides a centralized place.

      I want to thank our TestFlight users for providing valuable feedback while suffering through many a crash!

      The app is in the App Store. Give it a whirl. Send us feedback via Discord or support@exe.dev.

      Your browser does not support the video tag.

  3. June 14, 2026
    1. 🔗 IDA Plugin Updates IDA Plugin Updates on 2026-06-14 rss

      IDA Plugin Updates on 2026-06-14

      New Releases:

      Activity:

    2. 🔗 HexRaysSA/plugin-repository commits sync repo: +1 release, ~2 changed rss
      sync repo: +1 release, ~2 changed
      
      ## New releases
      - [IDAGuides](https://github.com/libtero/idaguides): 1.1.0
      
      ## Changes
      - [IDASQL](https://github.com/allthingsida/idasql):
        - 0.0.10: archive contents changed
      - [xray](https://github.com/hexrays-plugin-contributions/xray):
        - 2025.9.24: archive contents changed
      
  4. June 13, 2026
    1. 🔗 IDA Plugin Updates IDA Plugin Updates on 2026-06-13 rss

      IDA Plugin Updates on 2026-06-13

      Activity:

      • ida_scripts
      • Rikugan
        • 6f42c096: Merge pull request #58 from buzzer-re/dev
        • 75321fb1: feat(ui): add "Don't auto-load chats" option (#51)
        • 09fdfefb: Merge pull request #57 from buzzer-re/dev
        • d66fa7f2: fix(codex): fetch models live on Windows; smooth chat streaming & scroll
      • rikugan
        • 6632f82b: test(agent): port bulk_renamer, subagent_manager, pseudo_tool_schemas…
        • 4b2baca3: test(a2a): add HTTP and loop integration tests
        • 844ac60b: feat(agent): add /a2a slash command for explicit user delegation
        • bb8ddc10: feat(ui): add A2ABridgeWidget with 4-tab tools panel integration
        • a531509e: feat(agent): add delegate_external_task pseudo-tool for LLM-initiated…
        • 2bace4e1: fix(a2a): use background thread for responsive cancel in SubprocessBr…
        • bfaceb78: feat(a2a): add A2ADispatcher as single entry point for tool/widget/slash
        • 9eb6486b: feat(ui): backport IDAThemeWatcher from fork for live theme reload
        • afa5f58e: feat(core): add optional dependency detection helpers
        • ee842aba: chore: add .scratch/ to .gitignore
        • d81cb91f: fix(orchestra): subagent event poll loop runs once, loses events
        • a8e80600: test(isolation): add PySide6 dev dep + mark 5 pre-existing Qt test po…
        • 57caf5e8: fix(security): block argv injection in a2a SubprocessBridge
        • ed2f5175: docs: update PROJECT_MODIFICATION_PLAN with session progress and next…
        • 3b9b1d65: refactor(providers): tighten registry.py docstrings and method organi…
        • 51c19c7e: feat(providers,agent): port auth_compat and pseudo_tool_schemas from …
        • 9cd3985d: feat(providers): port codex_provider from upstream fork
        • b57c9739: fix(security): block path traversal in research_mode note writing
        • a5a2ceb8: docs: list 12 built-in skills in README, add evaluation workflow + mo…
        • 14c77c43: chore: remove binary archives and debug file from repo, sync .gitignore
      • ToCode
        • 3525f850: Merge pull request #4 from buzzer-re/dev
        • 4866aa32: Merge branch 'dev' of github.com:buzzer-re/ToCode into dev
        • a5ce3b6d: Fix Windows installer PATH handling and improve installer UX
        • a3d82f3e: Fix Windows installer PATH handling and improve installer UX
    2. 🔗 Simon Willison Publishing WASM wheels to PyPI for use with Pyodide rss

      The Pyodide 314.0 release announcement (via Hacker News) includes news I've been looking forward to for a long time:

      You can now publish Python packages built for Pyodide (or any Python runtime compatible with the PyEmscripten platform defined in PEP 783) directly to PyPI and install them at runtime.

      Previously, the Pyodide maintainers had to maintain, build, and host over 300 packages ourselves. This created a significant burden on our maintainers and became a major bottleneck for the community, as every new package required manual review.

      Moving forward, package maintainers can simply build and publish Pyodide wheels to PyPI, just as they do for native wheels on Linux, macOS, or Windows.

      Here's the PR to PyPI itself supporting this, which landed on April 21st.

      I adore Pyodide, and have been frustrated in the past by this limitation. It's possible to compile C or Rust extensions to WASM in a wheel file, but before now there was no easy way to distribute them.

      Thanks to the efforts of a whole lot of people, that's now been fixed!

      Trying it out with luau-wasm

      I decided to celebrate by finding something I could package. I have quite a few experimental Pyodide projects lying around, but the best fit for this looked to be my Luau WebAssembly research spike from 9th March.

      Luau is a "small, fast, and embeddable programming language based on Lua with a gradual type system", developed by Roblox and released under an MIT license.

      It's written in C++. I already knew it was possible to compile it to WebAssembly and get it running inside of Pyodide, so I set Codex + GPT-5.5 xhigh the task of packaging my experiment up and publishing it to PyPI using GitHub Actions.

      It took some iteration, but here's the result: luau-wasm is a brand new PyPI package which publishes a 276KB luau_wasm-0.1a0-cp314-cp314-pyemscripten_2026_0_wasm32.whl file which can be used in Pyodide like this:

      import micropip
      await micropip.install("luau-wasm")
      import luau_wasm
      print(luau_wasm.execute(r'''
      local animals = {"fox", "owl", "frog", "rabbit"}
      table.sort(animals, function(a, b) return #a < #b end)
      for i, name in animals do print(i .. ". " .. name .. " (" .. #name .. ")") end
      '''))

      You can run that code in the Pyodide REPL demo to see it in action.

      The GitHub repo for luau-wasm includes all of the build and deploy scripts (using the latest cibuildwheel) and also deploys an HTML demo page which loads Pyodide, installs luau-wasm and provides an interface for trying it out: https://simonw.github.io/luau-wasm/

      Screenshot of a web app titled "Luau WASM" with subtitle "Run Luau in the browser through Pyodide after installing the luau-wasm WebAssembly wheel from PyPI." A green "Ready" status badge is at top right. Below are example buttons: "Hello World", "Variables", "Tables", "Fibonacci", "Runtime Error". A "LUAU SOURCE" code editor contains: local function fib(n: number): number / if n < 2 then return n end / return fib(n - 1) + fib(n - 2) / end / local out = {} / for i = 0, 12 do / table.insert(out, tostring(fib(i))) / end / print(table.concat(out, ", ")). On the right is an "OUTPUT" panel with a "Copy" button showing dark terminal output: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144. At the bottom left are a blue "Run" button, a "Clear" button, and the text "6.0 ms".

      How many packages are using this so far?

      I was curious to see how many packages are currently publishing wheels for this platform.

      After some tinkering with ChatGPT I got to this BigQuery SQL which I ran against PyPI's public dataset on BigQuery. Here's the raw JSON of query results and here's a SQLite SQL query in Datasette Lite which dedupes packages by most recent upload date.

      If the query is right, there are currently 28 PyPI packages publishing with the new pyemscripten_202*_wasm32 tags:

      luau-wasm, uuid7-rs, cmm-16bit, pyOpenTTDAdmin, imgui-bundle, numbertoolkit, bashkit, geoarrow-rust-core, arro3-io, arro3-core, arro3-compute, onnx, powerfit-em, tcod, chonkie-core, tokie, robotraconteur, pydantic_core, yaml-rs, cadquery-ocp-novtk-OCP.wasm, uuid_utils, base64_utils, pycdfpp, lib3mf-OCP.wasm, typst, toml-rs, onnx-weekly, dummy-pyodide-ext-test

      Here's hoping we see a whole lot more of those showing up over the coming months and years.

      You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.

    3. 🔗 modem-dev/hunk v0.15.3 release

      What's Changed

      • Fixed Windows launches from Cygwin, Git Bash, and WSL-style VCS paths by @edemaine in #416
      • Reduced large-review scroll and hunk-navigation latency by ~100–1000× by @elucid in #427
      • Hardened Homebrew tap release updates by @benvinegar in #428
      • Added release benchmark snapshots and a release benchmark gate by @benvinegar in #429
      • Capped diff geometry caches per file to avoid retained-memory growth by @benvinegar in #430
      • Backfilled release benchmark baselines for recent releases by @benvinegar in #431
      • Prepared the 0.15.3 release and committed its benchmark snapshot by @benvinegar in #432
      • Fixed release staging so benchmark comparison artifacts are not mistaken for platform binary artifacts by @benvinegar in #433

      Full Changelog : v0.15.2...v0.15.3

    4. 🔗 modem-dev/hunk v0.15.2 release

      What's Changed

      • docs: explain how to get Hunk skill by @zzl0 in #414
      • feat(ui): honor transparent background in static pager output by @franky47 in #418
      • chore(deps): bump taiki-e/install-action from 2.77.2 to 2.79.2 in the github-actions group by @dependabot[bot] in #390
      • fix(session): resolve --repo selector to repo root by @franky47 in #424
      • perf(ui): yield scroll updates and highlight work to input timers by @fink-andreas in #422
      • fix(ui): keep popups opaque in transparent mode by @reobin in #411
      • chore(release): prepare 0.15.2 by @benvinegar in #425

      Full Changelog : v0.15.1...v0.15.2

    5. 🔗 r/reverseengineering Reverse-engineered the WHOOP 4.0's Bluetooth protocol and open-sourced it. rss
    6. 🔗 earendil-works/pi v0.79.3 release

      Fixed

      • Fixed inherited OpenAI GPT-5.4/GPT-5.5 and OpenAI Codex GPT-5.4/GPT-5.4 mini/GPT-5.5 context window metadata to use the observed 272k-token Codex backend limit, avoiding a billing hazard from prompts above Codex's accepted limit (reported by @trethore).
    7. 🔗 r/reverseengineering "Instead of touching grass for 6 months I built an AI that names 150,000 sub_ functions overnight. I have no regrets [SpectrIDA]" SELF PROMO (i love the tool tho) rss
    8. 🔗 r/reverseengineering Hunting the 30-Year-Old World of Xeen MT-32 Crash rss
    9. 🔗 tonsky.me Every Frame Perfect rss

      A while ago I was reading about Wayland and this quote stuck with me:

      A stated goal of Wayland is “every frame is perfect”.

      And I think this is a goal we should all aspire to. Wayland is talking about the technical side of things (modern GPU stacks are very complex and Wayland is trying to take control back) but it could be applied to UI too.

      The rule of thumb is:

      If I take a screenshot of your app at any moment, you should be able to explain what I see

      EDIT: This used to say “..., it must make sense” but that doesn’t account for advanced animation techniques such as smear frames etc.

      Why care about every frame? It builds trust. Users can’t see the code, so UI is the only way for them to judge the quality of the app. If UI looks good, that means developers had time to polish it, which means that they probably spent a comparable amount of time to iron out the code. It’s a heuristic, but a reasonable one.

      Now, what does it mean in practice? I can think of a few things:

      • No white flashes between screens.
      • No partially loaded content.
      • No relayout while content loads.
      • Internally consistent. If one part of the UI says “1 update available”, another part should not say “Checking for updates...”
      • Precise animations.

      Animations often end up being forgotten. A UI might look great in both start and end states but very janky in between. Like this:

      If you feel like there are weird things going on there, there are! Look at slowed down version:

      Now let’s apply our rule and take screenshots in the middle of the animation. This doesn’t look right:

      Neither does this:

      Both of these frames are not perfect.

      Let’s look at another example. Safari:

      Placeholder text here moves from the center but cursor animates from the left position:

      Not the end of the world by any means, but it does create a feeling that these two components are not in sync with each other. Next thought: maybe they weren’t designed together? If so, then they might not work well together. That’s how trust is lost.

      This desynchronization can lead to a lot of confusion. For example, in Photos, when switching between Crop and Adjust mode, picture snaps into place immediately but the crop border is animated:

      This creates a false feeling that something subtly changes when you switch between modes. And you know what? I don’t want my UI to give me false feelings. I want it to be a precise instrument, not an animated toy.

      Sometimes animations are supposed to help you understand a transition, so it’s doubly sad when they make it harder. Follow the magnifying glass:

      Same with Youtube. They had the simplest task in the world: move a rectangle from one position to another! Yet they decided to do something very strange:

      Can you explain this? Does it make sense?

      Probably a technical limitation of the DOM architecture they decided earlier on. I call these situations “The technology has outsmarted the programmer”. But no matter the reason, the result is an imperfect frame.

      Sometimes animations are left out as an afterthought. Whatever happens, happens. Then we get this:

      The details are fascinating to watch:

      So yeah. Please pay attention not only to the start and end states, but also to everything in between. Every frame matters.

      I’ll leave you with this unprovoked zoom animation from Preview app. Take care!

    10. 🔗 Armin Ronacher Dangerous Technology For Americans Only rss

      There is a bit of schadenfreude on Twitter right now about Anthropic being hit by the US government's export control directive to suspend access to Fable and Mythos. Anthropic and their leadership have spent a lot of time and effort describing its own technology as dangerous and in need of strict controls and regulation. Now that the US government appears to have taken that framing seriously and told them to turn it off for foreign nationals I can see why people are making fun of that situation.

      I understand the reaction, but I urge you to not entertain it for too long because it is a giant distraction. The important part is not that Anthropic's safety language came back to bite them but the line the US government is drawing: this technology is apparently so powerful that only Americans should have it.

      We are on a clear path towards a world of division. One should think that if a model is too dangerous for everyone, then it is too dangerous for Americans too. Instead the US is treating these models like weapons that need to be controlled. It is not just about capabilities, it is about racism and nationalism. If you have the wrong passport, you are not to be trusted. This is a very different thing from safety, and Europeans should pay close attention to it.

      Safety and National Control

      The directive, as Anthropic describes it, applies to foreign nationals whether they are inside or outside the United States, including foreign national Anthropic employees. That is an astonishing boundary if you think about it. We moved from "do not sell this model to hostile governments" to nationality itself being the defining boundary. This should be a wake-up call to Europeans in and outside the US, and quite frankly, any non US citizen.

      A lot of AI safety discourse presents itself as universal: humanity, catastrophic risk, safeguards, responsible deployment. Even Anthropic's own writings start out that way, but yet every time regulation is discussed there is an overtone of national security and that it cannot get into the wrong hands. It's not just Anthropic, it's the entire US based discourse on AI. The foundation is that the US has moral superiority and others are not to be trusted. That there are other countries are authoritarian, that they lack freedoms.

      That should make us uncomfortable, not just Europeans, but particularly us. It is also a situation you cannot regulate yourself out of. European technology policy is entirely unprepared for this, because this is not a question of regulation but a question of might and power, something that Europe lacks.

      Europe has spent years trying to regulate large American technology companies, sometimes for good reasons. I am not reflexively against that. The DMA matters because access matters. Users should have agency over their devices, their data, and the software they run. But regulation is a useless substitute for capability and we are lacking that. Regulation might try to force open doors but if those doors only come from American or Chinese companies, then that accomplishes very little.

      Also let's not be naive in that this is a negotiation of money and force. The US is in that position because the US has a mighty military. The US can bomb nations anywhere in the world, force international trade routes closed and get away with it. That's true leverage.

      Oh Europe

      Europe is dependent on the United States in ways that are becoming increasingly impossible to ignore. We depend on American cloud providers, operating systems, developer platforms and now AI models and internet from satellites. We also depend on global semiconductor supply chains we do not control. If access to frontier AI becomes a matter of American national security policy, Europe is not a peer in that conversation and might not even be a market.

      That is a humiliating position, but one that happened entirely intentionally.

      European citizens and politicians still have not managed to move beyond blaming the EU for its failures. We built and maintained fragmented markets and then pretended we had a single one. We let company formation, hiring, equity compensation, tax, notaries, KYC, banking, and cross-border services remain much harder than they need to be and we are playing these rules against each other. Not just on the European level, but within every single member state. We protect the trusts and established enterprises, who are risk averse and entrenched, instead of trusting the next generation to build great companies. We created a culture where process becomes an excuse for low agency. We made it hard to build new and large companies and then act surprised when our most ambitious founders move somewhere else or just decided to incorporate their companies in the US.

      Increasingly, Europeans who want to build very large technology companies move to the United States. They do it because the capital markets are better, the startup infrastructure is better, employee equity is better understood. I cannot blame anyone doing it, and I'm guilty of this myself as we have incorporated our holding in Delaware. If you are trying to raise serious money, hire aggressively, and move quickly, the US often looks like the only game in town. Because quite frankly: it is.

      But this is why we are on a dangerous death spiral already. Talent leaves because the ecosystem is weak and the ecosystem stays weak because talent leaves. Infrastructure makes the world: build excellent swimming pools and you will grow a generation of great swimmers.

      The temporary task is straightforward but uncomfortable: Europeans need to believe in themselves enough not to surrender to American gravity. Moving to the US as a founder or tech employee is rational and individually it is often the right decision. But if every ambitious person treats Europe as a lost cause, then Europe becomes one. If everyone with agency leaves, the only people left to shape the system are the people most comfortable with the system as it is. Then we really should not be surprised when nothing changes.

      Europe needs more ambition, more ownership, more urgency, and more willingness to build. It needs less resignation. It needs to stop confusing regulation with strategy and dependency with virtue. We need to deregulate where rules serve mostly as protectionism. We need capital markets that can fund companies at the scale modern technology requires. We need employee ownership to become normal rather than exotic. We need a real single market for services, not just speeches about one. We need countries to stop fighting each other while claiming to act in the European interest.

      Most importantly: we need to stop blaming the politicians. Too many European companies are adding to that bureaucracy entirely out of their own choice. They drown you in paperwork. At one point I had to sign a four page contract for a 120 Euro lamp at an Austrian retailer, just to pick up from their store 15 minutes later. Sometimes I cannot get a speaking engagement at a European event without someone sending me complex rights waivers over. It's all just paperwork protection against potential downsides.

      When we do not have the power to influence, we should at least understand why and where things are failing. Too many entrepreneurs are blaming EU regulation for failures that are originating within the member states. EU regulation is the result of a democratic process between countries that are lobbying in favor of their local industries against others in the same economic bloc. No amount of abolishment of the EU is going to fix this harsh reality. Nothing more demonstrates this as the inability for cross-border M&A in the European Union. It's not the EU that blocks it, it's the country that loses out.

      Strengthening Europe is necessary because weakness makes us pawns. A Europe that cannot build, cannot finance, cannot coordinate and cannot defend its own interests will not be treated as an equal. It will be regulated around, export-controlled around, consulted after the fact or not consulted at all.

      The American Trap

      I do not want the lesson to be that Europe simply needs to turn itself into a copy of the United States. The US has solved some things that Europe has not. It has deep capital markets, a much stronger culture of ownership, a greater tolerance for risk, and institutions that often try to make progress possible rather than explain why it cannot happen. It also has achieved an internal level of integration that is unparalleled in Europe. Tremendous advantages!

      But the American path is not obviously a healthy one in all aspects. It tends to take paths with a lot of conflict and wars, a lot of internal societal division and deep inequalities. It centralizes powers away from citizens in the presidency and people with money. You are still trading one set of failures for another. You are at the whim of the US government and its strict rules and regulations. The US barely manages to uphold the rights for its own citizens today.

      We should be honest about both sides. You do not win by pretending that Europe is fine. You also do not win by pretending that America has figured everything out.

      We must not be blind to all the signs of how international cooperation is falling apart around us. The US no longer talks to European governments before implementing orders that directly affect Europeans. It is threatening to take Greenland, the territory of Denmark, one of its oldest allies. Treaties, alliances and institutions have lost all their worth.

      All that matters even if our own lives are focused on building companies, creating wealth, hiring people and making things. Our individual path to success is one thing, but it depends on a world where contracts work, visas work and don't change on a moment's notice, trade routes stay open, payment systems function, and families are not torn apart by border regimes or wars. If the world descends into chaos, our basic needs cannot be considered met just because we have a great salaries or equity or investors that trust us.

      This is why strengthening Europe cannot be the final goal. A stronger EU is, at best, a temporary defense against a darker world and not an excuse to replace American nationalism with European nationalism. The long-term answer cannot be bigger and bigger blocs fighting over who may use which model, which chip, which cloud or which trade route.

      The Way Out Is Cooperation

      I'm not asking here for Europeans to get their shit together just to compete with the US or China. Maybe I hope that this is a thing that develops, but the goal absolutely cannot be that we accept the deterioration of international relationships long term.

      I truly believe that Open Source matters and international cooperation matters. It is not a magical answer to every problem, but it is one of the few paths we have that does not naturally lead to total concentration of power.

      If frontier AI becomes something only large corporations and governments can control, then everyone else becomes dependent on their judgment. That is a bad place to be. Corporations will optimize for their incentives, as well structured as they might be, and governments will optimize for more and more power. Right now we're on a path in which access to general-purpose capability is mediated by a small number of actors with tremendous powers.

      I'm not naive in pretending AI cannot carry inherent risks. Open systems are messy, they can be misused and they create uncomfortable questions about dual- use capabilities. I do not want to wave that away but closed systems do not make those questions disappear either. Moving the power to decide into fewer hands is not a solution I believe in. And I would have the same opinion if I was a US citizen living in the US.

      Any path that puts large blocs in a constant fight against each other has despicable downstream effects that result in the removal of individual rights. It's entirely pointless for the US to talk about freedoms that do not extend to non-US citizens and the same is true for Europe or any other country. We might accept these restrictions temporarily, but we absolutely cannot accept them long term for the inhumane effects that they can cause.

      If we believe this technology can be used for good, then broad access matters and our goal should be to restore the international rule of law, and not to further weaken it. If we find ourselves in a war against our friends from other countries, cold or hot, we have failed as society.

      The world we should be working back toward is one of international cooperation, globalization in the best sense of the word, and human dignity. The internet has made our lives irreversibly international: every day people fall in love across borders, marry across languages, move across continents, and work with friends they may never meet in countries they may never visit. Identifying too strongly with any one country in that world is a fool's errand.

      Over the last decade too many of the people I got to know through Open Source were directly dragged into a war. I want to believe there is a way for us to break this cycle. We should be repairing failed states, rebuilding trust between people, and finding ways to cooperate again instead of letting the richest countries arm themselves and fight over who gets to control the future and narrative. Of course I want Europe to become stronger so it can stop being a pawn, but if we mistake that temporary need for the destination, I will be deeply disappointed.

      The way out is not American supremacy, Chinese supremacy or European supremacy. The way out is to climb back toward cooperation before the alternative becomes war.

      Artificial Intelligence is quickly becoming another instrument of militarization and national rivalry, when it could be one of the most powerful tools for cooperation we have. We should be using it to help people across societies and languages understand one another, not fighting over who gets to control it.