Showing posts with label code example. Show all posts
Showing posts with label code example. Show all posts

Saturday, 3 June 2023

How with OpenAI Whisper do I transcribe all mp4s in a folder?

Problem:

I'd like to transcribe all mp4 files in a folder on both Mac and Windows using Whisper.

I am familiar with scripting and command-line, and have already set up Whisper to work on my machine.


Windows example solution:

The following is an example solution for Windows. Save this in a .bat file and run it in the folder you'd like to process all mp4 files. Modify the script as you need to.

This example transcribes in English with Whisper set up to use CUDA. It skips over any already transcribed mp4 files. It is not recursive.


e.g. transcribe_all_mp4.bat:
for %%f in (*.mp4) do (
	echo %%~nf
	if not exist "%%~nf.txt" (
		echo will process %%~nf.mp4
		whisper "%%~nf.mp4" --language English --device cuda
	) else (
		echo will NOT process %%~nf.mp4
	)
)

Mac example solution:

The following example is a single Terminal command you can use in MacOS with Whisper already set up.

Note that this example command does not check for existing transcriptions. It does however specify Whisper to use the medium model. It is not recursive. Modify the command as you need to.

In Terminal in the folder where you want to transcribe your .mp4 files:

for f in *.mp4 ; do whisper $f --model medium ; done

Notes:

The above solutions in Windows and Mac were verified to work between February 2023 to June 2023 (for real-life conference and film work). As of this time the good folks over at Whisper haven't yet implemented batch processing of files.

Hope these examples helped you start to get past where you too got stuck :)


References:

Monday, 12 July 2021

Find executables installed via apt

Problem:

I want to list all executables installed via apt (or apt-get). I know the name of the package installed and I am already comfortable with using shell commands.

Solution:

To list all executables installed for a package, in your shell use the following command while replacing "packagename" with the actual package name:
  dpkg -L packagename | xargs file | grep executable
  

Example:

For example, if I want to list all executables installed in the package "nullmailer":
  dpkg -L nullmailer | xargs file | grep executable
  

Other reminders:

To list all files installed for a package, in your shell and replacing "packagename" with your package name, use:
  dpkg -L packagename
  

To list all executables for a package (named "packagename") installed in the "opt" folder, use:

  dpkg -L packagename | xargs file | grep ^/opt | grep executable
  

References:

Friday, 17 April 2020

How to fix notch overlap in Flutter Basic Widgets example code

Problem:

I am learning Flutter, and the app bar on top in the Basic Widgets section of the Introduction to widgets section of the Flutter docs is being blocked by the notch of an iPhone or phone simulator, as seen below. How can I fix this?

Notes:

This bug was confirmed in April 2020. It's possible that the Flutter team has updated their documentation by the time you are reading this. (If so, thank you Flutter team!)

Also note that this how-to is just one way to workaround the issue. The later code in the Flutter documentation shows better practices on which widgets to use, etc., to avoid the notch. That being said, this workaround is for anyone who is trying to debug this before moving on.

Workaround:

The workaround is highlighted below, followed by a brief explanation:

import 'package:flutter/material.dart';

class MyAppBar extends StatelessWidget {
  MyAppBar({this.title});

  // Fields in a Widget subclass are always marked "final".

  final Widget title;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 56.0, // in logical pixels
      padding: const EdgeInsets.symmetric(horizontal: 8.0),
      decoration: BoxDecoration(color: Colors.blue[500]),
      // Row is a horizontal, linear layout.
      child: Row(
        //  is the type of items in the list.
        children: [
          IconButton(
            icon: Icon(Icons.menu),
            tooltip: 'Navigation menu',
            onPressed: null, // null disables the button
          ),
          // Expanded expands its child to fill the available space.
          Expanded(
            child: title,
          ),
          IconButton(
            icon: Icon(Icons.search),
            tooltip: 'Search',
            onPressed: null,
          ),
        ],
      ),
    );
  }
}

class MyScaffold extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // Material is a conceptual piece of paper on which the UI appears.
    return Material(
      child: SafeArea(
        // Column is a vertical, linear layout.
        child: Column(
          children: [
            MyAppBar(
              title: Text(
                'Example title',
                style: Theme.of(context).primaryTextTheme.title,
              ),
            ),
            Expanded(
              child: Center(
                child: Text('Hello, world!'),
              ),
            ),
          ],
        ),
      ), // SafeArea
    ); // Material
  }
}

