#GlobalScale
Globalscale Technologies' Case8 aims to be the handheld cyberdeck for everyone, with three design catering to gaming, education, and home automation
Globalscale Technologies' Case8 Cyberdeck Targets Gaming, Home Automation, and Education
Three variants, built around Mediatek Genio 520 and 720 chips, available at launch — plus a bare-bones "Hackers Edition" for makers.
www.hackster.io
July 21, 2026 at 1:00 PM
I really do hope to tell my story to the world one day. I hope that by doing so, I can inspire countless others to tell theirs too.

#Merchanted #IndieDev #StoryWriter #WorldStories
#OpenWorld #GlobalScale
February 3, 2025 at 6:04 AM
💎 Bitcoin = credible value proposition at global scale. #Bitcoin #GlobalScale
March 21, 2026 at 6:41 AM
South Korea’s next startup wave is global.

70% of Korean startups plan international expansion—led by AI, SaaS, and content-tech.

We track the moves, money, and momentum.
Visit www.koreatechdesk.com for signals from the ground.
#KoreanStartups #TechTrends #GlobalScale
South Korean Startup Media And Tech Innovation - KoreaTechDesk
Latest news on private equity (PE), venture capital (VC), inbound & outbound deals, IPOs, mergers and acquisitions (M&A), and korean startup ecosystem in South Korea.
www.koreatechdesk.com
August 1, 2025 at 11:51 PM
伯東、Globalscale Technologiesとの提携でIoT市場における製品開発を強化#東京都#新宿区#伯東#IoT市場#Globalscale

