Manon Kok

64 papers A* 1A 1B 1C 12Misc 2Journal 36Unranked 10
YearRankTypeTitle / Venue / Authors
2026 J jnl
Autom.
Clara Menzen, Manon Kok, Kim Batselier
2025 J jnl
CoRR
Hassan Osman, Daan de Kanter, Jelle Boelens, Manon Kok, Ajay Seth
2025 ed.
BNAIC/BENELEARN
Frans A. Oliehoek, Manon Kok, Sicco Verwer
2025 conf
ECC
Wolfram Martens, Manon Kok, Riccardo M. G. Ferrari
2025 conf
PLANS
Isaac Skog, Manon Kok, Gustaf Hendeby, Chuan Huang, Thomas Edridge
2025 J jnl
IEEE Trans. Signal Process.
Frida Viset, Rudy Helmons, Manon Kok
2024 conf
MFI
Manon Kok, Arno Solin
2024 J jnl
CoRR
Manon Kok, Arno Solin
2024 A* conf
NeurIPS
Cuong Le, John Viktor Johansson, Manon Kok, Bastian Wandt
2024 J jnl
CoRR
Cuong Le, John Viktor Johansson, Manon Kok, Bastian Wandt
2024 J jnl
CoRR
Clara Menzen, Manon Kok, Kim Batselier
2023 J jnl
IEEE Internet Things J.
David Chiasson, Yuan Lin, Manon Kok, Peter B. Shull
2023 C conf
FUSION
Frida Viset, Rudy Helmons, Manon Kok
2023 J jnl
CoRR
Frida Viset, Rudy Helmons, Manon Kok
2023 C conf
FUSION
Clara Menzen, Marnix Fetter, Manon Kok
2023 J jnl
CoRR
Clara Menzen, Marnix Fetter, Manon Kok
2023 C conf
FUSION
Thomas Edridge, Manon Kok
2023 J jnl
CoRR
Thomas Edridge, Manon Kok
2023 J jnl
CoRR
Clara Menzen, Eva Memmel, Kim Batselier, Manon Kok
2023 J jnl
CoRR
Manon Kok, Arno Solin, Thomas B. Schön
2023 C conf
IPIN
Isaac Skog, Gustaf Hendeby, Manon Kok
2022 B conf
MDM
Manon Kok, Frida Viset, Mostafa Osman
2022 J jnl
SIAM J. Sci. Comput.
Clara Menzen, Manon Kok, Kim Batselier
2022 J jnl
Sensors
Frida Viset, Rudy Helmons, Manon Kok
2022 J jnl
CoRR
Frida Marie Viset, Rudy Helmons, Manon Kok
2022 J jnl
J. Signal Process. Syst.
Simo Särkkä, Lassi Roininen, Manon Kok, Roland Hostettler, Andreas Hauptmann
2022 J jnl
CoRR
Mostafa Osman, Frida Viset, Manon Kok
2022 C conf
FUSION
Mostafa Osman, Frida Viset, Manon Kok
2022 conf
ICORR
Janneke Blok, Katherine L. Poggensee, Daniel Lemus, Manon Kok, Robert F. Pangalila, Heike Vallery, Jolien Deferme, Leontien C. C. Toussaint-Duyster, Herwin L. D. Horemans
2021 conf
ECC
Evan Remmerswaal, Ive Weygers, Gerwin Smit, Manon Kok
2021 conf
ECC
Frida Viset, Jan Tommy Gravdahl, Manon Kok
2021 J jnl
CoRR
Manon Kok, Karsten Eckhoff, Ive Weygers, Thomas Seel
2020 C conf
FUSION
Fabian Girrbach, Manon Kok, Raymond Zandbergen, Tijmen Hageman, Moritz Diehl
2020 J jnl
CoRR
Clara Menzen, Manon Kok, Kim Batselier
2020 J jnl
Sensors
Ive Weygers, Manon Kok, Marco J. Konings, Hans Hallez, Henri De Vroey, Kurt Claeys
2020 J jnl
Sensors
Thomas Seel, Manon Kok, Ryan S. McGinnis
2020 J jnl
Sensors
Fredrik Olsson, Manon Kok, Thomas Seel, Kjartan Halvorsen
2020 J jnl
CoRR
Anko Börner, Heinz-Wilhelm Hübers, Odej Kao, Florian Schmidt, Soeren Becker, Joachim Denzler, Daniel Matolin, David Haber, Sergio Lucia, Wojciech Samek, Rudolph Triebel, Sascha Eichstädt, Felix Bießmann, Anna M. Kruspe, Peter Jung, Manon Kok, Guillermo Gallego, Ralf Berger
2020 J jnl
CoRR
Karsten Eckhoff, Manon Kok, Sergio Lucia, Thomas Seel
2019 J jnl
IEEE Signal Process. Lett.
Manon Kok, Thomas B. Schön
2019 J jnl
CoRR
Manon Kok, Thomas B. Schön
2019 A conf
AISTATS
Arno Solin, Manon Kok
2019 J jnl
CoRR
Arno Solin, Manon Kok
2019 C conf
FUSION
Michael Lorenz, Bertram Taetz, Manon Kok, Gabriele Bleser
2019 conf
ECC
Danny Nowka, Manon Kok, Thomas Seel
2019 conf
ECC
Fabian Girrbach, Raymond Zandbergen, Manon Kok, Tijmen Hageman, Giovanni Bellusci, Moritz Diehl
2018 C conf
FUSION
Marco Molnar, Manon Kok, Tilman Engel, Hannes Kaplick, Frank Mayer, Thomas Seel
2018 J jnl
IEEE Trans. Robotics
Arno Solin, Manon Kok, Niklas Wahlstrom, Thomas B. Schön, Simo Särkkä
2018 C conf
FUSION
Manon Kok, Arno Solin
2018 J jnl
CoRR
Manon Kok, Arno Solin
2017 C conf
FUSION
Martin A. Skoglund, Zoran Sjanic, Manon Kok
2017 J jnl
CoRR
Manon Kok, Jeroen D. Hol, Thomas B. Schön
2017 J jnl
Found. Trends Signal Process.
Manon Kok, Jeroen D. Hol, Thomas B. Schön
2016 J jnl
CoRR
Manon Kok, Sina Khoshfetrat Pakazad, Thomas B. Schön, Anders Hansson, Jeroen D. Hol
2016 C conf
FUSION
Manon Kok, Sina Khoshfetrat Pakazad, Anders Hansson, Jeroen D. Hol
2016 conf
SSP
Fredrik Olsson, Manon Kok, Kjartan Halvorsen, Thomas B. Schön
2016 J jnl
CoRR
Manon Kok, Thomas B. Schön
2015 J jnl
IEEE Trans. Veh. Technol.
Manon Kok, Jeroen D. Hol, Thomas B. Schön
2015 J jnl
CoRR
Arno Solin, Manon Kok, Niklas Wahlström, Thomas B. Schön, Simo Särkkä
2015 J jnl
CoRR
Andreas Svensson, Thomas B. Schön, Manon Kok
2014 conf
EUSIPCO
Joel Kronander, Johan Dahlin, Daniel Jönsson, Manon Kok, Thomas B. Schön, Jonas Unger
2013 Misc conf
ICASSP
Manon Kok, Niklas Wahlstrom, Thomas B. Schön, Fredrik Gustafsson
2013 Misc conf
ICASSP
Niklas Wahlstrom, Manon Kok, Thomas B. Schön, Fredrik Gustafsson
2012 C conf
FUSION
Manon Kok, Jeroen D. Hol, Thomas B. Schön, Fredrik Gustafsson, Henk Luinge
redb/s3_utils.py
← Index redb/s3_utils.py python
"""
S3 and file utility functions for REDB.

Contains MinIO/S3 client creation, S3 key generation,
file download, and archive extraction helpers.
"""
import os
import tempfile
from typing import Optional, List