void main() {
  runApp(MaterialApp(
    title: 'My app', // used by the OS task switcher
    home: MyScaffold(),
  ));
}

The above code encloses the other widgets in the example code within the safe area of the device via the SafeArea widget - a class that adds appropriate insets for a given device.

If all went well, your results should now look similar to the image below and you can now move on to learning more Flutter, free from the iPhone-notch-overlap.

If you'd like to learn more, please check out the references below.



References:

Wednesday, 15 April 2020

1 way to add vertical rulers in Visual Studio Code

Problem:

How do I add vertical rulers in Visual Studio Code's editor views?

I want to add standard guide rulers at the 80 and 120 character columns.

Solution:

In VSCode 0.10.10 or newer:

  1. Open Settings
    (Windows: File→Preferences→Settings; OS X/MacOS: Code→Preferences→Settings)
  2. Search for "editor.rulers", then select to edit
  3. Add the number of columns the rulers should be at. For example, the classic standards of 80 characters and 120 characters are shown below:
  4. You should now see vertical rulers in your editor if done correctly and if your Visual Studio Code version is compatible. For older versions, restarting VSCode may be required to see the change.

Notes:

The solution above was tested to work on Visual Studio Code 1.44.0. Your results may vary in other versions.

References:

Monday, 6 April 2020

bash scripting reminders of basics

Problem:

I want quick reminders for bash shell scripting because I don't write bash scripts often enough to memorize everything.

Notes:

The following reminders assume you're already familiar with the basics of bash shell scripting and simply need a reminder of more commonly used syntax, etc. These reminders are for myself but I hope you also find them useful.

Reminder shortcuts

As the number of reminders grow I hope this index will help you find what you need. (It certainly helps me.)



Reminders:

Top of script starts with #!/bin/bash

#!/bin/bash
See this tldp.org reference page for details.

Simple variables

Examples of simple variables

NAME="Delta"
echo "Hello $NAME!"

Concatenate strings


HELLO="Hello, "
NAME="Lily"

echo $HELLO$NAME
# output: Hello, Lily

HELLO="Hello, "
NAME="Alex"
GREET="${HELLO}${NAME}!"

echo "$GREET"
#output: Hello, Alex!


GREET="Hello, "
GREET+="Ninja"

echo "$GREET"
#output: Hello, Ninja

String quotes of bash scripting

DIRECTION="Right"
echo "Turn $DIRECTION"  # => Turn Right
echo 'Turn $DIRECTION'  # => Turn $DIRECTION

Bash for-loop


VAR=""
for NAME in 'alpha' 'bravo' 'charlie' 'delta'; do
  VAR+="${NAME} "
done

echo $VAR
# output: alpha bravo charlie delta 

Bash if-and, bash if-or

if [ $FILENAME == 'important.txt' ] && [ -f $FILENAME ]; then
  echo "this is an important file"
fi
if [ $NAME == 'Hector' ] || [ $NAME == 'Miguel' ]; then
  echo "this person is on a hero's journey"
fi

Bash check if directory exists

DIR="/usr/mydir/"

if [ -d "$DIR" ]; then
  echo "directory exists"
else
  echo "directory not found"
  exit 1
fi
DIR="/usr/mydir/"

[ "$DIR" == "" ] && { echo "directory string is empty"; exit 1; }
[ -d "${DIR}" ] && echo "directory exists" || echo "directory not found"

Bash if directory does not exist


DIR="/usr/mydir/"

if ! [ -d "$DIR" ]; then
  echo "directory does not exist"
else
  echo "directory exists"
fi

Bash check if file exists

if [ -f "/opt/myfile.txt" ]; then
  echo "file found"
else
  echo "file not found
fi

For items in bash array

DIR3="/opt/mydir3"
DIRTOCHECK=("/opt/mydir1" "/opt/mydir2" $DIR3)

for dir in "${DIRTOCHECK[@]}"
do
  if [ -d "${dir}" ]; then
    echo "found directory ${dir}"
  else
    echo "did not find directory ${dir}"
  fi
done

Command line arguments in bash scripting

# example: yourscript.sh arg1 2nd-arg

echo "All arguments values:" $@
# output: All arguments values: arg1 2nd-arg

echo "First argument:" ${1}
# output: First argument: arg1

