# Ninniku IT Hub > Taiwan's leading iDempiere ERP consultancy. Open-source ERP solutions, IoT integration, and technical training since 2018. Ninniku IT Hub specializes in iDempiere ERP implementation, customization, and training. We provide hands-on technical guides covering ERP architecture, OSGi plugin development, REST API integration, IoT/Arduino connectivity, and Linux server administration. Content is available in Traditional Chinese (default), English (?lang=en), and Japanese (?lang=ja). Add `?lang=en` or `?lang=ja` to any URL for translated content. ## Expertise - **iDempiere ERP**: Implementation, customization, OSGi plugins, JasperReports, workflow engine, financial management - **IoT Integration**: Arduino, Raspberry Pi, sensor connectivity with ERP systems - **Linux Administration**: Ubuntu server, Nginx, PostgreSQL, system hardening - **Technical Training**: ERP consultant certification courses, hands-on tutorials ## Key Pages - [iDempiere ERP Consultant Training](https://www.ninniku.tw/course/) - [Arduino IoT & ERP Integration Course](https://www.ninniku.tw/arduino-for-iot-and-erp-integration/) - [ERP Consultant Certification](https://www.ninniku.tw/certificate-of-erp-consultant/) - [Technical Support](https://www.ninniku.tw/support/) - [Plug-ins (Taiwan)](https://www.ninniku.tw/plugins/) --- ## iDempiere ERP Articles ### [iDempiere Learn: 47 Free Lessons](https://www.ninniku.tw/idempiere-learn-47-free-lessons/) A comprehensive overview of the free 47-lesson iDempiere learning path at idempiere.dev/learn. The curriculum spans four skill levels from beginner to advanced, covering installation, Application Dictionary, OSGi plugin development, JasperReports, workflow engine, and core source contribution. Ideal for anyone wanting a structured roadmap to master iDempiere ERP. ### [How to Add Custom Toolbar Buttons](https://www.ninniku.tw/idempiere-technical-guide-how-to-add-custom-toolbar-buttons/) A step-by-step technical guide for adding custom buttons to iDempiere window toolbars using OSGi Declarative Services. Covers the full architecture from AD_ToolBarButton database configuration through IAction service registration, with a practical "Print Voucher" button implementation example. Includes code samples, component XML, and icon loading patterns. ### [Real-Time Updates with OSGi EventAdmin](https://www.ninniku.tw/idempiere-technical-achieving-sub-second-real-time-updates-with-osgi-eventadmin/) Explains how to solve the server push delay problem in iDempiere by migrating from ZK EventQueues to OSGi EventAdmin for sub-second real-time cross-session updates. Demonstrates a manufacturing KPI dashboard use case where barcode scans on industrial tablets instantly reflect on a 65-inch monitoring screen. Covers the technical limitations of ZK's default polling and the EventAdmin-based solution architecture. ### [REST API Integration Guide](https://www.ninniku.tw/integrating-rest-api-with-idempiere-12-a-comprehensive-installation-guide/) A complete installation and configuration guide for the bxservice/idempiere-rest plugin on iDempiere 12. Covers JWT authentication, OIDC integration (Keycloak/Amazon Cognito), full CRUD operations, process/report execution, REST View abstraction, and auto-generated OpenAPI 3.0 (Swagger) documentation. Includes prerequisites, step-by-step build instructions, and environment setup. ### [ZK Web Push: Community vs Enterprise](https://www.ninniku.tw/zk-framework-web-push-community-vs-enterprise-edition/) An in-depth comparison of ZK Framework's server push capabilities between Community Edition (CE) and Enterprise Edition (EE). Analyzes the technical differences in Comet-based long polling vs WebSocket implementations, performance implications for iDempiere ERP, and guidance on whether the EE upgrade is worthwhile for real-time dashboard and notification use cases. ### [Dashboard Gadgets Implementation](https://www.ninniku.tw/tech-blog-post-mastering-idempiere-dashboard-gadgets-implementation/) Explains how to create custom dashboard gadgets in iDempiere ERP, focusing on the critical requirement of using Fragment projects for Gadget URI resolution. Covers why standard OSGi bundles fail to load ZUL files in the ZK web context, how the ~./ prefix maps to the web context root, and best practices for fragment bundle configuration to extend the UI. ### [iDempiere as Systemd Service](https://www.ninniku.tw/ensuring-erp-high-availability-setting-up-idempiere-as-a-systemd-service-on-ubuntu/) A practical guide to configuring iDempiere as a systemd service on Ubuntu for 24/7 high availability. Covers automatic startup on boot, automatic crash recovery, PostgreSQL dependency management, and proper service file configuration. Ensures your ERP system runs reliably without manual intervention. ### [E-Invoice Integration Guide](https://www.ninniku.tw/idempiere-einvoice-implementation/) A detailed technical architecture guide for integrating iDempiere ERP with Taiwan's government Turnkey Server for electronic invoice compliance. Covers the complete data flow cycle of generate, validate, transmit, and write-back for both standard invoices (F0401) and void invoices (F0501). Includes XML generation logic, QUE directory management, and automated status tracking. ### [MVC to MVVM Integration](https://www.ninniku.tw/bridging-the-divide-integrating-idempiere-mvc-components-into-zk-mvvm-using-injection/) Explores how to leverage both MVC and MVVM patterns within a single iDempiere application. Covers techniques for injecting iDempiere's established MVC components (like WSearchEditor and standard Forms) into modern ZK MVVM view models, bridging the gap between legacy patterns and modern UI architecture without rewriting existing components. ### [OSGi Service Ranking Guide](https://www.ninniku.tw/demystifying-osgi-service-ranking-a-comprehensive-guide/) A comprehensive guide to the OSGi service ranking mechanism used throughout iDempiere. Explains how service ranking controls which implementation is selected when multiple services compete for the same interface, with practical examples for customizing model factories, process factories, and callout behavior in iDempiere plugins. ### [Fragment Plugins in OSGi](https://www.ninniku.tw/introduction-to-fragment-plugins-in-osgi-enhancing-web-resources/) Introduces the concept of OSGi fragment plugins and how they extend existing bundles without modifying source code. Focuses on adding web resources (ZUL files, images, CSS) to iDempiere's web application through fragment bundles that attach to the host bundle's classloader, enabling UI customization while maintaining clean separation. ### [JasperReports Subreports & Images](https://www.ninniku.tw/mastering-jasperreports-in-idempiere-subreports-and-dynamic-images/) Covers two essential JasperReports techniques within iDempiere: implementing subreports for detailed data presentation and dynamically incorporating images using parameters. Addresses the challenge of managing resource paths across development and production environments using parameter-driven resource location. ### [Dynamic Page Breaks in JasperReports](https://www.ninniku.tw/dynamic-page-breaks-in-jasperreports-a-variable-driven-approach/) Demonstrates how to implement conditional page breaks in JasperReports Detail bands triggered by field value changes. Uses a variable-driven approach combining JasperReports variables with printWhenExpression to insert page breaks when product groups change, improving report readability for multi-product documents. ### [Time Zone Trouble Fix](https://www.ninniku.tw/time-zone-trouble-fixing-the-default-time-in-idempiere-erp/) Addresses the common post-installation issue where iDempiere's Java Application Server persists an incorrect time zone from its initial launch, even after the OS time zone is correctly configured. Explains the root cause and provides the fix to ensure consistent timestamps across transactions, documents, and audit logs. ### [Handling Bad Debts in iDempiere](https://www.ninniku.tw/how-to-handle-bad-debts-in-idempiere-erp-a-step-by-step-guide-for-writing-off-receivables-and-maintaining-accurate-financial-records/) A step-by-step guide for writing off uncollectible receivables in iDempiere ERP using the payment allocation window. Covers creating a Bad Debt Expense charge, allocating the outstanding amount against the charge, and maintaining accurate financial records when customers cannot pay. ### [Period Control for Complex Workflows](https://www.ninniku.tw/managing-transactions-across-periods-in-idempiere-erp-a-guide-to-period-control-for-complex-workflows/) Explains how to manage transactions that span multiple accounting periods in iDempiere, particularly for workflows like sample orders that start in one period and complete in another. Covers period control configuration, opening/closing periods for specific document types, and handling cross-period scenarios without data integrity issues. ### [Encrypted Payroll Management](https://www.ninniku.tw/payroll-encrypted-columns/) Describes a custom encrypted payroll system module for iDempiere that protects sensitive salary and employee data. Covers defining encrypted columns through a configuration window, PostgreSQL-based encryption/decryption, password management for authorized access, and automatic decryption prompts during report generation. ### [Nginx Load Balancing for iDempiere](https://www.ninniku.tw/nginx-load-balancing-scaling-your-application-with-multiple-backend-servers/) A configuration guide for setting up Nginx as a load balancer across multiple iDempiere backend servers. Covers the upstream module, server pool definition, health checking, and configuration steps to distribute user traffic across application servers for improved availability and performance under high load. ### [Automatic Detail Lines Deletion](https://www.ninniku.tw/effortless-data-management-mastering-automatic-detail-lines-deletion-in-idempiere-erp/) Presents four distinct methods for automatically deleting detail lines when document headers are deleted in iDempiere ERP. Ranges from simple database cascade rules to advanced Java model event approaches, giving developers and administrators options to match their technical comfort level and specific requirements. ### [Meeting Room Booking Plugin](https://www.ninniku.tw/enhancing-meeting-room-efficiency-with-the-idempiere-meeting-room-booking-plug-in/) Introduces a custom iDempiere plugin for managing meeting room reservations within the ERP system. Addresses the common workplace problem of room scheduling conflicts with automated booking management, time enforcement, and conflict prevention features integrated directly into the iDempiere workflow. ### [iDempiere vs SAP Comparison](https://www.ninniku.tw/how-to-decide-between-sap-and-idempiere/) A balanced comparison of SAP and iDempiere ERP systems covering licensing costs, implementation complexity, feature breadth, and customization flexibility. Helps organizations evaluate which system best fits their size, budget, and technical capabilities, with SAP suited for large enterprises and iDempiere for cost-conscious organizations needing high customizability. ### [iDempiere vs Odoo Comparison](https://www.ninniku.tw/compare-idempiere-odd/) Compares the advantages and disadvantages of iDempiere and Odoo as open-source ERP solutions. Covers modularity, financial management capabilities, community support, learning curve, and out-of-the-box features to help organizations choose between these two leading open-source ERP platforms. ### [Is iDempiere Good for Small Business?](https://www.ninniku.tw/is-idempiere-erp-a-good-option-for-small-businesses/) Evaluates iDempiere as an ERP solution for small businesses, examining its zero-cost licensing advantage, customization potential, active community support, and the trade-off of requiring technical expertise for implementation. Provides a balanced assessment of when iDempiere is a suitable choice versus when other options may be better. ### [Install iDempiere on Raspberry Pi](https://www.ninniku.tw/how-to-install-idempiere-erp-on-your-raspberry-pi/) A hands-on tutorial for running the full iDempiere ERP server on a Raspberry Pi 4. Covers SD card preparation with Ubuntu, Java and PostgreSQL setup, iDempiere installation and configuration, and practical considerations for running an ERP system on low-cost ARM hardware for development, testing, or edge computing scenarios. ### [Profit Center Systems](https://www.ninniku.tw/boosting-your-bottom-line-how-idempiere-erp-enables-practical-profit-center-systems/) Explains how to implement profit center accounting in iDempiere ERP, replacing manual spreadsheet tracking with systematic departmental profitability analysis. Covers configuration of organizational hierarchies, cost center allocation, and reporting structures that enable management to track which business units generate the most value. ### [CRM Implementation Guide](https://www.ninniku.tw/boost-your-business-with-idempiere-a-step-by-step-guide-to-implementing-crm-functionality/) A step-by-step guide to implementing Customer Relationship Management functionality within iDempiere ERP. Covers the sales pipeline from lead capture through opportunity tracking to closed deals, leveraging iDempiere's built-in CRM features to streamline sales and marketing processes without additional software. ### [Implementing JIT with iDempiere](https://www.ninniku.tw/implementing-just-in-time-jit-with-idempiere-erp/) Explores how to implement Just-in-Time lean manufacturing strategy using iDempiere ERP. Covers the ERP configuration needed to support demand-driven production, minimal inventory management, and supplier coordination to reduce waste and optimize production flow. ### [Workflow Visualization](https://www.ninniku.tw/workflow-visualization/) Introduces a contributed feature that lets iDempiere users visually track document workflow status at a glance. This feature was developed by the Ninniku team and contributed back to the iDempiere community, available from version 6.2 onward with the corresponding plugin installed. ### [Drop Shipment in iDempiere](https://www.ninniku.tw/drop-shipment-conclusion/) A comprehensive guide to configuring three-party (drop shipment) transactions in iDempiere ERP. Covers both commission-based and sales-based accounting methods, document counter automation, and the complete document chain from customer purchase order through supplier shipment to final invoicing. --- ## IoT & Arduino Articles ### [Getting Started with Arduino](https://www.ninniku.tw/getting-started-with-arduino-lighting-up-an-led/) A beginner-friendly tutorial for lighting up LEDs with an Arduino Uno board. Covers voltage requirements for different colored LEDs, resistor value calculation using Ohm's law, proper wiring techniques, and step-by-step instructions for connecting and controlling red and blue LEDs. ### [Understanding Floating State](https://www.ninniku.tw/understanding-floating-state-in-arduino/) Explains the concept of floating state in Arduino digital input pins, where disconnected or loosely connected pins produce random HIGH/LOW fluctuations. Covers why floating occurs, how it leads to unpredictable project behavior, and the solution using pull-up or pull-down resistors to establish stable voltage levels. ### [PWM Breathing Effect](https://www.ninniku.tw/arduino-tutorial-control-led-brightness-with-pwm-for-breathing-effect/) Builds on basic LED control to teach Pulse Width Modulation (PWM) for creating smooth LED brightness transitions on Arduino. Explains duty cycle concepts and demonstrates how to program a breathing light effect by gradually adjusting PWM values, with complete code examples. ### [Potentiometer LED Control](https://www.ninniku.tw/shine-bright-with-potentiometer-controlling-led-brightness-with-pwm-on-arduino/) Demonstrates how to use a potentiometer (variable resistor) to continuously control LED brightness through PWM on Arduino. Covers analog input reading, mapping potentiometer values to PWM duty cycles, and the complete circuit setup for interactive brightness adjustment. ### [Arduino vs Raspberry Pi](https://www.ninniku.tw/difference-between-arduino-and-raspberry-pi/) A comparison of Arduino and Raspberry Pi platforms covering processing power, operating system capabilities, intended use cases, and when to choose each platform. Arduino excels at real-time hardware control while Raspberry Pi serves as a full computer for multimedia, data processing, and web applications. ### [WordPress on Raspberry Pi](https://www.ninniku.tw/how-to-install-wordpress-on-your-raspberry-pi/) A complete guide to installing and running WordPress on a Raspberry Pi 4 with Ubuntu. Covers SD card preparation, LAMP stack setup (Linux, Apache/Nginx, MySQL, PHP), WordPress installation, and practical considerations for self-hosting a website on low-cost ARM hardware. --- ## Linux & DevOps Articles ### [Nginx DDoS Defense Guide](https://www.ninniku.tw/nginx-7-moves-ddos-defense/) A battle-tested seven-layer Nginx defense strategy against DDoS attacks, based on real production experience. Covers hiding server version info, rate limiting, connection limits, request filtering, GeoIP blocking, and reverse proxy hardening techniques. All configurations are production-verified and ready for deployment. ### [GitHub Fork Guide](https://www.ninniku.tw/github-fork-guide-six-moves/) A comprehensive six-step guide to the GitHub Fork workflow for open-source contribution. Covers forking, cloning, upstream configuration, branch management, pull request creation, and keeping your fork synchronized. Uses the bxservice/idempiere-rest repository as a practical example throughout. ### [PostgreSQL Streaming Replication](https://www.ninniku.tw/master-the-flow-setting-up-postgresql-15-streaming-replication/) A step-by-step guide for setting up PostgreSQL 15 Primary-Standby streaming replication. Covers primary server configuration (pg_hba.conf, postgresql.conf), replication user creation, base backup to standby, standby configuration, and verification. Ensures real-time data streaming for high availability and read scalability. ### [Nginx Load Balancing](https://www.ninniku.tw/nginx-load-balancing-scaling-your-application-with-multiple-backend-servers/) Covers essential Nginx configuration for distributing traffic across multiple backend application servers using the upstream module. Includes server pool definition, health checking, and load balancing algorithms for achieving high availability under heavy workloads. ### [Self-Hosting n8n on Raspberry Pi](https://www.ninniku.tw/self-hosting-n8n-on-raspberry-pi-5-with-an-external-nginx-reverse-proxy/) A professional-grade deployment guide for running n8n workflow automation on Raspberry Pi 5 behind a dedicated external Nginx reverse proxy on a separate host. Covers the security benefits of separating the proxy from the application server, SSL/TLS termination, and WebSocket proxying for the n8n editor interface. ### [PostgreSQL Upgrade 9.6 to 14](https://www.ninniku.tw/postgresql-time-travel-upgrading-from-version-9-6-to-14/) A practical guide for upgrading PostgreSQL from version 9.6 to 14 on Ubuntu. Covers system preparation, parallel installation, pg_upgrade execution, data migration verification, and post-upgrade cleanup to ensure a smooth transition with access to improved performance and security features. ### [Postfix Spam Blocking](https://www.ninniku.tw/postfix-configuration-blocking-spam-with-header-checks/) Demonstrates how to configure Postfix mail server header checks using regular expressions to block spam that passes SPF validation. Covers setting up header_checks rules, regex pattern matching against email headers, and managing blocked sender patterns for effective server-side spam filtering. --- ## IT Tools Articles ### [PostgreSQL Role Permission Management](https://www.ninniku.tw/mastering-postgresql-role-permission-management-a-comprehensive-guide/) A comprehensive guide to role-based access control in PostgreSQL covering role creation, modification, GRANT/REVOKE commands, and common permission management scenarios. Essential reading for database administrators who need to implement proper security controls on their PostgreSQL instances. ### [Docker vs VM Comparison](https://www.ninniku.tw/what-is-the-difference-between-docker-and-vm/) Compares Docker containers and virtual machines across architecture, resource usage, startup time, isolation levels, and portability. Explains when to use containers for lightweight application isolation versus VMs for stronger hardware-level isolation with independent OS instances. ### [TP-Link VPN with LDAP Authentication](https://www.ninniku.tw/secure-remote-access-with-tp-link-er7206-centralized-management-and-ldap-authentication/) A configuration guide for setting up the TP-Link ER7206 VPN router with LDAP authentication for secure remote access to corporate networks. Covers Omada centralized management integration, VPN server setup, and LDAP directory service connection for enterprise-grade access control. --- ## Categories - [iDempiere](https://www.ninniku.tw/category/idempiere/) -- 50+ articles on ERP development and customization - [IoT](https://www.ninniku.tw/category/iot/) -- Arduino, Raspberry Pi, hardware projects - [Linux](https://www.ninniku.tw/category/linux/) -- Server administration, security, DevOps - [IT Tools](https://www.ninniku.tw/category/it-tools/) -- PostgreSQL, Docker, Java, Git ## Optional - [Sitemap](https://www.ninniku.tw/sitemap_index.xml) - [Concise index for LLMs](https://www.ninniku.tw/llms.txt)