日本の伯東株式会社がGlobalscale Technologiesと提携し、IoT市場向けの製品開発を加速。技術支援と販売体制を強化します。
伯東、Globalscale Technologiesとの提携でIoT市場における製品開発を強化
日本の伯東株式会社がGlobalscale Technologiesと提携し、IoT市場向けの製品開発を加速。技術支援と販売体制を強化します。
news.3rd-in.co.jp
September 2, 2026 at 1:50 AM
[SOLVED] Vlog 02: Mixamo FBX models now load perfectly with jMonkeyEngine
github.com/stephengold/MonkeyWrench #### Proposal: Replace dedicated globalScale field with a property map in LwjglAssetKey opened 10:38AM - 06 Aug 26 UTC capdevon ### Context **LwjglAssetKey** currently stores _globalScale_ as a dedicated fin…al float field. This value is used exclusively to set the `Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY` property on the `AIPropertyStore` before importing a scene. While this works for the global scale, Assimp exposes many other configuration properties. Adding each of them as a separate field would bloat the API and require new constructors for every combination, making the class hard to maintain and extend. ### Proposal Replace the `globalScale` field with a general-purpose `Map<String, Object> storeProperties` that can hold any Assimp import property. The loader would iterate over the map and set each property on the `AIPropertyStore` using the appropriate `aiSetImportProperty*` function. Optional: A Builder inner class is also proposed to keep the construction readable and allow setting multiple properties fluently. ### Implementation summary **LwjglAssetKey:** * remove globalScale * add private Map<String, Object> storeProperties * add constructor accepting Map<String, Object> * add Builder with storeProperty(String, Object) * update equals()/hashCode() to include the map * add getStoreProperties() returning unmodifiable view ```java public class LwjglAssetKey extends ModelKey { // ... others constants and loggers ... /** * Additional properties to be set on the AIPropertyStore. */ private Map<String, Object> storeProperties; private LwjglAssetKey(Builder builder) { super(builder.assetPath); this.flags = builder.flags; this.textureLoader = builder.textureLoader; this.storeProperties = Map.copyOf(builder.storeProperties); } public LwjglAssetKey(AssetKey<?> assetKey) { this(assetKey.getName()); } public LwjglAssetKey(String assetPath) { this(assetPath, defaultTextureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, int flags) { this(assetPath, defaultTextureLoader, flags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader) { this(assetPath, textureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags) { this(assetPath, textureLoader, flags, null); } /** * Instantiate a key with the specified post-processing options and texture * loader. * * @param assetPath the name of (path to) the asset (not null) * @param textureLoader the desired texture-load options (not null) * @param flags the desired post-processing flag values, ORed together * (default=0x942b) * @param storeProperties additional properties to be set on the AIPropertyStore (may be null) */ public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags, Map<String, Object> storeProperties) { super(assetPath); assert assetPath != null; assert textureLoader != null; this.flags = flags; this.textureLoader = textureLoader; this.storeProperties = storeProperties != null ? Map.copyOf(storeProperties) : Map.of(); } // ... others public methods ... /** * Return an unmodifiable view of the custom Assimp store properties. */ public Map<String, Object> getStoreProperties() { return storeProperties; } @Override public boolean equals(Object other) { // ... && storeProperties.equals(otherKey.storeProperties); } @Override public int hashCode() { // ... result = 31 * result + storeProperties.hashCode(); } /** * Builder for {@link LwjglAssetKey}. */ public static class Builder { private final String assetPath; private TextureLoader textureLoader = defaultTextureLoader; private int flags = defaultFlags; private final Map<String, Object> storeProperties = new HashMap<>(); public Builder(String assetPath) { this.assetPath = Objects.requireNonNull(assetPath, "assetPath must not be null"); } public Builder textureLoader(TextureLoader textureLoader) { this.textureLoader = Objects.requireNonNull(textureLoader); return this; } public Builder flags(int flags) { this.flags = flags; return this; } public Builder storeProperty(String key, Object value) { this.storeProperties.put(key, value); return this; } public Builder storeProperties(Map<String, Object> properties) { if (properties != null) { this.storeProperties.putAll(properties); } return this; } public LwjglAssetKey build() { return new LwjglAssetKey(this); } } } ``` **LwjglAssetLoader:** * Iterates over `assetKey.getStoreProperties()` and calls a helper setProperty() that dispatches to the correct Assimp setter based on the value type (currently `Integer` and `Float`; others can be added as needed).. ```java AIPropertyStore propertyStore = Assimp.aiCreatePropertyStore(); for (Map.Entry<String, Object> entry : assetKey.getStoreProperties().entrySet()) { setProperty(propertyStore, entry.getKey(), entry.getValue()); } AIScene aiScene = Assimp.aiImportFileExWithProperties( filename, postFlags, aiFileIo, propertyStore); Assimp.aiReleasePropertyStore(propertyStore); ``` ```java /** * Set a property in an Assimp property store. * * @param propertyStore the store (not null) * @param propKey the property key (not null) * @param value the property value (not null) */ private static void setProperty(AIPropertyStore propertyStore, String propKey, Object value) { if (value instanceof Integer) { Assimp.aiSetImportPropertyInteger(propertyStore, propKey, (int) value); } else if (value instanceof Float) { Assimp.aiSetImportPropertyFloat(propertyStore, propKey, (float) value); } else { logger.warning("Unsupported property type for key " + propKey + ": " + value.getClass().getName()); } } ``` **Example usage:** ```java TextureLoader textureLoader = new TextureLoader(...); int ppFlags = LwjglAssetKey.defaultFlags | Assimp.aiProcess_GlobalScale; LwjglAssetKey key = new LwjglAssetKey.Builder(MODEL_PATH) .textureLoader(textureLoader) .storeProperty(Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY, 0.01f) .flags(ppFlags) .build(); key.setVerboseLogging(true); Spatial model = assetManager.loadModel(key); ``` Benefits * **Extensibility** – any future Assimp property can be supported without modifying LwjglAssetKey or its constructors. * **Flexibility** – users can set properties per asset without subclassing or creating many overloaded constructors. * **Cleaner API** – the Builder pattern keeps the construction readable and type‑safe (as far as possible with Object values). * **Alignment** – it mirrors the underlying AIPropertyStore concept and is consistent with how other game engines handle import options.
hub.jmonkeyengine.org
August 10, 2026 at 7:58 AM
[SOLVED] Vlog 02: Mixamo FBX models now load perfectly with jMonkeyEngine
github.com/stephengold/MonkeyWrench #### Proposal: Replace dedicated globalScale field with a property map in LwjglAssetKey opened 10:38AM - 06 Aug 26 UTC capdevon ### Context **LwjglAssetKey** currently stores _globalScale_ as a dedicated fin…al float field. This value is used exclusively to set the `Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY` property on the `AIPropertyStore` before importing a scene. While this works for the global scale, Assimp exposes many other configuration properties. Adding each of them as a separate field would bloat the API and require new constructors for every combination, making the class hard to maintain and extend. ### Proposal Replace the `globalScale` field with a general-purpose `Map<String, Object> storeProperties` that can hold any Assimp import property. The loader would iterate over the map and set each property on the `AIPropertyStore` using the appropriate `aiSetImportProperty*` function. Optional: A Builder inner class is also proposed to keep the construction readable and allow setting multiple properties fluently. ### Implementation summary **LwjglAssetKey:** * remove globalScale * add private Map<String, Object> storeProperties * add constructor accepting Map<String, Object> * add Builder with storeProperty(String, Object) * update equals()/hashCode() to include the map * add getStoreProperties() returning unmodifiable view ```java public class LwjglAssetKey extends ModelKey { // ... others constants and loggers ... /** * Additional properties to be set on the AIPropertyStore. */ private Map<String, Object> storeProperties; private LwjglAssetKey(Builder builder) { super(builder.assetPath); this.flags = builder.flags; this.textureLoader = builder.textureLoader; this.storeProperties = Map.copyOf(builder.storeProperties); } public LwjglAssetKey(AssetKey<?> assetKey) { this(assetKey.getName()); } public LwjglAssetKey(String assetPath) { this(assetPath, defaultTextureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, int flags) { this(assetPath, defaultTextureLoader, flags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader) { this(assetPath, textureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags) { this(assetPath, textureLoader, flags, null); } /** * Instantiate a key with the specified post-processing options and texture * loader. * * @param assetPath the name of (path to) the asset (not null) * @param textureLoader the desired texture-load options (not null) * @param flags the desired post-processing flag values, ORed together * (default=0x942b) * @param storeProperties additional properties to be set on the AIPropertyStore (may be null) */ public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags, Map<String, Object> storeProperties) { super(assetPath); assert assetPath != null; assert textureLoader != null; this.flags = flags; this.textureLoader = textureLoader; this.storeProperties = storeProperties != null ? Map.copyOf(storeProperties) : Map.of(); } // ... others public methods ... /** * Return an unmodifiable view of the custom Assimp store properties. */ public Map<String, Object> getStoreProperties() { return storeProperties; } @Override public boolean equals(Object other) { // ... && storeProperties.equals(otherKey.storeProperties); } @Override public int hashCode() { // ... result = 31 * result + storeProperties.hashCode(); } /** * Builder for {@link LwjglAssetKey}. */ public static class Builder { private final String assetPath; private TextureLoader textureLoader = defaultTextureLoader; private int flags = defaultFlags; private final Map<String, Object> storeProperties = new HashMap<>(); public Builder(String assetPath) { this.assetPath = Objects.requireNonNull(assetPath, "assetPath must not be null"); } public Builder textureLoader(TextureLoader textureLoader) { this.textureLoader = Objects.requireNonNull(textureLoader); return this; } public Builder flags(int flags) { this.flags = flags; return this; } public Builder storeProperty(String key, Object value) { this.storeProperties.put(key, value); return this; } public Builder storeProperties(Map<String, Object> properties) { if (properties != null) { this.storeProperties.putAll(properties); } return this; } public LwjglAssetKey build() { return new LwjglAssetKey(this); } } } ``` **LwjglAssetLoader:** * Iterates over `assetKey.getStoreProperties()` and calls a helper setProperty() that dispatches to the correct Assimp setter based on the value type (currently `Integer` and `Float`; others can be added as needed).. ```java AIPropertyStore propertyStore = Assimp.aiCreatePropertyStore(); for (Map.Entry<String, Object> entry : assetKey.getStoreProperties().entrySet()) { setProperty(propertyStore, entry.getKey(), entry.getValue()); } AIScene aiScene = Assimp.aiImportFileExWithProperties( filename, postFlags, aiFileIo, propertyStore); Assimp.aiReleasePropertyStore(propertyStore); ``` ```java /** * Set a property in an Assimp property store. * * @param propertyStore the store (not null) * @param propKey the property key (not null) * @param value the property value (not null) */ private static void setProperty(AIPropertyStore propertyStore, String propKey, Object value) { if (value instanceof Integer) { Assimp.aiSetImportPropertyInteger(propertyStore, propKey, (int) value); } else if (value instanceof Float) { Assimp.aiSetImportPropertyFloat(propertyStore, propKey, (float) value); } else { logger.warning("Unsupported property type for key " + propKey + ": " + value.getClass().getName()); } } ``` **Example usage:** ```java TextureLoader textureLoader = new TextureLoader(...); int ppFlags = LwjglAssetKey.defaultFlags | Assimp.aiProcess_GlobalScale; LwjglAssetKey key = new LwjglAssetKey.Builder(MODEL_PATH) .textureLoader(textureLoader) .storeProperty(Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY, 0.01f) .flags(ppFlags) .build(); key.setVerboseLogging(true); Spatial model = assetManager.loadModel(key); ``` Benefits * **Extensibility** – any future Assimp property can be supported without modifying LwjglAssetKey or its constructors. * **Flexibility** – users can set properties per asset without subclassing or creating many overloaded constructors. * **Cleaner API** – the Builder pattern keeps the construction readable and type‑safe (as far as possible with Object values). * **Alignment** – it mirrors the underlying AIPropertyStore concept and is consistent with how other game engines handle import options.
hub.jmonkeyengine.org
August 9, 2026 at 7:36 PM
[SOLVED] Vlog 02: Mixamo FBX models now load perfectly with jMonkeyEngine
github.com/stephengold/MonkeyWrench #### Proposal: Replace dedicated globalScale field with a property map in LwjglAssetKey opened 10:38AM - 06 Aug 26 UTC capdevon ### Context **LwjglAssetKey** currently stores _globalScale_ as a dedicated fin…al float field. This value is used exclusively to set the `Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY` property on the `AIPropertyStore` before importing a scene. While this works for the global scale, Assimp exposes many other configuration properties. Adding each of them as a separate field would bloat the API and require new constructors for every combination, making the class hard to maintain and extend. ### Proposal Replace the `globalScale` field with a general-purpose `Map<String, Object> storeProperties` that can hold any Assimp import property. The loader would iterate over the map and set each property on the `AIPropertyStore` using the appropriate `aiSetImportProperty*` function. Optional: A Builder inner class is also proposed to keep the construction readable and allow setting multiple properties fluently. ### Implementation summary **LwjglAssetKey:** * remove globalScale * add private Map<String, Object> storeProperties * add constructor accepting Map<String, Object> * add Builder with storeProperty(String, Object) * update equals()/hashCode() to include the map * add getStoreProperties() returning unmodifiable view ```java public class LwjglAssetKey extends ModelKey { // ... others constants and loggers ... /** * Additional properties to be set on the AIPropertyStore. */ private Map<String, Object> storeProperties; private LwjglAssetKey(Builder builder) { super(builder.assetPath); this.flags = builder.flags; this.textureLoader = builder.textureLoader; this.storeProperties = Map.copyOf(builder.storeProperties); } public LwjglAssetKey(AssetKey<?> assetKey) { this(assetKey.getName()); } public LwjglAssetKey(String assetPath) { this(assetPath, defaultTextureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, int flags) { this(assetPath, defaultTextureLoader, flags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader) { this(assetPath, textureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags) { this(assetPath, textureLoader, flags, null); } /** * Instantiate a key with the specified post-processing options and texture * loader. * * @param assetPath the name of (path to) the asset (not null) * @param textureLoader the desired texture-load options (not null) * @param flags the desired post-processing flag values, ORed together * (default=0x942b) * @param storeProperties additional properties to be set on the AIPropertyStore (may be null) */ public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags, Map<String, Object> storeProperties) { super(assetPath); assert assetPath != null; assert textureLoader != null; this.flags = flags; this.textureLoader = textureLoader; this.storeProperties = storeProperties != null ? Map.copyOf(storeProperties) : Map.of(); } // ... others public methods ... /** * Return an unmodifiable view of the custom Assimp store properties. */ public Map<String, Object> getStoreProperties() { return storeProperties; } @Override public boolean equals(Object other) { // ... && storeProperties.equals(otherKey.storeProperties); } @Override public int hashCode() { // ... result = 31 * result + storeProperties.hashCode(); } /** * Builder for {@link LwjglAssetKey}. */ public static class Builder { private final String assetPath; private TextureLoader textureLoader = defaultTextureLoader; private int flags = defaultFlags; private final Map<String, Object> storeProperties = new HashMap<>(); public Builder(String assetPath) { this.assetPath = Objects.requireNonNull(assetPath, "assetPath must not be null"); } public Builder textureLoader(TextureLoader textureLoader) { this.textureLoader = Objects.requireNonNull(textureLoader); return this; } public Builder flags(int flags) { this.flags = flags; return this; } public Builder storeProperty(String key, Object value) { this.storeProperties.put(key, value); return this; } public Builder storeProperties(Map<String, Object> properties) { if (properties != null) { this.storeProperties.putAll(properties); } return this; } public LwjglAssetKey build() { return new LwjglAssetKey(this); } } } ``` **LwjglAssetLoader:** * Iterates over `assetKey.getStoreProperties()` and calls a helper setProperty() that dispatches to the correct Assimp setter based on the value type (currently `Integer` and `Float`; others can be added as needed).. ```java AIPropertyStore propertyStore = Assimp.aiCreatePropertyStore(); for (Map.Entry<String, Object> entry : assetKey.getStoreProperties().entrySet()) { setProperty(propertyStore, entry.getKey(), entry.getValue()); } AIScene aiScene = Assimp.aiImportFileExWithProperties( filename, postFlags, aiFileIo, propertyStore); Assimp.aiReleasePropertyStore(propertyStore); ``` ```java /** * Set a property in an Assimp property store. * * @param propertyStore the store (not null) * @param propKey the property key (not null) * @param value the property value (not null) */ private static void setProperty(AIPropertyStore propertyStore, String propKey, Object value) { if (value instanceof Integer) { Assimp.aiSetImportPropertyInteger(propertyStore, propKey, (int) value); } else if (value instanceof Float) { Assimp.aiSetImportPropertyFloat(propertyStore, propKey, (float) value); } else { logger.warning("Unsupported property type for key " + propKey + ": " + value.getClass().getName()); } } ``` **Example usage:** ```java TextureLoader textureLoader = new TextureLoader(...); int ppFlags = LwjglAssetKey.defaultFlags | Assimp.aiProcess_GlobalScale; LwjglAssetKey key = new LwjglAssetKey.Builder(MODEL_PATH) .textureLoader(textureLoader) .storeProperty(Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY, 0.01f) .flags(ppFlags) .build(); key.setVerboseLogging(true); Spatial model = assetManager.loadModel(key); ``` Benefits * **Extensibility** – any future Assimp property can be supported without modifying LwjglAssetKey or its constructors. * **Flexibility** – users can set properties per asset without subclassing or creating many overloaded constructors. * **Cleaner API** – the Builder pattern keeps the construction readable and type‑safe (as far as possible with Object values). * **Alignment** – it mirrors the underlying AIPropertyStore concept and is consistent with how other game engines handle import options.
hub.jmonkeyengine.org
August 6, 2026 at 1:46 PM
[SOLVED] Vlog 02: Mixamo FBX models now load perfectly with jMonkeyEngine
github.com/stephengold/MonkeyWrench #### Proposal: Replace dedicated globalScale field with a property map in LwjglAssetKey opened 10:38AM - 06 Aug 26 UTC capdevon ### Context **LwjglAssetKey** currently stores _globalScale_ as a dedicated fin…al float field. This value is used exclusively to set the `Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY` property on the `AIPropertyStore` before importing a scene. While this works for the global scale, Assimp exposes many other configuration properties. Adding each of them as a separate field would bloat the API and require new constructors for every combination, making the class hard to maintain and extend. ### Proposal Replace the `globalScale` field with a general-purpose `Map<String, Object> storeProperties` that can hold any Assimp import property. The loader would iterate over the map and set each property on the `AIPropertyStore` using the appropriate `aiSetImportProperty*` function. Optional: A Builder inner class is also proposed to keep the construction readable and allow setting multiple properties fluently. ### Implementation summary **LwjglAssetKey:** * remove globalScale * add private Map<String, Object> storeProperties * add constructor accepting Map<String, Object> * add Builder with storeProperty(String, Object) * update equals()/hashCode() to include the map * add getStoreProperties() returning unmodifiable view ```java public class LwjglAssetKey extends ModelKey { // ... others constants and loggers ... /** * Additional properties to be set on the AIPropertyStore. */ private Map<String, Object> storeProperties; private LwjglAssetKey(Builder builder) { super(builder.assetPath); this.flags = builder.flags; this.textureLoader = builder.textureLoader; this.storeProperties = Map.copyOf(builder.storeProperties); } public LwjglAssetKey(AssetKey<?> assetKey) { this(assetKey.getName()); } public LwjglAssetKey(String assetPath) { this(assetPath, defaultTextureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, int flags) { this(assetPath, defaultTextureLoader, flags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader) { this(assetPath, textureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags) { this(assetPath, textureLoader, flags, null); } /** * Instantiate a key with the specified post-processing options and texture * loader. * * @param assetPath the name of (path to) the asset (not null) * @param textureLoader the desired texture-load options (not null) * @param flags the desired post-processing flag values, ORed together * (default=0x942b) * @param storeProperties additional properties to be set on the AIPropertyStore (may be null) */ public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags, Map<String, Object> storeProperties) { super(assetPath); assert assetPath != null; assert textureLoader != null; this.flags = flags; this.textureLoader = textureLoader; this.storeProperties = storeProperties != null ? Map.copyOf(storeProperties) : Map.of(); } // ... others public methods ... /** * Return an unmodifiable view of the custom Assimp store properties. */ public Map<String, Object> getStoreProperties() { return storeProperties; } @Override public boolean equals(Object other) { // ... && storeProperties.equals(otherKey.storeProperties); } @Override public int hashCode() { // ... result = 31 * result + storeProperties.hashCode(); } /** * Builder for {@link LwjglAssetKey}. */ public static class Builder { private final String assetPath; private TextureLoader textureLoader = defaultTextureLoader; private int flags = defaultFlags; private final Map<String, Object> storeProperties = new HashMap<>(); public Builder(String assetPath) { this.assetPath = Objects.requireNonNull(assetPath, "assetPath must not be null"); } public Builder textureLoader(TextureLoader textureLoader) { this.textureLoader = Objects.requireNonNull(textureLoader); return this; } public Builder flags(int flags) { this.flags = flags; return this; } public Builder storeProperty(String key, Object value) { this.storeProperties.put(key, value); return this; } public Builder storeProperties(Map<String, Object> properties) { if (properties != null) { this.storeProperties.putAll(properties); } return this; } public LwjglAssetKey build() { return new LwjglAssetKey(this); } } } ``` **LwjglAssetLoader:** * Iterates over `assetKey.getStoreProperties()` and calls a helper setProperty() that dispatches to the correct Assimp setter based on the value type (currently `Integer` and `Float`; others can be added as needed).. ```java AIPropertyStore propertyStore = Assimp.aiCreatePropertyStore(); for (Map.Entry<String, Object> entry : assetKey.getStoreProperties().entrySet()) { setProperty(propertyStore, entry.getKey(), entry.getValue()); } AIScene aiScene = Assimp.aiImportFileExWithProperties( filename, postFlags, aiFileIo, propertyStore); Assimp.aiReleasePropertyStore(propertyStore); ``` ```java /** * Set a property in an Assimp property store. * * @param propertyStore the store (not null) * @param propKey the property key (not null) * @param value the property value (not null) */ private static void setProperty(AIPropertyStore propertyStore, String propKey, Object value) { if (value instanceof Integer) { Assimp.aiSetImportPropertyInteger(propertyStore, propKey, (int) value); } else if (value instanceof Float) { Assimp.aiSetImportPropertyFloat(propertyStore, propKey, (float) value); } else { logger.warning("Unsupported property type for key " + propKey + ": " + value.getClass().getName()); } } ``` **Example usage:** ```java TextureLoader textureLoader = new TextureLoader(...); int ppFlags = LwjglAssetKey.defaultFlags | Assimp.aiProcess_GlobalScale; LwjglAssetKey key = new LwjglAssetKey.Builder(MODEL_PATH) .textureLoader(textureLoader) .storeProperty(Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY, 0.01f) .flags(ppFlags) .build(); key.setVerboseLogging(true); Spatial model = assetManager.loadModel(key); ``` Benefits * **Extensibility** – any future Assimp property can be supported without modifying LwjglAssetKey or its constructors. * **Flexibility** – users can set properties per asset without subclassing or creating many overloaded constructors. * **Cleaner API** – the Builder pattern keeps the construction readable and type‑safe (as far as possible with Object values). * **Alignment** – it mirrors the underlying AIPropertyStore concept and is consistent with how other game engines handle import options.
hub.jmonkeyengine.org
August 9, 2026 at 8:35 AM
[SOLVED] Vlog 02: Mixamo FBX models now load perfectly with jMonkeyEngine
github.com/stephengold/MonkeyWrench #### Proposal: Replace dedicated globalScale field with a property map in LwjglAssetKey opened 10:38AM - 06 Aug 26 UTC capdevon ### Context **LwjglAssetKey** currently stores _globalScale_ as a dedicated fin…al float field. This value is used exclusively to set the `Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY` property on the `AIPropertyStore` before importing a scene. While this works for the global scale, Assimp exposes many other configuration properties. Adding each of them as a separate field would bloat the API and require new constructors for every combination, making the class hard to maintain and extend. ### Proposal Replace the `globalScale` field with a general-purpose `Map<String, Object> storeProperties` that can hold any Assimp import property. The loader would iterate over the map and set each property on the `AIPropertyStore` using the appropriate `aiSetImportProperty*` function. Optional: A Builder inner class is also proposed to keep the construction readable and allow setting multiple properties fluently. ### Implementation summary **LwjglAssetKey:** * remove globalScale * add private Map<String, Object> storeProperties * add constructor accepting Map<String, Object> * add Builder with storeProperty(String, Object) * update equals()/hashCode() to include the map * add getStoreProperties() returning unmodifiable view ```java public class LwjglAssetKey extends ModelKey { // ... others constants and loggers ... /** * Additional properties to be set on the AIPropertyStore. */ private Map<String, Object> storeProperties; private LwjglAssetKey(Builder builder) { super(builder.assetPath); this.flags = builder.flags; this.textureLoader = builder.textureLoader; this.storeProperties = Map.copyOf(builder.storeProperties); } public LwjglAssetKey(AssetKey<?> assetKey) { this(assetKey.getName()); } public LwjglAssetKey(String assetPath) { this(assetPath, defaultTextureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, int flags) { this(assetPath, defaultTextureLoader, flags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader) { this(assetPath, textureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags) { this(assetPath, textureLoader, flags, null); } /** * Instantiate a key with the specified post-processing options and texture * loader. * * @param assetPath the name of (path to) the asset (not null) * @param textureLoader the desired texture-load options (not null) * @param flags the desired post-processing flag values, ORed together * (default=0x942b) * @param storeProperties additional properties to be set on the AIPropertyStore (may be null) */ public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags, Map<String, Object> storeProperties) { super(assetPath); assert assetPath != null; assert textureLoader != null; this.flags = flags; this.textureLoader = textureLoader; this.storeProperties = storeProperties != null ? Map.copyOf(storeProperties) : Map.of(); } // ... others public methods ... /** * Return an unmodifiable view of the custom Assimp store properties. */ public Map<String, Object> getStoreProperties() { return storeProperties; } @Override public boolean equals(Object other) { // ... && storeProperties.equals(otherKey.storeProperties); } @Override public int hashCode() { // ... result = 31 * result + storeProperties.hashCode(); } /** * Builder for {@link LwjglAssetKey}. */ public static class Builder { private final String assetPath; private TextureLoader textureLoader = defaultTextureLoader; private int flags = defaultFlags; private final Map<String, Object> storeProperties = new HashMap<>(); public Builder(String assetPath) { this.assetPath = Objects.requireNonNull(assetPath, "assetPath must not be null"); } public Builder textureLoader(TextureLoader textureLoader) { this.textureLoader = Objects.requireNonNull(textureLoader); return this; } public Builder flags(int flags) { this.flags = flags; return this; } public Builder storeProperty(String key, Object value) { this.storeProperties.put(key, value); return this; } public Builder storeProperties(Map<String, Object> properties) { if (properties != null) { this.storeProperties.putAll(properties); } return this; } public LwjglAssetKey build() { return new LwjglAssetKey(this); } } } ``` **LwjglAssetLoader:** * Iterates over `assetKey.getStoreProperties()` and calls a helper setProperty() that dispatches to the correct Assimp setter based on the value type (currently `Integer` and `Float`; others can be added as needed).. ```java AIPropertyStore propertyStore = Assimp.aiCreatePropertyStore(); for (Map.Entry<String, Object> entry : assetKey.getStoreProperties().entrySet()) { setProperty(propertyStore, entry.getKey(), entry.getValue()); } AIScene aiScene = Assimp.aiImportFileExWithProperties( filename, postFlags, aiFileIo, propertyStore); Assimp.aiReleasePropertyStore(propertyStore); ``` ```java /** * Set a property in an Assimp property store. * * @param propertyStore the store (not null) * @param propKey the property key (not null) * @param value the property value (not null) */ private static void setProperty(AIPropertyStore propertyStore, String propKey, Object value) { if (value instanceof Integer) { Assimp.aiSetImportPropertyInteger(propertyStore, propKey, (int) value); } else if (value instanceof Float) { Assimp.aiSetImportPropertyFloat(propertyStore, propKey, (float) value); } else { logger.warning("Unsupported property type for key " + propKey + ": " + value.getClass().getName()); } } ``` **Example usage:** ```java TextureLoader textureLoader = new TextureLoader(...); int ppFlags = LwjglAssetKey.defaultFlags | Assimp.aiProcess_GlobalScale; LwjglAssetKey key = new LwjglAssetKey.Builder(MODEL_PATH) .textureLoader(textureLoader) .storeProperty(Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY, 0.01f) .flags(ppFlags) .build(); key.setVerboseLogging(true); Spatial model = assetManager.loadModel(key); ``` Benefits * **Extensibility** – any future Assimp property can be supported without modifying LwjglAssetKey or its constructors. * **Flexibility** – users can set properties per asset without subclassing or creating many overloaded constructors. * **Cleaner API** – the Builder pattern keeps the construction readable and type‑safe (as far as possible with Object values). * **Alignment** – it mirrors the underlying AIPropertyStore concept and is consistent with how other game engines handle import options.
hub.jmonkeyengine.org
August 8, 2026 at 9:10 PM
[SOLVED] Vlog 02: Mixamo FBX models now load perfectly with jMonkeyEngine
github.com/stephengold/MonkeyWrench #### Proposal: Replace dedicated globalScale field with a property map in LwjglAssetKey opened 10:38AM - 06 Aug 26 UTC capdevon ### Context **LwjglAssetKey** currently stores _globalScale_ as a dedicated fin…al float field. This value is used exclusively to set the `Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY` property on the `AIPropertyStore` before importing a scene. While this works for the global scale, Assimp exposes many other configuration properties. Adding each of them as a separate field would bloat the API and require new constructors for every combination, making the class hard to maintain and extend. ### Proposal Replace the `globalScale` field with a general-purpose `Map<String, Object> storeProperties` that can hold any Assimp import property. The loader would iterate over the map and set each property on the `AIPropertyStore` using the appropriate `aiSetImportProperty*` function. Optional: A Builder inner class is also proposed to keep the construction readable and allow setting multiple properties fluently. ### Implementation summary **LwjglAssetKey:** * remove globalScale * add private Map<String, Object> storeProperties * add constructor accepting Map<String, Object> * add Builder with storeProperty(String, Object) * update equals()/hashCode() to include the map * add getStoreProperties() returning unmodifiable view ```java public class LwjglAssetKey extends ModelKey { // ... others constants and loggers ... /** * Additional properties to be set on the AIPropertyStore. */ private Map<String, Object> storeProperties; private LwjglAssetKey(Builder builder) { super(builder.assetPath); this.flags = builder.flags; this.textureLoader = builder.textureLoader; this.storeProperties = Map.copyOf(builder.storeProperties); } public LwjglAssetKey(AssetKey<?> assetKey) { this(assetKey.getName()); } public LwjglAssetKey(String assetPath) { this(assetPath, defaultTextureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, int flags) { this(assetPath, defaultTextureLoader, flags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader) { this(assetPath, textureLoader, defaultFlags); } public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags) { this(assetPath, textureLoader, flags, null); } /** * Instantiate a key with the specified post-processing options and texture * loader. * * @param assetPath the name of (path to) the asset (not null) * @param textureLoader the desired texture-load options (not null) * @param flags the desired post-processing flag values, ORed together * (default=0x942b) * @param storeProperties additional properties to be set on the AIPropertyStore (may be null) */ public LwjglAssetKey(String assetPath, TextureLoader textureLoader, int flags, Map<String, Object> storeProperties) { super(assetPath); assert assetPath != null; assert textureLoader != null; this.flags = flags; this.textureLoader = textureLoader; this.storeProperties = storeProperties != null ? Map.copyOf(storeProperties) : Map.of(); } // ... others public methods ... /** * Return an unmodifiable view of the custom Assimp store properties. */ public Map<String, Object> getStoreProperties() { return storeProperties; } @Override public boolean equals(Object other) { // ... && storeProperties.equals(otherKey.storeProperties); } @Override public int hashCode() { // ... result = 31 * result + storeProperties.hashCode(); } /** * Builder for {@link LwjglAssetKey}. */ public static class Builder { private final String assetPath; private TextureLoader textureLoader = defaultTextureLoader; private int flags = defaultFlags; private final Map<String, Object> storeProperties = new HashMap<>(); public Builder(String assetPath) { this.assetPath = Objects.requireNonNull(assetPath, "assetPath must not be null"); } public Builder textureLoader(TextureLoader textureLoader) { this.textureLoader = Objects.requireNonNull(textureLoader); return this; } public Builder flags(int flags) { this.flags = flags; return this; } public Builder storeProperty(String key, Object value) { this.storeProperties.put(key, value); return this; } public Builder storeProperties(Map<String, Object> properties) { if (properties != null) { this.storeProperties.putAll(properties); } return this; } public LwjglAssetKey build() { return new LwjglAssetKey(this); } } } ``` **LwjglAssetLoader:** * Iterates over `assetKey.getStoreProperties()` and calls a helper setProperty() that dispatches to the correct Assimp setter based on the value type (currently `Integer` and `Float`; others can be added as needed).. ```java AIPropertyStore propertyStore = Assimp.aiCreatePropertyStore(); for (Map.Entry<String, Object> entry : assetKey.getStoreProperties().entrySet()) { setProperty(propertyStore, entry.getKey(), entry.getValue()); } AIScene aiScene = Assimp.aiImportFileExWithProperties( filename, postFlags, aiFileIo, propertyStore); Assimp.aiReleasePropertyStore(propertyStore); ``` ```java /** * Set a property in an Assimp property store. * * @param propertyStore the store (not null) * @param propKey the property key (not null) * @param value the property value (not null) */ private static void setProperty(AIPropertyStore propertyStore, String propKey, Object value) { if (value instanceof Integer) { Assimp.aiSetImportPropertyInteger(propertyStore, propKey, (int) value); } else if (value instanceof Float) { Assimp.aiSetImportPropertyFloat(propertyStore, propKey, (float) value); } else { logger.warning("Unsupported property type for key " + propKey + ": " + value.getClass().getName()); } } ``` **Example usage:** ```java TextureLoader textureLoader = new TextureLoader(...); int ppFlags = LwjglAssetKey.defaultFlags | Assimp.aiProcess_GlobalScale; LwjglAssetKey key = new LwjglAssetKey.Builder(MODEL_PATH) .textureLoader(textureLoader) .storeProperty(Assimp.AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY, 0.01f) .flags(ppFlags) .build(); key.setVerboseLogging(true); Spatial model = assetManager.loadModel(key); ``` Benefits * **Extensibility** – any future Assimp property can be supported without modifying LwjglAssetKey or its constructors. * **Flexibility** – users can set properties per asset without subclassing or creating many overloaded constructors. * **Cleaner API** – the Builder pattern keeps the construction readable and type‑safe (as far as possible with Object values). * **Alignment** – it mirrors the underlying AIPropertyStore concept and is consistent with how other game engines handle import options.
hub.jmonkeyengine.org
August 8, 2026 at 12:43 AM
Feed: "CNX Software – Embedded Systems News"
By: Debashis Das on Monday, July 20, 2026
Globalscale Case8 – A MediaTek Genio 520/720 cyberdeck for gaming, home automation, and education (Crowdfunding)
Globalscale Technologies has launched the Case8 series of open-source cyberdeck-style computing platforms based on MediaTek Genio 520 and Genio 720
www.cnx-software.com
July 21, 2026 at 3:36 AM
.@MarvellTech Armada 7040 quad-core Cortex-A72 #SBC and #router running #OpenWrt or #Ubuntu that offers 10GbE, plus SATA, USB 3.0 interfaces, and optional WiFi 6 & #5G connectivity. #networking #storage #nas @GlobalscaleTech @_cubbit @sartura