echo "Second argument:" ${2}
# output: Second argument: 2nd-arg

echo "Total arguments:" $#
# output: Total arguments: 2

For more detailed information, please refer to this tecadmin.net tutorial

How to check if git repo needs update from remote upstream with bash scripting

This how-to assumes you already have a git repository installed, a remote upstream setup, and have navigated into the local repository via your script.

git fetch
if [ $(git rev-parse HEAD) == $(git rev-parse @{u}) ]; then
  # add logic for when no update is needed, e.g.
  echo 'already up to date.'
else
  # add logic for when update is needed, e.g.
  echo 'updating to latest.'
  git pull
fi

How to check if script is on correct git branch for bash script

The following example assumes master branch is desired and the script has already navigated to the local repository.

if ! [ $(git rev-parse --abbrev-ref HEAD) == "master" ]; then
  echo "NOT in master branch."
else
  echo "in master branch."
fi

Why these reminders?

This page is intended to remind myself quickly without requiring too much reading. I hope it's helped you out, too.

References:

Friday, 20 March 2020

Slf4j NoClassDefFoundError when compiling SparkJava sample project

Problem:

When trying out the SparkJava demo for websockets (spark-websockets, "Using WebSockets and Spark to create a real-time chat app"), I get the following compilation error:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
 at spark.Service.<clinit>(Service.java:56)
 at spark.Spark$SingletonHolder.<clinit>(Spark.java:51)
 at spark.Spark.getInstance(Spark.java:55)
 at spark.Spark.<clinit>(Spark.java:61)
 at Chat.main(Chat.java:19)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
 at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 ... 5 more

Workaround:

The following workaround worked as a quick way to try out the demo code:
  • Open the project's pom.xml file
  • Add the following dependency:
    
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.21</version>
      <scope>compile</scope>
    </dependency>
    
    

If this worked, the project should now compile properly.

Notes:

The above workaround is one of many solutions that can work towards a successful compile. Others include adding a JAR file for a logger, for example. This solution was chosen as it is the quickest for a beginner to do while learning how to use SparkJava or while learning programming in Java.

This how-to was verified to work in revision 8cc09e8cea9257a0df3449106a57ad0467faf39b (Sep 4, 2017) of the spark-websockets project. Your results may vary for other revisions.

References:

Wednesday, 3 October 2018

Reminder: SparkJava 2.7.2 pom.xml known to work for new projects

Problem

For SparkJava 2.7.2, I'd like a known set of POM.xml dependencies and properties that work so I can kick-start my project. The settings in the SparkJava "getting started" tutorial result in exceptions.

Example POM.xml snippet

In your POM.xml, try these to start off:

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
  
  
    <dependencies>
  
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>9.4.6.v20170531</version>
        </dependency>
  
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.21</version>
        </dependency>
 
        <dependency>
            <groupId>com.sparkjava</groupId>
            <artifactId>spark-core</artifactId>
            <version>2.7.2</version>
        </dependency>
    </dependencies>

Notes

The above dependency versions and properties were observed to work on 2018-10-03 with SparkJava version 2.7.2. Your mileage may vary.

Once you have your SparkJava project working, feel free to change versions to suit your own project needs.

References

Monday, 2 July 2018

Fix 07_BoggieBot.playground errors "Cannot call value of non-function type 'NSGraphicsContext?" and "Cannot convert value of type 'NSApplication.ModalResponse' to expected argument type 'Int'"

Problem:

When trying to learn from 07_BoogieBot.playground alongside Apple's Everyone Can Code "Intro to App Development with Swift", I get errors similar to:
07_BoogieBot.playground/Sources/Recorder.swift:26:51: Cannot call value of non-function type 'NSGraphicsContext?'
07_BoogieBot.playground/Sources/Recorder.swift:33:99: Cannot call value of non-function type 'NSGraphicsContext?'
07_BoogieBot.playground/Sources/Recorder.swift:70:31: Cannot convert value of type 'NSApplication.ModalResponse' to expected argument type 'Int'
The console shows me the following:
Playground execution failed: error: /var/folders/1g/_b7g8rjd71j_mwjxdj29vllc5x9cxx/T/playground11-16e897..swift:3:8: error: no such module '_7_BoogieBot_Sources' import _7_BoogieBot_Sources
I am using XCode 9.4.1 and macOS 10.13.5

