Problem:
In the Linux shell, you have a file path and you want to strip everything but the filename, for example you have the path ../images/photo.jpg
and want only photo.jpg
In the Linux shell, you have a file path and you want to strip everything but the filename, for example you have the path ../images/photo.jpg
and want only photo.jpg
This article describes basic operations in manipulating bitfields using boolean operations. Although this article focuses in Java, most programming languages use the same syntax.
All modern computers use binary arithmetic – that means, the most basic unit of information is a bit – it’s value can either be 0 or 1. On almost all hardware implementations of binary arithmetic, you can’t adress and modify bits directly, but you have to use bytes (= 8 bits). Bitfields are vectors of bits where each bit expresses a specific piece of information that can either be true or false. Depending on the application the bitfield can occupy more or less space.
Possible applications for bitfields include, but are not limited to Bloom Filters and Game artificial intelligences. In the latter case they are called bitboards if they represent a specific state in a game board.
You might also use words (2 bytes = short in most configurations), double words (4 bytes = int in most configurations) or quad words (8 bytes = long in most configurations) instead of single bytes for addressing. On 64-bit platforms, double words or quad words are usually most efficient but anything beyond quad words (i.e. 64 bits) needs more than one instruction in the CPU, which usually makes computation inefficient (there are some tricks involving SIMD, but this is beyond the scope of this article).
You’ve got a big problem. Someone forces encourages you to implement a complete Othello UI+AI in Java, but you don’t have any idea how to do that. If you already know how to implement the basics and you are interested in more advanced strategy concepts, you might be interested in the other parts of this series (yet to come).
In this multi-part series I will not provide any complete solution to any of the standard Othello tasks. Instead, I will provide (hopefully) helpful hints how to get your coding going and explain how your code works.
You have ZIP archive and want to convert it to TAR automatically conserving the original directory structure.
You have a filename in the Linux shell and want to strip/remove the filename extension from it – e.g. if you have myarchive.zip
, you want to get only myarchive
as output.
In C/C++ you want to encode/decode something from/to Base64. libtomcrypt is WTFPL-licensed and therefore provides a good choice for both commercial and non-commercial projects.
You want to calculate a hash of any string in C/C++. LibTomCrypt is WTFPL licensed, so it’s a good choice for commercial and non-commercial projects.
Recently hackthissite.org was recommended to me — it’s really fun to play around with, even if I think some of the challenges are not that realistic any more.
I thought it would be just as much fun to post some of my solutions to the programming challenges here. If not absolutely neccessary for understanding the underlying algorithm, I won’t post any information about how to use the programs, because the purpose of these posts shall be to understand it, not to use it in order to solve the HTS challenges.
You want to view a VNC on a screen with a different resolution than the screen you’re viewing (e.g. you want to view your Full HD desktop display on your Notebook).
Usually VNC viewers show scroll bars, but in some cases you need to view the entire screen at once.
In GNU R, you have an arbitrary string s and want to count how often a given character occurs in s.
You want to use a custom column type for your LaTeX tabular that has a specific font attribute (we’ll use the font family for this example).
You’re using Maven as build system but you need to include your Java sources into your JAR file generated by mvn package
.
In many cases if you want to create an interactive command line interface, you need to check if a number entered by the user is valid and – if it isn’t – you want the user to re-input it.
Here’s a simple static method to check if a number typed by a user is within a given boundary:
/**
* Lets the user input an integer value until it satisfies the given
* conditions
*
* @param msg The prompt to ask the user for the value.
* @param lower The lower boundary, inclusive
* @param upper The upper boundary, inclusive
*/
private static int guardedInput(String msg, int lower, int upper) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print(msg);
int val = -1;
try {
val = scanner.nextInt();
} catch (InputMismatchException ex) {
System.out.println("Illegal value: Please type a number!");
}
if (val < lower) {
System.out.println("Illegal value: Must be greater than " + (lower - 1));
} else if (val > upper) {
System.out.println("Illegal value: Must be smaller than " + (upper + 1));
} else {
return val;
}
}
}
When running any npm
command, you get a stacktrace similar to the following:
Error: Cannot find module 'graceful-fs' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:362:17) at require (module.js:378:17) at Object.<anonymous> (/usr/share/npm/lib/utils/ini.js:32:10) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:362:17)
When executing node-waf
, you get the following error message:
Traceback (most recent call last): File "/usr/local/bin/node-waf", line 14, in <module> import Scripting ImportError: No module named Scripting
This also prevents node modules with native components to be built.
Instead of having to buy expensive JTAG adapters like the Xilinx Platform Cable USB, Digilent FPGA boards like the Nexys3 support programming by using the Adept protocol being translation into JTAG internally. The Adept software is pretty easy to use if you know the basics of how to use the executables.
This is a beginner’s tutorial, so if you already have some experience with FPGAs, you might want to skip some parts. Still you need to have some knowledge about how to use the shell.
In C++11 you want to iterate over a smart pointer (auto_ptr
, shared_ptr
, …). collection, say a std::vector
, using the new for
loop syntax.
Let’s try it out:
using namespace std; shared_ptr<vector<int> > smartptr(/* A ptr to your vector */); for(int s : smartptr) { /* do something useful */ }
When trying to compile this code, GCC emits the following error message (other lines are omitted for the sake of simplicity)
error: no matching function for call to 'begin(std::shared_ptr<std::vector<int> >&)' error: no matching function for call to 'end(std::shared_ptr<std::vector<int> >&)'
or, when LANG=de
is set:
Fehler: keine passende Funktion für Aufruf von »begin(std::shared_ptr<std::vector<int> >&)« Fehler: keine passende Funktion für Aufruf von »end(std::shared_ptr<std::vector<int> >&)«
In NodeJS, you got a size of a file in bytes, but you want to format it for better readability.
For example, if your size is 10000
bytes, you want to print 10 kilobytes
, but if it is 1200000
, you want to print 1.20 Megabytes
.
To determine the size of a file in NodeJS (e.g. to get the size of myfile.txt
) use fs.stat()
or fs.statSync()
like this:
const fs = require("fs"); //Load the filesystem module const stats = fs.statSync("myfile.txt"); const fileSizeInBytes = stats.size; //Convert the file size to megabytes (optional) const fileSizeInMegabytes = fileSizeInBytes / 1000000.0;
Another option is to use the following function:
function getFilesizeInBytes(filename) { const stats = fs.statSync(filename); const fileSizeInBytes = stats.size; return fileSizeInBytes; }