Blog

  • phpSHIELD PHP Encoder: How to License Your Source Code

    phpSHIELD PHP Encoder: Complete Review and Features Guide Protecting source code is a major priority for web developers and software vendors. phpSHIELD is a dedicated tool designed to encrypt and encode PHP scripts. It prevents unauthorized copying, modifications, and intellectual property theft. This review covers its core features, performance, and usability. What is phpSHIELD?

    phpSHIELD is a commercial PHP encoder that converts readable PHP source code into encrypted bytecode. Bytecode Compilation: It strips comments and structures.

    Loader-Based Execution: It requires a custom server extension. Obfuscation: It hides logic from reverse-engineering. Key Features 1. Robust Source Code Encryption

    phpSHIELD does not just obfuscate variable names; it completely encrypts the file contents. The resulting files look like random characters to human readers and standard text editors, making it impossible to reverse-engineer the logic easily. 2. Time-Limiting and Expiry Controls You can set explicit expiration dates on encoded scripts. Trial Versions: Create time-locked evaluation software.

    Lease Models: Automatically disable scripts if a subscription ends.

    Date Checks: Execution stops immediately after the specified date. 3. IP and Domain Locking

    Restrict where your software can run by locking the bytecode to specific environments. Domain Restrictions: Lock scripts to a specific web domain.

    IP Binding: Prevent execution outside authorized server IPs.

    Server Verification: Blocks deployment on unauthorized client servers. 4. Native Loaders

    To run phpSHIELD-encoded files, the hosting server must install a lightweight, free phpSHIELD loader extension. Loaders are available for multiple operating systems, including Linux, Windows, and FreeBSD, supporting various PHP versions. Performance and Usability Developer Interface

    The software provides both a graphical user interface (GUI) and a command-line interface (CLI). The GUI is straightforward, allowing developers to select project folders, choose encryption settings, and export encoded files with a few clicks. The CLI is ideal for integrating into automated build scripts and continuous integration (CI) pipelines. Execution Overhead

    Because the code is pre-compiled into bytecode, the server saves time on parsing raw PHP syntax. While the loader adds a tiny decryption overhead at runtime, the overall performance impact is negligible for most web applications. Pros and Cons Simple and intuitive user interface. Strong licensing features (IP, domain, and time locks). Free loader distribution for clients. Multi-platform support. Requires administrative access to install server loaders.

    Lags behind slightly on supporting the absolute latest PHP major releases immediately.

    Lacks advanced optimization features found in enterprise competitors.

    phpSHIELD is a reliable, mid-tier solution for developers looking to protect their PHP intellectual property without breaking the bank. Its licensing and locking mechanics make it a great fit for selling self-hosted web applications and managing trial versions. However, developers working on cutting-edge PHP environments should verify version compatibility before purchasing.

    To help me tailor this review or add more specific sections, please let me know: What specific PHP version are you targeting?

    Are you comparing this against competing tools like IonCube or Zend Guard?

  • Building Custom Extensions Using the Apache OpenOffice SDK

    Building Custom Extensions Using the Apache OpenOffice SDK Apache OpenOffice remains a trusted, open-source office suite used by millions worldwide. While its core applications—Writer, Calc, and Impress—offer robust functionality, specialized workflows often require tailored features. The Apache OpenOffice Software Development Kit (SDK) allows developers to build custom extensions that integrate seamlessly into the office suite.

    This guide covers the core concepts, development environment setup, and essential steps to build, package, and deploy a custom OpenOffice extension. Understanding the Architecture: UNO

    At the heart of Apache OpenOffice development is the Universal Network Objects (UNO) component model. UNO is the interface-based architecture that enables communication between different programming languages and the OpenOffice application core.

    To build an extension, you must interact with UNO objects. The SDK supports multiple languages, including: Java: Highly portable and heavily supported by SDK tooling.

    C++: Offers maximum performance but requires platform-specific compilation.

    Python: Excellent for rapid prototyping and simpler automation tasks.

    UNO uses an Interface Definition Language (IDL) to define data types and structures, ensuring that your extension interacts predictably with the office suite regardless of the language you choose. Setting Up the Development Environment

    Before writing code, you need to configure your workstation.

    Install Apache OpenOffice: Download and install the standard user version of the software.

    Install the OpenOffice SDK: Ensure the SDK version matches your installed OpenOffice version.

    Configure a Compatible JDK: If you are developing in Java, install a supported Java Development Kit (typically JDK 8 or 11, depending on your OpenOffice version’s compatibility).

    Run the SDK Configuration Script: Run the setsdkenv_windows or setsdkenv_unix script located in the SDK installation directory. This script maps the necessary environment variables, path variables, and links to your OpenOffice binaries. Step-by-Step Extension Development

    A standard OpenOffice extension is packaged as an OXT file, which is essentially a ZIP archive containing compiled code, XML configuration files, and asset resources. 1. Define the Extension Functionality

    Determine how your extension interacts with the user. Will it add a new menu item, a toolbar button, or a custom macro function in Calc? For this example, we will focus on a service that adds a custom menu option to Writer. 2. Write the Component Code

    Using Java or Python, implement the required UNO interfaces. A basic component must implement the com.sun.star.lang.XTypeProvider and com.sun.star.lang.XServiceInfo interfaces. These interfaces tell OpenOffice what your extension is named and what services it provides.

    // Example snippet of a Java-based UNO component initialization import com.sun.star.uno.XComponentContext; import com.sun.star.lib.uno.helper.ComponentBase; public final class MyCustomExtension extends ComponentBase implements com.sun.star.lang.XServiceInfo { private final XComponentContext xContext; public MyCustomExtension(XComponentContext context) { this.xContext = context; } // Implement required UNO interface methods here } Use code with caution. 3. Create the Manifest and Configuration Files

    OpenOffice relies on XML files within the package to understand how to register and display your extension:

    description.xml: Contains metadata about your extension, including its unique identifier, version, developer name, and minimal software requirements.

    Addons.xcu: Configures user interface elements. This file specifies where your custom menus, toolbars, or status bar items should appear in the office layout.

    manifest.xml: Located inside a META-INF folder, this file acts as an index for OpenOffice, telling it exactly where to find the compiled code and configuration files inside the OXT archive. Packaging and Deployment

    Once your code is written and your XML configuration files are prepared, you are ready to package the extension.

    Structure the Directory: Organize your files into a clean directory structure containing your compiled binary/jar files, the META-INF/manifest.xml file, description.xml, and any UI configuration files.

    Zip the Contents: Compress the contents of the directory into a standard .zip file.

    Rename the Extension: Change the file extension from .zip to .oxt.

    Install via Extension Manager: Open Apache OpenOffice, navigate to Tools > Extension Manager, click Add, and select your .oxt file. Restart OpenOffice to initialize your new custom extension. Best Practices for SDK Development

    Use Unique Namespaces: Always use reverse-domain naming conventions (e.g., org.example.myextension) for your service names to avoid naming collisions with other plugins.

    Handle Memory Lifecycle Explicitly: If writing extensions in C++, pay close attention to UNO reference counting to avoid memory leaks or sudden application crashes.

    Test Across Modules: If your extension targets Writer, verify that it does not accidentally interfere with Calc or Impress environment behaviors.

    Building custom extensions with the Apache OpenOffice SDK unlocks endless possibilities for workplace automation, specialized data processing, and custom corporate branding, extending the lifespan and utility of a classic productivity suite. If you want to refine this article, let me know:

    What target audience you are writing for (e.g., beginners, enterprise developers)

    If you want to focus heavily on a specific language like Java or Python

    If you need a complete code example for a specific task like adding a button I can adjust the technical depth based on your preferences.

  • TL-WR841ND Easy Setup Assistant Not Working? Try This

    TL-WR841ND Easy Setup Assistant: Complete Download & Installation Guide

    Setting up a TP-Link TL-WR841ND router does not require advanced technical skills. The TP-Link Easy Setup Assistant software guides you through the entire installation process step by step. This guide covers how to download, install, and use the software to get your internet connection up and running quickly. Step 1: Download the Easy Setup Assistant

    Before starting, you must get the correct software utility for your hardware version.

    Check Your Hardware Version: Look at the sticker on the bottom of your TL-WR841ND router. You will see text like “Ver: 8.0” or “V9”.

    Visit the Support Page: Go to the official TP-Link download center.

    Search for TL-WR841ND: Enter your model number in the search bar.

    Select Your Hardware Version: Choose the exact version that matches your router’s sticker. Selecting the wrong version may cause setup errors.

    Download the Utility: Scroll down to the “Utility” tab and download the Easy Setup Assistant zip file to your computer. Step 2: Physical Hardware Connection

    Connect your devices physically before running the software.

    Connect your modem to the blue WAN/Internet port on the router using an Ethernet cable.

    Connect your computer to one of the four orange LAN ports on the router using a second Ethernet cable.

    Plug the power adapter into the router and press the Power ON/OFF button.

    Verify that the Power, WLAN, and connected port LEDs light up on the front panel. Step 3: Run the Easy Setup Assistant

    Once your hardware is connected, you can start the configuration software.

    Extract the Files: Locate the downloaded .zip file on your computer and extract its contents.

    Launch the Application: Double-click the EasySetupAssistant.exe file to open the program.

    Choose Your Language: Select your preferred language from the drop-down menu and click Start. Step 4: Follow the On-Screen Configuration

    The software will now test your connections and guide you through the settings. 1. Connection Check

    The tool will automatically verify your physical network adapters and status. If it fails, double-check that your Ethernet cables are securely plugged in. 2. Select Connection Type

    The assistant will attempt to detect your internet connection type.

    Dynamic IP: Most common for cable internet. No login required.

    PPPoE: Common for DSL internet. You will need to type in the username and password provided by your Internet Service Provider (ISP). 3. Configure Wireless Settings Create your local Wi-Fi network details:

    Wireless Network Name (SSID): Type a unique name for your home Wi-Fi network.

    Security Options: Choose WPA2-PSK (AES) for the strongest security.

    Wireless Password: Create a secure password of at least 8 characters to protect your network from unauthorized users. Step 5: Complete and Confirm Setup

    Review your settings on the summary screen. Click Next to apply the configuration to the router. The software will write the settings, restart the router’s wireless radio, and perform a final internet connectivity test. Once you see the success message, you can close the assistant and connect your smartphones, laptops, and other wireless devices using your new Wi-Fi password.

    If you run into any trouble during this process, I can help you troubleshoot. Please let me know:

    What operating system your computer runs (Windows 10, 11, macOS?)

    Which hardware version (V1 to V14) is printed on your router’s sticker?

    The exact error message or step where the installer gets stuck.

  • How to Master Jadex in 5 Simple Steps

    To master Jadex BDIV3, you must understand its blend of Object-Oriented Java programming and the Belief-Desire-Intention (BDI) AI architecture. Jadex allows you to build intelligent, autonomous, and pro-active multi-agent distributed systems.

    The following 5-step roadmap will take you from a basic setup to mastering intelligent agent design using the official developer patterns. Step 1: Set Up the Jadex Platform & Environment

    Before writing code, establish a clean development environment using standard Java build tools.

    jadex/docs/getting-started/getting-started.md at master · actoron/jadex

  • content format

    How to Build Your Own DIY Arduino Binary Clock Telling time on a traditional clock is standard, but reading it in binary is a statement. A binary clock displays time using the base-2 numeral system, representing hours, minutes, and seconds through a grid of glowing LEDs. Building one yourself is a classic maker project. It combines introductory electronics, simple coding, and custom craftsmanship.

    Here is a step-by-step guide to building your own Arduino-powered binary clock. The Logic: How a Binary Clock Works

    Before diving into the hardware, you need to understand how to read the display. Most DIY binary clocks use a BCD (Binary Coded Decimal) format.

    In a BCD clock, each digit of standard time is split into its own vertical column:

    Columns: You will have six columns total (two for hours, two for minutes, two for seconds).

    Rows: Each row represents a binary value: 1, 2, 4, and 8 (from bottom to top).

    To read the time, you simply add up the values of the lit LEDs in each column. For example, if the tens-of-minutes column has the “2” LED lit, and the ones-of-minutes column has the “4” and “1” LEDs lit, the current minute is 25. Step 1: Gather Your Components You will need the following parts for this project:

    Microcontroller: Arduino Uno, Nano, or Pro Micro. (The Nano is ideal for keeping the final build compact).

    Real-Time Clock (RTC) Module: DS3231. This module ensures your clock keeps accurate time even if the Arduino loses power.

    LEDs: 17 or 20 LEDs (depending on whether you include seconds).

    Resistors: 220-ohm resistors (one for each LED to prevent burning them out).

    Prototyping Board: A breadboard for testing, and a soldering perfboard for the final build.

    Miscellaneous: Jumper wires, a 5V power supply, and two tactile push-buttons (to manually set the hours and minutes). Step 2: Assemble the Circuit

    It is best to prototype the circuit on a breadboard before soldering anything permanently.

    Connect the RTC Module: The DS3231 uses an I2C interface. Connect the VCC to the Arduino 5V, GND to GND, SDA to Analog Pin 4 (A4), and SCL to Analog Pin 5 (A5).

    Wire the LEDs: Arrange your LEDs into a grid matching the BCD format. Connect the longer positive leg (anode) of each LED to a separate digital output pin on the Arduino through a 220-ohm resistor. Connect all the shorter negative legs (cathodes) together to the common Ground (GND) rail.

    Add the Buttons: Connect two push-buttons to digital pins (e.g., D2 and D3) using internal pull-up resistors. These will allow you to adjust the time. Step 3: Write and Upload the Code

    To code this project, you will need to install the RTClib library via the Arduino IDE Library Manager to easily communicate with your clock module. The logic of your code will follow a simple loop:

    Read the current time (hours, minutes, seconds) from the DS3231 RTC module.

    Break down each time component into individual digits (e.g., separating 14 hours into ‘1’ and ‘4’).

    Convert those individual digits into binary using bitwise operators or standard math operations.

    Use digitalWrite() to turn the corresponding Arduino pins HIGH or LOW based on the binary outcome.

    Check if the time-setting buttons are pressed, and update the RTC module accordingly. Step 4: Build a Custom Enclosure

    The final step is giving your clock a polished look. A messy web of wires and bare LEDs can be hard to look at, so an enclosure is essential.

    3D Printing: If you have access to a 3D printer, design a sleek tabletop box with a front grid to separate the light from each LED.

    Woodwork: A small wooden shadow box with a dark acrylic faceplate offers a beautiful, premium retro-modern aesthetic.

    Light Diffusers: Place a sheet of frosted plastic or parchment paper between the LEDs and the front face of your box. This diffuses the harsh point-lights into soft, glowing circles that are much easier to read. Conclusion

    Building a DIY Arduino binary clock is incredibly rewarding. It provides practical experience with I2C communication, binary math, and multiplexing if you choose to expand the design. Once finished, you will have a unique, custom-made conversation piece sitting on your desk—one that proves you literally know how to read the code of time.

    If you would like to proceed with building this, let me know: Which Arduino board you plan to use?

    I can provide the exact code or circuit guide tailored to your components.

  • Is Windows Vista Basic Still Usable Today?

    Fixing Common Performance Issues in Vista Basic Windows Vista Home Basic was designed for entry-level PCs. Because it lacks the resource-heavy Aero glass interface, it should theoretically run lighter than higher-end Vista editions. However, due to its strict 32-bit limitations (in most standard setups), rigid hardware management, and aging architecture, it frequently suffers from severe performance degradation.

    If your Vista Basic machine has slowed to a crawl, the bottleneck is usually manageable. Here is how to systematically diagnose and resolve the most common performance issues. Scenario A: High Memory and Disk Bottlenecks

    Vista Basic often runs on legacy systems with 1GB to 2GB of RAM. Vista’s aggressive background caching can easily saturate these limited resources, causing constant hard drive thrashing (paging). 1. Disable Windows Search Indexing

    The indexing service constantly scans files in the background. On older mechanical hard drives, this severely cripples system responsiveness.

    Open Computer, right-click your main drive (C:), and select Properties. Uncheck “Index this drive for faster searching”.

    Select “Apply changes to subfolders and files” and click OK. Ignore any “Access Denied” warnings by clicking “Ignore All”. 2. Configure SuperFetch and Windows Defender

    SuperFetch preloads frequently used applications into RAM. On systems with less than 2GB of RAM, this causes more harm than good by starving active applications of memory. Press Windows Key + R, type services.msc, and press Enter. Locate SuperFetch in the list.

    Right-click it, select Properties, change the Startup type to Disabled, and click Stop.

    Repeat this process for Windows Defender if you already use a lightweight, third-party antivirus tool, as running concurrent real-time scanners causes severe disk collision. Scenario B: Visual and Interface Overhead

    While Vista Basic lacks the premium Aero glass graphics, it still utilizes the Desktop Window Manager (DWM) to render windows, animate menus, and draw shadows, which strains older integrated graphics chips. 1. Switch to Windows Classic Theme

    Reverting to a legacy visual theme strips away unnecessary graphical layers, freeing up both video RAM and CPU cycles.

    Right-click an empty space on the desktop and choose Personalize. Click on Window Color and Appearance.

    Click the link at the bottom for “Open classic appearance properties for more color options”.

    Change the color scheme to Windows Standard or Windows Classic, then click Apply. 2. Minimize Visual Effects Press Windows Key + R, type sysdm.cpl, and press Enter. Click the Advanced tab. Under the Performance section, click Settings. Select the radio button for “Adjust for best performance”.

    (Optional) Check “Smooth edges of screen fonts” to keep text readable without sacrificing speed. Scenario C: Startup Bloat and Background Services

    Long boot times and delayed desktop responsiveness are typically caused by third-party applications embedding themselves into the system startup sequence. 1. Clean Boot via MSConfig Press Windows Key + R, type msconfig, and click OK. Navigate to the Startup tab.

    Uncheck unnecessary software such as quick-launchers, update assistants, and media players. Leave security software intact. Move to the Services tab.

    Check the box that says “Hide all Microsoft services” (this prevents you from breaking the OS).

    Disable the remaining third-party services that you do not require running ⁄7. Click Apply and restart the computer. Scenario D: Hardware Bottlenecks & Upgrades

    Software optimization can only go so far if the underlying hardware fails to meet modern operational demands.

    Maximize RAM: Vista Basic 32-bit supports up to 4GB of RAM. Upgrading from 1GB or 2GB to the 4GB limit is the single most effective hardware upgrade you can make.

    Deploy ReadyBoost: If opening the computer casing to add RAM is not an option, insert a high-speed USB flash drive. Right-click the drive in Computer, go to Properties, select the ReadyBoost tab, and dedicate the drive space to system caching.

    Solid State Drive (SSD): Replacing an aging mechanical hard drive with a SATA SSD will instantly eliminate disk bottlenecks, even over older SATA I/II interfaces.

    To help tailor these optimization steps further, please let me know:

    What are the exact hardware specifications of the machine (specifically the CPU and amount of RAM)?

    What is the primary bottleneck symptom (e.g., slow boot times, freezing when opening browsers, or constant hard drive noise)?

  • target audience

    A Lead HTML Expert & Design Systems Specialist is a senior, dual-role professional who bridges the gap between engineering and user interface (UI) design. They ensure code scalability, semantic markup, and visual consistency across large-scale digital products. Core Responsibilities

    Architecting Design Systems: They design, build, and maintain centralized libraries of reusable HTML, CSS, and component tokens.

    Enforcing Semantic HTML: They write clean, modern, and SEO-friendly markup that establishes proper page hierarchy.

    Guaranteeing Digital Accessibility: They ensure all components strictly comply with WCAG 2.2 AA and AAA standards using proper ARIA attributes.

    Governing Component Libraries: They establish coding guidelines and review pull requests to keep UI code consistent across different engineering teams.

    Optimizing Browser Performance: They minimize rendering blockages, reduce CSS footprint, and improve core web vitals. Essential Skill Set

    Advanced Code Implementation: Mastery of native HTML5, modern CSS (Grid, Flexbox, Container Queries), and vanilla JavaScript.

    Design Tool Fluency: Deep familiarity with platforms like Figma, Adobe XD, or Sketch to translate design tokens into code.

    Tooling & Tokens: Proficiency with design token management tools like Style Dictionary and documentation platforms like Storybook.

    Cross-Functional Leadership: Ability to translate technical constraints to designers and design intentions to software engineers. Why This Role Matters

    Without this specialist, large companies often face “UI debt,” where different parts of a website look and behave differently. By unifying the frontend architecture, they help product teams ship new features faster while keeping the brand identity pristine and legally compliant with global accessibility laws.

    To help me tailor this information, could you tell me a bit more about your current goal?

    Are you looking to hire for this position and need a job description?

    Are you a developer aiming to advance your career into this specialized role?

  • Ace Stream Media

    How to Install and Setup Ace Stream Media on Windows and Android

    Ace Stream Media is a multimedia platform based on peer-to-peer (P2P) BitTorrent technology. Instead of downloading traditional torrent files, it allows you to stream high-definition live broadcasts and video content instantly using shared network bandwidth. Part 1: How to Install and Setup Ace Stream on Windows

    The Windows setup installs a complete software package, including the background streaming engine and Ace Player (a customized version of VLC Media Player). Step 1: Download and Installation

    Visit the Ace Stream Wiki or the official Ace Stream Home Page to download the latest Windows installer.

    Double-click the downloaded executable file (.exe) to launch the setup wizard.

    Follow the on-screen instructions, choose your preferred installation directory, and keep the default component selections checked.

    Click Install, then click Finish once the process completes. Step 2: Initial Setup & Configuration

    After installation, locate the Ace Stream logo in your Windows system tray (bottom-right corner of your taskbar).

    Right-click the system tray icon and select Options or Settings.

    Set your VOD cache size and Live cache size (allocating 2048 MB or higher is recommended for smooth HD streaming).

    Set your Upload Limit to roughly 70–80% of your total internet upload bandwidth to prevent the app from choking your network connections. Click Apply and then OK to save your configurations. Step 3: Playing Content

  • YouTube Video Downloader

    Most free online YouTube downloaders are unsafe because they monetize through malicious ads, hidden redirects, and bundled malware. To download video or audio safely, you should bypass shady, ad-heavy websites and use trusted open-source tools or verified desktop software. Major Safety Risks of Traditional Downloaders

    Malware and Adware: Free browser-based converters often trick you into clicking fake “Download” buttons that inject background scripts or malicious files onto your device.

    Data Tracking: Many unauthorized tools lack HTTPS security, inject third-party code, or ask for unnecessary account permissions and logins to track your browser activity.

    Terms of Service Violations: Downloading copyrighted content violates YouTube’s Terms of Service and can lead to account penalties or copyright claims. Top Secure Options (Verified Clean)

    Instead of searching for random conversion sites, security experts and community reviews recommend the following verified tools:

  • How to Use an Anonymizer Privacy Analyzer

    Anonymizer Privacy Analyzer: Protect Your Data Today Every click, search, and purchase you make leaves a permanent digital footprint. Data brokers, advertisers, and cybercriminals constantly track this information to build a highly detailed profile of your personal life. To fight back against this continuous surveillance, you need to know exactly what data you are exposing. The Anonymizer Privacy Analyzer is designed to give you that exact visibility and help you reclaim your digital sovereignty. The Growing Threat to Your Personal Data

    Your web browser constantly leaks information without your explicit consent. Every time you visit a website, you expose your IP address, geographic location, operating system, and hardware configuration.

    Advertisers use a technique called “browser fingerprinting” to combine these unique data points. This creates a digital tracking ID that follows you across the internet, even if you clear your cookies or use private browsing modes. Over time, this data is sold to third parties, which can impact everything from the advertisements you see to your eligibility for loans and insurance policies. What is the Anonymizer Privacy Analyzer?

    The Anonymizer Privacy Analyzer is a comprehensive security tool built to audit your digital footprint in real time. Instead of guessing what tracking systems can see, this tool runs a deep scan on your connection to show you exactly what information your browser is broadcasting to the world. Key Assessment Features

    IP and Location Leak Tracking: Verifies if your true IP address and geographic location are visible, or if your VPN is successfully masking them.

    DNS Leak Detection: Checks if your internet service provider (ISP) can secretly log the websites you visit, even while you use an encrypted connection.

    Fingerprint Analysis: Measures how unique your browser configuration appears to third-party tracking scripts.

    WebRTC Vulnerability Testing: Evaluates whether underlying browser communication protocols are accidentally exposing your local network details. How to Secure Your Digital Footprint Today

    Once the analyzer identifies the gaps in your defense, you must take immediate action to seal them.

    First, deploy a trusted, no-logs Virtual Private Network (VPN) to encrypt your traffic and hide your IP address. Second, switch to a privacy-focused web browser that automatically blocks fingerprinting scripts and cross-site tracking by default. Finally, install open-source privacy extensions to block malicious scripts and advertisements from loading in the background. Take control of your information today by auditing your connection and blocking trackers before they block your right to privacy. If you want to customize this article, let me know:

    What is the specific target audience (tech-savvy users or beginners)? What is the desired word count?