How to Get Rid of Smoni – Failed to create empty document

At some point in the past several months, probably after a Windows 10 update, my PC started to display a cryptic and annoying dialog box every time I logged in. I started wondering if somehow, a virus had gotten into my computer. I hadn’t spent the time to figure out what it was causing it, and how to get rid of it, until today. A google search of “Smoni Failed to create empty document” didn’t yield any useful results. It’s so annoying to go through Microsoft forums, and find the that the only advice they can give you is reset or restore your system. No thanks. It’s a lot easier to spend a little time troubleshooting on my own, than spending hours backing up and reloading all my programs and files.

I pulled up the Task Manager, scanned the running process list, and quickly found the culprit:

Aha! What’s this BrnlPMon process? Simply right click on BrnlPMon, and select Open File Location from the menu:

Windows then pops up a File Explorer window, with the offending file highlighted:

Hmm.. so what’s BRNIPMON.exe? Right click the file, and select Properties from the context menu. Select the Details tab on the resultant pop-up window:

Bingo! It’s Brother IP Monitor, which I figured out is monitoring software for my Brother WiFi connected laser printer. Something in my recent Windows 10 updates (probably the new Creator’s Edition), caused an incompatibility, which triggers this stupid error dialog.

At this point, I could just uninstall it or delete the files, but since I now know that it isn’t malicious, I’ll just leave it for now, and look for a software update when I have time, and see if that fixes the issue.

How to Run a Server from VMware Client

I’m running some server software in a virtual machine running Debian 8 which is running under VMware on a Windows 8.1 host. While it’s easy to access the server through VMware’s virtual NAT from the host computer, it isn’t at all clear how to access it from outside the Windows host. There are two ways to accomplish this feat:

  1. configure VMware to set the Network type from NAT to Bridged (easy)
  2. keep the NAT and forward the VM’s port to the host, and then open a port in the host’s firewall (hard)

So which method is better? (1) is easier, because when you configure your VM’s network to bridged, the VM will get its own IP address on your LAN, and will be fully visible on your LAN, just like your real computers. (2) is more secure, because you only expose the ports that you need to the LAN, so you don’t have to configure the firewall in the VM’s client OS.

For our example, let’s walk through how to remotely access an apache server running in our VMware VM, listening at port 8080. First, let’s find the IP address of our VMware VM. Since my VM is running Debian, we simply run ifconfig:

% sudo ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:96:81:fa
inet addr:192.168.88.144 Bcast:192.168.88.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe96:81fa/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:61515 errors:0 dropped:0 overruns:0 frame:0
TX packets:18860 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:49210391 (46.9 MiB) TX bytes:1321143 (1.2 MiB)
Interrupt:19 Base address:0x2024

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:61 errors:0 dropped:0 overruns:0 frame:0
TX packets:61 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:20606 (20.1 KiB) TX bytes:20606 (20.1 KiB)

From the output of ifconfig, we can see that our VM’s IP address is 192.168.88.144 on VMware’s virtual NAT. My Windows host, we can get our IP numbers from ipconfig:

C:\Program Files (x86)\Microsoft Visual Studio 8\VC>ipconfig

Windows IP Configuration
Wireless LAN adapter Wi-Fi:

Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::4c64:efa3:132a:68c0%22
IPv4 Address. . . . . . . . . . . : 192.168.1.115
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1

Ethernet adapter VMware Network Adapter VMnet8:

Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::e01a:da83:d339:b55e%20
IPv4 Address. . . . . . . . . . . : 192.168.88.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :

The output of ipconfig shows that on my LAN, my Windows host has IP number 192.168.1.115, and on VMware’s NAT, its IP number is 192.168.88.1. To test access to our apache server from within the Windows host, we an simply open a web browser, and point it to http://192.168.88.144:8080. Next, let’s configure things so that we can access the server from any host on our LAN.

 

1. Network Bridging (Easy Way)

To switch our VM from NAT to Bridge mode, simply go to VMware’s main menu and select VM -> Settings... A Virtual Machine Settings dialog will pop up. In the left side of the dialog, select Network Adapter, and then on the right side of the dialog, under Network connection, change the setting from NAT to Bridged:

After you reboot your VM, it will obtain an IP number from your LAN. My VM came up with IP number 192.168.1.111, so apache is accessed via http://192.168.1.111:8080.

 

2. Port Forwarding (hard way)

Now, let’s see how to do it while keeping the NAT. In the Virtual Machine Settings above, make sure NAT is selected. If you change the setting, make sure to reboot your VM afterwards. The first thing we need to do is forward the port from our VM to the host. From VMware’s menu, select Edit -> Virtual Network Editor…

(Note, VMware Player, unlike VMware Workstation, doesn’t come with vmnetcfg.exe, the Virtual Network Editor. You can follow instructions here to access it: DOWNLOAD VMNETCFG.EXE & VMNETCFGLIB.DLL FOR VMWARE PLAYER). In the Virtual Network Editor, click the Change Settings button near the right bottom of the main dialog. In the next dialog, select the NAT from the listbox, and then click the NAT Settings… button:

Next, in the Nat Settings dialog, click the Add… button, and fill in the info for your server’s port:

Host port: the port number you want to use to access the server … can be different from the actual port used in the VM if you like
Type: select TCP or UDP
Virtual machine IP address: the VM’s IP on the NAT
Virtual Machine port: the port number used by the server inside the VM
Description: arbitrary info

Finally, click the OK button to save your port mapping. At this point, the port forward is functional, but most likely, your have a firewall running on your host computer. You must open up a hole in your firewall for the Host port you selected above.

In a Windows 8.1 host, if you’re using the built-in Windows Firewall, run WF.msc. Select Inbound rules -> New Rule…. Under What type of rule would you like to create?, select Port – rule that controls connections for a TCP or UDP port. From the New Inbound Rule Wizard, select your protocol and port(s):

In the next dialog, select Allow the connection. Finally, you can decide where you want to rule to apply, Domain/Private/Public. Unless you’re planning to use the server while travelling, it is best to leave Public unchecked. Finally, you’ll be presented with a page to enter a name and description for the mapping. After you click the Finish button, you should be able to access your server from any host on your LAN. In our example, a web browser should work when pointed to http://192.168.115:8080.

 

Arduino IDE suddenly freezing up? Here’s how to fix it.

Every once in a while, my Arduino IDE suddenly takes forever to launch, sticking at the splash screen for a long time. Even after it launches, it’s still basically unusable, because the pull-down menus also freeze up, and take an eternity to respond. It happens to me every time I download a new Arduino IDE, which is so infrequent that repeatedly forget why it happens, and how to fix it. After ripping my hair out for a while, I start googling until I find the fix.

If you’re experiencing this problem running Arduino on Microsoft Windows, chances are, you have a virtual serial port from a Bluetooth SPP device installed in your system. The problem is that the Arduino IDE is trying to enumerate your system’s serial ports in order to locate the attached Arduino devices, and the code takes a long time to timeout. Luckily, user eried in the Arduino forums figured out what was happening, and posted a fix in the thread: Road to solve the delay in Arduino IDE. He has graciously come up with a workaround, and shared it with us.

The fix is easy. Simply download his rar file, extract his new rxtxSerial.dll, and replace the version that’s currently in the same directory where your arduino.exe resides. I’ve also attached a zip archive of the file below, for those people who don’t want to install WinRAR in order to get the new rxtxSerial.dll. Thanks, eried!

Downloads: rxtxSerial-2.2_fixed_2009-03-17.zip