<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on Infinite Script</title><link>https://www.infinitescript.com/</link><description>Recent content in Home on Infinite Script</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 02 Aug 2026 22:30:00 +0800</lastBuildDate><atom:link href="https://www.infinitescript.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Enable Unattended RustDesk Access on Wayland</title><link>https://www.infinitescript.com/2026/08/enable-unattended-rustdesk-access-on-wayland/</link><pubDate>Sun, 02 Aug 2026 22:30:00 +0800</pubDate><guid>https://www.infinitescript.com/2026/08/enable-unattended-rustdesk-access-on-wayland/</guid><description>&lt;p&gt;Ubuntu uses GNOME on Wayland by default. RustDesk works well once the desktop session is running, but unattended access can become awkward around the graphical login screen.&lt;/p&gt;
&lt;p&gt;On my Ubuntu 26.04 system, the practical solution was to use an X11-based LightDM login screen while keeping the normal Ubuntu GNOME Wayland desktop after login:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;LightDM + Slick Greeter + X11
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ubuntu + GNOME + Wayland
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This gives RustDesk access to the login screen without replacing the everyday Ubuntu desktop.&lt;/p&gt;</description></item><item><title>Completely Remove Snap from Ubuntu</title><link>https://www.infinitescript.com/2026/07/completely-remove-snap-from-ubuntu/</link><pubDate>Sat, 18 Jul 2026 18:15:25 -0700</pubDate><guid>https://www.infinitescript.com/2026/07/completely-remove-snap-from-ubuntu/</guid><description>&lt;p&gt;Snap ships enabled by default on recent Ubuntu releases. It offers a distribution-independent application format, automatic updates, dependency isolation, and optional sandboxing.&lt;/p&gt;
&lt;p&gt;Those features are useful, but not every system needs a second package-management stack alongside APT. Desktop users may prefer traditional Debian packages, and administrators of minimal servers may want fewer background services with all software under APT-based change control.&lt;/p&gt;
&lt;p&gt;This guide covers how to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remove all installed Snap packages&lt;/li&gt;
&lt;li&gt;Purge the &lt;code&gt;snapd&lt;/code&gt; service and its remaining data&lt;/li&gt;
&lt;li&gt;Prevent APT from reinstalling &lt;code&gt;snapd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Restore Snap later if needed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The procedure targets recent Ubuntu Desktop and Server releases, including 22.04, 24.04, and 26.04. Package selections may differ between releases.&lt;/p&gt;</description></item><item><title>Always Moving: 6D Poses for a Wearable Fisheye Rig</title><link>https://www.infinitescript.com/2026/07/always-moving-6d-poses-for-a-wearable-fisheye-rig/</link><pubDate>Thu, 02 Jul 2026 23:20:00 +0900</pubDate><guid>https://www.infinitescript.com/2026/07/always-moving-6d-poses-for-a-wearable-fisheye-rig/</guid><description>&lt;p&gt;In the &lt;a href="https://www.infinitescript.com/2026/06/the-missing-link-calibrating-a-sparse-rgb-rig-with-optitrack/"&gt;last post&lt;/a&gt; I calibrated eight ZED cameras bolted to a room&amp;rsquo;s walls so OptiTrack&amp;rsquo;s 3D positions could be projected onto each image. Those cameras never moved: one 6-DOF pose per camera is the whole answer.&lt;/p&gt;
&lt;p&gt;This post is the opposite case: a rig &lt;strong&gt;worn on a person, moving every frame&lt;/strong&gt;. The goal is the same, but &amp;ldquo;the pose&amp;rdquo; is now a trajectory recovered at 20 Hz for the entire take, which changes which tools work. The rig is &lt;strong&gt;&lt;a href="https://github.com/Ropedia/HOMIE-toolkit"&gt;Homie&lt;/a&gt;&lt;/strong&gt;, &lt;a href="https://ropedia.com/blog/20251216_introducing_ropedia"&gt;Ropedia&lt;/a&gt;&amp;rsquo;s four-camera egocentric setup for recording manipulation data: a person wears it, does a task with their hands, and we want every tracked object and finger marker to land on the right pixel.&lt;/p&gt;</description></item><item><title>The Missing Link: Calibrating a Sparse RGB Rig with OptiTrack</title><link>https://www.infinitescript.com/2026/06/the-missing-link-calibrating-a-sparse-rgb-rig-with-optitrack/</link><pubDate>Wed, 10 Jun 2026 23:08:16 +0800</pubDate><guid>https://www.infinitescript.com/2026/06/the-missing-link-calibrating-a-sparse-rgb-rig-with-optitrack/</guid><description>&lt;p&gt;It has been a long time since I last wrote a blog post. Honestly, I almost stopped. In the age of LLMs, writing about technical topics feels pointless. Whatever you want to know, an AI will explain it more clearly and faster than any blog. So why bother?&lt;/p&gt;
&lt;p&gt;What changed my mind was running into a problem where AI could tell me the theory perfectly well but couldn&amp;rsquo;t tell me what actually went wrong when I tried it. That gap only gets filled by doing it: wiring two physical sensor systems together, watching them disagree, and working out why. That kind of experience doesn&amp;rsquo;t live in training data yet. &lt;strong&gt;Physical AI&lt;/strong&gt; is full of it.&lt;/p&gt;</description></item><item><title>DynamicVLA</title><link>https://www.infinitescript.com/project/dynamic-vla/</link><pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate><guid>https://www.infinitescript.com/project/dynamic-vla/</guid><description>&lt;h4 id="dynamicvla-a-vision-language-action-model-for-dynamic-object-manipulation"&gt;DynamicVLA: A Vision-Language-Action Model for Dynamic Object Manipulation&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://infinitescript.com"&gt;Haozhe Xie*&lt;/a&gt;, Beichen Wen*, Jiarui Zheng, &lt;a href="https://frozenburning.github.io/"&gt;Zhaoxi Chen&lt;/a&gt;, &lt;a href="https://hongfz16.github.io/"&gt;Fangzhou Hong&lt;/a&gt;, &lt;a href="https://paranioar.github.io/"&gt;Haiwen Diao&lt;/a&gt;, &lt;a href="https://liuziwei7.github.io/"&gt;Ziwei Liu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;S-Lab, Nanyang Technological University&lt;/p&gt;
&lt;!-- 







&lt;a href="https://x.com/liuziwei7/status/2062412801403199700" target="_blank" rel="noopener" class="badge-inline"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fas fa-award"&gt;&lt;/i&gt; CVPRW&amp;#39;26&lt;/span&gt;
 &lt;span class="badge-value" style="background: linear-gradient(135deg, #f5a623, #f76b1c)"&gt;Best Paper&lt;/span&gt;
&lt;/a&gt;

 --&gt;
&lt;p&gt;
&lt;span class="badge-inline badge-counter" data-counter-name="hzxie/DynamicVLA"&gt;
 &lt;span class="badge-label"&gt;visitors&lt;/span&gt;
 &lt;span class="badge-value"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;


&lt;a href="https://arxiv.org/abs/2601.22153" target="_blank" rel="noopener" class="badge-inline badge-arxiv"&gt;
 &lt;span class="badge-label"&gt;arXiv&lt;/span&gt;
 &lt;span class="badge-value"&gt;2601.22153&lt;/span&gt;
&lt;/a&gt;


&lt;a href="https://github.com/hzxie/DynamicVLA" target="_blank" rel="noopener" class="badge-inline badge-github"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt; Stars&lt;/span&gt;
 &lt;span class="badge-value" gh-repo="hzxie/DynamicVLA"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;



&lt;a href="https://huggingface.co/datasets/hzxie/DOM" target="_blank" rel="noopener" class="badge-inline badge-huggingface"&gt;
 &lt;span class="badge-label"&gt;🤗&lt;/span&gt;
 &lt;span class="badge-value"&gt;DOM Dataset&lt;/span&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; DynamicVLA enables open-ended dynamic object manipulation by pairing a compact 0.4B VLM with low-latency Continuous Inference and Latent-aware Action Streaming, evaluated at scale through the new DOM benchmark in both simulation and the real world.&lt;/p&gt;</description></item><item><title>CityDreamer4D</title><link>https://www.infinitescript.com/project/city-dreamer-4d/</link><pubDate>Tue, 31 Dec 2024 22:00:00 +0000</pubDate><guid>https://www.infinitescript.com/project/city-dreamer-4d/</guid><description>&lt;div class='row '&gt;
&lt;div class='col-lg-10 col-md-9 col-8'&gt;&lt;h4 id="compositional-generative-model-of-unbounded-4d-cities"&gt;Compositional Generative Model of Unbounded 4D Cities&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://infinitescript.com"&gt;Haozhe Xie&lt;/a&gt;, &lt;a href="https://frozenburning.github.io/"&gt;Zhaoxi Chen&lt;/a&gt;, &lt;a href="https://hongfz16.github.io/"&gt;Fangzhou Hong&lt;/a&gt;, &lt;a href="https://liuziwei7.github.io/"&gt;Ziwei Liu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;S-Lab, Nanyang Technological University&lt;/p&gt;
&lt;span class="badge-inline badge-counter" data-counter-name="hzxie/CityDreamer4D"&gt;
 &lt;span class="badge-label"&gt;visitors&lt;/span&gt;
 &lt;span class="badge-value"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
&lt;a href="https://arxiv.org/abs/2501.08983" target="_blank" rel="noopener" class="badge-inline badge-arxiv"&gt;
 &lt;span class="badge-label"&gt;arXiv&lt;/span&gt;
 &lt;span class="badge-value"&gt;2501.08983&lt;/span&gt;
&lt;/a&gt;
&lt;a href="https://github.com/hzxie/CityDreamer4D" target="_blank" rel="noopener" class="badge-inline badge-github"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt; Stars&lt;/span&gt;
 &lt;span class="badge-value" gh-repo="hzxie/CityDreamer4D"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class='col-lg-2 col-md-3 col-4'&gt;&lt;p&gt;
&lt;img src="https://www.infinitescript.com/projects/CityDreamer4D/CityDreamer4D-Logo.webp" alt="Logo " loading="lazy"&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; CityDreamer4D is a framework for unbounded 4D city generation that decouples static and dynamic scenes, achieving superior realism, multi-view consistency, and diverse styles.&lt;/p&gt;
&lt;div class="gallery"&gt;
 &lt;div class="overlay"&gt;
 &lt;img src="https://www.infinitescript.com/images/loading.gif" alt="Loading"&gt;
 &lt;/div&gt; 
 &lt;div class="gallery-inner"&gt;
 
 
 &lt;div class="gallery-item col-md-6"&gt;
 
 

&lt;script src="https://fast.wistia.com/player.js" async&gt;&lt;/script&gt;
&lt;script src="https://fast.wistia.com/embed/6y6gf2cqvl.js" async type="module"&gt;&lt;/script&gt;
&lt;style&gt;
wistia-player[media-id='6y6gf2cqvl']:not(:defined) {
 background: center / contain no-repeat url('https://fast.wistia.com/embed/medias/6y6gf2cqvl/swatch');
 display: block; filter: blur(5px);
 padding-top:56.25%;
}
&lt;/style&gt; 
&lt;wistia-player media-id="6y6gf2cqvl"&gt;&lt;/wistia-player&gt;


 
 
 &lt;/div&gt; 
 
 
 &lt;div class="gallery-item col-md-6"&gt;
 
 

&lt;script src="https://fast.wistia.com/player.js" async&gt;&lt;/script&gt;
&lt;script src="https://fast.wistia.com/embed/2e1ldjvmzg.js" async type="module"&gt;&lt;/script&gt;
&lt;style&gt;
wistia-player[media-id='2e1ldjvmzg']:not(:defined) {
 background: center / contain no-repeat url('https://fast.wistia.com/embed/medias/2e1ldjvmzg/swatch');
 display: block; filter: blur(5px);
 padding-top:56.25%;
}
&lt;/style&gt; 
&lt;wistia-player media-id="2e1ldjvmzg"&gt;&lt;/wistia-player&gt;


 
 
 &lt;/div&gt; 
 
 
 &lt;div class="gallery-item col-md-6"&gt;
 
 

&lt;script src="https://fast.wistia.com/player.js" async&gt;&lt;/script&gt;
&lt;script src="https://fast.wistia.com/embed/hxl95em23y.js" async type="module"&gt;&lt;/script&gt;
&lt;style&gt;
wistia-player[media-id='hxl95em23y']:not(:defined) {
 background: center / contain no-repeat url('https://fast.wistia.com/embed/medias/hxl95em23y/swatch');
 display: block; filter: blur(5px);
 padding-top:56.25%;
}
&lt;/style&gt; 
&lt;wistia-player media-id="hxl95em23y"&gt;&lt;/wistia-player&gt;


 
 
 &lt;/div&gt; 
 
 
 &lt;div class="gallery-item col-md-6"&gt;
 
 

&lt;script src="https://fast.wistia.com/player.js" async&gt;&lt;/script&gt;
&lt;script src="https://fast.wistia.com/embed/hqeor8ytp0.js" async type="module"&gt;&lt;/script&gt;
&lt;style&gt;
wistia-player[media-id='hqeor8ytp0']:not(:defined) {
 background: center / contain no-repeat url('https://fast.wistia.com/embed/medias/hqeor8ytp0/swatch');
 display: block; filter: blur(5px);
 padding-top:56.25%;
}
&lt;/style&gt; 
&lt;wistia-player media-id="hqeor8ytp0"&gt;&lt;/wistia-player&gt;


 
 
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;button class="carousel-control carousel-control-prev" type="button" tabindex="0"&gt;
 &lt;span class="carousel-control-prev-icon" aria-hidden="true"&gt;&lt;/span&gt;
 &lt;/button&gt;
 &lt;button class="carousel-control carousel-control-next" type="button" tabindex="0"&gt;
 &lt;span class="carousel-control-next-icon" aria-hidden="true"&gt;&lt;/span&gt;
 &lt;/button&gt;
&lt;/div&gt; 

&lt;h5 id="spotlight-video"&gt;Spotlight Video&lt;/h5&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/PF6W0Nd27Tk?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h5 id="abstract"&gt;Abstract&lt;/h5&gt;
&lt;p&gt;3D scene generation has garnered growing attention in recent years and has made significant progress.
Generating 4D cities is more challenging than 3D scenes due to the presence of structurally complex, visually diverse objects like buildings and vehicles, and heightened human sensitivity to distortions in urban environments.
To tackle these issues, we propose &lt;strong&gt;CityDreamer4D&lt;/strong&gt;, a compositional generative model specifically tailored for generating unbounded 4D cities. Our main insights are
&lt;strong&gt;1)&lt;/strong&gt; 4D city generation should separate dynamic objects (&lt;em&gt;e.g.&lt;/em&gt;, vehicles) from static scenes (&lt;em&gt;e.g.&lt;/em&gt;, buildings and roads), and
&lt;strong&gt;2)&lt;/strong&gt; all objects in the 4D scene should be composed of different types of neural fields for buildings, vehicles, and background stuff.
Specifically, we propose Traffic Scenario Generator and Unbounded Layout Generator to produce dynamic traffic scenarios and static city layouts using a highly compact BEV representation.
Objects in 4D cities are generated by combining stuff-oriented and instance-oriented neural fields for background stuff, buildings, and vehicles.
To suit the distinct characteristics of background stuff and instances, the neural fields employ customized generative hash grids and periodic positional embeddings as scene parameterizations.
Furthermore, we offer a comprehensive suite of datasets for city generation, including OSM, GoogleEarth, and CityTopia.
The OSM dataset provides a variety of real-world city layouts, while the Google Earth and CityTopia datasets deliver large-scale, high-quality city imagery complete with 3D instance annotations.
Leveraging its compositional design, CityDreamer4D supports a range of downstream applications, such as instance editing, city stylization, and urban simulation, while delivering state-of-the-art performance in generating realistic 4D cities.&lt;/p&gt;</description></item><item><title>Setup 802.1X Authentication on Arch Linux</title><link>https://www.infinitescript.com/2024/11/setup-8021x-auth-on-arch-linux/</link><pubDate>Sat, 16 Nov 2024 06:28:32 +0800</pubDate><guid>https://www.infinitescript.com/2024/11/setup-8021x-auth-on-arch-linux/</guid><description>&lt;p&gt;Over the past few days, I attempted to set up 802.1X authentication on Arch Linux, a wired identity authentication protocol widely used in enterprise environments and well-supported on Windows and Ubuntu. However, when it came to Arch Linux, a series of strange issues emerged. To make matters more interesting, the machine in question has two onboard NICs, a Realtek &lt;code&gt;r8169&lt;/code&gt; and an Intel &lt;code&gt;e1000e&lt;/code&gt;, and each ended up causing a different kind of trouble: the former during authentication, the latter during DHCP. This post will detail the problems I encountered and the debugging process.&lt;/p&gt;</description></item><item><title>GaussianCity</title><link>https://www.infinitescript.com/project/gaussian-city/</link><pubDate>Fri, 24 May 2024 08:00:00 +0000</pubDate><guid>https://www.infinitescript.com/project/gaussian-city/</guid><description>&lt;div class='row '&gt;
&lt;div class='col-lg-10 col-md-9 col-8'&gt;&lt;h4 id="generative-gaussian-splatting-for-unbounded-3d-city-generation"&gt;Generative Gaussian Splatting for Unbounded 3D City Generation&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://infinitescript.com"&gt;Haozhe Xie&lt;/a&gt;, &lt;a href="https://frozenburning.github.io/"&gt;Zhaoxi Chen&lt;/a&gt;, &lt;a href="https://hongfz16.github.io/"&gt;Fangzhou Hong&lt;/a&gt;, &lt;a href="https://liuziwei7.github.io/"&gt;Ziwei Liu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;S-Lab, Nanyang Technological University&lt;/p&gt;
&lt;span class="badge-inline badge-counter" data-counter-name="hzxie/GaussianCity"&gt;
 &lt;span class="badge-label"&gt;visitors&lt;/span&gt;
 &lt;span class="badge-value"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
&lt;a href="https://arxiv.org/abs/2406.06526" target="_blank" rel="noopener" class="badge-inline badge-arxiv"&gt;
 &lt;span class="badge-label"&gt;arXiv&lt;/span&gt;
 &lt;span class="badge-value"&gt;2406.06526&lt;/span&gt;
&lt;/a&gt;
&lt;a href="https://huggingface.co/spaces/hzxie/gaussian-city" target="_blank" rel="noopener" class="badge-inline badge-huggingface"&gt;
 &lt;span class="badge-label"&gt;🤗&lt;/span&gt;
 &lt;span class="badge-value"&gt;Hugging Face Featured Space&lt;/span&gt;
&lt;/a&gt;
&lt;a href="https://github.com/hzxie/GaussianCity" target="_blank" rel="noopener" class="badge-inline badge-github"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt; Stars&lt;/span&gt;
 &lt;span class="badge-value" gh-repo="hzxie/GaussianCity"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class='col-lg-2 col-md-3 col-4'&gt;&lt;p&gt;
&lt;img src="https://www.infinitescript.com/projects/GaussianCity/GaussianCity-Logo.webp" alt="Logo " loading="lazy"&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; GaussianCity is a framework for efficient unbounded 3D city generation using 3D Gaussian Splatting.
&lt;br&gt;&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/projects/GaussianCity/GaussianCity-Teaser.webp" data-fancybox data-caption="Teaser"&gt;
 &lt;img src="https://www.infinitescript.com/projects/GaussianCity/GaussianCity-Teaser.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;h5 id="abstract"&gt;Abstract&lt;/h5&gt;
&lt;p&gt;3D city generation with NeRF-based methods shows promising generation results but is computationally inefficient. Recently 3D Gaussian Splatting (3D-GS) has emerged as a highly efficient alternative for object-level 3D generation. However, adapting 3D-GS from finite-scale 3D objects and humans to infinite-scale 3D cities is non-trivial. Unbounded 3D city generation entails significant storage overhead (out-of-memory issues), arising from the need to expand points to billions, often demanding hundreds of Gigabytes of VRAM for a city scene spanning 10km&lt;sup&gt;2&lt;/sup&gt;. In this paper, we propose &lt;strong&gt;GaussianCity&lt;/strong&gt;, a generative Gaussian Splatting framework dedicated to efficiently synthesize unbounded 3D cities with a single feed-forward pass. Our key insights are two-fold: &lt;strong&gt;1)&lt;/strong&gt; Compact 3D Scene Representation: We introduce BEV-Point as a highly compact intermediate representation, ensuring that the growth in VRAM usage for unbounded scenes remains constant, thus enabling unbounded city generation. &lt;strong&gt;2)&lt;/strong&gt; Spatial-aware Gaussian Attribute Decoder: We present spatial-aware BEV-Point decoder to produce 3D Gaussian attributes, which leverages Point Serializer to integrate the structural and contextual characteristics of BEV points. Extensive experiments demonstrate that GaussianCity achieves state-of-the-art results in both drone-view and street-view 3D city generation. Notably, compared to CityDreamer, GaussianCity exhibits superior performance with a speedup of 60 times (10.72 FPS v.s. 0.18 FPS).&lt;/p&gt;</description></item><item><title>Infinite Servers</title><link>https://www.infinitescript.com/project/infinite-servers/</link><pubDate>Fri, 02 Feb 2024 11:41:27 +0000</pubDate><guid>https://www.infinitescript.com/project/infinite-servers/</guid><description>&lt;a href="https://gitlab.com/hzxie/infinite-servers" target="_blank" rel="noopener" class="badge-inline"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-gitlab"&gt;&lt;/i&gt; GitLab&lt;/span&gt;
 &lt;span class="badge-value" style="background: #fc6d26"&gt;Open Source&lt;/span&gt;
&lt;/a&gt;










&lt;a href="https://servers.infinitescript.com" target="_blank" rel="noopener" class="badge-inline"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fas fa-globe"&gt;&lt;/i&gt; Live&lt;/span&gt;
 &lt;span class="badge-value" style="background: #1283c3"&gt;servers.infinitescript.com&lt;/span&gt;
&lt;/a&gt;


&lt;h5 id="introduction"&gt;Introduction&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Infinite Servers&lt;/strong&gt; is a self-hosted server fleet monitor built around a single design constraint: the agent must run completely unprivileged. Each monitored host installs a PHP script that runs as &lt;code&gt;nobody&lt;/code&gt;, reads &lt;code&gt;/proc&lt;/code&gt;, and pushes status every 15 seconds to a central dashboard. No root access, no persistent daemon with elevated privileges, no external database server.&lt;/p&gt;
&lt;p&gt;This design was motivated by the security risks that plague popular alternatives. Tools like &lt;a href="https://github.com/naiba/nezha"&gt;Nezha&lt;/a&gt; require agents to run as root, which creates a severe blast-radius problem: if the dashboard is compromised, an attacker can push arbitrary commands to every connected host with full system privileges. Two recent CVEs illustrate just how real this risk is:&lt;/p&gt;</description></item><item><title>Migrating from WordPress to Hugo</title><link>https://www.infinitescript.com/2024/01/migrate-from-wordpress-to-hugo/</link><pubDate>Sat, 20 Jan 2024 07:45:45 +0800</pubDate><guid>https://www.infinitescript.com/2024/01/migrate-from-wordpress-to-hugo/</guid><description>&lt;p&gt;I recently switched from WordPress to Hugo. This post outlines the reasons behind my migration and provides a step-by-step guide on how to make the transition.&lt;/p&gt;
&lt;h3 id="rethinking-why-use-wordpress"&gt;Rethinking Why Use WordPress&lt;/h3&gt;
&lt;p&gt;I began using WordPress in 2009 when static site generators were not prevalent, and WordPress was the go-to CMS for nearly everyone.
However, since my blog had infrequent updates but high readership, I started reconsidering the use of WordPress.
&lt;a href="https://www.infinitescript.com/2019/06/accelerate-wordpress-with-cdn-and-cache-servers/"&gt;Five years ago&lt;/a&gt;, I decided to convert the WordPress site into static HTML and uploaded it to a CDN to accelerate access speed for users in mainland China.&lt;/p&gt;</description></item><item><title>CityDreamer</title><link>https://www.infinitescript.com/project/city-dreamer/</link><pubDate>Fri, 01 Sep 2023 08:00:00 +0000</pubDate><guid>https://www.infinitescript.com/project/city-dreamer/</guid><description>&lt;div class='row '&gt;
&lt;div class='col-lg-10 col-md-9 col-8'&gt;&lt;h4 id="citydreamer-compositional-generative-model-of-unbounded-3d-cities"&gt;CityDreamer: Compositional Generative Model of Unbounded 3D Cities&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://infinitescript.com"&gt;Haozhe Xie&lt;/a&gt;, &lt;a href="https://frozenburning.github.io/"&gt;Zhaoxi Chen&lt;/a&gt;, &lt;a href="https://hongfz16.github.io/"&gt;Fangzhou Hong&lt;/a&gt;, &lt;a href="https://liuziwei7.github.io/"&gt;Ziwei Liu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;S-Lab, Nanyang Technological University&lt;/p&gt;
&lt;span class="badge-inline badge-counter" data-counter-name="hzxie/CityDreamer"&gt;
 &lt;span class="badge-label"&gt;visitors&lt;/span&gt;
 &lt;span class="badge-value"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
&lt;a href="https://arxiv.org/abs/2309.00610" target="_blank" rel="noopener" class="badge-inline badge-arxiv"&gt;
 &lt;span class="badge-label"&gt;arXiv&lt;/span&gt;
 &lt;span class="badge-value"&gt;2309.00610&lt;/span&gt;
&lt;/a&gt;
&lt;a href="https://huggingface.co/spaces/hzxie/city-dreamer" target="_blank" rel="noopener" class="badge-inline badge-huggingface"&gt;
 &lt;span class="badge-label"&gt;🤗&lt;/span&gt;
 &lt;span class="badge-value"&gt;Hugging Face&lt;/span&gt;
&lt;/a&gt;
&lt;a href="https://github.com/hzxie/City-Dreamer" target="_blank" rel="noopener" class="badge-inline badge-github"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt; Stars&lt;/span&gt;
 &lt;span class="badge-value" gh-repo="hzxie/City-Dreamer"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class='col-lg-2 col-md-3 col-4'&gt;&lt;p&gt;
&lt;img src="https://www.infinitescript.com/projects/CityDreamer/CityDreamer-Logo.webp" alt="CityDreamer Logo " loading="lazy"&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; CityDreamer learns to generate unbounded 3D cities from Google Earth imagery and OpenStreetMap.
&lt;br&gt;&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/projects/CityDreamer/CityDreamer-Teaser.webp" data-fancybox data-caption="Teaser"&gt;
 &lt;img src="https://www.infinitescript.com/projects/CityDreamer/CityDreamer-Teaser.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;h5 id="abstract"&gt;Abstract&lt;/h5&gt;
&lt;p&gt;In recent years, extensive research has focused on 3D natural scene generation, but the domain of 3D city generation has not received as much exploration. This is due to the greater challenges posed by 3D city generation, mainly because humans are more sensitive to structural distortions in urban environments. Additionally, generating 3D cities is more complex than 3D natural scenes since buildings, as objects of the same class, exhibit a wider range of appearances compared to the relatively consistent appearance of objects like trees in natural scenes. To address these challenges, we propose CityDreamer, a compositional generative model designed specifically for unbounded 3D cities, which separates the generation of building instances from other background objects, such as roads, green lands, and water areas, into distinct modules. Furthermore, we construct two datasets, OSM and GoogleEarth, containing a vast amount of real-world city imagery to enhance the realism of the generated 3D cities both in their layout and appearance. Through extensive experiments, CityDreamer has proven its superiority over state-of-the-art methods in generating a wide range of lifelike 3D cities.&lt;/p&gt;</description></item><item><title>Enable Microsoft Remote Desktop (RDP) on Linux</title><link>https://www.infinitescript.com/2022/12/enable-microsoft-remote-desktop-rdp-on-linux/</link><pubDate>Sun, 04 Dec 2022 14:15:00 +0000</pubDate><guid>https://www.infinitescript.com/2022/12/enable-microsoft-remote-desktop-rdp-on-linux/</guid><description>&lt;p&gt;Gnome 42 has a fantastic new feature that allows Linux users to share their desktops with Microsoft’s Remote Desktop Protocol remotely, namely GNOME remote desktop. In this tutorial, we’ll show you how you can use this great new feature.&lt;/p&gt;
&lt;p&gt;Without this feature, an alternative solution is &lt;a href="https://github.com/neutrinolabs/xrdp"&gt;xrdp&lt;/a&gt;. However, &lt;code&gt;xrdp&lt;/code&gt; cannot provide a consistent desktop environment as used in current Linux.&lt;/p&gt;
&lt;h3 id="enable-automatic-login-and-disable-screen-lock"&gt;Enable Automatic Login and Disable Screen Lock&lt;/h3&gt;
&lt;p&gt;For the remote desktop to work on GNOME, we have to &lt;strong&gt;enable automatic login&lt;/strong&gt; and &lt;strong&gt;disable automatic screen lock&lt;/strong&gt;. Otherwise, it is unable to connect to the Linux PC remotely from Windows 10/11 using the Remote Desktop Connection app.&lt;/p&gt;</description></item><item><title>Arch Linux ARM on an M1 Mac with VMware Fusion</title><link>https://www.infinitescript.com/2022/12/install-arch-linux-arm-on-macbooks-with-apple-silicon/</link><pubDate>Sun, 04 Dec 2022 07:58:45 +0000</pubDate><guid>https://www.infinitescript.com/2022/12/install-arch-linux-arm-on-macbooks-with-apple-silicon/</guid><description>&lt;p&gt;Arch Linux ARM is a simple and lightweight Linux distribution that is actually the official port of the Arch Linux operating system. It’s built especially for processors that support ARM architecture. With its use, the users can have full control of the system and shape their system according to their needs.&lt;/p&gt;
&lt;p&gt;In this tutorial, we provide the detailed procedure to install Arch Linux ARM on a Macbook Pro (with Apple M1 Pro) running VMware Fusion 13.0.&lt;/p&gt;</description></item><item><title>Build an iOS App from Scratch with SwiftUI</title><link>https://www.infinitescript.com/2022/07/build-an-ios-app-from-scratch-with-swiftui/</link><pubDate>Sun, 24 Jul 2022 15:22:00 +0000</pubDate><guid>https://www.infinitescript.com/2022/07/build-an-ios-app-from-scratch-with-swiftui/</guid><description>&lt;h3 id="background"&gt;Background&lt;/h3&gt;
&lt;p&gt;On Valentine&amp;rsquo;s day 2021 I put together a small static website, &lt;a href="https://love.haozhexie.com"&gt;Infinite Love&lt;/a&gt;, to hold a handful of pictures. Because it is static, adding a new photo means editing the source and redeploying, not something you want to do from your phone. So I set out to wrap it in an iOS app with a proper &amp;ldquo;new post&amp;rdquo; button.&lt;/p&gt;
&lt;p&gt;I had done plenty of web development, but this was my first time writing anything for iOS. What follows is the walkthrough I wish I&amp;rsquo;d had: taking an empty Xcode project all the way to an app running on a real iPhone.&lt;/p&gt;</description></item><item><title>Use Internet Explorer in Windows 11</title><link>https://www.infinitescript.com/2022/01/use-internet-explorer-in-windows-11/</link><pubDate>Tue, 11 Jan 2022 12:57:00 +0000</pubDate><guid>https://www.infinitescript.com/2022/01/use-internet-explorer-in-windows-11/</guid><description>&lt;h3 id="background"&gt;Background&lt;/h3&gt;
&lt;p&gt;With Windows 11, Microsoft has removed several outdated apps and features, including the long-hated Internet Explorer. However, some proprietary apps and legacy sites still require Internet Explorer functionality to run.&lt;/p&gt;
&lt;p&gt;Several posts suggest &lt;strong&gt;using the IE mode in Microsoft Edge&lt;/strong&gt;. However, it does not work for some websites: a few government service portals, for instance, still fail to load correctly in Edge&amp;rsquo;s IE mode.&lt;/p&gt;
&lt;h3 id="solution"&gt;Solution&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; Create a VB script, named &lt;code&gt;ie.vbs&lt;/code&gt; with the following content.&lt;/p&gt;</description></item><item><title>RMNet</title><link>https://www.infinitescript.com/project/rmnet/</link><pubDate>Sat, 06 Mar 2021 16:32:00 +0000</pubDate><guid>https://www.infinitescript.com/project/rmnet/</guid><description>&lt;h4 id="efficient-regional-memory-network-for-video-object-segmentation"&gt;Efficient Regional Memory Network for Video Object Segmentation&lt;/h4&gt;
&lt;p&gt;Haozhe Xie, Hongxun Yao, Shangchen Zhou, Shengping Zhang, Wenxiu Sun&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://arxiv.org/abs/2103.12934" target="_blank" rel="noopener" class="badge-inline badge-arxiv"&gt;
 &lt;span class="badge-label"&gt;arXiv&lt;/span&gt;
 &lt;span class="badge-value"&gt;2103.12934&lt;/span&gt;
&lt;/a&gt;


&lt;a href="https://github.com/hzxie/RMNet" target="_blank" rel="noopener" class="badge-inline badge-github"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt; Stars&lt;/span&gt;
 &lt;span class="badge-value" gh-repo="hzxie/RMNet"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/projects/RMNet/RMNet-Overview.webp" data-fancybox data-caption="Teaser"&gt;
 &lt;img src="https://www.infinitescript.com/projects/RMNet/RMNet-Overview.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;h5 id="abstract"&gt;Abstract&lt;/h5&gt;
&lt;p&gt;Recently, several Space-Time Memory based networks have shown that the object cues (e.g. video frames as well as the segmented object masks) from the past frames are useful for segmenting objects in the current frame. However, these methods exploit the information from the memory by global-to-global matching between the current and past frames, which lead to mismatching to similar objects and high computational complexity. To address these problems, we propose a novel local-to-local matching solution for semi-supervised VOS, namely Regional Memory Network (RMNet). In RMNet, the precise regional memory is constructed by memorizing local regions where the target objects appear in the past frames. For the current query frame, the query regions are tracked and predicted based on the optical flow estimated from the previous frame. The proposed local-to-local matching effectively alleviates the ambiguity of similar objects in both memory and query frames, which allows the information to be passed from the regional memory to the query region efficiently and effectively. Experimental results indicate that the proposed RMNet performs favorably against state-of-the-art methods on the DAVIS and YouTube-VOS datasets.&lt;/p&gt;</description></item><item><title>GRNet</title><link>https://www.infinitescript.com/project/grnet/</link><pubDate>Fri, 03 Jul 2020 06:42:00 +0000</pubDate><guid>https://www.infinitescript.com/project/grnet/</guid><description>&lt;h4 id="grnet-gridding-residual-network-for-dense-point-cloud-completion"&gt;GRNet: Gridding Residual Network for Dense Point Cloud Completion&lt;/h4&gt;
&lt;p&gt;Haozhe Xie, Hongxun Yao, Shangchen Zhou, Jiageng Mao, Shengping Zhang, Wenxiu Sun&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://arxiv.org/abs/2006.03761" target="_blank" rel="noopener" class="badge-inline badge-arxiv"&gt;
 &lt;span class="badge-label"&gt;arXiv&lt;/span&gt;
 &lt;span class="badge-value"&gt;2006.03761&lt;/span&gt;
&lt;/a&gt;


&lt;a href="https://github.com/hzxie/GRNet" target="_blank" rel="noopener" class="badge-inline badge-github"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt; Stars&lt;/span&gt;
 &lt;span class="badge-value" gh-repo="hzxie/GRNet"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/projects/GRNet/GRNet-Overview.webp" data-fancybox data-caption="Teaser"&gt;
 &lt;img src="https://www.infinitescript.com/projects/GRNet/GRNet-Overview.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;h5 id="abstract"&gt;Abstract&lt;/h5&gt;
&lt;p&gt;Estimating the complete 3D point cloud from an incomplete one is a key problem in many vision and robotics applications. Mainstream methods (e.g., PCN and TopNet) use Multi-layer Perceptrons (MLPs) to directly process point clouds, which may cause the loss of details because the structural and context of point clouds are not fully considered. To solve this problem, we introduce 3D grids as intermediate representations to regularize unordered point clouds. We therefore propose a novel Gridding Residual Network (GRNet) for point cloud completion. In particular, we devise two novel differentiable layers, named Gridding and Gridding Reverse, to convert between point clouds and 3D grids without losing structural information. We also present the differentiable Cubic Feature Sampling layer to extract features of neighboring points, which preserves context information. In addition, we design a new loss function, namely Gridding Loss, to calculate the L1 distance between the 3D grids of the predicted and ground truth point clouds, which is helpful to recover details. Experimental results indicate that the proposed GRNet performs favorably against state-of-the-art methods on the ShapeNet, Completion3D, and KITTI benchmarks.&lt;/p&gt;</description></item><item><title>DataNinja</title><link>https://www.infinitescript.com/project/dataninja/</link><pubDate>Tue, 18 Feb 2020 23:23:00 +0000</pubDate><guid>https://www.infinitescript.com/project/dataninja/</guid><description>&lt;h5 id="introduction"&gt;Introduction&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;DataNinja&lt;/strong&gt; is a full-stack machine learning workbench designed for object detection tasks. It provides a browser-based interface to manage datasets, configure and train detection models, evaluate results, and, most distinctively, push trained models to embedded hardware in a single workflow.&lt;/p&gt;
&lt;p&gt;The motivation behind the project was to bridge the gap between the server side (where GPUs live and models are trained) and the edge side (where inference actually runs, often on low-power embedded SoCs or FPGAs). Most open-source ML tools at the time handled one or the other; DataNinja treats them as a single, connected pipeline.&lt;/p&gt;</description></item><item><title>Stereo 3D Reconstruction</title><link>https://www.infinitescript.com/project/stereo-3d-reconstruction/</link><pubDate>Sun, 27 Oct 2019 06:42:00 +0000</pubDate><guid>https://www.infinitescript.com/project/stereo-3d-reconstruction/</guid><description>&lt;h4 id="toward-3d-object-reconstruction-from-stereo-images"&gt;Toward 3D Object Reconstruction from Stereo Images&lt;/h4&gt;
&lt;p&gt;Haozhe Xie, Hongxun Yao, Shangchen Zhou, Shengping Zhang, Xiaojun Tong, Wenxiu Sun&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://arxiv.org/abs/1910.08223" target="_blank" rel="noopener" class="badge-inline badge-arxiv"&gt;
 &lt;span class="badge-label"&gt;arXiv&lt;/span&gt;
 &lt;span class="badge-value"&gt;1910.08223&lt;/span&gt;
&lt;/a&gt;


&lt;a href="https://github.com/hzxie/Stereo-3D-Reconstruction" target="_blank" rel="noopener" class="badge-inline badge-github"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt; Stars&lt;/span&gt;
 &lt;span class="badge-value" gh-repo="hzxie/Stereo-3D-Reconstruction"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/projects/Stereo-3D-Reconstruction/Stereo-3D-Reconstruction-Overview.webp" data-fancybox data-caption="Teaser"&gt;
 &lt;img src="https://www.infinitescript.com/projects/Stereo-3D-Reconstruction/Stereo-3D-Reconstruction-Overview.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;h5 id="abstract"&gt;Abstract&lt;/h5&gt;
&lt;p&gt;Inferring the complete 3D shape of an object from an RGB image has shown impressive results, however, existing methods rely primarily on recognizing the most similar 3D model from the training set to solve the problem. These methods suffer from poor generalization and may lead to low-quality reconstructions for unseen objects. Nowadays, stereo cameras are pervasive in emerging devices such as dual-lens smartphones and robots, which enables the use of the two-view nature of stereo images to explore the 3D structure and thus improve the reconstruction performance. In this paper, we propose a new deep learning framework for reconstructing the 3D shape of an object from a pair of stereo images, which reasons about the 3D structure of the object by taking bidirectional disparities and feature correspondences between the two views into account. Besides, we present a large-scale synthetic benchmarking dataset, namely StereoShapeNet, containing 1,052,976 pairs of stereo images rendered from ShapeNet along with the corresponding bidirectional depth and disparity maps. Experimental results on the StereoShapeNet benchmark demonstrate that the proposed framework outperforms the state-of-the-art methods.&lt;/p&gt;</description></item><item><title>Compile Caffe without Root Privileges</title><link>https://www.infinitescript.com/2019/07/compile-caffe-without-root-privileges/</link><pubDate>Wed, 24 Jul 2019 09:58:15 +0000</pubDate><guid>https://www.infinitescript.com/2019/07/compile-caffe-without-root-privileges/</guid><description>&lt;p&gt;On shared servers or HPC clusters, you often don&amp;rsquo;t have &lt;code&gt;sudo&lt;/code&gt; access, which makes installing system-level dependencies impossible. In this tutorial, we are going to introduce how to install Caffe entirely in user space, without root privileges. We assume that you have installed Anaconda and CUDA on your PC.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This tutorial is based on CUDA 9.0, Caffe 1.0, protobuf 3.2.0, and OpenCV 3.4.3. You may need to adjust the version numbers for your own setup.&lt;/p&gt;</description></item><item><title>Accelerate WordPress with CDN and Cache Servers</title><link>https://www.infinitescript.com/2019/06/accelerate-wordpress-with-cdn-and-cache-servers/</link><pubDate>Sat, 01 Jun 2019 06:50:36 +0000</pubDate><guid>https://www.infinitescript.com/2019/06/accelerate-wordpress-with-cdn-and-cache-servers/</guid><description>&lt;p&gt;

&lt;a href="https://www.infinitescript.com/2019/06/InfiniteScript-Architecture.webp" data-fancybox data-caption="InfiniteScript-Architecture"&gt;
 &lt;img src="https://www.infinitescript.com/2019/06/InfiniteScript-Architecture.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;p&gt;It has been a long time since I last wrote a blog post. In the past few days, I updated the architecture of Infinite Script to accelerate the speed for Chinese users. In this article, I share the new architecture of our website with you, illustrated in the figure above.&lt;/p&gt;
&lt;h3 id="optimizing-a-cdn-for-static-content-delivery"&gt;Optimizing a CDN for Static Content Delivery&lt;/h3&gt;
&lt;p&gt;Static content does not change over a period of time. If it does change, the changes are predictable. Static content includes images, CSS sheets, JavaScripts, and PDF files. Because of this, CDNs can cache a copy of the content at their edge servers. They can then serve it whenever a client requests it. CDNs are best at optimizing the delivery of static content from edge servers to users. Therefore, we use the CDN from &lt;a href="https://alibabacloud.com"&gt;Alibaba Cloud&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Pix2Vox</title><link>https://www.infinitescript.com/project/pix2vox/</link><pubDate>Tue, 30 Apr 2019 14:58:00 +0000</pubDate><guid>https://www.infinitescript.com/project/pix2vox/</guid><description>&lt;h4 id="pix2vox-context-aware-3d-reconstruction-from-single-and-multi-view-images"&gt;Pix2Vox: Context-aware 3D Reconstruction from Single and Multi-view Images&lt;/h4&gt;
&lt;p&gt;Haozhe Xie, Hongxun Yao, Xiaoshuai Sun, Shangchen Zhou, Shengping Zhang, Wenxiu Sun&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://arxiv.org/abs/1901.11153" target="_blank" rel="noopener" class="badge-inline badge-arxiv"&gt;
 &lt;span class="badge-label"&gt;arXiv&lt;/span&gt;
 &lt;span class="badge-value"&gt;1901.11153&lt;/span&gt;
&lt;/a&gt;


&lt;a href="https://github.com/hzxie/Pix2Vox" target="_blank" rel="noopener" class="badge-inline badge-github"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt; Stars&lt;/span&gt;
 &lt;span class="badge-value" gh-repo="hzxie/Pix2Vox"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/projects/Pix2Vox/Pix2Vox-Overview.webp" data-fancybox data-caption="Teaser"&gt;
 &lt;img src="https://www.infinitescript.com/projects/Pix2Vox/Pix2Vox-Overview.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;h5 id="abstract"&gt;Abstract&lt;/h5&gt;
&lt;p&gt;Recovering the 3D representation of an object from single-view or multi-view RGB images by deep neural networks has attracted increasing attention in the past few years. Several mainstream works (e.g., 3D-R2N2) use recurrent neural networks (RNNs) to fuse multiple feature maps extracted from input images sequentially. However, when given the same set of input images with different orders, RNN-based approaches are unable to produce consistent reconstruction results. Moreover, due to long-term memory loss, RNNs cannot fully exploit input images to refine reconstruction results. To solve these problems, we propose a novel framework for single-view and multi-view 3D reconstruction, named Pix2Vox. By using a well-designed encoder-decoder, it generates a coarse 3D volume from each input image. Then, a context-aware fusion module is introduced to adaptively select high-quality reconstructions for each part (e.g., table legs) from different coarse 3D volumes to obtain a fused 3D volume. Finally, a refiner further refines the fused 3D volume to generate the final output. Experimental results on the ShapeNet and Pix3D benchmarks indicate that the proposed Pix2Vox outperforms state-of-the-arts by a large margin. Furthermore, the proposed method is 24 times faster than 3D-R2N2 in terms of backward inference time. The experiments on ShapeNet unseen 3D categories have shown the superior generalization abilities of our method.&lt;/p&gt;</description></item><item><title>Build PyTorch Extensions with CUDA and CFFI</title><link>https://www.infinitescript.com/2018/03/build-pytorch-extensions-with-cuda-and-cffi/</link><pubDate>Wed, 28 Mar 2018 12:30:58 +0000</pubDate><guid>https://www.infinitescript.com/2018/03/build-pytorch-extensions-with-cuda-and-cffi/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Deprecated warning&lt;/strong&gt;: PyTorch 1.0+ replaced the old TH/THC tensor backend with ATen, and the &lt;code&gt;torch.utils.ffi&lt;/code&gt; toolchain described here was removed along the way. If you target PyTorch 1.0 or newer, write your extensions with &lt;code&gt;torch.utils.cpp_extension&lt;/code&gt; instead, see &lt;a href="https://github.com/hzxie/GRNet/tree/master/extensions"&gt;this GitHub repository&lt;/a&gt; for a working example. The article below documents the older CFFI-based approach and is kept for reference.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Python is one of the most popular languages for deep learning, but as an interpreted language it is slow at tight numerical loops. Most of the time this does not matter, because the heavy lifting happens inside libraries written in C and CUDA. It starts to matter the moment you need an operation that the framework does not provide out of the box.&lt;/p&gt;</description></item><item><title>Getting Started with JUnit 5: Test your Spring MVC Application with it</title><link>https://www.infinitescript.com/2018/02/getting-started-with-junit-5-test-your-spring-mvc-application-with-it/</link><pubDate>Sat, 24 Feb 2018 07:10:14 +0000</pubDate><guid>https://www.infinitescript.com/2018/02/getting-started-with-junit-5-test-your-spring-mvc-application-with-it/</guid><description>&lt;p&gt;In this post, we describe how to use JUnit 5 to test your Spring MVC application with Maven. Before diving into the &lt;code&gt;pom.xml&lt;/code&gt;, it helps to know that JUnit 5 is not a single library but three sub-projects: the &lt;strong&gt;Platform&lt;/strong&gt; (the foundation that discovers and launches tests), &lt;strong&gt;Jupiter&lt;/strong&gt; (the new programming and extension model you actually write tests against), and &lt;strong&gt;Vintage&lt;/strong&gt; (a backward-compatible engine that still runs your old JUnit 3/4 tests). This split is what makes the Maven coordinates below, and the &lt;code&gt;SpringExtension&lt;/code&gt; we plug in later, much less mysterious.&lt;/p&gt;</description></item><item><title>Weighted Voxel</title><link>https://www.infinitescript.com/project/weighted-voxel/</link><pubDate>Sat, 03 Feb 2018 03:54:00 +0000</pubDate><guid>https://www.infinitescript.com/project/weighted-voxel/</guid><description>&lt;h4 id="weighted-voxel-a-novel-voxel-representation-for-3d-reconstruction"&gt;Weighted Voxel: a novel voxel representation for 3D reconstruction&lt;/h4&gt;
&lt;p&gt;Haozhe Xie, Hongxun Yao, Xiaoshuai Sun, Shangchen Zhou, Xiaojun Tong&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/projects/Weighted-Voxel/Weighted-Voxel-Overview.webp" data-fancybox data-caption="Teaser"&gt;
 &lt;img src="https://www.infinitescript.com/projects/Weighted-Voxel/Weighted-Voxel-Overview.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;h5 id="abstract"&gt;Abstract&lt;/h5&gt;
&lt;p&gt;3D reconstruction has been attracting increasing attention in the past few years. With the surge of deep neural networks, the performance of 3D reconstruction has been improved significantly. However, the voxel reconstructed by extant approaches usually contains lots of noise and leads to heavy computation. In this paper, we define a new voxel representation, named Weighted Voxel. It provides more abundant information, facilitating the subsequent learning and generalization steps. Unlike regular voxel which consists of zero-one, the proposed Weighted Voxel makes full use of the structure information of voxels. Experimental results demonstrate that Weighted Voxel not only performs better in reconstruction but also takes less time in training.&lt;/p&gt;</description></item><item><title>Lua in a Nutshell: A Quick Tutorial for Lua</title><link>https://www.infinitescript.com/2018/01/lua-in-a-nutshell-a-quick-tutorial-for-lua/</link><pubDate>Tue, 09 Jan 2018 02:10:34 +0000</pubDate><guid>https://www.infinitescript.com/2018/01/lua-in-a-nutshell-a-quick-tutorial-for-lua/</guid><description>&lt;p&gt;I&amp;rsquo;m reading source code written with Torch these days. &lt;a href="http://torch.ch/"&gt;Torch&lt;/a&gt; is a well-known deep learning framework written in Lua.&lt;/p&gt;
&lt;p&gt;So I summarize its grammar and provide a quick tutorial here.&lt;/p&gt;
&lt;h3 id="getting-started"&gt;Getting Started&lt;/h3&gt;
&lt;p&gt;Like many languages, Lua is case-sensitive.&lt;/p&gt;
&lt;p&gt;The following code outputs &amp;ldquo;Hello World&amp;rdquo; with Lua. Note that the semicolon at the end of a line is optional, like JavaScript.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-lua" data-lang="lua"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Hello World&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can use the interpreter of Lua in the command line:&lt;/p&gt;</description></item><item><title>Similar Patient Finder</title><link>https://www.infinitescript.com/project/similar-patient-finder/</link><pubDate>Sun, 18 Jun 2017 09:23:00 +0000</pubDate><guid>https://www.infinitescript.com/project/similar-patient-finder/</guid><description>&lt;a href="https://gitlab.com/hzxie/similar-patient-finder" target="_blank" rel="noopener" class="badge-inline"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-gitlab"&gt;&lt;/i&gt; GitLab&lt;/span&gt;
 &lt;span class="badge-value" style="background: #fc6d26"&gt;Open Source&lt;/span&gt;
&lt;/a&gt;


&lt;h5 id="introduction"&gt;Introduction&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Similar Patient Finder (SPF)&lt;/strong&gt; is a web-based clinical decision support tool that helps physicians explore patient similarities at the molecular level. Given a dataset of high-throughput gene expression profiles, optionally paired with clinical metadata, SPF runs a configurable analysis pipeline and renders the results as an interactive 2D patient map, making it easier to identify disease subtypes, staging, and appropriate therapy options.&lt;/p&gt;
&lt;p&gt;The motivation was that raw genomic data is too high-dimensional for direct inspection. SPF bridges the gap between bioinformatics methods and clinical workflows by wrapping a full preprocessing-to-visualization pipeline in a browser-based interface that requires no command-line work from the physician.&lt;/p&gt;</description></item><item><title>Making Requests Non-blocking in Tornado</title><link>https://www.infinitescript.com/2017/06/making-requests-non-blocking-in-tornado/</link><pubDate>Mon, 12 Jun 2017 11:58:46 +0000</pubDate><guid>https://www.infinitescript.com/2017/06/making-requests-non-blocking-in-tornado/</guid><description>&lt;p&gt;Tornado is one of the most popular web frameworks for Python, which is based on a single thread IO loop (aka event loop). You can handle high concurrency with optimal performance. However, Tornado is single-threaded (in its common usage, although it supports multiple threads in advanced configurations), therefore any &amp;ldquo;blocking&amp;rdquo; task will block the whole server. This means that a blocking task will not allow the framework to pick the next task waiting to be processed.&lt;/p&gt;</description></item><item><title>Install QQ/TIM in Linux with Wine</title><link>https://www.infinitescript.com/2017/03/install-qq-in-linux-with-wine/</link><pubDate>Fri, 24 Mar 2017 04:45:43 +0000</pubDate><guid>https://www.infinitescript.com/2017/03/install-qq-in-linux-with-wine/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post describes a Wine-based workaround from 2017. Tencent now ships an official native Linux client for QQ, rebuilt on the NT architecture and available as &lt;code&gt;deb&lt;/code&gt;, &lt;code&gt;rpm&lt;/code&gt;, and &lt;code&gt;AppImage&lt;/code&gt; packages for both x86-64 and ARM. You should grab the native build from &lt;a href="https://im.qq.com/linuxqq/"&gt;im.qq.com/linuxqq&lt;/a&gt; instead; the Wine instructions below are kept only for historical reference.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This tutorial introduces how to install QQ/TIM in Linux with Wine, which had been tested on ArchLinux with Wine 2.4.&lt;/p&gt;</description></item><item><title>Single Sign-On with Apereo CAS</title><link>https://www.infinitescript.com/2017/02/configuring-apereo-cas/</link><pubDate>Tue, 14 Feb 2017 14:04:16 +0000</pubDate><guid>https://www.infinitescript.com/2017/02/configuring-apereo-cas/</guid><description>&lt;p&gt;This tutorial walks a newcomer through standing up an &lt;a href="https://www.apereo.org/projects/cas"&gt;Apereo CAS&lt;/a&gt; server for single sign-on and wiring a Java web application to it as a client. The complete CAS 7.1 server is available as a companion WAR overlay on &lt;a href="https://gitlab.com/hzxie/apereo-cas-webapp"&gt;GitLab&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been rewritten for Apereo CAS 7.x. It was originally written for CAS 4.x, which you set up by copying the server source and hand-editing a pile of XML files (&lt;code&gt;deployerConfigContext.xml&lt;/code&gt;, &lt;code&gt;ticketGrantingTicketCookieGenerator.xml&lt;/code&gt;, …). CAS has changed completely since: the &lt;code&gt;org.jasig.cas&lt;/code&gt; packages became &lt;code&gt;org.apereo.cas&lt;/code&gt;, and the server is now built as a &lt;strong&gt;Spring Boot WAR overlay&lt;/strong&gt; configured through a single &lt;code&gt;cas.properties&lt;/code&gt; file.&lt;/p&gt;</description></item><item><title>Create a Desktop App with Angular 2 and Electron</title><link>https://www.infinitescript.com/2016/12/create-a-desktop-app-with-angular-2-and-electron/</link><pubDate>Mon, 12 Dec 2016 03:30:53 +0000</pubDate><guid>https://www.infinitescript.com/2016/12/create-a-desktop-app-with-angular-2-and-electron/</guid><description>&lt;p&gt;Last week, I took part in the Google Developer Day held in Beijing. The Angular team introduced their new Angular 2. Angular is a development platform for building mobile and desktop web applications.&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/2016/12/Google-Developer-Day-2016-Beijing.webp" data-fancybox data-caption="Google-Developer-Day-2016-Beijing"&gt;
 &lt;img src="https://www.infinitescript.com/2016/12/Google-Developer-Day-2016-Beijing.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;p&gt;This tutorial shows how to configure and use Angular 2 web components with the Electron framework for creating native cross-platform applications with web technologies.&lt;/p&gt;
&lt;p&gt;As recommended by the Angular team, TypeScript will be used throughout this tutorial. TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Any browser. Any host. Any OS. Open-source.&lt;/p&gt;</description></item><item><title>Gradient Boosting Decision Tree</title><link>https://www.infinitescript.com/2016/10/gradient-boosting-decision-tree/</link><pubDate>Sun, 09 Oct 2016 14:52:39 +0000</pubDate><guid>https://www.infinitescript.com/2016/10/gradient-boosting-decision-tree/</guid><description>&lt;p&gt;In the previous article, we&amp;rsquo;ve talked about &lt;a href="https://www.infinitescript.com/2016/09/adaboost/"&gt;AdaBoost&lt;/a&gt; which combines output of weak learners into a weighted sum that represents the final output of the boosted classifier. If you know little about AdaBoost or additive model, we highly recommend you read the article first.&lt;/p&gt;
&lt;p&gt;Gradient boosting is a machine learning technique for regression and classification problems, which produces a prediction model in the form of an ensemble of weak prediction models, typically decision trees. It builds the model in a stage-wise fashion like other boosting methods do, and it generalizes them by allowing optimization of an arbitrary differentiable loss function.&lt;/p&gt;</description></item><item><title>AdaBoost</title><link>https://www.infinitescript.com/2016/09/adaboost/</link><pubDate>Thu, 15 Sep 2016 14:34:54 +0000</pubDate><guid>https://www.infinitescript.com/2016/09/adaboost/</guid><description>&lt;p&gt;AdaBoost, short for &amp;ldquo;Adaptive Boosting&amp;rdquo;, is a machine learning meta-algorithm formulated by Yoav Freund and Robert Schapire who won the Gödel Prize in 2003 for their work. The output of the other learning algorithms (weak learners) is combined into a weighted sum that represents the final output of the boosted classifier.&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/2016/09/AdaBoost.webp" data-fancybox data-caption="Weighted combination of weak classifiers in AdaBoost"&gt;
 &lt;img src="https://www.infinitescript.com/2016/09/AdaBoost.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;p&gt;AdaBoost is adaptive in the sense that subsequent weak learners are tweaked in favor of those instances misclassified by previous classifiers. AdaBoost is sensitive to noisy data and outliers and is quite robust to overfitting.&lt;/p&gt;</description></item><item><title>Random Forest</title><link>https://www.infinitescript.com/2016/08/random-forest/</link><pubDate>Mon, 22 Aug 2016 14:37:10 +0000</pubDate><guid>https://www.infinitescript.com/2016/08/random-forest/</guid><description>&lt;p&gt;Random forests are an ensemble learning method for classification, regression, and other tasks. They operate by constructing a multitude of decision trees at training time and outputting the class that is the mode of the classes (classification) or the mean prediction (regression) of the individual trees. Each tree is grown on a random subset of the training data and considers only a random subset of the features at each split, so the forest as a whole corrects for a decision tree&amp;rsquo;s habit of overfitting its training set: when it is time to make a prediction, the trees vote and the majority wins.&lt;/p&gt;</description></item><item><title>Setup Raspbian on Raspberry Pi</title><link>https://www.infinitescript.com/2016/06/setup-raspbian-on-raspberry-pi/</link><pubDate>Thu, 30 Jun 2016 01:57:12 +0000</pubDate><guid>https://www.infinitescript.com/2016/06/setup-raspbian-on-raspberry-pi/</guid><description>&lt;p&gt;This post explains how to install Raspberry Pi OS and set up a Raspberry Pi from scratch. You will need another computer with an SD (or MicroSD) card reader to write the image.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated for Raspberry Pi OS and Raspberry Pi Imager&lt;/strong&gt;. Raspbian was renamed &lt;em&gt;Raspberry Pi OS&lt;/em&gt; in 2020, and the old &amp;ldquo;download a &lt;code&gt;.zip&lt;/code&gt;, unzip the &lt;code&gt;.img&lt;/code&gt;, then flash it with Win32 Disk Imager&amp;rdquo; routine has been replaced by the official &lt;strong&gt;Raspberry Pi Imager&lt;/strong&gt;, which downloads and writes the image in one step and can pre-configure SSH, Wi-Fi, and your user account before the first boot.&lt;/p&gt;</description></item><item><title>Internet Protocol v6</title><link>https://www.infinitescript.com/2016/05/internet-protocol-v6/</link><pubDate>Sat, 14 May 2016 00:33:03 +0000</pubDate><guid>https://www.infinitescript.com/2016/05/internet-protocol-v6/</guid><description>&lt;p&gt;Internet Protocol version 6 (IPv6) is the current version of the Internet Protocol (IP). The IETF developed it to solve IPv4 address exhaustion, which has since become reality: IANA handed out its last IPv4 blocks in 2011, and the regional registries followed soon after. IPv6 is no longer a future technology but a deployed one, carrying more than 40% of the traffic reaching Google by the mid-2020s.&lt;/p&gt;
&lt;p&gt;IPv6 uses a 128-bit address, in theory allowing 2&lt;sup&gt;128&lt;/sup&gt; (about 3.4×10&lt;sup&gt;38&lt;/sup&gt;) addresses, although a number of ranges are reserved or excluded from ordinary use. That is vastly more than the roughly 4.3 billion addresses of 32-bit IPv4. The two protocols are not interoperable on the wire, so hosts generally run both at once (&lt;em&gt;dual stack&lt;/em&gt;) during the long transition.&lt;/p&gt;</description></item><item><title>Setup IPv6 NAT on OpenWrt Router</title><link>https://www.infinitescript.com/2016/04/setup-ipv6-nat-on-openwrt-router/</link><pubDate>Thu, 28 Apr 2016 14:33:45 +0000</pubDate><guid>https://www.infinitescript.com/2016/04/setup-ipv6-nat-on-openwrt-router/</guid><description>&lt;h3 id="introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;This tutorial is a HowTo for setting up IPv6 NAT (NAT66) on an OpenWrt router.&lt;/p&gt;
&lt;p&gt;Why would anyone want NAT on IPv6, when the whole point of the protocol was to give every device a globally routable address? In my case the campus network (China Education and Research Network, CERNET) authenticates per device and only assigns an IPv6 address to a device that has logged in. Every other device behind the router is left without connectivity. NAT66 works around this: the router authenticates once, then masquerades all LAN traffic behind that single authenticated IPv6 address, so every device on the network reaches the IPv6 Internet through it.&lt;/p&gt;</description></item><item><title>April Fools Pranks with a Squid Proxy Server</title><link>https://www.infinitescript.com/2016/04/april-fools-pranks-with-a-squid-proxy-server/</link><pubDate>Fri, 01 Apr 2016 04:30:12 +0000</pubDate><guid>https://www.infinitescript.com/2016/04/april-fools-pranks-with-a-squid-proxy-server/</guid><description>&lt;h3 id="introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Note: This guide was tested using Ubuntu Server 14.04.4 LTS.&lt;/p&gt;
&lt;p&gt;This is a HowTo for setting up Upside-Down-Ternet on Ubuntu. Basically, when a user browses the web, all the images are flipped upside-down. While it&amp;rsquo;s not useful, it&amp;rsquo;s quite a good April Fool&amp;rsquo;s prank.&lt;/p&gt;
&lt;p&gt;The process uses a transparent proxy, web server, and script to flip the images. Web traffic is routed to the proxy, instead of the default gateway, which is intercepted by the proxy which then downloads and modifies the images and then serves them back to the client browser.&lt;/p&gt;</description></item><item><title>Signing commits using GPG in Git</title><link>https://www.infinitescript.com/2016/02/signing-commits-using-gpg-in-git/</link><pubDate>Mon, 29 Feb 2016 14:06:31 +0000</pubDate><guid>https://www.infinitescript.com/2016/02/signing-commits-using-gpg-in-git/</guid><description>&lt;p&gt;Git is cryptographically secure, but it&amp;rsquo;s not foolproof. If you take work from others on the internet and want to verify that commits are actually from a trusted source, Git can sign and verify work with GPG.&lt;/p&gt;
&lt;h3 id="generate-a-gpg-key"&gt;Generate a GPG Key&lt;/h3&gt;
&lt;p&gt;To sign anything, you first need GPG installed and a personal key. Check whether you already have one:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gpg --list-keys
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/home/hzxie/.gnupg/pubring.gpg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pub 4096R/3DBF9592 2016-02-15
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uid Haozhe Xie (GPG key for GitHub) &amp;lt;noreply@haozhexie.com&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sub 4096R/BFEB9969 2016-02-15
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the list is empty, generate a key. On GPG 2.1 and later, &lt;code&gt;--full-generate-key&lt;/code&gt; lets you choose the algorithm and a 4096-bit RSA key, which GitHub recommends:&lt;/p&gt;</description></item><item><title>Random Projection</title><link>https://www.infinitescript.com/2016/01/random-projection/</link><pubDate>Sun, 10 Jan 2016 02:13:13 +0000</pubDate><guid>https://www.infinitescript.com/2016/01/random-projection/</guid><description>&lt;h3 id="introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;In mathematics and statistics, random projection is a technique used to reduce the dimensionality of a set of points which lie in Euclidean space. Random projection methods are known for their simplicity and low error rates compared with other dimensionality-reduction techniques, and experiments show that they preserve pairwise distances well.&lt;/p&gt;
&lt;p&gt;Consider a problem as follows: We have a set of $n$ points in a high-dimensional Euclidean space $\mathbf{R}^d$. We want to project the points onto a space of low dimension $\mathbf{R}^k$ in such a way that pairwise distances of the points are approximately the same as before.&lt;/p&gt;</description></item><item><title>Decision Tree</title><link>https://www.infinitescript.com/2015/12/decision-tree/</link><pubDate>Thu, 03 Dec 2015 11:06:57 +0000</pubDate><guid>https://www.infinitescript.com/2015/12/decision-tree/</guid><description>&lt;h3 id="whats-a-decision-tree"&gt;What’s a decision tree?&lt;/h3&gt;
&lt;p&gt;A decision tree is a flowchart-like structure in which each internal node represents a &amp;ldquo;test&amp;rdquo; on an attribute (e.g. whether &lt;code&gt;Income&lt;/code&gt; is below 50K), each branch represents an outcome of that test, and each leaf node holds a prediction: a class label for classification, or a value for regression. A path from the root to a leaf is therefore a chain of conditions that ends in a decision.&lt;/p&gt;</description></item><item><title>Introduction to Java Virtual Machine</title><link>https://www.infinitescript.com/2015/08/introduction-to-java-virtual-machine-jvm/</link><pubDate>Fri, 07 Aug 2015 07:27:00 +0000</pubDate><guid>https://www.infinitescript.com/2015/08/introduction-to-java-virtual-machine-jvm/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This article has been &lt;strong&gt;updated for Java 8 and later&lt;/strong&gt;. The original 2015 version described the &lt;em&gt;Permanent Generation&lt;/em&gt; (PermGen), which Java 8 removed and replaced with &lt;em&gt;Metaspace&lt;/em&gt; (&lt;a href="https://openjdk.org/jeps/122"&gt;JEP 122&lt;/a&gt;); the garbage-collection section has also been rewritten to cover the modern HotSpot collectors (G1, ZGC, Shenandoah). The behaviors described here are those of HotSpot; other JVM implementations may differ.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="what-is-jvm"&gt;What is JVM?&lt;/h3&gt;
&lt;p&gt;The Java Virtual Machine is the cornerstone of the Java platform. It is the component responsible for Java&amp;rsquo;s hardware and operating-system independence, the small size of its compiled code, and its ability to protect users from malicious programs.&lt;/p&gt;</description></item><item><title>Use Server-Sent Events in Spring MVC</title><link>https://www.infinitescript.com/2015/06/use-server-sent-events-in-spring-mvc/</link><pubDate>Tue, 30 Jun 2015 02:55:32 +0000</pubDate><guid>https://www.infinitescript.com/2015/06/use-server-sent-events-in-spring-mvc/</guid><description>&lt;p&gt;Server-Sent Events (SSE) let a server push a continuous stream of updates to the browser over a single long-lived HTTP connection. Spring has supported them since version 4.2 through the &lt;code&gt;SseEmitter&lt;/code&gt; class, and the API has been stable ever since. This post is a practical how-to: we start with a bare &lt;code&gt;SseEmitter&lt;/code&gt;, then build the setup I actually use in production, streaming events from a message queue to the browser.&lt;/p&gt;</description></item><item><title>Use WebSockets with Spring, SockJS and Stomp</title><link>https://www.infinitescript.com/2015/05/use-websockets-with-spring-sockjs-and-stomp/</link><pubDate>Wed, 20 May 2015 14:42:45 +0000</pubDate><guid>https://www.infinitescript.com/2015/05/use-websockets-with-spring-sockjs-and-stomp/</guid><description>&lt;p&gt;This guide walks you through building a &amp;ldquo;hello world&amp;rdquo; application that sends messages back and forth between a browser and the server. WebSocket is a very thin, lightweight layer on top of TCP, which makes it a natural place to run a &lt;em&gt;subprotocol&lt;/em&gt; that gives the raw bytes some structure. Here we use &lt;a href="https://en.wikipedia.org/wiki/Streaming_Text_Oriented_Messaging_Protocol"&gt;STOMP&lt;/a&gt; messaging with Spring to create an interactive web application.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated for Spring 6/7&lt;/strong&gt;. The WebSocket setup now uses &lt;code&gt;@EnableWebSocketMessageBroker&lt;/code&gt; Java configuration and the modern &lt;code&gt;@stomp/stompjs&lt;/code&gt; client. The original 2015 version targeted Spring 4.1 with XML &lt;code&gt;&amp;lt;websocket:message-broker&amp;gt;&lt;/code&gt; config and the legacy &lt;code&gt;Stomp.over()&lt;/code&gt; API; both are obsolete and have been replaced throughout.&lt;/p&gt;</description></item><item><title>Spring MVC MyBatis Integration Tutorial</title><link>https://www.infinitescript.com/2015/05/spring-mvc-mybatis-integration-tutorial/</link><pubDate>Sun, 03 May 2015 03:20:08 +0000</pubDate><guid>https://www.infinitescript.com/2015/05/spring-mvc-mybatis-integration-tutorial/</guid><description>&lt;p&gt;A while back I built a project on Spring MVC and Hibernate, then wanted to see how MyBatis compares. This article shows how to wire MyBatis into Spring MVC, and how to let Spring manage MyBatis transactions for you.&lt;/p&gt;
&lt;p&gt;A database transaction is an all-or-nothing unit of work: either every statement in it takes effect, or none of them does. We lean on that property at the very end, where a single bad row makes an entire batch insert roll back.&lt;/p&gt;</description></item><item><title>Verwandlung Online Judge</title><link>https://www.infinitescript.com/project/verwandlung-online-judge/</link><pubDate>Thu, 30 Apr 2015 18:45:00 +0000</pubDate><guid>https://www.infinitescript.com/project/verwandlung-online-judge/</guid><description>&lt;p&gt;
&lt;a href="https://github.com/hzxie/voj" target="_blank" rel="noopener" class="badge-inline badge-github"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-github"&gt;&lt;/i&gt; Stars&lt;/span&gt;
 &lt;span class="badge-value" gh-repo="hzxie/voj"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt;









&lt;a href="https://verwandlung.org" target="_blank" rel="noopener" class="badge-inline"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fas fa-globe"&gt;&lt;/i&gt; Live&lt;/span&gt;
 &lt;span class="badge-value" style="background: #1283c3"&gt;verwandlung.org&lt;/span&gt;
&lt;/a&gt;