Before you start:

You'll want to make a backup of lesson 7's code first. Just make a copy of the folder in Finder. We'll be editing the code that runs the playground, so this way you can undo by restoring the backup if you've forgotten what you changed and introduced a bug.

Workaround:

You're learning coding for the first time, and you've been given a chance to debug the playground you're learning from. Cool!

Here's a few quick steps to get your BoogieBot lesson going!

Step: Have a look at the errors

In XCode you can view what errors have broken your code. In our case, click here:
You'll see a list of errors appear in the navigator in red. Try to click one:
Wow, that's more code that you've seen in the previous lessons. No worries. Just focus on the problem you're trying to solve and ignore the rest.

Step: Fix the 'context' bug

For the lines that have:
if let context = NSGraphicsContext.current()?.cgContext
Remove the (), so they look like:
if let context = NSGraphicsContext.current?.cgContext
If you save the file and the 2 errors go away, you've made progress. Congrats on debugging so far!

Why does this code change work?

Someone at Apple had changed NSGraphicsContext.current from a function to a property.

As you recall from an earlier lesson, programmers will often have to build on code made by others. In this case the code happens to be from those who worked on part of the graphics programming for macOS 10.13. These are changes you'd see if coding in XCode 9 (instead of XCode 8).

Step: Fix the Modal.Response bug

