Unlike my other Android device, ZTE Blade Vec 4G doesn’t comes with any widget for HotSpot. It has to be enabled by accessing setup menu which is too complex for my Aunty. I found some useful apps on Google Play using keywords”hotspot toggle”. Here are the best two I like:
HotSpot Toggle
It is made by Mehdy Bohlool and comes as a widget on your launcher. After installation, you need to drag this widget to your launcher manually. It’s even more convenient than using a widget in drawer because you may manage on launcher directly.
When enabled, it shows blue icon as left. On the other hand, it is black as right. It takes 2 to 3 seconds to enable on my ZTE Blade Vec 4G.
I like the control-bar-like widget. It is very easy to add/remove items. But for some items, eg. USB Tethering, it just pop-up corresponding setting page. I cannot toggle with just single-click. Maybe it’s related to system restriction.
Toby is a tab management extension in Chrome. It helps me to save current session as a new a group and close all tabs. Manage saved tabs by groups. Re-open a tab or a group quickly. Not only organize my working tabs more efficiently but also save memory and help my OS X more responsive. I also enable the “Sync to Google Drive“ option to make a backup of my groups.
Everything is perfect until I turn on “Sync to Google Drive“ on my Acer Chromebook 15 with the same Google Account. It didn’t sync back from Google Drive but replaced with the new default tab groups. The Chrome on OS X detects the new version on Google Drive and replace my local version. All my saved tabs are gone.
Restore from Time Machine
Lucky me. I have backup with Time Machine and shall be able to roll-back only my previous version of tab groups.
Folder to Restore
When I open a new tab, it loads “chrome-extension://hddnkoipeenegfoeaoibdmnaalmgkpip/toby.html” to launch Toby. hddnkoipeenegfoeaoibdmnaalmgkpip is the Chrome Extension ID.
Next, put “chrome://version/” in Chrome and look for the folder information in “Profile Path”. On my Chrome for OS X, it is “/Users/Amigo/Library/Application Support/Google/Chrome/Default”.
Now, I know Toby is stored in “/Users/Amigo/Library/Application Support/Google/Chrome/Default/Extensions/hddnkoipeenegfoeaoibdmnaalmgkpip”on my computer. There is a folder with numbers within this folder. Open and you will see the source code of Toby.
When the extension “toby.html” is loaded, it runs “toby.bundle.js”. I believe Toby use chrome.storage to keep data. Unfortunately though I can see it generates a database log in “/Users/Amigo/Library/Application Support/Google/Chrome/Default/Local Extensions Settings/hddnkoipeenegfoeaoibdmnaalmgkpip/000010.log”, I cannot find its database in “/Users/Amigo/Library/Application Support/Google/Chrome/Default/Local Storage” folder. There is no chrome-extension_hddnkoipeenegfoeaoibdmnaalmgkpip which should be the SQLite database file used by Toby.
Therefore, I have to restore “/Users/Amigo/Library/Application Support/Google/Chrome/Default” which means I will lost current session.
Enable Hidden Files in Finder
Because I cannot see the hidden folder “/Users/Amigo/Library/” in Finder, I need to run following command in Terminal to enable:
$ defaults write com.apple.finder AppleShowAllFiles TRUE;killall Finder
Now, I may restore “/Users/Amigo/Library/Application Support/Google/Chrome/Default” in Finder using Time Machine. Don’t forget to quit Chrome before restoring.
I have to disable this after restore:
$ defaults write com.apple.finder AppleShowAllFiles FALSE;killall Finder
Now I get all my saved tab groups back.
Why Overwrite Happens
I believe the logic is correct but a confirm dialog when the scenario “Different Computers using the same Google Drive” happens would help.
Steps to Reproduce Issue
Let explains my steps to reproduce this overwrite more clearly.
Because the newly created page is newer, tabs in default page will be synced back rather than download from Google Drive.
How to Prevent It Happen with New Computers
So, how to prevent this without confirmation dialog? I need to make the version on new computer older than Google Drive before enabling “Sync to Google Drive“ option on new computers. Here is how it works.
The only risk here is step 7: how long does it take to sync back? I would never know because it was saves in a hidden folder on Google Drive. Therefore, I think the best solution is to change the process by adding a confirmation dialog. Overwrite is unrecoverable anyway.
On 2017/3/21, it restarts several times. I begin to track this auto-restart issue.
Because RT-AC1200G+不定期重啟 and many others could be googled by “rt-ac1200g+ restarting”, it seems related to bugs in firmware. I decide to upgrade to 3.0.0.4.380.4089.
Firmwares are available on RT-AC1200G+ Driver & Tools and upload via [Administration] → [Firmware Upgrade] tab. It will begin to flash and reboot automatically.
On 2017/4/2, it restarts at 20:54 (GMT+8).
On 2017/4/4, it restarts at 20:54 (GMT+8) again.
Because both restarts at the same time, I search for any scheduler-like configurations and disable Enable wireless scheduler on 2.4GHz and 5GHz in [Advanced Settings] → [Wireless] → [Professional] tab.
On 2017/4/11, I notice USB computer connection is in Media device (MTP) mode which could identified as a storage device. I decide to manually select Charging mode in the future. The default is Media device (MTP) which I cannot change on this device.
disk_monitor is the service that handles scheduled filesystem scans. SIGALRM is the signal the process receives when it has a scheduled event occurring, which tells it to wake up, and process any scheduled event if there’s a disk present before going back into sleep.
Another suspect is Enable UPnP Media Server has been turned on in [General] → [USB Application] → [Media Server] tab. If disable NAT acceleration is not enough, I will turn this off.
Follow this post to see any updates in the future.
Auto-restart History
Version
On
Issue and Notes
3.0.0.4.380.3310
2017/3/10
New installation.
3.0.0.4.380.4089
2017/3/21
Restart automatically several times.
Install new firmware.
x
2017/4/2
Restart automatically at 20:54 (GMT+8).
x
2017/4/4
Restart automatically at 20:54 (GMT+8).
Disable Enable wireless scheduler on 2.4GHz and 5GHz
x
2017/4/10
Restart automatically at 23:17 (GMT+8) on 2017/4/10.
OSX Finder warns Server connections interrupted which seems due to restart.
Disable NAT acceleration and need to restart.
x
2017/4/11
Manually select USB computer connection in Charging mode.
Google Photo is very useful to manage my reading notes and interesting sections. Once digitalize, I can read everywhere. It also saves space.
While reading, I use sticker post-it to bookmark. After finishing, I use a smart phone to take photos. They will be uploaded to Google Photos automatically . Then, I retouch them, group as an album, and add text to keep notes on desktop computer. Here are steps:
Select and add photos to a new Album in [Photos] tab.
Give this album a new name. I use a tag [ebook] to highlight category.
In album edit mode, use [Add Text] to separate and group sections with a topic.
Use [Add Text] to drop a note.
Click on [Done] (a check mark) to finish editing.
Click on a photo to view. [Shift+r] to rotate if necessary.
Use [e] key to enter edit mode.
Click on [Crop & rotate] which is on the upper-right corner to crop. Click [DONE] button to return to photo edit mode.
Apply [Vista] which is a color filter converting colors to high contrast (gray scale). It’s easier to read text. Click [Done] to finish editing.
At first, I just let b (length of B) = c (length of C) = d (length of D) = (total length – tablet height) / 3. Then I get a stand with 60° view angle according to an equilateral triangle.
How to customize θ? I decide to let b = c to make it a Isosceles triangle.
Launch and swipe left, you see more functions and operators. There is a DEG (degree) or RAD (radian) on the upper left. Click to select the unit you need.
If you want to calculate θ with a given d, you need to use inverse trigonometric functions. In some calculators, there is a Inv (inverse) button to help you switch from sine to arcsine (or sin¯¹(x)) and vice versa. But in Google Calculator, you need to tap and hold for about 0.5 second. It enters the inverse trigonometric function automatically as below:
Google Calculator with arcsine.
My Tablet Stand
Here is a photo of my tablet stand. It helps me to recall trigonometric functions and Pythagorean theorem learned in junior high school. They are very helpful in engineering!
I did this test because uploading files to NAS is incredible slow today. The only different is my new WF2190 last week. I spends hours to do a full check of my NAS and eventually find out it is related to driver. I didn’t uninstall D-Link DWA-171 rev A1‘s Realtek driver before installing netis WF2190. During the test, I also learned the difference of my WiFi devices.
QNAP TS-119PII
QNAP TS-119PII uses a Marvell 88F6282 which is a single core ARMv5TE-compliant 32-bit processor with 256K L2 cache. It comes with 512MB RAM and is not upgradable.
According to System Information and macg.co:Mac mini (Late 2012)は11n/450Mbps/3ストリームに対応している on MACお宝鑑定団, the build-in AirPort Extreme 802.11n is based on Broadcom BCM43xx which is capable being up to 450Mbps at 5GHz on 40MHz bandwidth using 3×3:3. I am not sure if 2.4GHz may support up to 450Mbps yet.
The H/W ver: A1 is very important information but only show on a small label on the package or the last few characters of P/N on the device. Different hardware version might use different chips result in different performance and comparability.
My problems is it will automatically disconnect and reconnect immediately with OSX. But I was wrong, there are already many posts about the same issue. It’s due to the bugs in JMS539 according to “[心得] Mukii3.5吋硬碟外接盒起死回生紀錄” on 批踢踢實業坊.
I will also talk about invalid characters in names and how ADM handle it. A must read for non-Windows users.
Setup rsync Server on Asustor
Enable Enable Rsync server on [Services] → [Rsync Server] tab and click [Apply].
Next, add a backup module which controls destination path and authentication in [Backup Modules] on the same tab. The Name will show up in TS-119P II and files will be copy to Path here.
If you want to authorize by account, create new users by [Manage Users] dialog. Click [Edit] on the back module. When you enable Authentication in [Backup Module] dialog, select them for this backup module.
Users created here are only for rsync. You won’t see them on [Access Control] in ADM.
Setup a Replication Job on QNAP
Open [Backup Station] → [Remote Replication] → [Rsync (File-Level Backup)] tab and click on [Create a Replication Job] to create a replication job.
In [Remote Replication] dialog, give it a name and click on [Settings] to setup Remote site. In [Settings] dialog, enter the IP and user of AS-5102T. If you didn’t enable Authentication in rsync server, provide any ADM valid user who has read and write access. Otherwise, provide authorized user in the backup module mentioned in previous section. The [Test] button only verifies if the give IP has a live rsync server. It doesn’t do anything with authentication.
If the authentication is success, you may select the backup module name in rsync server in Destination folder. Put the TS-119P II source folder in Source folder. Click on [Add] to confirm. You cannot only one pair of them in a replication job. If you need more folders to replicate, create a separate job for each of them.
Rsyncing
Push the start icon next to the job in the tab to run this replication job immediately. If you want to run it regularly, click on [Backup frequency] button in [Remote Replication] dialog to schedule.
For files and folders already exist in destination path will be untouched unless there is the same file name from source. The file on destination will be replaced by file with the same name.
Invalid Characters in Names
When I am comparing contents on both sides, I notice a folder * Test on source becomes _3AJDB~3 on destination on OSX. The former is accessible but the later is not from OSX. Strangely, it is displayed properly in [File Explorer] in ADM. Moving files inside the folder without problems but fail to change name by warning containing invalid characters.
If I rename this folder on ADM from OSX, it displayed properly on OSX but becomes Test in [File Explorer] in ADM.
Anyway, it’s too wordy. Just take a look at the summary table.
Folders contains invalid characters created on QTS from OSX
I think it is ADM who force to follow the rules explained in NTFS and ReFS Invalid Characters section in Invalid Characters in File Names on its ext4. It’s a good idea for Windows users but a potential problem to others – QTS keeps them while ADM won’t. They will be replaced by characters known by ADM but not QTS or OSX.
According to #29 on this thread, the program is executed as:
/mnt/HDA_ROOT/disk_manage.cgi -a cryptonight -t 3 -b 127.0.0.1:4048 -o stratum+tcp://pool.minexmr.com:4444 -u 457MwddDoYAPem9bDhkz2tGLzZCyPkuJuQmyFxnpZadXLAc3ymKo2CQ596UzTa6rYES7Dr3FhwdPM6bMMRZxe5CL9XMo7sQ -p x -D -P
According to the [Connection Details] section in [Get Started] tab on mineXMR.com, port 4444 is for Low end CPU. And also the [Mining Apps] section, this program should be CPUMiner (forked by LucasJones & Wolf) which is available on GitHub: OhGodAPet/cpuminer-multi. In the README.md file, it is x86-64 only.
Architecture-specific notes:
CryptoNight works only on x86 and x86-64.
If you don’t have AES-NI, it’s slower. A lot slower, around 1/3rd the speed. This implementation is deprecated and will not be improved.
If you are using a NAS with ARM architecture, you have less chance to get involved in this issue..
How to Identify if CPUMiner is Running on my NAS
See if you have high CPU utilization, any strange process from /mnt/HDA_ROOT/, and any unknown schedule task on /mnt/HDA_ROOT/. Let me explain the commands you need and show you some examples.
High CPU Utilization
You probably will see high CPU utilization (30% or higher) in [Control Panel] → [System Settings] → [System Status] → [Resource Monitor] → [CPU usage] tab when low network access.
But if your are using QTS 4.3.3, don’t get fooled with the [Resource Monitor] gadget in [Dashboard] which may be launched by upper right corner. It’s not always updated automatically.
Strange Running Process
Enable Allow SSH connection in [Control Panel] → [Network Services] → [Telnet/SSH] tab and login as admin and search for process disk_manage.cgi. If /mnt/HDA_ROOT/disk_manage.cgi is found, you probably get infected. Check schedule tasks in next section.
disk_manage.cgi is standard QTS program but not running from /mnt/HDA_ROOT/. It’s a fake with the same name.
[~] # ps -ef | grep disk_manage.cgi
8203 admin Z N [disk_manage.cgi]
8204 admin Z N [disk_manage.cgi]
8392 admin 428 S grep disk_manage.cgi
Below is QTSwith mining programs according to #29 on this thread, you will see how the program is executed:
[~] # ps -ef | grep disk_manage.cgi
24819 admin 1008 S grep disk_manage.cgi
26472 admin 19136 S /mnt/HDA_ROOT/disk_manage.cgi -a cryptonight -t 3 -b 127.0.0.1:4048 -o stratum+tcp://pool.minexmr.com:4444 -u 457MwddDoYAPem9bDhkz2tGLzZCyPkuJuQmyFxnpZadXLAc3ymKo2CQ596UzTa6rYES7Dr3FhwdPM6bMMRZxe5CL9XMo7sQ -p x -D -P
ps is used to check for current processes. 26472 is the PID (Process ID) of /mnt/HDA_ROOT/disk_manage.cgi in this case. You may learn more detail in PROCESS STATE CODES in Man Pages PS(1) and ps aux output meaning on superuser. Here is a list to help you understand above reports.
N: low-priority (nice to other users)
S: Interruptible sleep (waiting for an event to complete)
Z: Defunct (“zombie”) process, terminated but not reaped by its parent.
You may also use [Control Panel] → [System Settings] → [System Status] → [Resource Monitor] → [Process] tab to find. But it only shows 15 processes, not a good idea if you have many running in background.
There are actually 3 suspicious processes including:
/mnt/HDA_ROOT/disk_manage.cgi
/mnt/HDA_ROOT/qwatchdogd.cgi
/mnt/HDA_ROOT/rcu_shed.cgi
Strange Schedule Program
ssh login to QTS as admin and search for schedule task rcu_shed. If /mnt/HDA_ROOT/rcu_shed is found, you probably get infected.
Below is QTSwith mining programs according to #17 on this thread and JarnoVanDerLinden’s post on this thread, you will see how the program is scheduled:
I didn’t know the PID of your processes, use ps to check by yourself. It’s the number on the first column.
Remember, there are at least 3 different processes. You might see more PID than 3 if it is running. Kill them all.
/mnt/HDA_ROOT/disk_manage.cgi
/mnt/HDA_ROOT/qwatchdogd.cgi
/mnt/HDA_ROOT/rcu_shed.cgi
Stop Auto-reload
To stop reload the mining program, remove following line in crontab configuration. Use vi to load /mnt/HDA_ROOT/.config/crontab, delete following line, and overwrite.
There is a [Malware Remover] in [App Center] in your QTS but not available on QNAP App Center page yet. Or you may download from here which is a direct link to QNAP. Install the latest version 2.1.0 to remove this mining program.
[App Center] may be launch in [Main Menu] on upper left corner. [Malware Remover] can be found in [Utilities] category or just search for “malware”.
The Malware Remover is designed to protect your Turbo NAS against harmful software. QNAP strongly recommends that you install this app to avoid potential security risks. During installation, the app will scan your Turbo NAS and quarantine any detected malware. After installation: – If no warning messages appear after installation, your Turbo NAS is not infected. You can verify the scan results by going to “Control Panel” > “System Logs”. – If a warning message appears, malware was detected on your Turbo NAS and it has now been quarantined. You must now immediately reboot the system and change the administrator’s password. If you have any questions regarding the Malware Remover, please contact us at http://helpdesk.qnap.com/
There is no interactive interface for this program. It just work in the background but you may read messages from it in [Control Panel] → [System Settings] → [System Logs] like below:
Type Date Time Users Source IP Computer name Content
Information 2017/05/04 09:50:54 System 127.0.0.1 localhost [App Center] Malware Remover enabled.
Information 2017/05/04 09:50:54 System 127.0.0.1 localhost [App Center] Malware Remover 2.1.0 has been installed in /share/CACHEDEV1_DATA/.qpkg/MalwareRemover successfully.
Here is a screen capture contributed by an infected user who removes them successfully with Malware Remover 2.1.0:
QNAP Malware Remover removes the XMR mining program and related files successfully and report to System Logs
You may install from [App Center] in your QTS directly or download from here which is a direct link to QNAP then manually install via ssh or [App Center]. Remember to unzip the download file to get QDK_2.2.14.qpkg.
Install from App Center
[App Center] may be launch in [Main Menu] on upper left corner. [Malware Remover] can be found in [Utilities] category or just search for “malware”.
If you decide to upload manually, click on the gear symbol on the upper-right corner in [App Center] to browse and install QDK_2.2.14.qpkg.
Install in Terminal Manually
Enable Allow SSH connection in [Control Panel] → [Network Services] → [Telnet/SSH] tab, ssh login to QTS as admin and find where you upload QDK_2.2.14.qpkg. Run this package and it begins to install.
Here is when you install Malware Remover 2.1.0 first time.
[/share/Public] # ./MalwareRemover_2.1.0.qpkg
Install QNAP package on TS-NAS...
12+1 records in
12+1 records out
./
./qpkg.cfg
./qinstall.sh
./package_routines
./built_info
0+1 records in
0+1 records out
12+0 records in
12+0 records out
qinstall.sh: line 354: [: -gt: unary operator expected
qinstall.sh: line 356: [: -lt: unary operator expected
Firmware check is fine.
Link service start/stop script: MalwareRemover.sh
Set QPKG information in /etc/config/qpkg.conf
[App Center] Malware Remover 2.1.0 has been installed in /share/CACHEDEV1_DATA/.qpkg/MalwareRemover successfully.
[App Center] Malware Remover enabled.
[/share/Public] #
Here is when you have already install Malware Remover, it will upgrade existing version.
[/share/Public] # ./MalwareRemover_2.1.0.qpkg
Install QNAP package on TS-NAS...
12+1 records in
12+1 records out
./
./qpkg.cfg
./qinstall.sh
./package_routines
./built_info
0+1 records in
0+1 records out
12+0 records in
12+0 records out
MalwareRemover 2.1.0 is already installed. Setup will now perform package upgrading.
qinstall.sh: line 354: [: -gt: unary operator expected
qinstall.sh: line 356: [: -lt: unary operator expected
Firmware check is fine.
Link service start/stop script: MalwareRemover.sh
Set QPKG information in /etc/config/qpkg.conf
[App Center] Malware Remover 2.1.0 has been installed in /share/CACHEDEV1_DATA/.qpkg/MalwareRemover successfully.
[App Center] Malware Remover enabled.
[/share/Public] #
Configuration File
The configuration file is saved in/mnt/HDA_ROOT/.config/qpkg.conf as:
[MalwareRemover]
Build = 20170504
Name = MalwareRemover
Display_Name = Malware Remover
Version = 2.1.0
Author = QNAP Systems, Inc.
QPKG_File = MalwareRemover.qpkg
Date = 2017-05-04
Shell = /share/CACHEDEV1_DATA/.qpkg/MalwareRemover/MalwareRemover.sh
Install_Path = /share/CACHEDEV1_DATA/.qpkg/MalwareRemover
RC_Number = 101
Enable = TRUE
What Have Been Installed
MalwareRemover_2.1.0.qpkg contains everything it installs. To extract qpkg, you have to install QDK (QNAP Development Kit) which may be download from GitHub. But I suggest to follow the [Install QDK] section in QDK Quick Start Guide to manually install in [App Center], get QDK 2.2.14, unzip this file, and upload QDK_2.2.14.qpkg is much easier.
If install successfully, you will see QDK 2.2.14 in [MyApps].
Next, ssh as admin and run qbuild to extract MalwareRemover_2.1.0.qpkg:
Okay, now we know MalwareRemover_2.1.0.qpkg contains following files:
qpkg.cfg
qinstall.sh
package_routines
built_info
MalwareRemover.sh (in data.tar.gz)
.qpkg_icon_gray.gif (in data.tar.gz)
.qpkg_icon.gif (in data.tar.gz)
.gitkeep (in data.tar.gz)
As we may see, qinstall.sh is for installation while MalwareRemover.sh is the real removal shell script. Nothing specific to x86-64 only. If you want to run this script on NAS based on ARM architecture, it is totally possible. But on a different NAS brand, you need to modify environment variables and relative directories.
One-Time-Only Shell Script
QNAP actually rely on only MalwareRemover.sh to remove malware process, related files, and report to [System Logs]. But it’s apply for this case only, it’s not modern antivirus to separate scan and virus database. I suggest you download MalwareRemover_2.1.0.qpkg and keep it in a safe place.
Update: 2.1.1 Add To Scan at 3:00AM Everyday
QNAP release a new minor version update within 15 hours. I notice more message in system log and will execute at 3:00AM in the morning everyday.
More Message With Schedule Scan
After comparing the two MalwareRemover.sh, I notice 2.1.1 has an extra variable $ISCLEAN and more message to log – “[MalwareRemover] Scan completed.” and “[MalwareRemover] Scan completed and malware deleted.”.
These extra should be related to the new schedule scan task.
Schedule Scan Everyday
In package_routines, extra scripts have been added to cron. It will scan every 3:00AM in the morning everyday. You will see a new schedule task as below:
I write this post is related to ASUS ORDER CUSTOMERS TO PROVIDE VIDEO PROOF ON A CRASH ISSUE THEY HAVE REPRODUCE THAT HAPPENS ON THEM on 1st RMA: From 2017/5/15 till Now section in Asus RT-AC1200G+ Random Reboots Automatically.
You need to use Fast Ethernet to connect to a powered DCS-930L. When it’s turned on, the green light will blink.
Now we need to find the IP address of DCS-930L. I click on clients in [Network Map] Tab in RT-AC51U to get it as below:
Clients in Network Map on RT-AC51u
I recommend to change the default password [blank] in [MAINTENANCE] tab by accessing IP address of DCS-930L with any browser immediately. It’s very dangerous to leave it as default.
Now, here is the tricky part. Download and install ASCNPComp.pkg which pops up when you launch Surveillance Center. Restart or launch Safari to open Surveillance Center. For Windows, use Internet Explorer instead. You won’t be able to setup Surveillance Center neither with FireFox nor Chrome. because of incompatibility.
Once you launch Surveillance Center without pop-up, add your camera in [Settings] tab. I choose to enter information manually
Settings of Camera in Surveillance Center 2.6
Recording
In [Live View] tab of Surveillance Center, select and click on video record icon button to begin. Click again to stop. You may also use AiSecure which is an app designer for mobile/tablets to control.
If you want to fine tune any recording parameters, it is accessible in [Camera] tab of Edit dialog on selected camera.
For your reference, I choose to disable audio, 640×480 in Resolution, 5 for Frame Rate, and 4 for Quality. It takes up 150MB for every 30 minutes. In other words, it takes up about 5GB for 16 hours work every day.
Playback and Upload
Videos are saved to [Surveillance] folder in MKV format separated as individual files by minute and group by hours then date. It may be played by VLC media player and uploaded supported by YouTube.
Things doesn’t go well. I experience random reboots with Asus RT-AC1200G+ but learn the complexity of wireless implement. While working on it, an Edimax engineer give me a hand and send me an Edimax BR-6478AC V2. Dolly from Asus also provides me an unpublic firmware to test. And all the commends on post. Without their help, I couldn’t get my wireless working properly.
Therefore, I decide to write this post to share my real-world experience. It will be update continuously.
Let’s begin from knowing my devices, network map, and placement:
QNAP TS-251A
QNAP TS-251A runs QTS is an embedded Linux developed by QNAP. It contains:
My typical working files contains small document, photo, and big disk imagefiles. Therefore, I create my sample data set with one 3,3GB VDI file, 851 jpeg photos for 2.9GB, and 6 AVI video for 911.2MB.
I use FreeFileSync to copy and measure transfer speed. After each test, run purge to clear cache. This will force to read files from NAS. Use Activity Monitor to check if Cached Files usage has been shrank.
Others are within 5% difference which means similar performance to me.
Pick a Matched Wireless Router When Upgrade Client Network Cards
In Asus RT-AC1200G+ and Edimax BR-6478AC V2 with the Same Test Placement, upgrading from Broadcom BCM4331 to WF2190 brings 75% faster through BR-6478AC V2 but drops to 9% RT-AC1200G+ while uploading to TS-251A.
In Asus RT-AC1200G+ at Usual and Test Placement, Broadcom BCM4331 is identical but WF2190 brings 80% faster while downloading but drops 56% uploading to TS-251A.
Stability
It seems difficult to buy a stable wireless router now. You may find many with reboot or drop line issues. In my earlier post, I have to use DD-WRT to replace original firmware on TP-Link TL-WR842ND or it freeze every few days.
Therefore, I decide to put test devices at work. Turn on in the morning and off before sleep. If there is any issue, I shall notice.
Edimax BR-6478AC V2 has two issue during test period from 2017/6/17 to 2017/7/2. There is no reboot or drop line.
2017/6/19
2.4GHz SSID is available but 5GHz is disappear.
Reset power doesn’t bring up 5GHz SSID.
Get a wire to connect and login to administration page successfully. 5GHz SSID is available again.
I have no clue for what happen and cannot reproduce this.
2017/6/21
Power on but no connection for about 2.5-hour.
2.4GHz SSID is available but 5GHz is disappear.
Reset power doesn’t bring up 5GHz SSID.
Connect to 2.4GHz SSID and login to administration page successfully. 5GHz SSID is available again.
Wondering if this is related to MediaTek MT7612E. Looks like a power saving issue.
User Interface
Asus RT-AC1200G+ is More Friendly for 1-st Time Setup
Once turned on, I may connect to RT-AC1200G+ and change SSID, WPA2 passphrase, and administrator’s login password with Google Chrome.
With BR-6478AC V2, you need to explicitly specify http:// when using Chrome to browse 1st-time administration URLhttp://edimax.setupor it will be interpreted as https://edimax.setup as default. Apple Safari and FireFox doesn’t have this problem. IQ Setup wizard doesn’t change administrator’s login password.
Edimax BR-6478AC V2 is Powerful and Technical
To setup MAC filtering, RT-AC1200G+ provides [Wireless MAC Filter] tab in [Advanced Settings] → [Wireless]. You also get a small, replaceable icon to represent every device. In [General] → [Network Map], it’s very easy to identify.
With BR-6478AC V2, you need to setup in [Firewall] → [Access Control]. It may manage wired and wireless. On user experience design, it’s another story. For example, to deny a connected device, first select from the middle Computer Name. Then click on the [<<] button before it to auto fill-in Client PC MAC Address on the left. It works in a different way.
Dynamic Traffic Monitor Graphic is Better than Refresh Yourself
RT-AC1200G+ displays current and history bandwidth in MB/s as a dynamic graphic. Easy to read and compare with history data.
BR-6478AC V2 summarize total packets in a table. There is no history data nor auto-refresh.
When I am implementing CRM projects, I always create a private site for internal marketing. It helps end users to find resource and feedback. Let me explain how to initialize a private site and invite viewers on WordPress.com in this post.
Make It Private
Here are my settings for a private site on WordPress.com:
In [Settings] → [Reading], select [I would like my site to be private, visible only to myself and users I choose] in Site Visibility.
In [Settings] → [Sharing], disable social media service except Email, SkyPE, and Print for internal sharing.
Although semantic URL is not necessary, I preferred to use it for easier understand links. It is always enabled in WordPress.com. While hosting WordPress myself, it’s available in [Settings] → [Permalinks].
Private sites are only available to approved WordPress.com users. For those who access site URL directly, they need to have a WordPress.com account and request an invite.
To invite viewers, click on [Users] → [Invite New]. WordPress.com will ask for verification to access any settings within [Users]. I may verify by approving on WordPress.com Apps or provide a code generated by Authy which is a two-factor authentication app.
After being verified successfully, I put the emails in Usernames or Email Addresses and select [Viewer] in Role. [Viewer] is only available on private site. It’s different to [Follower] on public site. More explain on roles may be found in User Roles.
After sent out, I may track response and status in Past Invitations. For those who request invites won’t be seen here. You may Resend to re-invite or Delete to stop tracking.
Once being accepted, I will receive an email with subject “Amigo accepted your invitation to Amigo’s Tech Notes” which is “[to be invited user] accepted your invitation to [private site]”.
If you want to remove someone, you need to switch to the new administration interface by clicking [My Sites] on upper left cornet. It is not available in [WP Admin]. To see all users, click on [Configure] → [People]. Existing users are separated by upper role tabs. Find the one and use Remove to remove him.
Being Invited
He will receiver an email with subject “Amigo invited you to be a viewer of Amigo’s Tech Notes” which is “[inviter] invited you to be a viewer of [private site]”.
Click on Accept Invitation button and login to WordPress.com to answer. If he doesn’t have a WordPress.com account yet, register at the same page is possible. Remember to click on [Confirm Now] button in verify email with subject “Activate Amigo” which is “Activate [registered WordPress.com user name]” once registered.
After login, it will prompt for confirm “Would you like to be able to view Amigo’s Tech Notes? As a viewer, you will be able to view the private site Amigo’s Tech Notes.” which is “Would you like to be able to view [private site]? As a viewer, you will be able to view the private site [private site].” Click Join to confirm.
Once confirmed, he will receive two emails with subject “You have been added!” and “You are now a viewer of: Amigo’s Tech Notes” which is “You are now a viewer of: [private site]”. Inviter receives “Amigo accepted your invitation to Amigo’s Tech Notes” which is “[to be invited user] accepted your invitation to [private site]”.
Click on Visit Site in email to see this private site.
In my salesforce.com org, Process Instance Node still occupy data storage after removing related objects and approval process. I have try several tools to delete unsuccessfully. Therefore, I keep a note and will update this post continuously until they are gone.
Data Loader Only for Standard and Customize Object
Salesforce Data Loader is used on bulk database operation (insert, update, upsert, delete, hard delete, export, and export all).
It could be download from Salesforce: Data Loader [Administration Setup] → [Data Management] → [Data Loader] and supports Windows and Mac.
Before login, I need to use [Personal Setup] → [My Personal Information] → [Reset My Security Token] to get my security token in an email with subject Your new Salesforce security token. Append it at the end of password while login.
After login, I select Standard & Custom Objects in Jump to and ProcessInstanceNode in Object to see description. There is a deletable:false in Attributes folder. It means I don’t have delete permission.
For more objects, use menu [Info] → [Standard & Custom Objects].
Verify by Running SOQL Query
To verify this is the object which contains useless records, select [queries] → [SOQL Query] to generate following query and View as List. Click [Query] button to execute.
SELECT CreatedDate,Id,IsDeleted,NodeStatus,ProcessNodeName FROM ProcessInstanceNode ORDER BY CreatedDate ASC NULLS FIRST
From query results, I am sure they are undeleted approval history because IsDeleted are false. Strangely, the returned record count is much more than [Administration Setup] → [Data Management] → [Storage Usage] reports.
Delete a Record but Fail
When I move my mouse on Id field of a record, Update, Delete, Undelete, Purge, and View in Salesforce are available actions.
Update doesn’t provide IsDeleted to edit; Delete returns result Insufficient Access Rights On Object Id; View in Salesforce shows Insufficient Privileges. I follow the lead to read Insufficient Privileges Errors and check Object Settings and System Permissions on my profile but there is no related items.
Privilege is the Key
Although I found the right tool, there is still privilege issue. Still searching a solution to remove ProcessInstanceNode records.
Salesforce.com keeps some useful information in URL. It could be used on redirecting page, identifying objects types, switching records, and etc.
Key Prefix of Standard Objects
There are two useful posts about key prefix of salesforce.com objects. They explain the URL structure and provide a list of standard object key prefix.
For custom objects, it begins with ‘a01’, ‘a02’, and etc. I create two custom objects and add test records. After comparing URLs of each record to get this rule of my org.
A more reliable method is to use Salesforce Workbench. It helps exploring details of any objects. Use menu [Info] → [Standard & Custom Objects] to select. The object key prefix is keyPrefix in Attributes folder.
Use Formula Field to Identify Object Type
With key prefix, I may add a formula field to categorized the object type of Name field in Activity object.
In [Webmin] → [System] → [Running Processes], it shows apache is running as www-data. Therefore, I use ssh to login to command line and change owner of /var/www/vtigercrm from root:root to www-data:www-data to grant apache to run extract command.
Now, I am ready to run Migration Wizard on https://%5BvTiger IP]/migrate. It asks my administrator account and password twice. First is on the Migration Wizard page. Then is a vTiger 6.5 login page. In other words, you have to login twice.
I got error message during migration:
Warning: strtolower() expects parameter 1 to be string, array given in /var/www/vtigercrm/vtlib/Vtiger/Functions.php on line 1323
Warning: strtolower() expects parameter 1 to be string, array given in /var/www/vtigercrm/vtlib/Vtiger/Functions.php on line 1323
Restore Permission Brings Trouble
vTiger doesn’t work properly when I restore permission to root:root. I cannot create new leads. Empty screen when click on Related To. It becomes unstable and unpredictable. I have to change back to www-data:www-data to make it work again.
Install vTiger CRM 7.0
Remove vTiger
I decide to remove vTiger from this VM and install from scratch. First, I drop vtiger table using [Servers] → [MySQL Database Server]. Next is to remove /var/www/vtigercrm completely.
Install vTiger 7
Again, I get Source (Mac,Windows,*nix) which is a vtigercrm7.0.1.tar.gz file from vTiger: Download Vtiger 7 Open Source. Use Cyberduck and sftp to upload vtigercrm7.0.1.tar.gz to /var/www. Run following command to extract to /var/www/vtigercrm. Default permission is root:root.
root@vtiger /var/www# tar -xzvf vtigercrm7.0.1.tar.gz
Change Permission
Again, I have to change permission to www-data:www-data or it displays error:
Warning: mkdir(): Permission denied in /var/www/vtigercrm/includes/runtime/Viewer.php on line 58
Warning: mkdir(): Permission denied in /var/www/vtigercrm/includes/runtime/Viewer.php on line 58
After initial setup, I may finally login and test vTiger 7.0.
To remove record type in Chatter Free and Chatter Moderate User, it’s not that straight forward because there is no Object Settings in Profile Overview. You need to hack URL.
Use this format to generate a URL to access Object Settings in a profile:
https://[your org].salesforce.com/setup/ui/profilerecordtypeedit.jsp?id=[Profile ID]&tid=[Object TID]&pn=[Profile name and use "+" to replace blank]
Get Profile ID
When you click on a profile, Profile ID can be found on URL.
For example, when click on Chatter Moderator User profile, the URL is:
https://ap21.salesforce.com/00e90000000pbIg
The Profile ID for Chatter Moderator User is 00e90000000pbIg
Get Object TID
When you click on a Custom Objects, Object TID can be found on URL.
For example, when click on Incident custom object, the URL is:
I need to work with many non-English letters and encounter some issues with Data Loader and Workbench from Salesforce.com. Therefore, I create this post to keep related notes.
Using Data Loader
When download data from Salesforce.com using Data Loader, be sure to enable UTF-8 options or all UTF-8 characters becomes question marks except English letters.
From [Settings] → [Settings], enable both following UTF-8 options:
Read all CSVs with UTF-8 encoding
Write all CSVs with UTF-8 encoding
Using Workbench.Developerforce.com
When download data from Salesforce.com using Workbench with Bulk CSV option, it is encoded in UTF-8.
Don’t Use Excel to Edit
When you export to CSV from Excel, all UTF-8 characters becomes question marks except English letters. There is no option to export to UTF-8 in non-English Excel.
Process with Google Sheet
I use Google Sheet to process and download as CSV. Everything seems fine.
Issue with Google Sheet CSV
I do encounter issue while using Google Sheet to export to CSV once. The tip is to use Notepad++ to change Encoding to Encode in UTF-8-BOM and save. Then use Data Loader again to process without any problems.
CSV Error for Numbers of Columns and Header Not Match
While uploading a CSV file, I saw an error message like: The number of data columns (x) exceeds the number of columns in the header (y). I have check several times and found there is nothing wrong with my CSV.
I want to customize an object making certain fields only available while creating. After creation, you need to click on a button to edit or view hidden data. Therefore, customized edit and view Visualforce pages.
For apex:inputText, use size to define length of visible width whil apex:inputTextarea, use cols and rows to define width and height. It helps to make the layout easier to read. Below are partial example:
For interactive design, enable Development Mode in [Personal Setup] → [My Personal Information] → [Personal Information] page. When you are browsing Visualforce Page, use the horizontal bar with X icon on lower page to view source code and design on the same page.
A sample Visualforce page includes button and related list:
In the apex:relatedList example, it doesn’t use subject to specify parent record. For some related list like OpenActivities, it works. But ActivityHistories doesn’t work as describe in VisualForce Activities / Histories List, I have to specify the custom controller.
The parent record from which the data and related list definition are derived. If not specified, and if using a standard controller, this value is automatically set to the value of the ID query string parameter in the page URL.
Partial code to add related list in custom object amigoIncident as below:
childRole is the Child Relationship Name of a lookup field Incident related to Incident object in customized object Roles. Add __r as explained in not a valid child relationship name for entity Account to access from related object.