&lt;/p&gt;
&lt;h5 id="introduction"&gt;Introduction&lt;/h5&gt;
&lt;p&gt;An &lt;strong&gt;Online Judge (OJ)&lt;/strong&gt; is a web-based system used in competitive programming. It presents algorithmic problems, accepts code submissions in various languages, automatically compiles and runs the code against hidden test cases, and immediately tells the user whether their solution is correct, all without any human involvement in the grading process. Platforms like LeetCode and Codeforces are well-known examples.&lt;/p&gt;
&lt;p&gt;Verwandlung Online Judge is a self-hostable, open-source OJ built for running your own contests or practice environment. Its main distinguishing feature at the time of release was cross-platform support: most open-source OJs were Linux-only due to their reliance on Linux-specific sandboxing APIs, whereas Verwandlung runs natively on both Windows and Linux.&lt;/p&gt;</description></item><item><title>Use CDN Service in Spring MVC</title><link>https://www.infinitescript.com/2015/04/use-cdn-service-in-spring-mvc/</link><pubDate>Thu, 02 Apr 2015 15:53:52 +0000</pubDate><guid>https://www.infinitescript.com/2015/04/use-cdn-service-in-spring-mvc/</guid><description>&lt;p&gt;When I deployed &lt;a href="https://www.infinitescript.com/project/testzilla/"&gt;TestZilla&lt;/a&gt; on &lt;a href="https://www.aliyun.com"&gt;Aliyun&lt;/a&gt; Elastic Compute Service, growing traffic made it worth offloading static files (images, CSS, and JavaScript) to a CDN. At the time there was little guidance on wiring a CDN into Spring MVC, so I &lt;a href="https://stackoverflow.com/questions/28734196/how-to-use-cdn-in-spring-mvc"&gt;asked on Stack Overflow&lt;/a&gt; and ended up with the setup below. The idea is simple: keep the CDN host in a single property and inject it wherever your JSP views reference static assets.&lt;/p&gt;</description></item><item><title>Create Unit Testing Cases in Zend Framework</title><link>https://www.infinitescript.com/2015/03/create-unit-testing-cases-in-zend-framework/</link><pubDate>Tue, 03 Mar 2015 02:30:45 +0000</pubDate><guid>https://www.infinitescript.com/2015/03/create-unit-testing-cases-in-zend-framework/</guid><description>&lt;p&gt;A solid unit test suite is essential for ongoing development in large projects, especially those with many people involved. Going back and manually testing every individual component of an application after every change is impractical. Your unit tests will help alleviate that by automatically testing your application’s components and alerting you when something is not working the same way it was when you wrote your tests.&lt;/p&gt;
&lt;p&gt;The Zend Framework 2 API uses PHPUnit, and so does this tutorial application. A detailed explanation of unit testing is beyond the scope of this tutorial, so we will only provide sample tests for the components in the pages that follow. This tutorial assumes that you already have PHPUnit installed.&lt;/p&gt;</description></item><item><title>Create CDN View Helper in Zend Framework 2</title><link>https://www.infinitescript.com/2015/02/create-cdn-view-helper-in-zend-framework-2/</link><pubDate>Thu, 26 Feb 2015 11:26:08 +0000</pubDate><guid>https://www.infinitescript.com/2015/02/create-cdn-view-helper-in-zend-framework-2/</guid><description>&lt;p&gt;In this article, you will learn how to create a custom view helper in Zend Framework 2. A concrete example will be used; a helper which generates links for a subdomain, intended for storing static files. This is especially useful if you wish to use a Content Delivery Network (CDN). With very little modification, the helper can be made generic to support links to subdomains for all purposes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Zend Framework 2 has reached end of life. In 2019 the project moved to the Linux Foundation and was renamed &lt;a href="https://getlaminas.org/"&gt;Laminas&lt;/a&gt;, so the &lt;code&gt;Zend\&lt;/code&gt; namespaces below are now &lt;code&gt;Laminas\&lt;/code&gt; (for example &lt;code&gt;Zend\View\Helper\AbstractHelper&lt;/code&gt; becomes &lt;code&gt;Laminas\View\Helper\AbstractHelper&lt;/code&gt;). The view-helper mechanics are otherwise unchanged, so this post is kept as a historical walkthrough. For a real project, run the namespaces through the &lt;a href="https://docs.laminas.dev/migration/"&gt;Laminas migration guide&lt;/a&gt; and follow the current &lt;a href="https://docs.laminas.dev/laminas-view/v3/helpers/advanced-usage/"&gt;custom view helper docs&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Building and Installing HHVM on CentOS 7</title><link>https://www.infinitescript.com/2015/02/building-and-installing-hhvm-on-centos-7/</link><pubDate>Sat, 14 Feb 2015 09:12:09 +0000</pubDate><guid>https://www.infinitescript.com/2015/02/building-and-installing-hhvm-on-centos-7/</guid><description>&lt;h3 id="whats-hhvm"&gt;What&amp;rsquo;s HHVM?&lt;/h3&gt;
&lt;p&gt;HHVM is an &lt;a href="https://github.com/facebook/hhvm"&gt;open-source&lt;/a&gt; virtual machine designed for executing programs written in &lt;a href="https://hacklang.org/"&gt;Hack&lt;/a&gt; and &lt;a href="https://www.php.net/"&gt;PHP&lt;/a&gt;. Instead of interpreting PHP directly, it uses a just-in-time (JIT) compiler to reach much higher throughput while staying compatible with existing PHP code. Facebook, which created HHVM, reported roughly a 9x gain in web request throughput and a 5x drop in memory use over the old PHP 5.2 + APC engine, and back in 2015 HHVM could run most of the popular PHP frameworks out of the box.&lt;/p&gt;</description></item><item><title>Sending Email with Spring MVC Using Template</title><link>https://www.infinitescript.com/2015/01/sending-email-with-spring-mvc/</link><pubDate>Sat, 10 Jan 2015 04:25:34 +0000</pubDate><guid>https://www.infinitescript.com/2015/01/sending-email-with-spring-mvc/</guid><description>&lt;p&gt;This tutorial walks through a small Spring MVC application that sends a templated e-mail, using Thymeleaf to render the message body and Jakarta Mail to deliver it.&lt;/p&gt;
&lt;p&gt;It assumes you are comfortable with Java EE development and with building Spring MVC applications.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated for Spring Framework 7 and Thymeleaf 3.1&lt;/strong&gt;. The original version rendered the message with Apache Velocity, but Spring deprecated its Velocity support in 4.3 and removed it entirely in 5.0; templating is now handled by Thymeleaf, and the mail dependency has moved from &lt;code&gt;javax.mail&lt;/code&gt; to Jakarta Mail (&lt;code&gt;jakarta.mail&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>TestZilla</title><link>https://www.infinitescript.com/project/testzilla/</link><pubDate>Thu, 01 Jan 2015 11:40:00 +0000</pubDate><guid>https://www.infinitescript.com/project/testzilla/</guid><description>&lt;a href="https://gitlab.com/hzxie/TestZilla" target="_blank" rel="noopener" class="badge-inline"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-gitlab"&gt;&lt;/i&gt; GitLab&lt;/span&gt;
 &lt;span class="badge-value" style="background: #fc6d26"&gt;Open Source&lt;/span&gt;
&lt;/a&gt;


&lt;h5 id="introduction"&gt;Introduction&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Crowd testing&lt;/strong&gt; is a software testing approach where a distributed group of real users, rather than an in-house QA team, tests a product across a wide variety of devices, operating systems, and usage scenarios. The goal is to surface bugs that structured internal testing tends to miss, at a fraction of the cost of a dedicated test lab.&lt;/p&gt;
&lt;p&gt;TestZilla is an open-source crowd testing platform designed to connect two parties: &lt;strong&gt;hunters&lt;/strong&gt; (volunteer testers who find and report bugs) and &lt;strong&gt;developers&lt;/strong&gt; (product owners who register their software and receive the reports). Hunters earn points for accepted reports, creating a lightweight incentive loop that encourages quality submissions. The project started as a Spring MVC application and was later fully rebuilt using the Phalcon framework to support a faster continuous delivery workflow.&lt;/p&gt;</description></item><item><title>Build Tengine, MariaDB and PHP on Ubuntu 14.04</title><link>https://www.infinitescript.com/2014/11/build-tengine-mariadb-and-php-on-ubuntu-14-04/</link><pubDate>Sat, 22 Nov 2014 03:40:35 +0000</pubDate><guid>https://www.infinitescript.com/2014/11/build-tengine-mariadb-and-php-on-ubuntu-14-04/</guid><description>&lt;h3 id="introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Nginx is one of the most popular web servers in the world and is responsible for hosting some of the largest and highest-traffic sites on the internet. Tengine is a branch of Nginx which is created by &lt;a href="http://www.alibaba.com"&gt;Alibaba Inc&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;MariaDB is a database server developed by some of the original authors of MySQL and offers drop-in replacement functionality.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This guide is from 2014 and builds every component from source on Ubuntu 14.04, which has long since reached end-of-life. On a current system you would install Tengine/Nginx, MariaDB, and PHP from the official APT repositories and manage them with &lt;code&gt;systemd&lt;/code&gt; instead of the SysV &lt;code&gt;init.d&lt;/code&gt; scripts shown below. It&amp;rsquo;s kept here as a historical walkthrough.&lt;/p&gt;</description></item><item><title>Difference Between require and include in PHP</title><link>https://www.infinitescript.com/2014/11/difference-between-require-and-include-in-php/</link><pubDate>Fri, 14 Nov 2014 06:33:06 +0000</pubDate><guid>https://www.infinitescript.com/2014/11/difference-between-require-and-include-in-php/</guid><description>&lt;p&gt;One of the most common questions I get from PHP beginners is: why are there four different ways to pull one file into another?&lt;/p&gt;
&lt;p&gt;There is &lt;a href="https://www.php.net/manual/en/function.include.php"&gt;include&lt;/a&gt;, &lt;a href="https://www.php.net/manual/en/function.include-once.php"&gt;include_once&lt;/a&gt;, &lt;a href="https://www.php.net/manual/en/function.require.php"&gt;require&lt;/a&gt;, and &lt;a href="https://www.php.net/manual/en/function.require-once.php"&gt;require_once&lt;/a&gt;. They look almost interchangeable, but picking the wrong one can either hide a fatal bug or crash a page that should have kept running.&lt;/p&gt;
&lt;p&gt;The four are really just combinations of two independent choices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;include&lt;/code&gt; vs &lt;code&gt;require&lt;/code&gt;&lt;/strong&gt;: what happens when the file is missing. &lt;code&gt;include&lt;/code&gt; emits a warning and keeps going; &lt;code&gt;require&lt;/code&gt; stops the script with a fatal error.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;plain vs &lt;code&gt;_once&lt;/code&gt;&lt;/strong&gt;: how many times the file may be loaded. The plain form loads the file on every call; the &lt;code&gt;_once&lt;/code&gt; form loads it at most once per request.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One note before we start: despite the parentheses you often see, &lt;code&gt;include&lt;/code&gt; and &lt;code&gt;require&lt;/code&gt; are &lt;em&gt;language constructs&lt;/em&gt;, not functions. Both &lt;code&gt;require 'core.php';&lt;/code&gt; and &lt;code&gt;require('core.php');&lt;/code&gt; work, but the manual recommends the parenthesis-free form, which is what I&amp;rsquo;ll use throughout.&lt;/p&gt;</description></item><item><title>Install Mac OS X Yosemite using Clover</title><link>https://www.infinitescript.com/2014/11/install-os-x-yosemite-using-clover/</link><pubDate>Sat, 08 Nov 2014 04:11:49 +0000</pubDate><guid>https://www.infinitescript.com/2014/11/install-os-x-yosemite-using-clover/</guid><description>&lt;p&gt;Clover is a new and exciting open source EFI bootloader. Developed over the past 3 years by a group of developers at Project OS X led by Slice, Clover aims to solve problems inherent in existing OS X installation methods and legacy bootloaders:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Boots troublesome desktop and laptop BIOS/UEFI&lt;/li&gt;
&lt;li&gt;Uses native OS X installation media&lt;/li&gt;
&lt;li&gt;Ability to patch DSDT/kernel/kexts at boot time&lt;/li&gt;
&lt;li&gt;Creates OS X Recovery partition&lt;/li&gt;
&lt;li&gt;No boot0 error with 4K Advanced Format drives&lt;/li&gt;
&lt;li&gt;Solves multi-boot issues with Linux and Windows 7/8&lt;/li&gt;
&lt;li&gt;Solves traditional bootloader NVRAM issues related to iMessage/FaceTime&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clover has a completely different system of configuration with a decidedly steep learning curve. It can be confusing for those who have only ever used the more traditional Chameleon or Chimera.&lt;/p&gt;</description></item><item><title>Java Collections Framework</title><link>https://www.infinitescript.com/2014/10/java-collections-framework/</link><pubDate>Thu, 30 Oct 2014 13:40:38 +0000</pubDate><guid>https://www.infinitescript.com/2014/10/java-collections-framework/</guid><description>&lt;p&gt;Almost all collections in Java are derived from the &lt;strong&gt;&lt;a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html"&gt;java.util.Collection&lt;/a&gt;&lt;/strong&gt; interface. Collection defines the basic parts of all collections. The interface states the add() and remove() methods for adding to and removing from a collection respectively. Also required is the toArray() method, which converts the collection into a simple array of all the elements in the collection. Finally, the contains() method checks if a specified element is in the collection. The Collection interface is a subinterface of &lt;strong&gt;&lt;a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html"&gt;java.lang.Iterable&lt;/a&gt;&lt;/strong&gt;, so any Collection may be the target of a for-each statement. (The Iterable interface provides the iterator() method used by for-each statements.) Additionally, Collection is a generic, so any collection can be written to store any class. For example, a &lt;code&gt;Collection&amp;lt;String&amp;gt;&lt;/code&gt; can hold strings, and the elements can be used as strings without any casting required.&lt;/p&gt;</description></item><item><title>Spring AOP Example Using Annotation</title><link>https://www.infinitescript.com/2014/10/spring-aop-example-using-annotation/</link><pubDate>Fri, 24 Oct 2014 15:05:50 +0000</pubDate><guid>https://www.infinitescript.com/2014/10/spring-aop-example-using-annotation/</guid><description>&lt;p&gt;Spring Framework is developed on two core concepts – Dependency Injection and Aspect-Oriented Programming (AOP). Today we will look into the core concepts of Aspect-Oriented Programming and how we can implement it using Spring Framework.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated for Spring Framework 7.0&lt;/strong&gt;. The original 2014 version targeted Spring 4.1 with AspectJ 1.8 and the &lt;code&gt;aspectjrt&lt;/code&gt; + &lt;code&gt;aspectjtools&lt;/code&gt; dependencies; it now uses &lt;code&gt;aspectjweaver&lt;/code&gt; 1.9.25 on the current Spring 7.0 GA line. Because Spring 7 builds on Jakarta EE, the servlet types in the examples now come from &lt;code&gt;jakarta.servlet.*&lt;/code&gt; rather than &lt;code&gt;javax.servlet.*&lt;/code&gt;. The AOP concepts and &lt;code&gt;@AspectJ&lt;/code&gt; annotations themselves are unchanged.&lt;/p&gt;</description></item><item><title>Consistent Hash Ring</title><link>https://www.infinitescript.com/2014/10/consistent-hash-ring/</link><pubDate>Fri, 17 Oct 2014 12:33:43 +0000</pubDate><guid>https://www.infinitescript.com/2014/10/consistent-hash-ring/</guid><description>&lt;p&gt;Consistent hashing is a special kind of hashing such that when a hash table is resized and consistent hashing is used, only K/n keys need to be remapped on average, where K is the number of keys, and n is the number of slots. In contrast, in most traditional hash tables, a change in the number of array slots causes nearly all keys to be remapped.&lt;/p&gt;
&lt;p&gt;Consistent hashing achieves the same goals as Rendezvous hashing (also called HRW Hashing). The two techniques use different algorithms and were devised independently and contemporaneously.&lt;/p&gt;</description></item><item><title>Sending Email with Zend Framework 2 Using Template</title><link>https://www.infinitescript.com/2014/10/zend-framework-2-send-html-mail-with-simple-template/</link><pubDate>Tue, 07 Oct 2014 08:12:31 +0000</pubDate><guid>https://www.infinitescript.com/2014/10/zend-framework-2-send-html-mail-with-simple-template/</guid><description>&lt;p&gt;Sending a templated HTML email is a one-liner in some frameworks, but Zend Framework 2 ships no such helper, so you have to wire up the view renderer, the MIME message, and the transport yourself. This post walks through that setup.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Zend Framework 2 has reached end of life. In 2019 the project moved to the Linux Foundation and was renamed &lt;a href="https://getlaminas.org/"&gt;Laminas&lt;/a&gt;; the &lt;code&gt;Zend\*&lt;/code&gt; classes shown below now live under &lt;code&gt;Laminas\*&lt;/code&gt; (e.g. &lt;code&gt;Laminas\Mail&lt;/code&gt;, &lt;code&gt;Laminas\View&lt;/code&gt;). The technique is unchanged, so this post still applies once you swap the namespaces.&lt;/p&gt;</description></item><item><title>The String Constant Pool</title><link>https://www.infinitescript.com/2014/10/the-string-constant-pool/</link><pubDate>Mon, 06 Oct 2014 08:47:31 +0000</pubDate><guid>https://www.infinitescript.com/2014/10/the-string-constant-pool/</guid><description>&lt;p&gt;The String Constant Pool is a JVM-wide cache of string literals: when different parts of your code reference a string with the same content, they can share a single &lt;code&gt;String&lt;/code&gt; object instead of allocating a new one each time. This is possible only because &lt;code&gt;String&lt;/code&gt; is immutable in Java, combined with the String interning mechanism. In other words, the pool is an application of the Flyweight design pattern.&lt;/p&gt;
&lt;h3 id="string-pool-examples"&gt;String Pool Examples&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hel&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;lo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hel&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;lo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;intern&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="explanation"&gt;Explanation&lt;/h3&gt;
&lt;p&gt;The references of &lt;code&gt;s1&lt;/code&gt;, &lt;code&gt;s2&lt;/code&gt;, &lt;code&gt;s3&lt;/code&gt;, and &lt;code&gt;s6&lt;/code&gt; all point to the same pooled object, while &lt;code&gt;s4&lt;/code&gt; and &lt;code&gt;s5&lt;/code&gt; do not. Here is why:&lt;/p&gt;</description></item><item><title>The 23 Gang of Three Design Patterns</title><link>https://www.infinitescript.com/2014/10/the-23-gang-of-three-design-patterns/</link><pubDate>Sat, 04 Oct 2014 02:09:13 +0000</pubDate><guid>https://www.infinitescript.com/2014/10/the-23-gang-of-three-design-patterns/</guid><description>&lt;p&gt;Design patterns represent the best practices used by experienced object-oriented software developers. Design patterns are solutions to general problems that software developers faced during software development. These solutions were obtained by trial and error by numerous software developers over quite a substantial period of time.&lt;/p&gt;
&lt;p&gt;This tutorial will take you through step by step approach and examples using Java while learning Design Pattern concepts.&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/2014/10/Design-Pattern-Relationships.webp" data-fancybox data-caption="Design-Pattern-Relationships"&gt;
 &lt;img src="https://www.infinitescript.com/2014/10/Design-Pattern-Relationships.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;h3 id="three-types-of-design-patterns"&gt;Three Types of Design Patterns&lt;/h3&gt;
&lt;p&gt;Design patterns are divided into three fundamental groups: Behavioral Patterns, Creational Patterns, and Structural Patterns.&lt;/p&gt;</description></item><item><title>Difference between Process and Thread</title><link>https://www.infinitescript.com/2014/09/difference-between-process-and-thread/</link><pubDate>Sun, 28 Sep 2014 06:31:41 +0000</pubDate><guid>https://www.infinitescript.com/2014/09/difference-between-process-and-thread/</guid><description>&lt;p&gt;Processes and threads are both units of execution managed by the operating system, and they are easy to mix up. The short version: a process is a running instance of a program with its own memory, while a thread is a lighter-weight unit of execution that lives inside a process and shares that memory with its siblings. This post looks at each in turn, then summarizes how the two differ.&lt;/p&gt;</description></item><item><title>Difference between wait() and sleep(), yield() in Java</title><link>https://www.infinitescript.com/2014/09/difference-between-wait-and-sleep-yield-in-java/</link><pubDate>Tue, 23 Sep 2014 14:13:41 +0000</pubDate><guid>https://www.infinitescript.com/2014/09/difference-between-wait-and-sleep-yield-in-java/</guid><description>&lt;p&gt;The difference between wait() and sleep(), or between sleep() and yield(), is one of the oldest questions asked in Java interviews. All three pause the currently running thread, but they differ in who owns them, whether they release the lock, and how the thread wakes up again.&lt;/p&gt;
&lt;h3 id="tldr"&gt;TL;DR&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;sleep()&lt;/code&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;yield()&lt;/code&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;wait()&lt;/code&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Defined in&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Thread&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Thread&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Object&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Static method?&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Releases the lock/monitor?&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Must hold the monitor (be in &lt;code&gt;synchronized&lt;/code&gt;)?&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Wakes up when&lt;/td&gt;
					&lt;td&gt;timeout expires or interrupted&lt;/td&gt;
					&lt;td&gt;the scheduler decides (maybe immediately)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;notify()&lt;/code&gt;/&lt;code&gt;notifyAll()&lt;/code&gt;, timeout, or interrupt&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Typical use&lt;/td&gt;
					&lt;td&gt;pause for a fixed time&lt;/td&gt;
					&lt;td&gt;hint to give up the CPU&lt;/td&gt;
					&lt;td&gt;coordination between threads&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="javadoc-definition"&gt;JavaDoc Definition&lt;/h3&gt;
&lt;h4 id="thread-class"&gt;Thread Class&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;public static void sleep(long millis[, int nanos]) throws InterruptedException&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Object Initialization Order in Java</title><link>https://www.infinitescript.com/2014/09/object-initialization-order-in-java/</link><pubDate>Mon, 22 Sep 2014 08:51:05 +0000</pubDate><guid>https://www.infinitescript.com/2014/09/object-initialization-order-in-java/</guid><description>&lt;p&gt;An object is a chunk of memory bundled with the code that manipulates memory. In the memory, the object maintains its &lt;em&gt;state&lt;/em&gt; (the values of its instance variables), which can change and evolve throughout its lifetime. To get a newly-created object off to a good start, its newly-allocated memory must be initialized to a proper initial state. Here we take an in-depth look at the mechanisms Java uses to manage object initialization.&lt;/p&gt;</description></item><item><title>HashMap Internal Implementation Analysis in Java</title><link>https://www.infinitescript.com/2014/09/hashmap-internal-implementation-analysis-in-java/</link><pubDate>Tue, 09 Sep 2014 03:38:29 +0000</pubDate><guid>https://www.infinitescript.com/2014/09/hashmap-internal-implementation-analysis-in-java/</guid><description>&lt;p&gt;&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html"&gt;HashMap&lt;/a&gt; is one of the most common topics in Java interviews, and &amp;ldquo;How does HashMap work?&amp;rdquo; has a deceptively simple one-line answer: &amp;ldquo;On the principle of hashing.&amp;rdquo; To say anything more, you need to know how hashing works and how HashMap applies it internally.&lt;/p&gt;
&lt;p&gt;This post assumes you already know the basics of using a HashMap; if not, start with the official &lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html"&gt;Java docs&lt;/a&gt;. The walkthrough below uses the pre-Java-8 source as its baseline; wherever Java 8+ changed the implementation, an inline &lt;em&gt;Note&lt;/em&gt; flags it.&lt;/p&gt;</description></item><item><title>WordPress $ is not defined</title><link>https://www.infinitescript.com/2014/08/wordpress-is-not-defined-even-if-jquery-is-loaded/</link><pubDate>Thu, 21 Aug 2014 04:29:54 +0000</pubDate><guid>https://www.infinitescript.com/2014/08/wordpress-is-not-defined-even-if-jquery-is-loaded/</guid><description>&lt;p&gt;If you copy a normal jQuery snippet into a WordPress theme or plugin, sooner or later you hit &lt;code&gt;Uncaught ReferenceError: $ is not defined&lt;/code&gt;. The confusing part is that jQuery itself &lt;em&gt;is&lt;/em&gt; loaded; your other jQuery code may even be working. So why does &lt;code&gt;$&lt;/code&gt; blow up?&lt;/p&gt;
&lt;h3 id="why-it-happens"&gt;Why It Happens&lt;/h3&gt;
&lt;p&gt;WordPress ships its own copy of jQuery and loads it in &lt;strong&gt;no-conflict mode&lt;/strong&gt;. On startup it effectively runs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;jQuery&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;noConflict&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;noConflict()&lt;/code&gt; tells jQuery to give back control of the global &lt;code&gt;$&lt;/code&gt;. After it runs, &lt;code&gt;jQuery&lt;/code&gt; still points to the library, but &lt;code&gt;$&lt;/code&gt; no longer does; it is left free for some other library to claim.&lt;/p&gt;</description></item><item><title>Getting Started with Hadoop 2.0</title><link>https://www.infinitescript.com/2014/08/getting-started-with-hadoop-2-0/</link><pubDate>Fri, 08 Aug 2014 13:30:34 +0000</pubDate><guid>https://www.infinitescript.com/2014/08/getting-started-with-hadoop-2-0/</guid><description>&lt;p&gt;Apache™ &lt;strong&gt;Hadoop&lt;/strong&gt;® is an open source software project that enables the distributed processing of large data sets across clusters of commodity servers. It is designed to scale up from a single server to thousands of machines, with a very high degree of fault tolerance. Rather than relying on high-end hardware, the resiliency of these clusters comes from the software’s ability to detect and handle failures at the application layer.&lt;/p&gt;
&lt;p&gt;Hadoop 1 popularized MapReduce programming for batch jobs and demonstrated the potential value of large scale, distributed processing. MapReduce, as implemented in Hadoop 1, can be I/O intensive, not suitable for interactive analysis, and constrained in support for graph, machine learning and on other memory intensive algorithms. Hadoop developers rewrote major components of the file system to produce Hadoop 2. To get started with the new version, it helps to understand the major differences between Hadoop 1 and 2.&lt;/p&gt;</description></item><item><title>HTTP Protocol</title><link>https://www.infinitescript.com/2014/07/http-protocol/</link><pubDate>Tue, 15 Jul 2014 14:10:59 +0000</pubDate><guid>https://www.infinitescript.com/2014/07/http-protocol/</guid><description>&lt;h3 id="whats-http"&gt;What&amp;rsquo;s HTTP?&lt;/h3&gt;
&lt;p&gt;HTTP stands for Hypertext Transfer Protocol. It&amp;rsquo;s the network protocol used to deliver virtually all files and other data (collectively called resources) on the World Wide Web, whether they&amp;rsquo;re HTML files, image files, query results, or anything else.&lt;/p&gt;
&lt;p&gt;HTTP allows communication between a wide variety of hosts and clients, and supports a mixture of network configurations. To make this possible, it assumes very little about a particular system and keeps no state between message exchanges; this is why HTTP is called a &lt;strong&gt;stateless&lt;/strong&gt; protocol. Communication usually takes place over TCP/IP sockets, though any reliable transport can be used. The standard (and default) port is 80, but a server can listen on any port.&lt;/p&gt;</description></item><item><title>Integrate Spring MVC with Log4j</title><link>https://www.infinitescript.com/2014/06/integrate-spring-mvc-with-log4j/</link><pubDate>Tue, 10 Jun 2014 04:46:09 +0000</pubDate><guid>https://www.infinitescript.com/2014/06/integrate-spring-mvc-with-log4j/</guid><description>&lt;p&gt;Integrating Log4j into a Spring MVC application is quite straightforward: include the Log4j library in your project dependencies, then create a &lt;code&gt;log4j.properties&lt;/code&gt; file to define Log4j&amp;rsquo;s appenders and put it on the project classpath. This tutorial walks through that with the Log4j 1.x logging framework.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post targets &lt;strong&gt;Log4j 1.x&lt;/strong&gt;, which reached end of life in August 2015 and has known vulnerabilities (e.g. CVE-2019-17571, CVE-2021-4104). Treat it as a reference for maintaining legacy projects only. For anything new, prefer &lt;strong&gt;SLF4J + Logback&lt;/strong&gt; (the default in Spring Boot) or &lt;strong&gt;Log4j 2.x&lt;/strong&gt;. Their configuration and API differ entirely from what&amp;rsquo;s shown here, and the official link below now redirects to Log4j 2.&lt;/p&gt;</description></item><item><title>How does Ajax Work</title><link>https://www.infinitescript.com/2014/06/how-does-ajax-work/</link><pubDate>Thu, 05 Jun 2014 16:24:02 +0000</pubDate><guid>https://www.infinitescript.com/2014/06/how-does-ajax-work/</guid><description>&lt;p&gt;Ajax, a term coined by Jesse James Garrett that became popular after the publication of the article Ajax: &lt;a href="http://web.archive.org/web/20181231094556/https://www.adaptivepath.com/ideas/ajax-new-approach-web-applications/"&gt;A New Approach to Web Applications&lt;/a&gt; in February 2005, is short for Asynchronous JavaScript and XML.&lt;/p&gt;
&lt;p&gt;The normal behavior of the Internet that involves sending pages to the browser is completely changed by the use of Ajax.&lt;/p&gt;
&lt;p&gt;Ajax has become commonplace with its integration in HTML 5 and JavaScript frameworks, and in fact, the interest of developers has moved to HTML 5 for its new tags and APIs that accompany it. Among these, WebSocket appears as the successor to Ajax, because it is a superior means of communication between an application and the server or the backend.&lt;/p&gt;</description></item><item><title>Unit Testing for Spring MVC Controllers</title><link>https://www.infinitescript.com/2014/05/unit-testing-of-spring-mvc-controllers/</link><pubDate>Sat, 17 May 2014 02:09:38 +0000</pubDate><guid>https://www.infinitescript.com/2014/05/unit-testing-of-spring-mvc-controllers/</guid><description>&lt;p&gt;Once the services, DAO, and supporting classes are tested, it&amp;rsquo;s time for the controller. Controllers are often the hardest layer to test, so many developers (based on observation) reach for Selenium or, worse, test by hand. That works, but it makes exercising individual logic branches awkward and slow, and no one wants to wait for a browser to spin up before checking in code. The Spring MVC Test framework solves this by driving full controller logic through fast unit tests, and it has lived in Spring&amp;rsquo;s core ever since Spring 4.&lt;/p&gt;</description></item><item><title>Medical Image Tagger</title><link>https://www.infinitescript.com/project/medical-image-tagger/</link><pubDate>Wed, 14 May 2014 11:21:55 +0000</pubDate><guid>https://www.infinitescript.com/project/medical-image-tagger/</guid><description>&lt;p&gt;







&lt;a href="https://gitee.com/haozhexie/mitagger" target="_blank" rel="noopener" class="badge-inline"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-gitee"&gt;&lt;/i&gt; Gitee Recommended&lt;/span&gt;
 &lt;span class="badge-value" style="background: #fc6d26"&gt;Open Source&lt;/span&gt;
&lt;/a&gt;










&lt;a href="https://rjxy.hfut.edu.cn/info/1024/2893.htm" target="_blank" rel="noopener" class="badge-inline"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fas fa-trophy"&gt;&lt;/i&gt; 科蓝杯&lt;/span&gt;
 &lt;span class="badge-value" style="background: #C0C0C0"&gt;Silver Award&lt;/span&gt;
&lt;/a&gt;

&lt;/p&gt;
&lt;h5 id="introduction"&gt;Introduction&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Medical Image Tagger (MITagger)&lt;/strong&gt; is a collaborative web-based annotation platform developed with Harvard Medical School to accelerate semi-automatic tagging of biomedical figures. By combining NLP-extracted figure legends with the BioPortal Annotator REST API, the system recommends structured tags from major medical ontologies, reducing the manual effort of medical annotators by 20%.&lt;/p&gt;
&lt;p&gt;The platform later evolved into a broader medical big data initiative, &lt;strong&gt;ShuYi Technology (数翼科技)&lt;/strong&gt;, which won the &lt;strong&gt;Silver Award&lt;/strong&gt; at the &lt;a href="https://rjxy.hfut.edu.cn/info/1024/2893.htm"&gt;&amp;ldquo;科蓝杯&amp;rdquo; 9th HFUT Student Entrepreneurship Competition&lt;/a&gt; in 2014.&lt;/p&gt;</description></item><item><title>Spring 4 MVC Hello World Tutorial Using Maven</title><link>https://www.infinitescript.com/2014/04/spring-4-mvc-hello-world-tutorial-using-maven/</link><pubDate>Sun, 20 Apr 2014 02:10:48 +0000</pubDate><guid>https://www.infinitescript.com/2014/04/spring-4-mvc-hello-world-tutorial-using-maven/</guid><description>&lt;p&gt;In this tutorial we build the smallest useful Spring MVC application: a controller that reads a request parameter and renders it in a JSP view. It is the classic &amp;ldquo;Hello World&amp;rdquo;, but the wiring it shows (a &lt;code&gt;DispatcherServlet&lt;/code&gt;, a bean configuration, and a view resolver) is the same wiring every larger Spring MVC application is built on.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This tutorial has been &lt;strong&gt;updated for Spring Framework 7&lt;/strong&gt;. It was originally written in 2014 for Spring 4 and the &lt;code&gt;javax.*&lt;/code&gt; servlet API; the configuration below now uses the &lt;code&gt;jakarta.*&lt;/code&gt; namespace, drops the Eclipse-specific setup for a plain Maven command, and runs on Jakarta EE 11 (Tomcat 11+). We keep XML configuration and &lt;code&gt;web.xml&lt;/code&gt; so every piece of the wiring stays visible. The same beans map one-to-one onto a &lt;code&gt;@Configuration&lt;/code&gt; class if you prefer Java config.&lt;/p&gt;</description></item><item><title>Jenkins Installation and Configuration with Maven and GitHub</title><link>https://www.infinitescript.com/2014/02/jenkins-installation-and-configuration-with-maven-and-github/</link><pubDate>Sat, 22 Feb 2014 03:24:39 +0000</pubDate><guid>https://www.infinitescript.com/2014/02/jenkins-installation-and-configuration-with-maven-and-github/</guid><description>&lt;p&gt;In this tutorial we install Jenkins and configure it to build a Maven project hosted on GitHub.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated for Jenkins 2.5x running on Java 21&lt;/strong&gt;. The original 2014 version deployed Jenkins as a WAR inside Tomcat 7 on Java 7 and walked through a UI that has since changed substantially. Modern Jenkins is self-contained, so you no longer need a separate servlet container, and Git/Maven support now ships with the suggested plugins. The setup below is therefore shorter than it used to be.&lt;/p&gt;</description></item><item><title>Zend Framework 2: Get Parameters</title><link>https://www.infinitescript.com/2014/02/zend-framework-2-get-parameters/</link><pubDate>Mon, 10 Feb 2014 03:49:35 +0000</pubDate><guid>https://www.infinitescript.com/2014/02/zend-framework-2-get-parameters/</guid><description>&lt;p&gt;The easiest way to read request parameters in a Zend Framework 2 controller is the &lt;a href="https://github.com/laminas/laminas-mvc/blob/master/src/Controller/Plugin/Params.php"&gt;Params plugin&lt;/a&gt;, introduced in beta5. It has utility methods to make it easy to access different types of parameters. As always, reading &lt;a href="https://github.com/laminas/laminas-mvc/blob/master/test/Controller/Plugin/ParamsTest.php"&gt;the tests&lt;/a&gt; can prove valuable to understand how something is supposed to be used.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Zend Framework 2 has been deprecated. The project moved to the Linux Foundation in 2019 and lives on as &lt;a href="https://getlaminas.org/"&gt;Laminas&lt;/a&gt;; the &lt;code&gt;Zend\&lt;/code&gt; namespace became &lt;code&gt;Laminas\&lt;/code&gt;, so the plugin shown here is now &lt;code&gt;Laminas\Mvc\Controller\Plugin\Params&lt;/code&gt; (in the &lt;code&gt;laminas/laminas-mvc&lt;/code&gt; package). The API is unchanged, so the examples below still apply after that rename.&lt;/p&gt;</description></item><item><title>Zend Framework 2: Redirect to 404 page in Controller</title><link>https://www.infinitescript.com/2014/02/zend-framework-2-redirect-to-404-page-in-controller/</link><pubDate>Fri, 07 Feb 2014 10:15:43 +0000</pubDate><guid>https://www.infinitescript.com/2014/02/zend-framework-2-redirect-to-404-page-in-controller/</guid><description>&lt;p&gt;I&amp;rsquo;ve been getting into trouble for several hours with redirecting to the 404 page in Zend Framework 2.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Zend Framework 2 has been deprecated. Zend Framework was migrated to the &lt;a href="https://getlaminas.org/"&gt;Laminas Project&lt;/a&gt; in 2020, where development continues today. The &lt;code&gt;notFoundAction()&lt;/code&gt; technique below still applies in laminas-mvc.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I asked about this on &lt;a href="https://stackoverflow.com/questions/21622849/use-the-same-error-handler-in-different-modules-in-zend-framework-2"&gt;Stack Overflow&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="what-didnt-work"&gt;What Didn&amp;rsquo;t Work&lt;/h3&gt;
&lt;p&gt;Before that, I was using the following code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getResponse&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;setStatusCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This sets the HTTP status code to 404, which looks fine at first. But it only changes the response header; it doesn&amp;rsquo;t dispatch the error controller, so once I built a custom 404 page I found that it never rendered.&lt;/p&gt;</description></item><item><title>How To Convert Byte[] Array To String in Java</title><link>https://www.infinitescript.com/2013/11/how-to-convert-byte-array-to-string-in-java/</link><pubDate>Sun, 03 Nov 2013 08:00:51 +0000</pubDate><guid>https://www.infinitescript.com/2013/11/how-to-convert-byte-array-to-string-in-java/</guid><description>&lt;p&gt;It is common to convert a &lt;code&gt;String&lt;/code&gt; into a &lt;code&gt;byte[]&lt;/code&gt; array and back again. The catch is that &lt;em&gt;how&lt;/em&gt; you convert depends on what the bytes actually are: human-readable text in some encoding, or arbitrary binary data such as the output of a cipher. Using the wrong approach silently corrupts your data.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated to always specify a charset explicitly&lt;/strong&gt; and to cover the binary-data case. The original advice — &lt;code&gt;new String(bytes)&lt;/code&gt; — relies on the platform&amp;rsquo;s default charset, which makes the result differ from machine to machine, and it cannot round-trip binary data at all. Both pitfalls are addressed below.&lt;/p&gt;</description></item><item><title>Building Vim from Source</title><link>https://www.infinitescript.com/2013/09/building-vim-from-source/</link><pubDate>Sun, 08 Sep 2013 14:45:38 +0000</pubDate><guid>https://www.infinitescript.com/2013/09/building-vim-from-source/</guid><description>&lt;p&gt;Most Linux distributions ship a stripped-down Vim — often without &lt;code&gt;+python3&lt;/code&gt;, &lt;code&gt;+clipboard&lt;/code&gt;, or GUI support, and rarely the newest release. Building Vim yourself fixes all of that: you decide exactly which language interpreters and features get compiled in, and you get whatever version is on Vim&amp;rsquo;s &lt;code&gt;master&lt;/code&gt; branch.&lt;/p&gt;
&lt;p&gt;The process is straightforward. This guide walks through it on a Debian-based distro such as Ubuntu.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated from its original 2013 version&lt;/strong&gt; to match how Vim is built today. The source has moved from vim.org&amp;rsquo;s Mercurial repository to &lt;a href="https://github.com/vim/vim"&gt;GitHub&lt;/a&gt;, the Python 2 interpreter has been swapped for Python 3 and the GTK2 GUI for GTK3, and &lt;code&gt;configure&lt;/code&gt; flags that newer Vim removed (such as &lt;code&gt;--enable-sniff&lt;/code&gt; and the now-default &lt;code&gt;--enable-multibyte&lt;/code&gt;) have been dropped.&lt;/p&gt;</description></item><item><title>Install PHP and PHPUnit on Windows/Ubuntu</title><link>https://www.infinitescript.com/2013/08/install-php-and-phpunit-on-windows-ubuntu/</link><pubDate>Sun, 18 Aug 2013 12:20:05 +0000</pubDate><guid>https://www.infinitescript.com/2013/08/install-php-and-phpunit-on-windows-ubuntu/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated for PHP 8.5 and PHPUnit 13&lt;/strong&gt;. The original 2013 version installed PHPUnit through PEAR (&lt;code&gt;go-pear&lt;/code&gt;, &lt;code&gt;pear channel-discover pear.phpunit.de&lt;/code&gt;), but PEAR has since been retired and PHPUnit no longer ships through it. The current approach is to install PHPUnit with &lt;a href="https://getcomposer.org/"&gt;Composer&lt;/a&gt; or as a standalone PHAR, both shown below.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PHPUnit is the de-facto testing framework for PHP. This guide gets PHP and PHPUnit running on Windows and Ubuntu, then writes and runs a first test to confirm the setup works.&lt;/p&gt;</description></item><item><title>Use SQLite in Qt</title><link>https://www.infinitescript.com/2013/07/use-sqlite-in-qt/</link><pubDate>Mon, 15 Jul 2013 15:03:48 +0000</pubDate><guid>https://www.infinitescript.com/2013/07/use-sqlite-in-qt/</guid><description>&lt;p&gt;SQLite is a lightweight, file-based database that needs no separate server process, which makes it a perfect fit for desktop applications that want to store data locally. Qt ships with a built-in SQLite driver as part of its SQL module, so you can talk to a database without pulling in any third-party dependency. This post walks through the few steps required to set it up and run your first queries.&lt;/p&gt;</description></item><item><title>How to Setup and Use Github in Ubuntu</title><link>https://www.infinitescript.com/2013/06/how-to-setup-and-use-github-in-ubuntu/</link><pubDate>Sun, 30 Jun 2013 06:22:21 +0000</pubDate><guid>https://www.infinitescript.com/2013/06/how-to-setup-and-use-github-in-ubuntu/</guid><description>&lt;p&gt;If you are or want to be an open-source developer, you must try GitHub. It is a new hosted Git repository service that&amp;rsquo;s being called a &amp;ldquo;social network&amp;rdquo; for programmers. It is basically a distributed version control system designed to handle everything from small to very large projects with speed and efficiency.&lt;/p&gt;
&lt;h3 id="setup-ssh-key"&gt;Setup SSH key&lt;/h3&gt;
&lt;h4 id="generate-ssh-key"&gt;Generate SSH Key&lt;/h4&gt;
&lt;p&gt;Suppose you have created your account at &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt; and now want to work with it from your terminal.&lt;/p&gt;</description></item><item><title>Running Hadoop 1.1.2 on Ubuntu Linux (Single-Node Cluster)</title><link>https://www.infinitescript.com/2013/06/running-hadoop-1-1-2-on-ubuntu-linux-single-node-cluster/</link><pubDate>Fri, 14 Jun 2013 13:15:21 +0000</pubDate><guid>https://www.infinitescript.com/2013/06/running-hadoop-1-1-2-on-ubuntu-linux-single-node-cluster/</guid><description>&lt;p&gt;In this tutorial I will describe the required steps for setting up a &lt;em&gt;pseudo-distributed, single-node&lt;/em&gt; Hadoop cluster backed by the Hadoop Distributed File System, running on Ubuntu Linux.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This walkthrough targets &lt;strong&gt;Hadoop 1.1.2&lt;/strong&gt; (2013) on Ubuntu 13.04, both long past end-of-life. Hadoop 1.x predates YARN, so the JobTracker/TaskTracker daemons, the &lt;code&gt;conf/&lt;/code&gt; layout, and config keys such as &lt;code&gt;fs.default.name&lt;/code&gt; and &lt;code&gt;mapred.job.tracker&lt;/code&gt; no longer apply to current releases (3.x uses &lt;code&gt;etc/hadoop/&lt;/code&gt;, &lt;code&gt;fs.defaultFS&lt;/code&gt;, and different web-UI ports). It is kept here as a historical reference; if you are setting up Hadoop today, follow the official &lt;a href="https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html"&gt;Single Node Cluster&lt;/a&gt; guide instead.&lt;/p&gt;</description></item><item><title>Install Google Pinyin in Ubuntu</title><link>https://www.infinitescript.com/2013/05/install-google-pinyin-in-ubuntu/</link><pubDate>Wed, 15 May 2013 07:06:21 +0000</pubDate><guid>https://www.infinitescript.com/2013/05/install-google-pinyin-in-ubuntu/</guid><description>&lt;p&gt;I had been using Sun Pinyin for a long time, but once I tried Google Pinyin I never looked back. Here is how to get a comfortable Chinese Pinyin setup on Ubuntu.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post has been &lt;strong&gt;updated for Fcitx5&lt;/strong&gt;, the input method framework that ships with current Ubuntu (20.04 and later). The original 2013 version installed the standalone &lt;code&gt;fcitx-googlepinyin&lt;/code&gt; package on Fcitx 4 through the &lt;code&gt;fcitx-team&lt;/code&gt; PPA. That package is now unmaintained; Fcitx5&amp;rsquo;s built-in Pinyin engine, paired with the &lt;strong&gt;Cloud Pinyin&lt;/strong&gt; addon, is its modern replacement, and no PPA is needed.&lt;/p&gt;</description></item><item><title>Configure Unity Workspace Layout in Ubuntu</title><link>https://www.infinitescript.com/2013/04/how-to-configure-unity-workspace-layout-in-ubuntu/</link><pubDate>Sun, 28 Apr 2013 09:15:25 +0000</pubDate><guid>https://www.infinitescript.com/2013/04/how-to-configure-unity-workspace-layout-in-ubuntu/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post describes &lt;strong&gt;Unity 7 and Compiz&lt;/strong&gt;, Ubuntu&amp;rsquo;s default desktop through Ubuntu 16.04 LTS. Canonical ended its work on Unity in 2017, and the default switched to GNOME Shell starting with Ubuntu 17.10 — where workspaces are configured differently and &lt;code&gt;compizconfig-settings-manager&lt;/code&gt; no longer applies. The steps below are kept as a historical walkthrough; they still work on the community-maintained &lt;a href="https://ubuntuunity.org/"&gt;Ubuntu Unity&lt;/a&gt; flavor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="why-change-the-layout"&gt;Why change the layout?&lt;/h3&gt;
&lt;p&gt;Every time I upgrade to a new Ubuntu release, the desktop defaults to a 2×2 workspace grid.&lt;/p&gt;</description></item><item><title>Convert Excel Date into Timestamp in PHP</title><link>https://www.infinitescript.com/2013/04/convert-excel-date-into-timestamp/</link><pubDate>Fri, 05 Apr 2013 08:05:30 +0000</pubDate><guid>https://www.infinitescript.com/2013/04/convert-excel-date-into-timestamp/</guid><description>&lt;p&gt;Excel stores a date internally as a number of days since January 1, 1900.&lt;br&gt;
For example: &amp;ldquo;June 9th, 2011 10:30 AM&amp;rdquo; would be stored as &amp;ldquo;40703.4375&amp;rdquo;.&lt;br&gt;
40703 is the number of full days since 01/01/1900 and 0.4375 represents the time (10.5/24 = 0.4375).&lt;/p&gt;
&lt;p&gt;When you process dates read from an Excel spreadsheet (&lt;em&gt;e.g.&lt;/em&gt;, using &lt;a href="https://github.com/phpoffice/phpexcel"&gt;PHPExcel&lt;/a&gt;) you often want to convert them into a UNIX timestamp, &lt;em&gt;i.e.&lt;/em&gt; a number of seconds elapsed since midnight of January 1, 1970 UTC.&lt;/p&gt;</description></item><item><title>Student Management System</title><link>https://www.infinitescript.com/project/student-management-system/</link><pubDate>Mon, 01 Apr 2013 11:21:00 +0000</pubDate><guid>https://www.infinitescript.com/project/student-management-system/</guid><description>&lt;a href="https://gitlab.com/hzxie/stumgr" target="_blank" rel="noopener" class="badge-inline"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-gitlab"&gt;&lt;/i&gt; GitLab&lt;/span&gt;
 &lt;span class="badge-value" style="background: #fc6d26"&gt;Open Source&lt;/span&gt;
&lt;/a&gt;


&lt;h5 id="introduction"&gt;Introduction&lt;/h5&gt;
&lt;p&gt;The Student Management System is a PHP/CodeIgniter web application built for the &lt;a href="http://rjxy.hfut.edu.cn"&gt;School of Software at Hefei University of Technology&lt;/a&gt; to replace a fully paper-based &lt;strong&gt;Comprehensive Evaluation&lt;/strong&gt; (综合测评): an annual multi-dimensional student assessment covering academic performance, peer review, extracurricular involvement, and community service, used to determine scholarship rankings.
&lt;a href="https://rjxy.hfut.edu.cn/info/1016/1968.htm"&gt;According to school news coverage&lt;/a&gt;, what previously took over 5 days of manual tallying per cohort was reduced to microsecond-level computation.
The project was selected as a &lt;strong&gt;&lt;a href="https://rjxy.hfut.edu.cn/info/1016/2274.htm"&gt;National Undergraduate Innovation Training Program&lt;/a&gt;&lt;/strong&gt; (国家级大学生创新训练计划项目) project in 2013.&lt;/p&gt;</description></item><item><title>About</title><link>https://www.infinitescript.com/about/</link><pubDate>Thu, 28 Mar 2013 12:30:00 +0000</pubDate><guid>https://www.infinitescript.com/about/</guid><description>&lt;h5 id="biography"&gt;Biography&lt;/h5&gt;
&lt;p&gt;I am currently the R&amp;amp;D Lead of &lt;a href="https://www.dexmate.ai/"&gt;Dexmate&lt;/a&gt;&amp;rsquo;s Singapore Office, following roles as a Research Fellow at &lt;a href="https://mmlab-ntu.com"&gt;MMLab@NTU&lt;/a&gt; (2023–2026) under &lt;a href="https://liuziwei7.github.io/"&gt;Prof. Ziwei Liu&lt;/a&gt; and previously a Senior Research Scientist at &lt;a href="http://ailab.tencent.com/"&gt;Tencent AI Lab&lt;/a&gt; (2021–2023).&lt;/p&gt;
&lt;p&gt;I received my Ph.D. from the &lt;a href="https://vilab.hit.edu.cn"&gt;VILab&lt;/a&gt; at &lt;a href="https://www.hit.edu.cn"&gt;Harbin Institute of Technology&lt;/a&gt; in 2021, supervised by &lt;a href="https://homepage.hit.edu.cn/yaohongxun"&gt;Prof. Hongxun Yao&lt;/a&gt;.
During my Ph.D., I also interned at &lt;a href="https://www.sensetime.com"&gt;SenseTime Research&lt;/a&gt;, mentored by &lt;a href="http://wenxiusun.com/"&gt;Dr. Wenxiu Sun&lt;/a&gt;.&lt;/p&gt;
&lt;div class="about-opportunity"&gt;
 &lt;i class="fas fa-users"&gt;&lt;/i&gt;
 &lt;span&gt;&lt;strong&gt;We are actively building our Singapore team&lt;/strong&gt; and are looking for researchers and engineers with strong backgrounds in robotics and 3D vision. Please feel free to reach out if you are interested.&lt;/span&gt;
&lt;/div&gt;
&lt;h5 id="featured-publications"&gt;Featured Publications&lt;/h5&gt;
&lt;ul class="list-inline research-filter"&gt;
 &lt;li class="list-inline-item active"&gt;
 &lt;a href="javascript:void(0)"&gt;All&lt;/a&gt;
 &lt;/li&gt;

 
 &lt;li class="list-inline-item"&gt;
 &lt;a href="javascript:void(0)"&gt;3D Object&lt;/a&gt;
 &lt;/li&gt;
 

 
 &lt;li class="list-inline-item"&gt;
 &lt;a href="javascript:void(0)"&gt;3D Human&lt;/a&gt;
 &lt;/li&gt;
 

 
 &lt;li class="list-inline-item"&gt;
 &lt;a href="javascript:void(0)"&gt;3D Scene&lt;/a&gt;
 &lt;/li&gt;
 

 
 &lt;li class="list-inline-item"&gt;
 &lt;a href="javascript:void(0)"&gt;Robotics&lt;/a&gt;
 &lt;/li&gt;
 

 
 &lt;li class="list-inline-item"&gt;
 &lt;a href="javascript:void(0)"&gt;Understanding&lt;/a&gt;
 &lt;/li&gt;
 

&lt;/ul&gt;
&lt;script&gt;
 $(".research-filter a").click(function() {
 $(".research-filter li").removeClass("active")
 $(this).parent().addClass("active")

 let itemClass = "research",
 attr = "tags",
 filter = $(this).text()

 let matches = function(el) {
 if (filter === "All") return true
 return ($(el).attr(attr) || "").split(",").map(function(s) { return s.trim() }).indexOf(filter) &gt;= 0
 }

 
 let cascade = function(el, step) {
 el.classList.remove("filtering-in")
 void el.offsetWidth 
 el.style.animationDelay = Math.min(step * 45, 480) + "ms"
 el.classList.add("filtering-in")
 }

 let i = 0
 $("." + itemClass).each(function() {
 if (matches(this)) {
 this.style.display = ""
 cascade(this, i++)
 } else {
 this.style.display = "none"
 this.classList.remove("filtering-in")
 }
 })

 
 $(".research-year").each(function() {
 let any = false
 $(this).nextUntil(".research-year", "." + itemClass).each(function() {
 if (matches(this)) any = true
 })
 if (any) {
 this.style.display = ""
 cascade(this, 0)
 } else {
 this.style.display = "none"
 this.classList.remove("filtering-in")
 }
 })
 })
&lt;/script&gt;
&lt;div class="research-year"&gt;
 &lt;span class="research-year-label"&gt;2026&lt;/span&gt;
&lt;/div&gt;

&lt;div class="research" tags="Robotics"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-dynamicvla.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-dynamicvla.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/projects/DynamicVLA/PiPER-Apple-Green.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-preprint"&gt;arXiv 2601.22153&lt;/span&gt;
 
 &lt;span class="research-badge research-badge-award"&gt;🏆 CVPRW&amp;#39;26 Best Paper&lt;/span&gt;
 &lt;a class="github-star-badge" href='https://github.com/hzxie/DynamicVLA' target="_blank" rel="noopener" gh-repo='hzxie/DynamicVLA'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;DynamicVLA: A Vision-Language-Action Model for Dynamic Object Manipulation&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie*&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Beichen Wen*&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Jiarui Zheng&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Zhaoxi Chen&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Fangzhou Hong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Haiwen Diao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/abs/2601.22153' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://www.infinitescript.com/project/dynamic-vla/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/hzxie/DynamicVLA' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Scene"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img 
 src='https://www.infinitescript.com/highlights/survey-scene-generation.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-journal"&gt;IJCV 2026&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/hzxie/Awesome-3D-Scene-Generation' target="_blank" rel="noopener" gh-repo='hzxie/Awesome-3D-Scene-Generation'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;3D Scene Generation: A Survey&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie*&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Beichen Wen*&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Zhaoxi Chen&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Fangzhou Hong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/abs/2505.05474' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/hzxie/Awesome-3D-Scene-Generation' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Human"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-ace-data0.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-ace-data0.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-ace-data0-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-journal"&gt;Technical Report&lt;/span&gt;
 
 
 
 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;ACE-Data-0: Human-Centric Ambient Capture as Embodied Data Engine&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Yukang Cao*&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie*&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Beichen Wen*&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Runmao Yao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Yinghao Liu&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Yue Huang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Zhichao Liao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Yunxiang Wang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Haiheng Liu&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Xingshun Tian&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Dawei Su&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Long Zhuo&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Dacheng Tao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Xiaogang Wang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Liang Pan&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/abs/2607.28625' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://ace-data-engine.github.io/ACE-Data-0/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Human"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-motok.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-motok.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-motok-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-preprint"&gt;arXiv 2603.19227&lt;/span&gt;
 
 
 
 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;Bridging Semantic and Kinematic Conditions with Diffusion-based Discrete Motion Tokenizer&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Chenyang Gu*&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Mingyuan Zhang*&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie*&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Zhongang Cai&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Lei Yang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/abs/2603.19227' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://rheallyc.github.io/projects/motok' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/rheallyc/MoTok' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Object"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-monoart.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-monoart.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-monoart-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;ECCV 2026&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/Quest4Science/MonoArt' target="_blank" rel="noopener" gh-repo='Quest4Science/MonoArt'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;MonoArt: Progressive Structural Reasoning for Monocular Articulated 3D Reconstruction&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Haitian Li*&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie*&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Junxiang Xu&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Beichen Wen&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Fangzhou Hong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/abs/2603.19231' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://lihaitian.com/MonoArt/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/Quest4Science/MonoArt' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Human, Robotics"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-hsimul3r.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-hsimul3r.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-hsimul3r-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;ECCV 2026&lt;/span&gt;
 
 
 
 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;HSImul3R: Physics-in-the-Loop Reconstruction of Simulation-Ready Human–Scene Interactions&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Yukang Cao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Fangzhou Hong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Long Zhuo&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Zhaoxi Chen&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Liang Pan&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/abs/2603.15612' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://yukangcao.github.io/HSImul3R' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/yukangcao/HSImul3R' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Human"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-infdance.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-infdance.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-infdance-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;ECCV 2026&lt;/span&gt;
 
 
 
 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;InfiniteDance: Scalable 3D Dance Generation Towards in-the-wild Generalization&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Ronghui Li&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Zhongyuan Hu&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Siyao Li&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Youliang Zhang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Mingyuan Zhang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Jie Guo&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Xiu Li&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/abs/2603.13375' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://infinitedance.github.io' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/MotrixLab/InfiniteDance' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Scene"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-citydreamer4d.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-citydreamer4d.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-citydreamer4d-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-journal"&gt;TPAMI 48(1): 312-328&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/hzxie/CityDreamer4D' target="_blank" rel="noopener" gh-repo='hzxie/CityDreamer4D'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;Compositional Generative Model of Unbounded 4D Cities&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Zhaoxi Chen&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Fangzhou Hong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/2501.08983' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://www.infinitescript.com/project/city-dreamer-4d/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/hzxie/CityDreamer4D' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Human"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-crowdmogen.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-crowdmogen.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-crowdmogen-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-journal"&gt;IJCV 134(1): 29&lt;/span&gt;
 
 
 
 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;CrowdMoGen: Zero-Shot Text-Driven Collective Motion Generation&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Yukang Cao*&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Xinying Guo*&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Mingyuan Zhang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Chenyang Gu&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/2407.06188' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://yukangcao.github.io/CrowdMoGen' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='http://github.com/yukangcao/CrowdMoGen' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research-year"&gt;
 &lt;span class="research-year-label"&gt;2025&lt;/span&gt;
&lt;/div&gt;

&lt;div class="research" tags="3D Scene"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-gaussian-city.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-gaussian-city.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-gaussian-city-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;CVPR 2025&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/hzxie/GaussianCity' target="_blank" rel="noopener" gh-repo='hzxie/GaussianCity'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;Generative Gaussian Splatting for Unbounded 3D City Generation&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Zhaoxi Chen&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Fangzhou Hong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/2406.06526' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://www.infinitescript.com/project/gaussian-city/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/hzxie/GaussianCity' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://huggingface.co/spaces/hzxie/gaussian-city' target="_blank"&gt;Demo&lt;/a&gt;&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Object"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-3d-topia-xl.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-3d-topia-xl.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-3d-topia-xl-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;CVPR 2025&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/3DTopia/3DTopia-XL' target="_blank" rel="noopener" gh-repo='3DTopia/3DTopia-XL'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;3DTopia-XL: Scaling High-quality 3D Asset Generation via Primitive Diffusion&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Zhaoxi Chen&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Jiaxiang Tang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Yuhao Dong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziang Cao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Fangzhou Hong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Yushi Lan&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Tengfei Wang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Tong Wu&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shunsuke Saito&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Liang Pan&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Dahua Lin&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/2409.12957' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://3dtopia.github.io/3DTopia-XL' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/3DTopia/3DTopia-XL' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://huggingface.co/spaces/FrozenBurning/3DTopia-XL' target="_blank"&gt;Demo&lt;/a&gt;&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Scene"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-dyncity.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-dyncity.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-dyncity-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;ICLR 2025&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/3DTopia/DynamicCity' target="_blank" rel="noopener" gh-repo='3DTopia/DynamicCity'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;DynamicCity: Large-Scale 4D Occupancy Generation from Dynamic Scenes&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Hengwei Bian&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Lingdong Kong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Liang Pan&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Yu Qiao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/2410.18084' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://3dtopia.github.io/DynamicCity/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/3DTopia/DynamicCity' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Scene, Understanding"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img 
 src='https://www.infinitescript.com/highlights/research-mvc-psu.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;AAAI 2025&lt;/span&gt;
 
 
 
 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;Multi-view Consistent 3D Panoptic Scene Understanding&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Xianzhu Liu&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Xin Sun&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Zonglin Li&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ru Li&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shengping Zhang&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://ojs.aaai.org/index.php/AAAI/article/view/32598' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/aipixel/MVC-PSU' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Scene, Understanding"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img 
 src='https://www.infinitescript.com/highlights/research-sg-ssc.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-journal"&gt;IJCV 133(3): 1306-1325&lt;/span&gt;
 
 
 
 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;2D Semantic-Guided Semantic Scene Completion&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Xianzhu Liu&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shengping Zhang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Hongxun Yao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Rongrong Ji&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Liqiang Nie&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Dacheng Tao&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://rdcu.be/d56eo' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/aipixel/SG-SSC' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research-year"&gt;
 &lt;span class="research-year-label"&gt;2024&lt;/span&gt;
&lt;/div&gt;

&lt;div class="research" tags="3D Scene"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-citydreamer.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-citydreamer.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-citydreamer-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;CVPR 2024&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/hzxie/CityDreamer' target="_blank" rel="noopener" gh-repo='hzxie/CityDreamer'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;CityDreamer: Compositional Generative Model of Unbounded 3D Cities&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Zhaoxi Chen&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Fangzhou Hong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Ziwei Liu&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/2309.00610' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://www.infinitescript.com/project/city-dreamer/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/hzxie/CityDreamer' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://huggingface.co/spaces/hzxie/city-dreamer' target="_blank"&gt;Demo&lt;/a&gt;&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research-year"&gt;
 &lt;span class="research-year-label"&gt;2023&lt;/span&gt;
&lt;/div&gt;

&lt;div class="research" tags="3D Object"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img 
 src='https://www.infinitescript.com/highlights/research-gtnet.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-journal"&gt;IJCV 131(9): 2425–2445&lt;/span&gt;
 
 
 
 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;Learning Geometric Transformation for Point Cloud Completion&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Shengping Zhang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Xianzhu Liu&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Liqiang Nie&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Huiyu Zhou&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Dacheng Tao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Xuelong Li&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://rdcu.be/ebGaq' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/aipixel/GTNet' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research-year"&gt;
 &lt;span class="research-year-label"&gt;2021&lt;/span&gt;
&lt;/div&gt;

&lt;div class="research" tags="Understanding"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-lfpnet.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-lfpnet.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-lfpnet-ol.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;ACM Multimedia 2021&lt;/span&gt;
 
 
 
 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;Long-Range Feature Propagating for Natural Image Matting&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;Qinglin Liu&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shengping Zhang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Bineng Zhong&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Rongrong Ji&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/2109.12252.pdf' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/QLYoo/LFPNet' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Scene, 3D Object"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-mvs-3dr.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-mvs-3dr.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-mvs-3dr-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-preprint"&gt;PhD Thesis&lt;/span&gt;
 
 
 
 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;3D Scene and Object Reconstruction from Multiple Sources and Viewpoints&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='//gateway.infinitescript.com?f=PhD-Thesis.pdf' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="Understanding"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-rmnet.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-rmnet.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-rmnet-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;CVPR 2021&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/hzxie/RMNet' target="_blank" rel="noopener" gh-repo='hzxie/RMNet'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;Efficient Regional Memory Network for Video Object Segmentation&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Hongxun Yao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shangchen Zhou&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shengping Zhang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Wenxiu Sun&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/2103.12934.pdf' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://www.infinitescript.com/project/rmnet/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/hzxie/RMNet' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research-year"&gt;
 &lt;span class="research-year-label"&gt;2020&lt;/span&gt;
&lt;/div&gt;

&lt;div class="research" tags="3D Object"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img class="spacer"
 src='https://www.infinitescript.com/highlights/research-grnet.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;div class="front"&gt;
 &lt;img src='https://www.infinitescript.com/highlights/research-grnet.webp' loading="lazy" alt="Highlight Image"&gt;
 &lt;/div&gt; 
 &lt;div class="back"&gt;
 &lt;img data-ani-src='https://www.infinitescript.com/highlights/research-grnet-ani.webp' alt="Highlight Image"&gt;
 &lt;/div&gt; 
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;ECCV 2020&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/hzxie/GRNet' target="_blank" rel="noopener" gh-repo='hzxie/GRNet'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;GRNet: Gridding Residual Network for Dense Point Cloud Completion&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Hongxun Yao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shangchen Zhou&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Jiageng Mao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shengping Zhang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Wenxiu Sun&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/2006.03761.pdf' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://www.infinitescript.com/project/grnet/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/hzxie/GRNet' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research" tags="3D Object"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img 
 src='https://www.infinitescript.com/highlights/research-pix2vox-plus.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-journal"&gt;IJCV 128(12): 2919-2935&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/hzxie/Pix2Vox' target="_blank" rel="noopener" gh-repo='hzxie/Pix2Vox'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;Pix2Vox&amp;#43;&amp;#43;: Multi-scale Context-aware 3D Object Reconstruction from Single and Multiple Images&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Hongxun Yao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shengping Zhang&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shangchen Zhou&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Wenxiu Sun&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/2006.12250' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://www.infinitescript.com/project/pix2vox/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://gitlab.com/hzxie/Pix2Vox' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;div class="research-year"&gt;
 &lt;span class="research-year-label"&gt;2019&lt;/span&gt;
&lt;/div&gt;

&lt;div class="research" tags="3D Object"&gt;
 &lt;div class="research-thumb"&gt;
 &lt;div class="images"&gt;
 &lt;img 
 src='https://www.infinitescript.com/highlights/research-pix2vox.webp' loading="lazy" alt="Highlight Image"&gt;
 
 &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;div class="research-info"&gt;
 
 
 
 &lt;div class="research-venue"&gt;
 
 &lt;span class="research-badge research-badge-conf"&gt;ICCV 2019&lt;/span&gt;
 
 
 &lt;a class="github-star-badge" href='https://github.com/hzxie/Pix2Vox' target="_blank" rel="noopener" gh-repo='hzxie/Pix2Vox'&gt;
 &lt;span class="github-star-icon"&gt;&amp;#9733;&lt;/span&gt;
 &lt;span class="github-star-count"&gt;&lt;span class="spinner-border" role="status"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/a&gt; 

 &lt;/div&gt;
 
 &lt;h6 class="research-title"&gt;Pix2Vox: Context-aware 3D Reconstruction from Single and Multi-view Images&lt;/h6&gt;
 &lt;ul class="list-inline authors"&gt;
 &lt;li class="list-inline-item"&gt;&lt;strong&gt;Haozhe Xie&lt;/strong&gt;&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Hongxun Yao&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Xiaoshuai Sun&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shangchen Zhou&lt;/li&gt;
 &lt;li class="list-inline-item"&gt;Shengping Zhang&lt;/li&gt;
 
 &lt;/ul&gt;
 &lt;ul class="list-inline links"&gt;
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://arxiv.org/pdf/1901.11153' target="_blank"&gt;PDF&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://www.infinitescript.com/project/pix2vox/' target="_blank"&gt;Project Page&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;li class="list-inline-item"&gt;&lt;a href='https://github.com/hzxie/Pix2Vox' target="_blank"&gt;Code&lt;/a&gt;&lt;/li&gt;
 
 
 &lt;/ul&gt;
 &lt;/div&gt; 
&lt;/div&gt; 

&lt;h5 id="research-experience"&gt;Research Experience&lt;/h5&gt;
&lt;div class='row about-experience'&gt;
&lt;div class='col-sm-10 col-9'&gt;&lt;p&gt;&lt;strong&gt;R&amp;amp;D Lead of Singapore Office&lt;/strong&gt;&lt;br&gt;
Jul 2026 - Present | &lt;a href="https://dexmate.ai"&gt;Dexmate&lt;/a&gt; &lt;br&gt;
Leading the company&amp;rsquo;s Singapore office with responsibilities spanning R&amp;amp;D, team building, and strategic initiatives.&lt;/p&gt;</description></item><item><title>Contact</title><link>https://www.infinitescript.com/contact/</link><pubDate>Thu, 28 Mar 2013 12:30:00 +0000</pubDate><guid>https://www.infinitescript.com/contact/</guid><description>&lt;div class="map"&gt;
 &lt;div id="mapbox"&gt;&lt;/div&gt; 
 &lt;div class="map-fallback"&gt;
 &lt;i class="fas fa-map-marked-alt"&gt;&lt;/i&gt;
 &lt;div&gt;
 &lt;strong&gt;Dexmate · JTC LaunchPad@One-North&lt;/strong&gt;
 &lt;span&gt;The interactive map is unavailable on this network.&lt;/span&gt;
 &lt;/div&gt;
 &lt;a href="https://www.openstreetmap.org/?mlat=1.295850&amp;mlon=103.787234#map=15/1.295850/103.787234" target="_blank" rel="noopener"&gt;Open map &lt;i class="fas fa-external-link"&gt;&lt;/i&gt;&lt;/a&gt;
 &lt;/div&gt;
&lt;/div&gt; 
&lt;script src="https://api.mapbox.com/mapbox-gl-js/v2.13.0/mapbox-gl.js"&gt;&lt;/script&gt;
&lt;link href="https://api.mapbox.com/mapbox-gl-js/v2.13.0/mapbox-gl.css" rel="stylesheet" /&gt;
&lt;script&gt;
if (typeof mapboxgl !== "undefined") {
 mapboxgl.accessToken = 'pk.eyJ1IjoiempoenhoeiIsImEiOiJja2J6eDRkYTEwdmwxMnNuNGo4bzJ2bGRtIn0.omT24EzG5Mi6lBAsUSgkaw'
 let isDarkMode = getCurrentTheme() == "dark",
 map = new mapboxgl.Map({
 container: 'mapbox',
 center: [ 103.787234 , 1.29585 ],
 zoom: 15 ,
 style: isDarkMode ? 'mapbox://styles/mapbox/dark-v11' : 'mapbox://styles/mapbox/streets-v12'
 }),
 nav = new mapboxgl.NavigationControl(),
 scale = new mapboxgl.ScaleControl({
 maxWidth: 80,
 unit: "imperial"
 })
 map.addControl(nav, "top-left")
 map.addControl(scale)
 scale.setUnit("metric")
 map.on("load", function() {
 map.getContainer().closest(".map").classList.add("is-loaded")
 })
 document.addEventListener("themechange", function(e) {
 map.setStyle(e.detail.theme == "dark" ? 'mapbox://styles/mapbox/dark-v11' : 'mapbox://styles/mapbox/streets-v12')
 })
}
&lt;/script&gt;

&lt;div class='row contact-grid'&gt;
&lt;div class='col-12 col-lg-4'&gt;
&lt;div class="widget"&gt;
 &lt;div class="sidebar-widget-title"&gt;Contact Info&lt;/div&gt;

&lt;div class="contact-location"&gt;
 &lt;i class="fas fa-map-marker-alt"&gt;&lt;/i&gt;
 &lt;span&gt;&lt;strong&gt;Dexmate Pte. Ltd.&lt;/strong&gt;&lt;br&gt;JTC LaunchPad@One-North&lt;br&gt;Singapore 139954&lt;/span&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div class="widget"&gt;
 &lt;div class="sidebar-widget-title"&gt;Friends&lt;/div&gt;

&lt;div class="sidebar-tags-body"&gt;
 &lt;a class="sidebar-tag-item" href="https://ursb.me/"&gt;Airing&lt;/a&gt;
 &lt;a class="sidebar-tag-item" href="https://www.ruanx.net/"&gt;Pion1eer&lt;/a&gt;
 &lt;a class="sidebar-tag-item" href="https://thewashingtonhua.github.io/"&gt;童话说&lt;/a&gt;
 &lt;a class="sidebar-tag-item" href="https://turingtest.biz/"&gt;质量屋&lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;div class='col-12 col-lg-8'&gt;
&lt;div class="widget contact-message"&gt;

&lt;div class="disqus-header"&gt;
 &lt;div class="sidebar-widget-title"&gt;Leave a Message&lt;/div&gt;
 &lt;span class="disqus-powered"&gt;Powered by Disqus&lt;/span&gt;
&lt;/div&gt;&lt;p class="disqus-intro"&gt;Comments here are public and may be subject to moderation before appearing.&lt;/p&gt;</description></item><item><title>Writing Your First Win32 Application with C++</title><link>https://www.infinitescript.com/2013/03/writing-your-first-windows-application-with-c/</link><pubDate>Wed, 20 Mar 2013 12:20:09 +0000</pubDate><guid>https://www.infinitescript.com/2013/03/writing-your-first-windows-application-with-c/</guid><description>&lt;p&gt;Welcome to the first windows tutorial. In this tutorial, I&amp;rsquo;ll give you the basic information on how to code in windows and we&amp;rsquo;ll go over a few important details first.&lt;/p&gt;
&lt;h3 id="messages"&gt;Messages&lt;/h3&gt;
&lt;p&gt;The basic windows program has two important functions inside. The first one is the event handler(I&amp;rsquo;ll talk about this one later on) and the second one is the main function(WinMain from now on). WinMain is similar to DOS&amp;rsquo; main function, in fact, WinMain is called from the DOS main function but in windows, we don&amp;rsquo;t have access to the DOS main; everything is covered up by windows. Windows introduces us to messages. A message could be easily described as a pile of data that gets sent to the event handler which then tells the window what to do. A message&amp;rsquo;s name is prefixed with WM(stands for Windows Message as you might have guessed?). There are a whole lot of messages that a window can handle, however, we&amp;rsquo;ll only need a few of them. You can use these messages in many ways. For example, the message WM_CREATE, can be used for initialization purposes, it gets sent to the window when it&amp;rsquo;s created, and WM_PAINT is used when you want to draw something on the screen, and so on, you get the image. Most of the messages get sent to the window automatically; for example, when you move your mouse around you send a message to windows, and any other actions like that send messages to windows. You can also send a message to your window yourself, but you&amp;rsquo;ll probably never need to.&lt;/p&gt;</description></item><item><title>Use CodeIgniter Resources within Library</title><link>https://www.infinitescript.com/2013/03/utilizing-codeigniter-resources-within-your-library/</link><pubDate>Sat, 02 Mar 2013 12:20:46 +0000</pubDate><guid>https://www.infinitescript.com/2013/03/utilizing-codeigniter-resources-within-your-library/</guid><description>&lt;p&gt;To access CodeIgniter&amp;rsquo;s native resources from inside your own library, use the &lt;code&gt;get_instance()&lt;/code&gt; function. It returns the CodeIgniter super object, the same one you reach through &lt;code&gt;$this&lt;/code&gt; inside a controller, so your library can load helpers, read config, or call any other class the framework has instantiated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;get_instance()&lt;/code&gt; is a CodeIgniter &lt;strong&gt;3.x&lt;/strong&gt; (and earlier) technique. CodeIgniter 4 dropped the global super object. There you reach framework features through &lt;a href="https://codeigniter.com/user_guide/concepts/services.html"&gt;Services&lt;/a&gt;, such as &lt;code&gt;service('session')&lt;/code&gt; or &lt;code&gt;\Config\Services::session()&lt;/code&gt;, or by injecting the dependencies your class needs through its constructor. Everything below applies to CodeIgniter 3.x.&lt;/p&gt;</description></item><item><title>Generate a Random File Name when Uploading Files in WordPress</title><link>https://www.infinitescript.com/2013/02/rename-files-during-upload-within-wordpress-backend/</link><pubDate>Mon, 18 Feb 2013 10:00:37 +0000</pubDate><guid>https://www.infinitescript.com/2013/02/rename-files-during-upload-within-wordpress-backend/</guid><description>&lt;p&gt;The passage is telling you how to rename the file name automatically by WordPress (without using any plugins).&lt;/p&gt;
&lt;h3 id="a-word-of-warning"&gt;A Word of Warning&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;: To apply this hack, you&amp;rsquo;ll have to edit one of WordPress&amp;rsquo;s core files. Keep in mind that it is never recommended. This hack should be redone if you upgrade WordPress.&lt;/p&gt;
&lt;h3 id="editing-the-upload-handler"&gt;Editing the Upload Handler&lt;/h3&gt;
&lt;p&gt;Open the wp-admin/includes/files.php file, and go to line 324 (approximately here). You&amp;rsquo;ll see the following:&lt;/p&gt;</description></item><item><title>C# - Run Application as Administrator Automatically</title><link>https://www.infinitescript.com/2012/08/c-run-application-as-administrator-automatically/</link><pubDate>Tue, 21 Aug 2012 14:46:13 +0000</pubDate><guid>https://www.infinitescript.com/2012/08/c-run-application-as-administrator-automatically/</guid><description>&lt;p&gt;In this tutorial, you will learn how you can run your application as an administrator automatically using Visual C#2012.&lt;/p&gt;
&lt;h3 id="adding-an-application-manifest"&gt;Adding an Application Manifest&lt;/h3&gt;
&lt;p&gt;Start by opening your C# Windows forms application.&lt;/p&gt;
&lt;p&gt;Right click on your project name in the solution explorer and add a new item&amp;hellip;&lt;/p&gt;
&lt;p&gt;Select an application manifest file:&lt;/p&gt;
&lt;p&gt;

&lt;a href="https://www.infinitescript.com/2012/08/Create-App-Mainfest.webp" data-fancybox data-caption="Create-App-Mainfest"&gt;
 &lt;img src="https://www.infinitescript.com/2012/08/Create-App-Mainfest.webp" loading="lazy"&gt;
&lt;/a&gt;


&lt;/p&gt;
&lt;p&gt;Click add.&lt;/p&gt;
&lt;h3 id="requiring-administrator-privileges"&gt;Requiring Administrator Privileges&lt;/h3&gt;
&lt;p&gt;A new tab should open up, most of the codes in it are not important to us.&lt;br&gt;
There is one line however that we need to change:&lt;/p&gt;</description></item><item><title>Regular Expression</title><link>https://www.infinitescript.com/2012/08/regular-expression/</link><pubDate>Fri, 03 Aug 2012 05:32:29 +0000</pubDate><guid>https://www.infinitescript.com/2012/08/regular-expression/</guid><description>&lt;p&gt;In computing, a regular expression is a specific pattern that provides concise and flexible means to &amp;ldquo;match&amp;rdquo; (specify and recognize) strings of text, such as particular characters, words, or patterns of characters. Common abbreviations for &amp;ldquo;regular expression&amp;rdquo; include regex and regexp.&lt;/p&gt;
&lt;h3 id="basic-concepts"&gt;Basic Concepts&lt;/h3&gt;
&lt;p&gt;A regular expression, often called a pattern, is an expression that specifies a set of strings. To specify such sets of strings, rules are often more concise than lists of a set&amp;rsquo;s members. For example, the set containing the three strings &amp;ldquo;Handel&amp;rdquo;, &amp;ldquo;Händel&amp;rdquo;, and &amp;ldquo;Haendel&amp;rdquo; can be specified by the pattern H(ä|ae?)ndel (or alternatively, it is said that the pattern matches each of the three strings). In most formalisms, if there exists at least one regex that matches a particular set then there exist an infinite number of such expressions. Most formalisms provide the following operations to construct regular expressions.&lt;/p&gt;</description></item><item><title>Software QA System</title><link>https://www.infinitescript.com/project/software-qa-system/</link><pubDate>Fri, 11 Nov 2011 11:30:00 +0000</pubDate><guid>https://www.infinitescript.com/project/software-qa-system/</guid><description>&lt;a href="https://gitlab.com/hzxie/Software-QA-System" target="_blank" rel="noopener" class="badge-inline"&gt;
 &lt;span class="badge-label"&gt;&lt;i class="fab fa-gitlab"&gt;&lt;/i&gt; GitLab&lt;/span&gt;
 &lt;span class="badge-value" style="background: #fc6d26"&gt;Open Source&lt;/span&gt;
&lt;/a&gt;


&lt;h5 id="introduction"&gt;Introduction&lt;/h5&gt;
&lt;p&gt;The Software QA System is a network-based online examination suite developed for the Software Basis Knowledge Contest (软件基础知识竞赛), part of the 3rd &amp;ldquo;Software Festival&amp;rdquo; (软件文化节) hosted by the &lt;a href="http://rjxy.hfut.edu.cn"&gt;School of Software at Hefei University of Technology&lt;/a&gt;.
Initially developed in 2011 and later refactored in 2013, the system is built using VB.NET with a Microsoft Access (.mdb) backend, and uses UDP sockets for real-time client–server communication.&lt;/p&gt;
&lt;p&gt;The system was officially deployed at the contest held on March 25, 2012, replacing traditional paper-based exams for over 70 participants from multiple departments.
The use of this custom-built software was &lt;a href="https://news.hfut.edu.cn/info/1017/23644.htm"&gt;highlighted in the university news&lt;/a&gt; as a demonstration of the school&amp;rsquo;s professional expertise.&lt;/p&gt;</description></item><item><title>Carbon Footprint Calculator</title><link>https://www.infinitescript.com/project/carbon-footprint-calculator/</link><pubDate>Tue, 16 Mar 2010 21:29:00 +0000</pubDate><guid>https://www.infinitescript.com/project/carbon-footprint-calculator/</guid><description>&lt;h5 id="introduction"&gt;Introduction&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Carbon Footprint Calculator&lt;/strong&gt; (碳足迹计算器) is a desktop application I built in March 2010 using Visual Basic 6.0, an early project I built in middle school. The goal was to help people understand the environmental cost of everyday activities and encourage concrete steps to reduce CO₂ emissions.&lt;/p&gt;
&lt;p&gt;In 2010, the application won the &lt;strong&gt;second prize&lt;/strong&gt; in the Visual Basic Programming Contest in Hangzhou (杭州市VB程序设计大赛).&lt;/p&gt;
&lt;p&gt;You can download the application from &lt;a href="https://cloud.haozhexie.com/s/KwCW/qnysry50"&gt;this link&lt;/a&gt;, but please note that the application is in &lt;strong&gt;Simplified Chinese&lt;/strong&gt;.&lt;/p&gt;</description></item></channel></rss>