For the code that looks like:
if (savePanel.runModal() == NSFileHandlingPanelOKButton) {
Change it to look like:
if (savePanel.runModal() == .OK) {

Why does this code change work?

Without getting too technical, essentially someone at Apple had changed the way this test should work.

IF you're really curious and aren't learning to code for the first time, have a look at https://developer.apple.com/documentation/appkit/nsapplication/modalresponse

Step: Go back to the BoogieBot Playground

Now that you've debugged the code and saved it, check that no errors still exist. (The yellow warnings won't block you from lesson 7.)
Cool. Now you can return to learning about BoogieBot by clicking here and going back to your playground:
Happy boogie-ing!

Notes

This how-to was tested to work using XCode 9.4.1 and macOS 10.13.5. The bug was seen in the playground downloaded sometime June 2018. Your results may vary depending on versions, and if Apple fixed the playground by the time you read this post. Code can change pretty quickly in real life.

If you ran into this bug, hopefully you were able to fix it and learn how to make your boogie bot dance using Swift!

Wednesday, 23 August 2017

Rename local git branch

Problem:

How do I rename a local git branch using git command line?

Solution:

If you'd like to rename the currently checked-out branch to "new_branch_name":

git branch -m new_branch_name

If you'd like to rename any branch ("old_branch_name") to "new_branch_name":

git branch -m old_branch_name new_branch_name

References:

Thursday, 20 July 2017

Make local Git branch track a remote branch

Problem:

How do I get a local git branch to track a remote branch?

Solution:

The following examples assume a branch "thebranch" and a remote "myremote". They also assume you are using git in the command line.

For Git 1.8.0 and later:

If you've already checked out "thebranch" on your local, then:

git branch -u myremote/thebranch

If you haven't checked out "thebranch" on your local, then:

git branch -u myremote/thebranch thebranch

For Git 1.7.0 until 1.7.12.4, if you've checked out "thebranch" on your local, then:

git branch --set-upstream-to=myremote/thebranch

If you haven't checked out "thebranch" on your local, then:

git branch --set-upstream-to=myremote/thebranch thebranch

References:

Friday, 20 January 2017

Restore my Xamarin project's NuGet and Xamarin-Component dependencies using CLI

Problem:

How do I restore all of my Xamarin project dependencies when neither Visual Studio's "extensions and updates", nor NuGet package manager GUI have the versions my project requires?

Similarly, how do I restore these packages in the command line so Jenkins can automatically build my Xamarin project?

My questions apply to fresh clones of my team's Xamarin project from Git, where the NuGet nor Xamarin component 3rd party dependencies aren't included in the project's repository.

Before you start:

The solution below assumes that you have knowledge of Xamarin, Xamarin components, NuGet, (Jenkins), the command line, and have a valid account for Xamarin. (It was written as a quick reminder. Please refer to the referenced links if more detail is needed.)

One solution:

One solution is to use the nuget.exe and xamarin-component.exe command line tools to restore NuGet and Xamarin component dependencies.

You can get the Xamarin component CLI executable from here: https://components.xamarin.com/submit/ (you'll need to sign in with your Xamarin account, and follow the instructions Microsoft provided)

You can get the NuGet CLI executable from here: https://dist.nuget.org/index.html

When you have these CLI tools installed (or copied to your project's root - not ideal, but helps to troubleshoot), you can then use them or include them in your script as follows:

  • navigate to the directory where your solution file is (e.g. YourSolutionName.sln)
  • 
    nuget.exe restore
    xamarin-component.exe restore YourSolutionName.sln
    
    
  • (first time) enter your Xamarin account credentials (needed for xamarin-component)

At this point, the output should give an indication of all 3rd party dependencies that were successfully restored.

Notes:

This solution was tested to work on a project that has dependencies about a year old (and are no longer available via the Visual Studio GUI). The versions of the tools tested were Visual Studio 2015 (14.0.25431.01 Update 3), Xamarin 4.2.2.11 (with corresponding Xamarin.Android 7.0.2.42 and Xamarin.iOS 10.3.1.8). Additionally, all 3rd party libraries were originally installed using Visual Studio's "Extensions and Updates..." GUI and NuGet package manager's GUI. Your mileage may vary, depending on versions and how your team has setup your Xamarin project.

This solution also depends on Microsoft/Xamarin still providing the CLI tools, as well as the 3rd party dependency versions specified in your project still existing for download.

Nonetheless, hopefully this has at least come in handy or given some new ideas :)

References:

Wednesday, 4 January 2017

Android screenshot to computer with adb

Problem:

How do I use adb to get a screenshot from an Android device or emulator?

I'd like to target a specific device when more than one are connected to adb.

I already know how to open adb shell and put a device in debugging mode.

Solution:

One method is the following:

  1. Get list of devices:
    adb devices -l
    

    You should get a list that looks like:

  2. Once you have a device identifier, such as "emulator-5554", you can use similar commands as below. (Replace "emulator-5554" with your device identifier).
    adb -s emulator-5554 shell screencap -p /sdcard/screencap.png
    adb -s emulator-5554 pull /sdcard/screencap.png
    
  3. (Optional) remove the last screencap from your device (in this example, named "emulator-5554"):
    adb -s emulator-5554 shell rm /sdcard/screencap.png
    

Other notes:

If you've only got one device accessible to adb, you can simply do the following:

adb shell screencap -p /sdcard/screencap.png
adb pull /sdcard/screencap.png
adb shell rm /sdcard/screencap.png

If you'd like to see a one-liner to do the above, check out the neat example here: http://blog.shvetsov.com/2013/02/grab-android-screenshot-to-computer-via.html

References:

Tuesday, 13 December 2016

Java Enum get value from String

Problem:

In Java, I have an Enum and I'd like to be able to look up one of its value using a String.

Solution:

In order to get a specific Enum value from a String, use the java.lang.Enum.valueOf() function.

For instance, if I have the following Enum:

enum Day {Mo, Tu, We, Th, Fr, Sa, Su}

Then the following code gets Day.Th from the String "Th":

Day.valueOf("Th")
Another example, assuming the above Enum Day is defined:
Day myDayExample;
myDayExample = Day.valueOf("Th");

System.out.println(myDayExample); // prints: Th

Notes:

If either the Enum type or string is null, then java.lang.Enum.valueOf() will throw a NullPointerException.

Additionally, if no Enum constant with the name in the String exists, an IllegalArgumentException will be thrown.

For more information, check out the references below.

References:

Sunday, 11 December 2016

Efficient way to find the sign of a number in Java

Problem:

What is an efficient way to find the sign of a number in Java?

Solution:

To find the sign of a number, you can use the signum() function. (e.g. Math.signum(), Integer.signum(), Long.signum(), etc.)

For example:


int sign1 = (int) Math.signum(-123); // -1
int sign2 = (int) Math.signum(222);  //  1
int sign3 = Integer.signum(-1234);   // -1

double sign4 = Math.signum(-123.0);  // -1.0
float sign5 = Math.signum(111.0f);   //  1.0f

double sign6 = Math.signum(0.0);     //  0.0

Notes:

For more information (minimum JDK version, etc.), check out the references below.

References:

Javascript Unix time to UTC string in Chrome console

Problem:

In the Chrome Dev Tools console, I'd like to view a Unix Time numerical value/timestamp as a human-readable UTC date/time string.

Solution:

In the Chrome Dev Tools console (and in general), one way to view a Unix (POSIX/Epoch) Time as a human-readable UTC string is to use Javascript Date.

For example, if the number of seconds since Epoch is 1480528272, we can convert this in the console by:

new Date(1480528272*1000).toUTCString()

Note that we need to convert the number of seconds to milliseconds since Epoch by multiplying by 1000.

Notes:

Note that due to the size of a Javascript integer, overflow may occur if the desired timestamp is larger than Number.MAX_SAFE_INTEGER.

A Javascript Date object also has a valid range that must be adhered to. More information can be found in here.

References:

Saturday, 10 December 2016

GWT disable CellTable row highlight on mouse hover

Problem:

In GWT 2.7, how do I disable CellTable row highlight during mouse hover?

Solution:

Imagine your CellTable is named theTable. To disable the mouse-hover row highlighting, try the following:

theTable.setSkipRowHoverStyleUpdate(true);

Notes:

This was verified to work in GWT 2.7. Your mileage may vary with other versions. This reminder was meant as a quick reference for myself, so it's a bit brief. Check out the references below for more detail.

Also note that the above code might also work for GXT DataGrid, depending on version.

References:

Convert C# bytes to human-readable strings

Problem:

How do I convert a C# byte into a string so that I can read all 8 digits?

Solution:

Imagine that you have a C# byte named myByte. To get a string containing all 8 binary digits, you can use the following code:

  Convert.ToString(myByte, 2).PadLeft(8, '0');

Notes:

Also remember that the Convert.ToString method is in the System namespace.

References:

https://msdn.microsoft.com/en-us/library/system.convert.tostring(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.string.padleft(v=vs.110).aspx http://stackoverflow.com/questions/4829366/byte-to-binary-string-c-sharp-display-all-8-digits

C# selectively disable warnings

Problem:

I would like to selectively disable C# warnings.

Solution:

The syntax to selectively disable warnings is:

#pragma warning disable <warning number or warning list>
   <code block where warning is to be ignored>
#pragma warning restore <warning number or warning list>

Example:

#pragma warning disable 0618
  MyNecessaryObsoleteFunctionCall();
#pragma warning restore 0618

BadObsoleteCallThatShouldProduceWarning();

Notes:

C# compiler warnings are generally there for good reason, so it's better practice to resolve them rather than hide them. However, in some situations willfully ignoring/acknowledging a warning might be necessary (e.g. if warnings block your team's build, but the code is temporarily required for some important reason).

References:

https://msdn.microsoft.com/en-ca/library/441722ys.aspx http://stackoverflow.com/questions/968293/c-sharp-selectively-suppress-custom-obsolete-warnings

Tuesday, 29 November 2016

View GWT emulated Long in browser developer tools

Problem:

I would like to see the long value of a GWT emulated Long in my browser's developer tools.

I already know how to pause and debug my web app, but when I inspect a Long value, it looks similar to {h:0, m:544, l:54210}.

Solution:

Imagine that we have an emulated Long value: myLongVal={h:1, m:234, l:567}

To translate this to a human-readable Long (in most, but not all cases), type the following in the developer tools console:

myLongVal.h*Math.pow(2,44) + myLongVal.m*Math.pow(2,22) + myLongVal.l

(See screenshot)

Notes:

This was verified to work in GWT 2.7. Your mileage may vary for other versions.

The above method should work for Long values that are low enough. However, overflow may occur for larger emulated Long values as the cast to a Javascript double does not cover as many bits as a long integer.

Note that if you have a browser that actually supports 64-bit integers or larger, you might be able to use the following:

(myLongVal.h << 44) + (myLongVal.m << 22) + myLongVal.l

References:

Sunday, 27 November 2016

Package-level javadoc comments

Problem:

How can I add package-level javadoc comments to my Java project?

Solution:

  • In your package's directory, add a file named "package-info.java"
  • In this file, include the package-level javadoc comment, as well as the package declaration

Example:

myprojectroot/mypackage/package-info.java:

/**
 * Provides an example package-level javadoc comment.
 * 
 * @since 1.0
 */
package myprojectroot.mypackage;

Additional hints:

  • in Eclipse, you can create this file by adding a "new file" to the package (instead of a new Java class, etc.)

References: