Blog

  • The Ultimate Guide to MOA – Massive Online Analysis for Data Streams

    Real-Time Machine Learning: Mastering MOA – Massive Online Analysis

    The traditional machine learning paradigm is broken for live data. Standard models rely on batch learning, where a static algorithm trains on historical data and deploys to production. However, in our hyper-connected world, data arrives as a continuous, fast-paced stream. Financial transactions, social media feeds, and IoT sensors do not pause for model retraining.

    When you deploy a batch model into a dynamic environment, it immediately begins to decay. To handle endless data without running out of memory or failing to adapt to shifting trends, you must transition to stream learning.

    Massive Online Analysis (MOA) is the premier open-source framework designed specifically to tackle this challenge. Written in Java, MOA acts as a powerhouse for data stream mining, equipping engineers and data scientists with the tools needed to build, evaluate, and scale real-time machine learning pipelines. The Core Challenges of Streaming Data

    To understand why MOA is highly effective, it helps to first look at the unique obstacles of stream mining:

    Infinite Volume: Streaming data never stops. You cannot store the entire stream in memory or disk for iterative training.

    Strict Time Constraints: Algorithms must process each incoming data point within milliseconds to keep up with the stream speed.

    Concept Drift: The underlying statistical properties of data change over time. A fraud detection model trained on last year’s consumer habits will fail to catch tomorrow’s novel fraud patterns. Key Features and Architecture of MOA

    MOA addresses these streaming challenges through a highly specialized architecture built for efficiency and adaptability. 1. Single-Pass Processing

    MOA algorithms read each data instance exactly once. Once an instance is processed to update the model’s internal structure, it is immediately discarded from memory. This approach keeps the system’s memory footprint stable, regardless of whether the stream runs for five minutes or five years. 2. Stream-Specific Learners

    MOA features a comprehensive suite of algorithms explicitly rewritten for evolving streams. Rather than retraining from scratch, these learners incrementally update their mathematical weights with every new data point. 3. Immediate Evaluation

    Evaluating a streaming model requires a departure from traditional train-test splits. MOA champions Prequential Evaluation (Test-Then-Train). When a new instance arrives, the model first makes a prediction to test its current accuracy. Only after the prediction is logged does the model use that same instance to train and update itself. This provides a continuous, real-time reflection of model performance. Essential Algorithms in the MOA Ecosystem

    MOA hosts a massive library of stream-centric algorithms. Three fundamental algorithms form the backbone of the framework: The Hoeffding Tree

    The Hoeffding Tree (or Very Fast Decision Tree) is the gold standard for streaming classification. Traditional decision trees need to look at all data to choose a splitting attribute. The Hoeffding Tree uses a mathematical tool called the Hoeffding Bound to solve this. It calculates the minimum number of streaming samples needed to make an optimal split with high statistical confidence. The tree grows incrementally as data flows, achieving near-identical accuracy to batch decision trees while using a fraction of the time and memory. ADWIN (Adaptive Windowing)

    To handle concept drift, MOA relies heavily on ADWIN. This algorithm automatically tracks a moving window of recent data. If the statistical variance between two sub-windows exceeds a specific threshold, ADWIN detects a change (concept drift). It then automatically shrinks the window and alerts the parent model to adapt or discard outdated parameters. Hoeffding Adaptive Tree (HAT)

    HAT combines the power of the Hoeffding Tree with the drift detection of ADWIN. Each node in a HAT monitors its local performance using ADWIN. If a change in the data distribution occurs at a specific branch, the tree seamlessly grows an alternative branch in the background and replaces the obsolete node without disrupting the overall pipeline. Getting Started: A Practical Workflow

    Mastering MOA involves choosing the interface that best fits your engineering workflow:

    The Graphical User Interface (GUI): Ideal for beginners, the GUI allows you to visually configure streams, select learners, run evaluations, and watch real-time accuracy and memory curves update visually.

    The Command Line Interface (CLI): Essential for automation and production. MOA tasks can be written as highly precise string commands, making it simple to script large-scale experiments.

    Java API Integration: For production engineering, MOA integrates directly into your software stack. It pairs cleanly with distributed streaming engines like Apache Flink, Apache Spark Streaming, or Apache Kafka to scale real-time analytics across clusters. Conclusion

    Real-time machine learning is no longer a luxury reserved for tech giants; it is a fundamental requirement for responsive software systems. Massive Online Analysis provides the mathematical precision, algorithmic depth, and memory efficiency required to tame infinite data streams. By mastering MOA, you move past the limitations of static batch models and unlock the ability to build self-correcting, highly adaptive AI pipelines that thrive on change.

    If you would like to explore how to implement this framework in your current setup, please let me know:

    Your preferred programming environment (Java, Python wrapper, or GUI?)

    The specific use case you are targeting (e.g., IoT, fraud, clickstream analytics) The volume and speed of your data stream

    I can provide a tailored code snippet or architectural map to help you deploy your first streaming model.

  • 5 Best Features of Tipard 3GP Converter You Need

    Content Format: The Architecture of Impactful Communication Content format refers to the structural blueprint and presentation style used to organize, package, and deliver information to a target audience. In a world with micro-attention spans, how you structure your information is just as critical as the information itself. Selecting the right container for your message determines whether your audience engages deeply or scrolls past. The Evolution of Content Structures

    Information delivery has evolved from monolithic blocks of text into highly dynamic configurations. Different mediums demand specific organizational styles to optimize the reader’s experience:

    Traditional Articles: Built on a linear progression consisting of a catchy title, author byline, concise introduction, multi-paragraph body, and an actionable conclusion.

    Digital Blogs: Rely heavily on visual scannability, incorporating frequent subheadings, brief paragraphs, and punchy bulleted lists to retain online readers.

    Academic Journals: Enforce a rigid, standardized sequence spanning abstract, introduction, methodology, results, discussion, and exact source citations. Strategic Frameworks for Organizing Content

    To maximize audience retention, writers lean on proven informational frameworks that systematically guide readers through the narrative: Core Structural Approach Best Used For AIDA Attention → Interest → Desire → Action Marketing copy and persuasive landing pages. PAS Problem → Agitation → Solution Problem-solving guides and thought leadership. Inverted Pyramid

    Essential facts first → Supporting details → General background News reporting and daily informational updates. Core Pillars of Effective Formatting

    Regardless of the chosen medium, an optimal content layout adheres to several foundational pillars that preserve clarity and drive engagement: How to write an article

  • How to Setup Folder Guardian for Maximum Privacy

    Understanding Your Target Audience: The Key to Business Success

    A target audience is the specific group of consumers most likely to buy your product or service. Identifying this group allows businesses to direct their marketing resources efficiently. Without a clear target, marketing messages become diluted, expensive, and ineffective. Why Defining a Target Audience Matters

    Saves Money: Stops wasted spending on people who will never buy.

    Boosts Conversion: Delivers tailored messages that resonate deeply with specific needs.

    Guides Products: Informs future features based on actual user pain points.

    Beats Competitors: Reveals market niches that larger rivals overlook. Core Frameworks for Segmentation

    To find your audience, divide the broader market into actionable segments:

    Demographics: Age, gender, income, education, and occupation. Geographics: Country, region, city size, and climate.

    Psychographics: Values, interests, lifestyle, attitudes, and personality traits.

    Behavior: Buying habits, brand loyalty, product usage rates, and benefits sought. Step-by-Step Discovery Process

    Analyze Current Customers: Look for common characteristics among your highest-paying buyers.

    Conduct Market Research: Run surveys, interviews, and focus groups to find gaps.

    Study the Competition: See who your rivals target and find underserved audiences.

    Create Buyer Personas: Build fictional profiles representing your ideal customers.

    Test and Refine: Monitor campaign data continuously to adjust your audience profiles.

    Focusing on everyone means reaching no one. By defining your target audience, you build a foundation for relevant messaging, stronger customer relationships, and scalable business growth.

    To help tailor this article or take the next steps, tell me:

    What is the specific industry or product you are focusing on?

    Who is the intended reader of this article? (e.g., beginners, advanced marketers, small business owners) What is the desired length or format? I can adjust the tone and depth to match your exact goals.

  • target audience

    DVD Flick nLite Addon: How to Integrate DVD Authoring Into Windows Installations

    Automating Windows deployment with nLite often requires adding third-party software directly into the installation media. Integrating DVD Flick as an nLite addon allows users to deploy a fully functional, open-source DVD authoring tool automatically during setup. This guide explains how the addon works, its configuration, and how to slipstream it into your custom Windows image. What is the DVD Flick nLite Addon?

    The DVD Flick nLite Addon is a specially packaged cabinet (.cab) or archive file that containing the DVD Flick installation files and registry entries. nLite uses this package to inject the software straight into the Windows installation source (typically Windows XP, Server 2003, or Vista). Once integrated, DVD Flick installs silently in the background during the OS installation process, removing the need for manual post-installation setups. Key Benefits of Integration

    Silent Installation: The addon runs completely hidden with quiet switches (/SILENT or /VERYSILENT), requiring zero user interaction.

    Pre-configured Settings: Custom addons can include pre-set configurations, such as default video formats (NTSC/PAL) or burning speeds.

    Time Efficiency: Reduces post-deployment setup time for system administrators and power users who frequently burn video DVDs.

    Resource Optimization: Slipstreaming merges application files into the OS architecture, ensuring clean registry paths. Prerequisites

    Before starting, ensure you have the following components prepared:

    nLite Software: The deployment tool installed on your working computer.

    Windows Source Files: A copied directory of your Windows installation disc (e.g., Windows XP) on your hard drive.

    DVD Flick Addon Pack: The .cab or .7z addon file specific to DVD Flick, usually sourced from slipstreaming communities like WinCert or MSFN. Step-by-Step Integration Process

    Launch nLite: Open the application and select your Windows installation source folder.

    Select Tasks: Advance to the “Task Selection” screen and select Hotfixes, Addons and Update Packs. You may also select Bootable ISO if you are ready to create the final disc image.

    Import the Addon: Click the Insert button on the Hotfixes and Addons screen. Browse to the directory containing your DVD Flick nLite addon package and select it.

    Process the Image: Click Next to start the integration process. nLite will extract the addon, write the appropriate layout directives, and update the setup configuration files.

    Build the ISO: Once processing completes, navigate to the Bootable ISO section to burn the modified setup directly to media or save it as an ISO file for virtual machines. Important Technical Considerations

    Dependencies: DVD Flick requires the Microsoft .NET Framework to run. Ensure you also integrate the required .NET version addon into nLite, placing it higher in the processing list than DVD Flick.

    ImgBurn Bundling: DVD Flick relies heavily on ImgBurn for optical disc burning. Verify whether your chosen addon pack includes ImgBurn or if you need to slipstream it as a separate standalone addon.

    Architecture Constraints: nLite is primarily designed for legacy NT 5.x systems. Ensure your addon matches the architecture (x86 or x64) of your installation source. If you are building a custom deployment image, let me know: Which Windows operating system version you are modifying

    If you need the exact silent switches to package the addon yourself

    Whether you need to bundle ImgBurn or .NET Framework updates alongside it

    I can provide the specific configuration code or troubleshooting steps for your setup.

  • Affordable Stamp Pad Options for DIY Scrapbooking and Cardmaking

    Understanding Your Target Audience: The Key to Business Success

    A target audience is the specific group of consumers most likely to buy your product or service. Identifying this group allows businesses to direct their marketing resources efficiently. Without a clear target, marketing messages become diluted, expensive, and ineffective. Why Defining a Target Audience Matters

    Saves Money: Stops wasted spending on people who will never buy.

    Boosts Conversion: Delivers tailored messages that resonate deeply with specific needs.

    Guides Products: Informs future features based on actual user pain points.

    Beats Competitors: Reveals market niches that larger rivals overlook. Core Frameworks for Segmentation

    To find your audience, divide the broader market into actionable segments:

    Demographics: Age, gender, income, education, and occupation. Geographics: Country, region, city size, and climate.

    Psychographics: Values, interests, lifestyle, attitudes, and personality traits.

    Behavior: Buying habits, brand loyalty, product usage rates, and benefits sought. Step-by-Step Discovery Process

    Analyze Current Customers: Look for common characteristics among your highest-paying buyers.

    Conduct Market Research: Run surveys, interviews, and focus groups to find gaps.

    Study the Competition: See who your rivals target and find underserved audiences.

    Create Buyer Personas: Build fictional profiles representing your ideal customers.

    Test and Refine: Monitor campaign data continuously to adjust your audience profiles.

    Focusing on everyone means reaching no one. By defining your target audience, you build a foundation for relevant messaging, stronger customer relationships, and scalable business growth.

    To help tailor this article or take the next steps, tell me:

    What is the specific industry or product you are focusing on?

    Who is the intended reader of this article? (e.g., beginners, advanced marketers, small business owners) What is the desired length or format? I can adjust the tone and depth to match your exact goals.

  • Why Use OpenSearch for Confluence? Speed Up Knowledge Discovery

    Building a powerful OpenSearch index for Atlassian Confluence documentation allows enterprises to decouple resource-intensive search workloads from their core collaboration tools, deploy advanced AI architectures like Retrieval-Augmented Generation (RAG), and optimize overall query speeds.

    Whether you are using native integrations in Confluence Data Center or syncing Confluence Cloud data using ingestion pipelines, creating an optimized index requires the right architecture, pipeline structure, and tuning. 1. Ingestion Pipelines & Connections

    To pull data from Confluence into OpenSearch, you have three primary architectural choices depending on your infrastructure:

    Native Confluence Data Center External Search: Modern versions of Confluence Data Center natively support moving from a local Lucene index to a dedicated external OpenSearch cluster. Confluence handles the schema mappings automatically when you trigger a site reindex.

    OpenSearch Data Prepper: If you want precise control over the pipeline, use the native OpenSearch Data Prepper Confluence Source to directly extract data from specified spaces and pages.

    Amazon OpenSearch Ingestion (Managed): For cloud setups, the Amazon OpenSearch Ingestion Pipeline for Confluence continuously monitors and automatically synchronizes updates. It securely handles authentications via OAuth2 or API keys stored in AWS Secrets Manager. 2. Crafting the Perfect Index Schema

    A basic keyword search is rarely enough for internal documentation. A robust OpenSearch index schema should track text properties alongside essential metadata: Content Text: The raw text or clean HTML body of the page.

    Page Metadata: Fields for title, space_key, author, last_updated, and explicit labels to filter or boost specific content.

    Permissions Mapping: Storing user group access vectors inside the index document to prevent “search visibility leakage,” ensuring users only see search results they have explicit permission to view in Confluence.

    k-NN Vectors (Optional for AI Search): To power conversational bots or semantic search, implement a knn_vector field. Define it using an approximate nearest neighbor algorithm like HNSW (Hierarchical Navigable Small World) combined with an enterprise-grade similarity metric like cosinesimil or l2. 3. Configuring and Tuning for Scale

    To ensure search remains lightning-fast even as internal documentation scales to millions of pages, follow these optimization strategies: Configuring OpenSearch for Confluence

  • Ulinsoft Password Manager vs Competitors: Which Is Better?

    The Ultimate Guide to Setting Up Ulinsoft Password Manager Securing your digital identity is more important than ever. Ulinsoft Password Manager offers a powerful, encrypted solution to store your credentials, generate strong passwords, and sync them across all your devices. Follow this step-by-step guide to get your vault up and running smoothly. 1. Account Creation and Master Password Setup

    Your setup begins with creating a secure administrative account.

    Visit the official Ulinsoft website or download the official app. Click Sign Up and enter a valid email address.

    Create a Master Password. This is the single key to your entire vault.

    Make it a long, memorable phrase with numbers, capital letters, and symbols.

    Write down your Emergency Recovery Key and store it safely offline.

    Note: Ulinsoft cannot reset your Master Password if you lose it. 2. Installing Extensions and Mobile Apps

    Integration ensures your credentials autofill seamlessly across your platforms.

    Desktop Browsers: Download the Ulinsoft extension for Chrome, Firefox, Safari, or Edge.

    Mobile Devices: Install the app from the iOS App Store or Google Play Store.

    Log In: Open the installed app or extension and log in using your Master Password.

    Enable Biometrics: Turn on FaceID, TouchID, or fingerprint scanning for faster access. 3. Importing Existing Passwords

    Moving your existing data into Ulinsoft takes only a few clicks.

    Export your passwords from your current browser or old password manager as a .csv file. Open the Ulinsoft web vault interface. Navigate to Settings and select Import Data.

    Choose your previous manager or file format from the dropdown menu. Upload your .csv file to populate your vault instantly.

    Crucial Step: Permanently delete the unencrypted .csv file from your computer downloads. 4. Configuring Key Security Settings

    Fine-tune your vault behavior to maximize physical and digital protection.

    Autofill: Enable browser autofill options to log into websites with one click.

    Vault Timeout: Set your vault to lock automatically after 5 to 15 minutes of inactivity.

    Two-Factor Authentication (2FA): Go to security settings and link an authenticator app.

    Password Generator: Customize default rules (e.g., 16 characters minimum, no ambiguous symbols). 5. Organizing and Maintaining Your Vault Keep your digital workspace clean for long-term efficiency.

    Folders and Tags: Categorize logins into “Work,” “Personal,” “Finance,” or “Streaming.”

    Secure Notes: Use this built-in feature to save Wi-Fi passwords, PINs, and software keys.

    Security Audit: Run the built-in health check to identify weak, reused, or compromised passwords.

    Update Habits: Let Ulinsoft replace your old, weak passwords with unique strings over time.

    To tailor this guide for your specific deployment, could you let me know: Which operating system and primary browser do you use most?

  • Live Suit Pack

    The phrase “Unboxing the Live Suit Pack: Is It Worth the Price?” refers to an evaluation of the LiveSuit Pack, a critical Android flashing and firmware tool designed specifically for devices running on Allwinner chipsets (such as the A10, A13, A20, and A31 series). Because it is a completely free, open-source utility, any review asking if it is “worth the price” is essentially a breakdown of whether the tool is worth your time, effort, and the inherent risks associated with flashing custom or stock ROMs onto older tablets and hardware.

    The LiveSuit Pack is a vital tool for tech hobbyists, and it offers distinct advantages alongside notable risks. What is the LiveSuit Pack?

    The LiveSuit Pack is a lightweight Windows, Mac, and Linux utility used to force-install stock firmware packaged in .img formats. It is primarily deployed when an Allwinner device is completely bricked, stuck in a boot loop, or unresponsive to standard over-the-air updates. Essential Features

    Upgrade Wizard: Features a guided setup mode that takes users step-by-step through loading new firmware images.

    Mandatory Formatting: Clears corrupted partitions on the device’s main flash memory during the installation to guarantee a fresh OS install.

    Cross-Platform Delivery: Distributed as an executable package (LiveSuitPack_1.11.exe) that automatically deploys the necessary USB connection drivers onto your operating system. Pros: Why It Is “Worth It”

  • AceMoney Tutorial: Master Your Personal Finances in 5 Steps

    YNAB (You Need A Budget), Quicken, Monarch Money, and PocketSmith are the top AceMoney alternatives that can streamline and simplify your financial life.

    While AceMoney has long been a reliable desktop tool for tracking expenses and managing portfolios, its traditional interface can feel outdated in today’s fast-paced digital world. Modern alternatives offer automated bank syncing, cross-device accessibility, and advanced forecasting to help you manage your money with far less effort.

    The best AceMoney alternatives are broken down below by category to help you find your perfect financial match. Best for Proactive Budgeting: YNAB (You Need A Budget)

    YNAB uses a digital version of the traditional paper envelope system, forcing you to allocate every single dollar you earn to a specific category.

    The Good: Excellent at breaking the paycheck-to-paycheck cycle and saving money.

    The Upgrade: Unlike AceMoney’s manual entries, YNAB features seamless, automated bank syncing and real-time mobile apps.

    The Catch: It requires an active, hands-on approach to budgeting and carries a premium subscription fee. Best for Desktop Traditionalists: Quicken Classic

    If you love AceMoney because it lives on your hard drive and handles deep investment tracking, Quicken Classic is its closest direct relative.

    The Good: Incredibly robust investment tracking, tax reporting, and property management tools.

    The Upgrade: It offers the option of local desktop storage combined with modern web and mobile companion apps.

    The Catch: The interface is packed with features, which can create a steep learning curve for beginners. Best for Modern Automation: Monarch Money

    Built by one of the original creators of Mint, Monarch Money is a sleek, all-in-one financial dashboard designed for the modern web.

    The Good: Beautiful, customizable dashboards, clean transaction tagging, and excellent collaboration tools for couples.

    The Upgrade: It replaces AceMoney’s older interface with a highly intuitive design and fast, multi-bank data syncing.

    The Catch: It is a recurring subscription service with no free tier available. Best for Future Forecasting: PocketSmith

    PocketSmith acts like a time machine for your bank account, using your current spending habits to project your financial future up to 30 years out.

    The Good: Unmatched calendar-based scheduling for upcoming bills and long-term cash flow forecasting.

    The Upgrade: It easily handles complex multi-currency accounts, outperforming AceMoney’s foreign exchange tracking.

    The Catch: The advanced forecasting tools require some time to set up and understand properly. How to Choose Your Next Financial Tool

    Choose YNAB if you want to actively change your spending behavior.

    Choose Quicken if you want to keep a desktop setup with heavy investment tracking.

    Choose Monarch Money if you want a beautiful, automated dashboard to share with a partner.

    Choose PocketSmith if you want to model future financial scenarios and manage multiple currencies.

    Moving away from a familiar tool like AceMoney can feel daunting, but migrating your data to a modern platform will ultimately save you hours of manual tracking every month. If you want to narrow this down, let me know: Do you prefer a desktop program or a mobile/web app?

    Is your main focus daily budgeting or investment portfolio tracking?

    I can give you a specific recommendation based on your workflow.

  • primary goal

    Mastering Checksum Control for Absolute Data Integrity In the digital world, data is constantly in motion. Every time you download a file, transfer an image, or backup a database, billions of bits travel across networks and storage drives. During this journey, physical interference, network drops, or hardware degradation can silently flip a 0 to a 1. This hidden damage is known as silent data corruption.

    To prevent this corruption from ruining critical systems, engineers rely on checksum control. A checksum acts as a digital fingerprint for data, guaranteeing that what you sent is exactly what was received. Mastering this concept is fundamental to maintaining absolute data integrity. What is a Checksum?

    A checksum is a small, fixed-size datum derived from a block of digital data for the purpose of detecting errors that may have been introduced during its transmission or storage.

    Think of it like a safety seal on a jar. Before the data leaves the source, a mathematical algorithm processes the entire file and generates a short string of characters (the checksum). When the destination system receives the file, it runs the exact same algorithm on the data. If the new checksum matches the original, the data is pristine. If even a single letter or number differs, the data has been compromised. The Spectrum of Checksum Algorithms

    Not all checksums are created equal. Depending on your specific use case, you must choose between speed, error-detection capabilities, or cryptographic security. 1. Parity Bits and Sums (Basic Detection)

    How they work: The simplest form of checksum involves adding up the numerical values of the data bytes.

    Use case: Highly efficient but weak. They can easily fail if multiple errors cancel each other out. 2. Cyclic Redundancy Checks (Cyclic Integrity)

    How they work: CRCs use polynomial division to detect common transmission errors. Algorithms like CRC32 are highly optimized for hardware.

    Use case: Perfect for network protocols (like Ethernet and Wi-Fi) and storage systems (like ZIP files and hard drives) where speed is critical. 3. Cryptographic Hash Functions (Absolute Security)

    How they work: Advanced algorithms like SHA-256 or SHA-3 convert data into a highly unique string. They possess the “avalanche effect,” meaning a change to a single bit in a terabyte file completely alters the resulting hash.

    Use case: Essential for software distribution, blockchain ledgers, password storage, and identifying malicious tampering. Implementing Robust Checksum Control

    Achieving absolute data integrity requires integrating checksum validation into every stage of your data pipeline. Automate the Validation Process

    Manual verification is prone to human error. Implement automated scripts or utilize built-in toolchains to calculate and verify hashes immediately after file transfers, API payloads, or database replication tasks. Leverage Modern File Systems

    Do not rely solely on application-layer checks. Modern file systems like ZFS and Btrfs feature native, end-to-end checksum control. They automatically calculate checksums for all written data and continuously scrub the disks to detect and automatically repair corrupted blocks. Combine Speed with Security

    In high-throughput environments, running a heavy cryptographic hash like SHA-256 on every minor transaction can cause severe performance bottlenecks. Use fast CRC32 checks for real-time network transfers, but enforce SHA-256 verification for long-term storage archiving and security checkpoints. Conclusion

    Data integrity is the bedrock of digital trust. As data volumes grow exponentially, the risk of corruption increases alongside it. By understanding the strengths of different mathematical algorithms and embedding automated checksum controls into your infrastructure, you can confidently eliminate silent data corruption and ensure absolute data integrity.

    To help tailor this content further, please let me know your specific focus:

    Should we focus more on network engineering or long-term cloud storage?