cnx-software.com/2021/10/03/moc…
MochaBin-5G SBC offers 10GbE, WiFi 6, 5G for $159 and up (Crowdfunding) - CNX Software
Globalscale Technologies has a follow-up to their low-cost ESPRESSOBin SBC based on Marvell Armada 3700LP SoC. The MochaBin-5G SBC is powered by a Marvell
www.cnx-software.com
February 6, 2025 at 2:10 AM
New @GlobalscaleTech ESPRESSOBin board & #gateway based on @marvellsemi Armada 3720 dual-core processor with 5 Gigabit Ethernet ports, built-in WiFi 5 and Bluetooth 4.2, and support for #SATA and 4G LTE via M.2 and mPCIe sockets. #linux

cnx-software.com/2019/12/30/esp…
ESPRESSOBin ULTRA Gateway Features 5 Gigabit Ethernet Ports, WiFi 5, Supports 4G LTE Cellular Connectivity - CNX Software
Globalscale ESPRESSOBin ULTRA gateway runs Linux 4.19 on Marvell ARMADA 3720 SoC, offers five Gigabit Ethernet Ports, WiFI 5 2x2 MIMO, and 3G/4G LTE.
www.cnx-software.com
February 6, 2025 at 12:11 AM
💎 Global scale value = Bitcoin credible. #Bitcoin #GlobalScale
March 19, 2026 at 1:20 PM
“The #climateemergency demands us to think about our
- #responsibilities on a #globalscale ...
- effects...on all the species that call this planet home...
- resource-focused, profit-seeking behaviors that have been part of human activity for centuries.”