from minio import Minio
from minio.error import S3Error


def get_minio_client():
    """Create and return a Minio client using credentials from .env file"""
    return Minio(
        endpoint=os.getenv("S3_ENDPOINT"),
        access_key=os.getenv("S3_ACCESS_KEY"),
        secret_key=os.getenv("S3_SECRET_KEY"),
        secure=os.getenv("S3_SECURE", "false").lower() == "true"
    )


def generate_s3_key_from_hash(sample_hash: str) -> str:
    """
    Generate S3 key from hash using sharding structure.
    Example: 09f7d02a3c2382199458c98a62b045145ee54ab6aba86166aecf3d10c3c1444c
    becomes: 09/f7/09f7d02a3c2382199458c98a62b045145ee54ab6aba86166aecf3d10c3c1444c.zip
    """
    if len(sample_hash) < 4:
        raise ValueError(f"Hash too short for sharding: {sample_hash}")

    # Create sharded path: first 2 chars / next 2 chars / full_hash.zip
    return f"{sample_hash[:2]}/{sample_hash[2:4]}/{sample_hash}.zip"


def download_s3_object(s3_bucket: str, s3_key: str, temp_dir: str, logger=None) -> Optional[str]:
    """
    Download an object from S3 to a local temporary directory and return the local path.
    If the .zip file is not found, automatically tries .7z as a fallback for legacy uploads.
    """
    try:
        minio_client = get_minio_client()
        local_path = os.path.join(temp_dir, os.path.basename(s3_key))

        # Download the file
        minio_client.fget_object(s3_bucket, s3_key, local_path)

        return local_path
    except S3Error as e:
        # If .zip not found and error is NoSuchKey, try .7z fallback
        if e.code == 'NoSuchKey' and s3_key.endswith('.zip'):
            s3_key_7z = s3_key[:-4] + '.7z'  # Replace .zip with .7z
            if logger:
                logger.info(f".zip not found, trying .7z fallback: {s3_key_7z}")
            try:
                local_path_7z = os.path.join(temp_dir, os.path.basename(s3_key_7z))
                minio_client.fget_object(s3_bucket, s3_key_7z, local_path_7z)
                if logger:
                    logger.info(f"Successfully downloaded .7z fallback: {s3_key_7z}")
                return local_path_7z
            except S3Error as e2:
                if logger:
                    logger.error(f"Failed to download S3 object {s3_key} (tried both .zip and .7z): {e2}")
                else:
                    print(f"[ERROR] Failed to download S3 object {s3_key} (tried both .zip and .7z): {e2}")
                return None
        else:
            if logger:
                logger.error(f"Failed to download S3 object {s3_key}: {e}")
            else:
                print(f"[ERROR] Failed to download S3 object {s3_key}: {e}")
            return None


def extract_fat_slices(macho, output_dir: str, logger) -> List[tuple]:
    """
    Extract slices from FAT Mach-O binary using machofile's dump_slices() API.

    Args:
        macho: Parsed machofile.UniversalMachO object
        output_dir: Directory to write slice files
        logger: Logger instance

    Returns:
        List of (arch_name, slice_path, slice_sha256, slice_md5, slice_sha1) tuples
    """
    result = []
    try:
        # Use machofile's dump_slices API (v2026.2.5+)
        slices = macho.dump_slices(output_dir=output_dir)
        logger.debug(f"Extracted {len(slices)} slices from FAT binary")

        for arch_name, slice_path in slices:
            # Get hash info for this slice from machofile
            general_info = macho.get_general_info(arch=arch_name)
            slice_sha256 = general_info.get('SHA256')
            slice_md5 = general_info.get('MD5')
            slice_sha1 = general_info.get('SHA1')
            result.append((arch_name, slice_path, slice_sha256, slice_md5, slice_sha1))
            logger.debug(f"Slice {arch_name}: {slice_sha256}")

    except Exception as e:
        logger.error(f"Error extracting FAT slices: {e}")

    return result