Mostly work related stuff which I would've entered into my "Log book". Instead of hosting it on an intranet site, outsourcing the hosting to blogger!
Wednesday, April 14, 2021
azcopy with sas tokens and more
updating an app on Google's Android Play App store
Monday, April 12, 2021
comparing Azure pricing in different locations
An interesting site - https://azureprice.net/ Makes it easy to find the region with lowest pricing for a particular type of VM.
As the site says, pricing is also different in different currencies.
Sunday, April 11, 2021
customizing and building the moodle app
After learning how to use an older node version, the moodle app could finally be customized and built - a follow-up to my failed trials here.
The customization steps and the relevant modified files are in this location, with the changes being mentioned in the readme as follows:
1. Changes as per the moodle doc on compiling with AOT
Edit Oct 2022 - the link content seems to have changed, so here is the archived version.
2. Change to the build.gradle to force minSdkversion 22
ext.cdvMinSdkVersion = 22
to build with android studio. This can also be done in config.xml
3. Changing all ~ and ^ package dependencies in package.json (except cordova-android itself) to the exact package. Done by replacing
"~ with "
and
"^ with "
in package.json
Or else, all sorts of dependency issues while building the 2019 release in 2021. (The nvm use 11 may also suffice for solving the dependency issues.)
The build directory takes up more than 1 GB, lots of dependencies are downloaded.
4. Customization - Changes as per the Configuration heading at this post,
config.xml
reduced SplashScreenDelay
and SplashShowOnlyFirstTime true
also, very important,
content src="https://sssvidyavahini.org" would make the app like a simple webview.
We don't want that, so leave the content src as it is,
but change the siteurl in src/config.json
and onlyallowlistedsites true.
We also set android-minSdkVersion" value="22" in config.xml
google-services.json - changed the package name
and changed the version in src/config.json , ensured it is different, but same number of digits.
5. Changing logo and splash screen as per above url and also resources/android/icon-background.png and icon-foreground.png
and in src dir assets/img
Build steps -
Set up environment variables as per
https://cordova.apache.org/docs/en/10.x/guide/platforms/android/
JDK tar.gz needed oracle login, created as my official email
Set JAVA_HOME
https://docs.oracle.com/cd/E19182-01/821-0917/inst_jdk_javahome_t/index.html
in .bashrc, added the following.
export JAVA_HOME=/home/mac/Downloads/jdk1.8.0_281
export PATH=$JAVA_HOME/bin:$PATH
export ANDROID_SDK_ROOT=/home/mac/Android/Sdk
export PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/tools/bin:$ANDROID_SDK_ROOT/platform-tools:$PATH
As mentioned in the cordova documentation, we can open a cordova project inside android studio for the final build - choose the import gradle project option, and choose the platforms/android directory.
But we need to edit www folder outside android studio, then copy over changes by doing cordova build - in our case, npx etc as below.
# https://docs.moodle.org/dev/Setting_up_your_development_environment_for_Moodle_Mobile_2
nvm install node 11.15.0
# https://www.sitepoint.com/quick-tip-multiple-versions-node-nvm/
nvm use 11
# this is very important - if starting again in another terminal window, must do nvm use 11
# or else all sorts of hard to diagnose errors occur during the build.
sudo apt-get install libsecret-1-dev
npm install
# cordova.plugins.diagnostic: Diagnostic plugin - ERROR: ENOENT: no such file or directory, open '/home/mac/StudioProjects/LMSappBuildTrial/config.xml'
# added 1829 packages from 1022 contributors and audited 1958 packages in 98.592s
npx cordova prepare
# Current working directory is not a Cordova-based project.
# https://stackoverflow.com/questions/21276294/cordova-current-working-directory-is-not-a-cordova-based-project
#mkdir www
npm install cordova
# this is also important. Without this, the www directory is not populated for the final prod build.
npm i -g cordova-res
# This is also important - without this, the image resources won't get processed
# config.xml was missing, so copied over with git
# No platforms added to this project. Please use `cordova platform add <platform>`.
npx ionic cordova platform add android --verbose
#Source path does not exist: resources/android/icon/drawable-hdpi-smallicon.png
#Error: Source path does not exist: resources/android/icon/drawable-hdpi-smallicon.png
# editing gitignore file to add the resources
npx cordova prepare
# ignoring the warning about conflict
npx gulp
npm start
# This is an optional step to check in a browser and verify.
# waiting till transpile started etc. then Ctrl+C
# If we wait till the end - nearly an hour on a 4 GB system? it opens in the default browser.
# https://docs.moodle.org/dev/Setting_up_your_development_environment_for_Moodle_Mobile_2#Compiling_using_AOT
cp -v "changes made to moodleapp files/inside node_modules dir/@angular/platform-browser-dynamic/esm5/platform-browser-dynamic.js" "node_modules/@angular/platform-browser-dynamic/esm5"
cp -v "changes made to moodleapp files/inside node_modules dir/@ionic/app-scripts/dist/util/config.js" "node_modules/@ionic/app-scripts/dist/util/config.js"
# edited gitignore to not ignore this config.js, did git add -f.
npm run ionic:build -- --prod
# this takes a lot of RAM and a lot of time.
# if possible, avoid swapping by closing all apps and clearning memory before doing this.
# REMEMBER to use nvm use 11 if doing this in a fresh terminal
#PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
# 3682 mac 20 0 3142252 2.215g 28948 R 131.5 59.6 6:34.48 node
# build prod finished in 3128.04 s - this was on a 4GB machine
# on a 16 GB GCP instance, it took up around 1/3rd of memory - 5 GB+ -
# and finished in just 5 or 6 minutes instead of 50 minutes.
# npx cordova run android
# Could not find an installed version of Gradle either in Android Studio,
#or on your system to install the gradle wrapper. Please include gradle
#in your path, or install Android Studio
# So, I just imported the platforms/android directory using the Import Gradle project option in Android Studio 4.1.3, and built from there.
/dev/kvm permission denied fix for Android AVD unable to open in Android studio
I did not go through this, since my machine had only 4 GB RAM and was probably too RAM constrained to run the virtual device, but
- install qemu-kvm and then give appropriate permission to the current user.
$ sudo apt install qemu-kvm
% add your user to the kvm group.
$ sudo adduser <username> kvm
% And then
$ sudo chown <username> /dev/kvm
Saturday, April 10, 2021
uninstall apk before installing with different signature
While developing android apps, we find that sometimes the apks we build don't get installed - the package manager just says Not Installed. The reason is apparently that if the same app is currently installed with a different signature, it will not get overwritten.
Uninstalling via long press on the home screen on my LG Q6 was not sufficient.
To uninstall cleanly, the way was as listed at this page:
Settings - Apps - Select the app to uninstall - Choose Force Stop
Then choose Storage - Clear Cache - Clear Data
Return to the app screen - choose Uninstall
After doing this, the apk will install. If it doesn't there may be something wrong with the signing etc. which will be the subject of another post of mine.
Wednesday, April 07, 2021
signing release build apk files in android studio
Project Structure - Modules - Signing tab - add a configuration, and under Build types tab, release build, under signing config, choose the one which we have added.
loading software on a few hundred tablets
There was some discussion about loading software on some Android devices which were to be shipped to schools.
Initial thought was to create ids like
OurPrefix.TAB.2021.01@gmail.com
to log on to the play store for the tablet which has asset id OurPrefix-TAB-01 etc.
We could then print out the password and put it in the box for the teachers to change if necessary.
This is required, since this is not a factory install, and factory install process is very different from manual install :) For a manual install, we have to log on to the play store with a particular account, etc etc.
If we are to not create such ids, installing and then logging out of the account used to install can work for our free apps, but with the drawback that the apps will not update. For updates, the users would have to uninstall and reinstall.
The next idea was to install all these apps using pre-downloaded APK files, so that the internet connection would not be a bottleneck in the prep process which was planned to be done on a single day for several hundred devices - taking the help of a score or more of volunteers. This too had the drawback of the apps not updating automatically from the Play store.
Finally the idea of links to the Play store was mooted.
- Connect via USB cable to the computer, Choose the "File transfer' USB usage preference, copy the tabletslinks.txt file to the Download directory on the tablet.
- Navigate to the txt file using Google Files on the tablet, click on it and choose to open with Chrome.
- Copy each line (each link), open a new tab in Chrome, paste in Chrome, hit Enter (while offline)
- Click the three vertical dots on the right hand side of the Chrome address bar, choose "Add to Home Screen"
- Write an appropriate short link title like Pdf for the adobe pdf reader link, Office for the office link, Teams/Meet/Zoom for the respective links.
- Drag and drop the link to the home screen.
Monday, April 05, 2021
Sunday, April 04, 2021
change default app in Android
Saturday, April 03, 2021
Android studio Git checkout
For checking out at a specific commit -
https://stackoverflow.com/questions/36517118/how-do-i-checkout-an-old-git-commit-in-android-studio
right-click relevant commit on the Git tab's history, choose 'Checkout revision <hash>'
keeping Windows and Linux dual-boot times correct
This 2011 post has the Kubuntu 10 way, and for current machines running systemd, the way to do it is, if choosing to make Linux use the hardware clock as local time,
timedatectl set-local-rtc 1
Thursday, April 01, 2021
fixing Filezilla error about LC_CTYPE environment variable
As described on this page, the solution was
sudo nano /usr/share/applications/filezilla.desktop
Find the line
Exec=filezilla
and replace it with
Exec=env LC_ALL=en_US.UTF-8 filezilla
Tuesday, March 30, 2021
how to identify if a DLL is a debug or release build
Monday, March 29, 2021
repairing boot after installing windows
creating Windows installer USB drive from ISO - on Linux with woeusb
The usual route using unetbootin would need the USB drive to be partitioned as FAT32 (using gparted, the Disks utility on Linux Mint doesn't do it - and have to mount with Disks utility after gparted does the reformatting). But then the Windows 10 installation ISO contains a file installer.wim which is 5 GB, so it can't be written to the FAT32 volume. So we have to use ntfs -
https://askubuntu.com/questions/162174/how-do-i-use-unetbootin-to-make-a-bootable-windows-usb-installer
or use woeusb.
(Detailed steps:
woeusb ppa gives error on install,
The following packages have unmet dependencies:
woeusb : Depends: libwxgtk3.0-0v5 (>= 3.0.4+dfsg) but it is not installable
E: Unable to correct problems, you have held broken packages.
woeusb
needs https://wimlib.net/
sudo apt install build-essential
./configure
gave
No package 'libxml-2.0' found
sudo apt install libxml2-dev
Cannot find libntfs-3g
sudo apt install ntfs-3g-dev
error: Cannot find libfuse
sudo apt install libfuse-dev
sudo ./woeusb-5.1.0.bash --device /home/path/Win10_20H2_v2_EnglishInternational_x64.iso /dev/sdb
wimlib-imagex: error while loading shared libraries: libwim.so.15: cannot open shared object file: No such file or directory
Solution was to run ldconfig, as found in
https://wimlib.net/forums/viewtopic.php?t=240
sudo ldconfig -v
)
Visual Studio publish and deploy ASP .NET Core app to IIS
This link has the basics on how to do the setup, and also some do's and don'ts for ASP .NET apps on IIS - https://docs.microsoft.com/en-us/aspnet/core/tutorials/publish-to-iis?view=aspnetcore-3.0&tabs=visual-studio
Sunday, March 28, 2021
run explorer as Administrator
On Windows server, there is no "Run As Administrator" directly available for File Explorer. So, we can go to C:\Windows with File Explorer, and then right-click on explorer.exe and Run As Administrator.
sql query to replace a substring
We needed to replace some Windows paths in a MySQL database. Following
https://www.mysqltutorial.org/mysql-string-replace-function.aspx/
update tablename set tablename.MediaSource = REPLACE(tablename.MediaSource,
m4a,
mp3)
WHERE
tablename.MediaSource like '%Dashboard%1%1%2%1%2.m4a';
and if we wanted to be more specific, the '\' in the Windows paths need to be escaped as four backslashes - following https://stackoverflow.com/questions/14926386/how-to-search-for-slash-in-mysql-and-why-escaping-not-required-for-wher -
select * from tablename where tablename.MediaSource like '%Dashboard%1%1%2\\\\1\\\\2.m4a';
And the syntax for a count statement was like
select count(*) from (select * from tablename where tablename.MediaSource like '%Dashboard%m4a') myqueryname;
finding mysql data size
According to
https://support.microfocus.com/kb/doc.php?id=7019203#
we can find the data directory from my.ini which would be in server directory in program files - the datadir line in my.ini
But on our install, it was in c:\programdata\mysql
and data was also there.