#anthropocene
September 10, 2025 at 1:33 PM
Scaling globally? Payment integration gets tricky. Learn how payment orchestration optimizes cost, conversion & compliance for seamless multi-gateway transactions. #Payments #Fintech #GlobalScale

Find all about by Faris Aziz
london.cityjsconf.org
April 2, 2025 at 10:43 AM
Go Global Instantly — Waver AI (Voice Dubbing) 
Turn one video into a global campaign. Clone your voice, translate audio, and auto-sync subtitles for new markets in minutes.
#UKBusiness #GlobalScale #WaverAI #AIDubbing #VoiceTranslation #SaaS #Ecommerce  #Dmitry_Lukianenko #ProgGenius
December 31, 2025 at 10:04 AM
You are a GPU Cloud provider? Sign In to claim your Page and share opportunities: gpucompare.com/providers
#gpucloud #gpucluster #mltraining #inference #h200 #h100 #vastai #globalscale #turboscale
August 21, 2025 at 7:02 AM
This is what #Cooperation and #multilateralism on a #GlobalScale (when the imbalance of any other thought bubble is so damned obvious) looks like!

At the rate the #Orangutan is tearing up science education, the #USA is not going to be needed anymore...

youtu.be/Oe-R1FMpbaQ?...
World Health Organization countries reach deal on pandemics • FRANCE 24 English
YouTube video by FRANCE 24 English
youtu.be
April 16, 2025 at 1:00 PM