|
|
FileZilla SSL part 2
|
The previous page covered securing a local FTP server. This page expands on that for securing an FTP server to run over the internet. Before proceeding ensure you have configured and tested as explained on the previous page. There are two transfer modes active or passive, configuring an FTP server for internet use the user (FTP client) is given priority. Everything is geared to make it easier for the client hence your server must support passive mode. The following covers this mode and the added complication of running a FTP server behind a wireless router with NAT.
FTP Basics
FTP uses two ports, a command (control) port and data port traditionally these are assigned ports 21 and 20 respectively. Depending on the operating mode, the data port is not always on port 20.
Passive_FTP
Most browsers use passive mode for connection this mode changes the data port as follows.
In passive mode a client initiates both connections to the server. A client first opens two consecutive random unprivileged ports (ports above 1023). The first port contacts the server on port 21, and issues the PASV command. In response the server opens a random unprivileged port and sends the PORT P command back to the client. The client then initiates the connection from it’s second port to transfer data.
A secure FTP server follows the above procedure with one minor difference the command port used is reserved port 990.
What’s important when using a NAT device is the need to forward ports 20, 21, 990 and all unprivileged ports. In reality unprivileged ports are restricted to a small range for example 50000 to 50100.
During a data transfer the FTP server needs to send its visible IP address back to a client. Because of address translation through a NAT device the FTP server has no way of determining this IP address. It needs to be set during FTP server configuration, not a problem if you have a fixed IP address however a dynamic IP is problematic. The FileZilla team neatly resolves this issue by providing a dynamic IP address resolution service.
Active_FTP
If you have ever set-up an FTP client behind a NAT (Network Address Translation) router you will have been forced to changed mode from active to passive. Reason for this, active FTP will not work behind a NAT device.
Summary
The above is intended to explain why you need to twiddle certain settings and how to choose options for your installation. All settings for passive mode are on a single page making the whole set-up process easier.
Configure Passive Mode
- Start UniServer FileZilla Controller: Double click on UniFzController.bat
- Start FileZilla Server: Click Start FZ Server
- Start FileZilla Interface: Click on Start Interface
- Select Edit > Settings
- A) Select Passive mode settings
- B) Default: Select this if directly connected to the Internet.
- C) Use the following IP: If connected to the Internet via a NAT router and you have a fixed IP address enter it here.
- D) Retrieve external IP address from: If connected to the Internet via a NAT router and you have a dynamic IP address select this radio button. Enables FileZilla’s dynamic IP address resolution service
- E) Don’t use external IP for local connection. Default is checked, no need to change this.
- F) Use custom port range: Check this box to enable, we do need to restrict the range of random ports. This also restricts (minimises) the ports that require forwarding in the router.
- Enter range of ports you want to allow, 50000-50100 is reasonable. Allows 100 ports consider reducing this if you do not expect a high number of simultaneous connections.
- G) Click OK
|
|
Configure NAT Router
|
You need to forward ports 20, 21, 990 and the range (50000-50100) to your PC’s IP address (for example <IP_ADDRESS>)
Replace the value in brackets with your own IP address.
There is a vast range of routers hence I have not provided any detailed set-up instructions.
Again I point you to PortForwrd a website dedicated to this topic with detailed instructions how to forward ports on most routers.
The example shown on the right is for a DrayTek Vigor 2800G router hopefully this will provide a clue what to look for when configuring your own router.
|
|
Summary
That concludes this two part secure FTP configuration guide. You now have a fully working secure FTP server that will transfer files locally or over the Internet.
--oOo--
|


{% extends "home/base.html" %} {% load static %} {% block content %}
Edit your personal account information by changing the information of the fields you wish to update.
If you change your email address, you need access to the new address to complete the process.
For more information on this form, see the docs.
Email:
{{ err }}


concat.h
GitHub: base/concat.h base/concat.cc
Top-level Functions
concat()
namespace base { template <typename... Args> std::string concat(const Args&... args); }
STABLE. Converts each arg into a string, concatenates them together, and returns the result.
Example:
auto t = std::make_tuple(1, "foo", true); std::string str = base::concat("I can print tuples, like so: ", t);
concat_to()
namespace base { template <typename... Args> void concat_to(std::string* out, const Args&... args); }
STABLE. Like concat()
, but
appends its output to an existing string.
append_to()
namespace base { template <typename T> void append_to(std::string* out, T arg); }
STABLE. Converts a single item to a string, then appends it to an existing string.
NOTE: like std::swap
, this is a hook for implementers to
override. These overrides are found via
ADL, and
thus callers to this function should anticipate ADL.
Most callers should use
concat_to()
instead.
concat_to()
handles the ADL details for you.
Example:
namespace foo { struct Foo { uint16_t value; }; void append_to(std::string* out, const Foo& arg) { base::concat_to(out, "foo::Foo(", arg.value, ")"); } } // namespace foo ... foo::Foo x = {42}; std::string str; using base::append_to; append_to(&str, x);
length_hint()
namespace base { template <typename T> std::size_t length_hint(T arg); }
STABLE. Returns the estimated length of its argument if converted to
a string. This is useful for reducing the number of dynamic
reallocations when appending multiple items to a string, turning an
O(n log n)
algorithm into an O(n)
one.
NOTE: like std::swap
, this is a hook for implementers to
override. These overrides are found via
ADL, and
thus callers to this function should anticipate ADL.
Most callers should use
concat_to()
instead.
concat_to()
handles the ADL details for you.


Yeah, I know. That's a lot. But!  So what does that look like?


Beowulf
by Francis Barton Gummere
Chapter 7
Additional Information
- Year Published: 1910
- Language: English
- Country of Origin: England
- Source: Gummere, F.B. (1910) Beowulf New York: P.F. Collier and Son
-
Readability:
- Flesch–Kincaid Level: 11.2
- Word Count: 347
- Genre: Epic
- Keywords: british literature
- ✎ Cite This
Downloads
HROTHGAR spake, the Scyldings'-helmet:—
"For fight defensive, Friend my Beowulf,
to succor and save, thou hast sought us here.
Thy father's combat [footnote 1] a feud enkindled
when Heatholaf with hand he slew
among the Wylfings; his Weder kin
for horror of fighting feared to hold him.
Fleeing, he sought our South-Dane folk,
over surge of ocean the Honor-Scyldings,
when first I was ruling the folk of Danes,
wielded, youthful, this widespread realm,
this hoard-hold of heroes. Heorogar was dead,
my elder brother, had breathed his last,
Healfdene's bairn: he was better than I!
Straightway the feud with fee [footnote 2] I settled,
to the Wylfings sent, o'er watery ridges,
treasures olden: oaths he [footnote 3] swore me.
Sore is my soul to say to any
of the race of man what ruth for me
in Heorot Grendel with hate hath wrought,
what sudden harryings. Hall-folk fail me,
my warriors wane; for Wyrd hath swept them
into Grendel's grasp. But God is able
this deadly foe from his deeds to turn!
Boasted full oft, as my beer they drank,
earls o'er the ale-cup, armed men,
that they would bide in the beer-hall here,
Grendel's attack with terror of blades.
Then was this mead-house at morning tide
dyed with gore, when the daylight broke,
all the boards of the benches blood-besprinkled,
gory the hall: I had heroes the less,
doughty dear-ones that death had reft.
— But sit to the banquet, unbind thy words,
hardy hero, as heart shall prompt thee."
Gathered together, the Geatish men
in the banquet-hall on bench assigned,
sturdy-spirited, sat them down,
hardy-hearted. A henchman attended,
carried the carven cup in hand,
served the clear mead. Oft minstrels sang
blithe in Heorot. Heroes revelled,
no dearth of warriors, Weder and Dane.
Footnotes
1. There is no irrelevance here. Hrothgar sees in Beowulf's mission a heritage of duty, a return of the good offices which the Danish king ren- dered to Beowulf's father in time of dire need.
2. Money, for wergild, or man-price.
3. Ecgtheow, Beowulf's sire.


The best way to learn flintknapping is to do it. The second best way is to see it in action from the knapper's perspective. This website will introduce you to stone tools and provide a sense of the knapper’s perspective and decision-making process. Photos and short videos show basic knapping techniques, including hard hammer percussion, soft hammer percussion, and pressure flaking. Through these examples, you can learn how to identify the processes that past people used to produce the lithic artifacts in the archaeological record. Go to the Learning Flintknapping page to find out more about how you can learn flintknapping.
The Basics
Lithics are stone tools and the waste products of tool-making process.
Debitage comprises the waste products from the tool-making process. (Debitage comes from the French word for trash.) The most common lithics in the archaeological record are debitage, not tools.
Flintknapping is the process of making stone tools.
The two main classes of lithic technology are flaked/chipped stone and groundstone. Flaked/chipped stone technology involves flaking stone through percussion or pressure. It is used to make tools such as knives, projectile points (spear and arrow points), scrapers, and drills. Groundstone technology involves shaping stone through abrading, polishing or pecking. It is used to make tools such as manos, metates, mortars, pestles, bowls, and axes.
Flaked/Chipped Stone Technology Basics
A flintknapper starts with a stone nucleus and removes flakes from the nucleus.
Flaked stone tools are often classified based the number of faces (sides) of the nucleus that were flaked.
- Unifacial tools have flakes removed from one face.
- Bifacial tools have flakes removed from both faces.
To understand how past people flintknapped stone tools, archaeologists recreate the chaîne opératoire: the operational sequence of making, using, and discarding tools. The step-by-step decisions include acquiring raw materials, making a tool, using the tool, and discarding the tool. Understanding these decisions helps us understand the lives of past people.


| DOSE: |
20 mg |
oral |
2C-I |
(powder / crystals) |
I used this title because I was saddened, but not shocked, that this r.c. is apparently no longer available, and the 'perps' are behind bars. Land of the free? But I will relate my experience anyway, because it was so amazing. I ordered a small amount. It took longer to arrive than it was supposed to, so when it did, I was anxious to try it out. It was about 7pm. I didn't want the full effect, because it was the middle of the week, and I had things to do the next day. I know it's not good to 'eyeball' something so potent, but I'm pretty good at that, and I just wanted to check it out. I took just a pinch; maybe 5mg and swallowed it.
[Erowid Note: A volume amount of one powder doesn't necessarily weigh the same as the same volume of another powder. For substances active at such a small dose, eyeballing is particularly unwise. See related article]
I felt it pretty quickly. It reminded me of coming down off of a fairly strong acid trip. I called my girlfriend to tell her: 'Yes, there IS something to this stuff.' I spent about half an hour on the phone, imitating various recorded messages, and I did feel like I was terribly amusing. I saw some mild patterns, but mostly it just kept me awake all night. I shouldn't have been so impatient.
Next time I was ready. It was the following Friday night. Allowing for the bit I had taken, I added a known quantity of water, and most of it dissolved. At about 9:30pm I took 20 mg. The setting seemed right: downstairs at my brother in law's house, in the 'audio-visual' room. Great stereo, comfortable furniture, a fireplace and a nice neighborhood should I feel the need to walk around. I should mention that my brother-in-law and I had become good friends before he became related to me, so I wasn't concerned about 'tripping out' around people I didn't know. (He decided not to join me in the experiment.)
I had eaten a little food earlier in the day, but basically I took it on an empty stomach. It didn't take long to kick in. After about fifteen minutes, I knew I had taken something very powerful. I don't remember specifics about the come up, just basically going from normal to tripping very heavily. I know I'll probably sound like a typical 'stoner' from this point on, but bear with me.
I was sitting in a big chair, and I started taking long slow comfortable deep breaths. 'Well?' said my b-i-l. All I could say was 'I can't believe how powerful this stuff is.' 'Would you suggest I do some?' he said. 'I wouldn't tell you TO do it, but I certainly wouldn't tell you NOT to do it' I replied. I think that if my sister (and his four year-old daughter) had been out of town, he would have joined me.
It was winter, so a fire was in order. I managed to build a pretty decent one, and retired back to my chair. I had recently convinced my b-i-l that 33 1/3 LPs were far superior to CDs, so he had built a really nice stereo system. He put on an old jazz record (possibly Brubeck, recorded in an intimate little jazz club somewhere in Europe.) I like everything from Zappa to classical to Oingo Boingo, but at the time it seemed like jazz was the best kind of music in the world. I could hear every little squeak of the drummer's kit, and even ice rattling in the polite patrons' cocktails. I'm a musician, but I'm not sure I had ever felt so aware of music in quite that way before. The only light was coming from the fire and the stereo, and for a moment, for all I knew, I could have been sitting at one of those tables, rattling ice in my cocktail.
An hour later, the experience was still building. The walls in the room were dark wood, and right before my eyes, wrought-iron structures began to build themselves, complete with plants and vines growing among them. Next, birds began to appear amongst the plants. B-i-l kept asking 'How is it?' And all I could say was 'I can't believe this is so powerful.' Yet I could sit comfortably in the chair and take it all in. If I had been that 'high' on acid, I'd have wanted to run screaming naked through the woods.
I would walk from the room outside to smoke, and the leaves on the ground looked like ten-inch crystals growing up from the ground, and they would shatter as I walked. It reminded me of the Fortress of Solitude from the first Superman movie.
Now it was maybe four or five hours after ingestion, and I was still going strong. It was about 2am, and not many cars traveled his street at that hour. The house was on a hill, and from the carport, you couldn't see cars passing by until they were even with the house, but of course you could see the headlights approaching, and hear the engine before you could see the car. This must have happened a half-dozen times: I'd look toward the street and see the lights getting brighter, and hear the engine getting louder, and then.....NO CAR! Each time I'd think: OK, THIS car is real.......nope. This was the only 'wierdness' if one could call it that, because it was so real, and it kept happening. After a time, it became just amusing.
I finally got to sleep at around 7am. All in all, a pretty long trip. I felt a bit tired the next day, but really, none the worse for wear. Were this still obtainable, I'd do it again.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


| 0 |
https://mledits.github.io/icse_sp3/3/68209/details.html |
| 1 |
https://mledits.github.io/icse_sp3/3/41931/details.html |
| 2 |
https://mledits.github.io/icse_sp3/3/44122/details.html |
| 3 |
https://mledits.github.io/icse_sp4/3/64695/details.html |
| 4 |
https://mledits.github.io/icse_sp4/3/26586/details.html |
| 5 |
https://mledits.github.io/icse_sp4/3/44702/details.html |
| 6 |
https://mledits.github.io/icse_sp5/3/41729/details.html |
| 7 |
https://mledits.github.io/icse_sp5/3/44122/details.html |


| Interface: | Video4Linux2 |
| Revision: | 13.0.4 |
| Date: | 2018-07-30 |
| Parameter | Value List | Type | Kind | Description |
|---|---|---|---|---|
| 'bits_per_channel' | [-1, 8] | integer | pre-defined | Values for bits per channel. |
| 'camera_type' | [] | Unused. | ||
| 'color_space' | ['default', 'gray', 'raw', 'rgb'] | string | pre-defined | Values for color space. |
| 'defaults' | [1, 1, 0, 0, 0, 0, 'progressive', 8, 'default', -1.0, 'false', 'auto', 'default', 0, 0] | mixed | pre-defined | Default values for open_framegrabber. |
| 'device' | ['device:<device_id> | port:<port_number> | input_name:<input_name>'] | string | dynamic | List of available devices. |
| 'external_trigger' | [] | Unused. | ||
| 'field' | [] | Unused. | ||
| 'general' | [] | string | pre-defined | Information about the HALCON Video4Linux2 interface. |
| 'generic' | ['', 'capture_format=<format>', 'num_buffers=<buffers>'] | string | pre-defined | Value list for the Generic parameter. |
| 'horizontal_resolution' | [1, 2, 4] | integer | pre-defined | Value list for horizontal resolution. |
| 'image_height' | [] | Unsupported query. | ||
| 'image_width' | [] | Unsupported query. | ||
| 'info_boards' | ['device:<device_id> | port:<port_number> | input_name:<input_name>'] | string | dynamic | A list of the available devices. |
| 'parameters' | ['<parameters>'] | string | pre-defined | Pre-defined parameters of the HALCON interface. |
| 'parameters_readonly' | ['<parameters>'] | string | pre-defined | Pre-defined read-only parameters of the HALCON interface. |
| 'parameters_writeonly' | ['<parameters>'] | string | pre-defined | Pre-defined write-only parameters of the HALCON interface. |
| 'port' | [] | Unused. | ||
| 'revision' | '<revision>' | string | pre-defined | Revision number of the Video4Linux2 interface. |
| 'start_column' | [] | Unsupported query. | ||
| 'start_row' | [] | Unsupported query. | ||
| 'vertical_resolution' | [1, 2, 4] | integer | pre-defined | Value list for vertical resolution. |
| Parameter | Values | Default | Type | Description |
|---|---|---|---|---|
| Name | 'Video4Linux2' | string | Name of the HALCON interface. | |
| HorizontalResolution | 1, 2, 4, resolution | 1 | integer | Desired horizontal resolution of the camera image:
|
| VerticalResolution | 1, 2, 4, resolution | 1 | integer | Desired vertical resolution of the camera image:
|
| ImageWidth | 0, <width> | 0 | integer | Width of the desired image part ('0' stands for the complete image). |
| ImageHeight | 0, <height> | 0 | integer | Height of the desired image part ('0' stands for the complete image). |
| StartRow | 0, <row> | 0 | integer | Row coordinate of the upper left pixel within the desired image part. |
| StartColumn | 0, <column> | 0 | integer | Column coordinate of the upper left pixel within the desired image part. |
| Field | --- | Ignored. | ||
| BitsPerChannel | 8 | 8 | integer | Number of bits per channel of the resulting HALCON image. In case of -1 the current bit depth of the camera is used. By specifying a value greater than 8 the grabbed images are delivered as uint2 images. |
| ColorSpace | 'default', 'gray', 'raw', 'rgb' | 'default' | string | Specify the desired color space and thus the number of image channels of the resulting HALCON image. In case of 'default' the color space which is supported by the device will be used. |
| Generic | '', 'capture_format=<format>', 'num_buffers=<buffers>', -1 | -1 | mixed | With the generic parameter some important values can be set before the camera is initialized. Note that the parameter names including the values
must be strings.
|
| ExternalTrigger | --- | Ignored. | ||
| CameraType | --- | Ignored. | ||
| Device | 'default', '<device_id>' | 'default' | string | To open a specific camera the device name as shown in info_framegrabber(...'info_boards', ...) has to be set. Video4Linux2 devices are named 'video' followed by a number (e.g. 'video0'). Using 'default' here will select the first usable Video4Linux2 capture device found on the system. |
| Port | --- | Ignored. | ||
| LineIn | --- | Ignored. |
| Parameter | Values | Default | Type | Description |
|---|---|---|---|---|
| Backlight Compensation | 0, 1 | integer | Standard Device Parameter Adjusts the backlight compensation in the camera. The value 0 disables backlight compensation. | |
| 'Brightness' | 0 ... 255 | 128 | integer | Standard Device Parameter The brightness value of the image. |
| 'capture_format' | '<format>' | string | Interface Parameter The V4L2 image format the acquisition device should use to capture images, see also the generic parameter capture_format. | |
| 'Contrast' | 0 ... 255 | integer | Standard Device Parameter Contrast value of the image. | |
| Disable video processing | 'false', 'true' | string | Dynamic Device Parameter This parameter should always be 'false', because HALCON can not handle the resulting video format. | |
| 'do_abort_grab' | --- | Interface Parameter Aborts the current image acquisition and unlocks parameters, which are locked according to the status of the transport layer. | ||
| Exposure (Absolute) | 1 ... 10000 | integer | Standard Device Parameter Absolute exposure value. | |
| Exposure, Auto | 'Aperture Priority Mode', 'Auto Mode', 'Manual Mode', 'Shutter Priority Mode' | string | Standard Device Parameter A special auto exposure mode. Note: Only the modes 'Manual Mode' and 'Aperture Priority Mode' are supported by the Logitech Quickcam 9000 Pro. | |
| Exposure, Auto Priority | 'false', 'true' | string | Standard Device Parameter Enables/Disables the auto priority mode. | |
| 'Focus' | 0 ... 255 | integer | Dynamic Device Parameter Sets the focal point of the camera to the specified position. | |
| 'frame_interval' | <seconds> | integer, float | Interface Parameter Interval (in seconds) between capturing two successive images. Only intervals that the device driver supports can be specified. | |
| 'Gain' | 0 ... 255 | integer | Standard Device Parameter Gain control value of the camera. | |
| 'grab_timeout' | <milliseconds> | 5000 | integer | Desired timeout (milliseconds) for aborting a pending grab. If -1 is specified, the timeout is set to INFINITE. |
| LED1 Frequency | 0 ... 255 | integer | Dynamic Device Parameter Frequency of LED1. | |
| LED1 Mode | 0 ... 132 | integer | Dynamic Device Parameter Mode of LED1. The following modes are available:
|
|
| 'num_buffers' | <buffers> | integer | Interface Parameter The number of buffers the interface should use for image acquisition. A device driver may decide to use more buffers than requested, so this is the minimum number of buffers to use. The value must be at least one, with the maximum number dependent on the device driver and the available system memory. | |
| Power Line Frequency | 'Disable', '50 HZ', '60 HZ' | string | Standard Device Parameter Power line frequency. | |
| Raw bits per pixel | 0, 1 | integer | Dynamic Device Parameter Specifies how many raw bits per pixel should be used. This value is only relevant if 'Disable video processing' is set to 'true'. | |
| 'Saturation' | 0 ... 255 | integer | Standard Device Parameter Image color saturation. | |
| 'Sharpness' | 0 ... 255 | integer | Standard Device Parameter Adjusts the sharpness filters in a camera. The minimum value disables the filters, higher values give a sharper picture. | |
| 'start_async_after_grab_async' | 'disable', 'enable' | 'enable' | string | By default a new asynchronous grab command is automatically given to the acquisition device at the end of grab_image_async. If the parameter 'start_async_after_grab_async' is set to 'disable', this new grab command is omitted. |
| 'timestamp_timebase' | 'auto', 'monotonic', 'realtime' | 'auto' | string | Interface Parameter When using the streaming interface, the Video4Linux2 driver records the
time the image was acquired with every buffer. This timestamp can be based
on either CLOCK_REALTIME or CLOCK_MONOTONIC. The timestamp is used by the
interface to determine if an image is too old, so the interface must know
the timebase used. The default setting of 'auto' tells the interface to determine the timebase used automatically. For Linux kernels prior to 3.9, this involves some guesswork, as older Linux kernels did not report the timebase used. If the interface guesses wrong, the correct timebase can be specified by setting the parameter to 'monotonic' or 'realtime', depending on which timebase (CLOCK_MONOTONIC or CLOCK_REALTIME) is actually used. |
| 'volatile' | 'disable', 'enable' | 'disable' | string | Interface Parameter Raw and grayscale only. In the volatile mode the image buffers are used
directly to store HALCON images. This is the fastest mode avoiding to copy
raw images in memory. However, be aware that older images are overwritten
again and again as a side-effect. Thus, you can only process one image
while you grab another image. Older images are invalid! Please note that the HDevelop Image Acquisition Assistant offers only the 'enable' value, if the current capture format allows volatile mode. So after changing these parameters, the refresh button has to be used to get the new status of the values for volatile. Default: 'disable'. |
| White Balance Temperature | 0 ... 10000 | integer | Standard Device Parameter White balance settings as a color temperature in Kelvin. A driver should have a minimum of 2800 (incandescent) to 6500 (daylight). | |
| White Balance Temperature, Auto | 'false', 'true' | string | Standard Device Parameter When activated, keeps adjusting the white balance temperature. |
All these postfixed parameter names are not returned when calling info_framegrabber(.., 'parameters', ..) and are used to enable the easy parameterization via a generic graphical user interface, particularly the HDevelop Image Acquisition Assistant.
| Parameter | Values | Default | Type | Kind | Description |
|---|---|---|---|---|---|
| 'available_param_descriptions' | <descriptions> | string | dynamic | A list containing additional information about all parameters. The order of the entries is equal to the order of the parameter names returned by 'available_param_names'. | |
| 'available_param_names' | ['<parameters>'] | string | dynamic | The list contains the names of all available parameters. | |
| Backlight Compensation | 0, 1 | integer | dynamic | Standard Device Parameter Adjusts the backlight compensation in the camera. The value 0 disables backlight compensation. | |
| 'bits_per_channel' | -1, 8 | 8 | integer | pre-defined | Number of bits per channel of the resulting HALCON image. In case of -1 the current bit depth of the camera is used. By specifying a value greater than 8 the grabbed images are delivered as uint2 images. |
| 'Brightness' | 0 ... 255 | 128 | integer | dynamic | Standard Device Parameter The brightness value of the image. |
| 'camera_type' | '<default>' | 'auto' | string | pre-defined | The value is not used, so a default value is returned. |
| 'capture_format' | '<format>' | string | dynamic | Interface Parameter The V4L2 image format the acquisition device should use to capture images, see also the generic parameter capture_format. | |
| 'color_space' | 'gray', 'raw', 'rgb' | 'default' | string | pre-defined | Desired color space and thus the number of image channels of the resulting HALCON image. |
| 'Contrast' | 0 ... 255 | integer | dynamic | Standard Device Parameter Contrast value of the image. | |
| 'device' | '<device_id>' | 'default' | string | dynamic | Current device ID. |
| Disable video processing | 'false', 'true' | string | dynamic | Dynamic Device Parameter This parameter should always be 'false', because HALCON can not handle the resulting video format. | |
| Exposure (Absolute) | 1 ... 10000 | integer | dynamic | Standard Device Parameter Absolute exposure value. | |
| Exposure, Auto | 'Aperture Priority Mode', 'Auto Mode', 'Manual Mode', 'Shutter Priority Mode' | string | dynamic | Standard Device Parameter A special auto exposure mode. Note: Only the modes 'Manual Mode' and 'Aperture Priority Mode' are supported by the Logitech Quickcam 9000 Pro. | |
| Exposure, Auto Priority | 'false', 'true' | string | dynamic | Standard Device Parameter Enables/Disables the auto priority mode. | |
| 'external_trigger' | '<default>' | 'false' | string | pre-defined | The value is not used, so a default value is returned. |
| 'field' | '<default>' | 'progressive' | string | pre-defined | The value is not used, so a default value is returned. |
| 'Focus' | 0 ... 255 | integer | dynamic | Dynamic Device Parameter Sets the focal point of the camera to the specified position. | |
| 'frame_interval' | <seconds> | integer, float | dynamic | Interface Parameter Interval (in seconds) between capturing two successive images. Only intervals that the device driver supports can be specified. | |
| 'Gain' | 0 ... 255 | integer | dynamic | Standard Device Parameter Gain control value of the camera. | |
| 'generic' | '', 'capture_format=<format>', 'num_buffers=<buffers>', -1 | -1 | mixed | pre-defined | Values of the Generic parameter. |
| 'grab_timeout' | <milliseconds> | 5000 | integer | pre-defined | Current grab timeout in milliseconds. |
| 'horizontal_resolution' | 1, 2, 4, resolution | 1 | integer | pre-defined | Current value of horizontal resolution. |
| 'image_height' | <height> | 0 | integer | pre-defined | Height of the desired image part ('0' stands for the complete image). |
| 'image_width' | <width> | 0 | integer | pre-defined | Width of the desired image part ('0' stands for the complete image). |
| LED1 Frequency | 0 ... 255 | integer | dynamic | Dynamic Device Parameter Frequency of LED1. | |
| LED1 Mode | 0 ... 132 | integer | dynamic | Dynamic Device Parameter Mode of LED1. The following modes are available:
|
|
| 'line_in' | <default> | 0 | integer | pre-defined | The value is not used, so a default value is returned. |
| 'max_height' | <height> | integer | dynamic | Maximum image height which is supported by the device. | |
| 'max_width' | <width> | integer | dynamic | Maximum image width which is supported by the device. | |
| 'name' | 'Video4Linux2' | string | pre-defined | Name of the HALCON interface. | |
| 'num_buffers' | <buffers> | integer | Interface Parameter The number of buffers the interface should use for image acquisition. A device driver may decide to use more buffers than requested, so this is the minimum number of buffers to use. The value must be at least one, with the maximum number dependent on the device driver and the available system memory. | ||
| 'port' | <default> | 0 | integer | pre-defined | The value is not used, so a default value is returned. |
| Power Line Frequency | 'Disable', '50 HZ', '60 HZ' | string | dynamic | Standard Device Parameter Power line frequency. | |
| Raw bits per pixel | 0, 1 | integer | dynamic | Dynamic Device Parameter Specifies how many raw bits per pixel should be used. This value is only relevant if 'Disable video processing' is set to 'true'. | |
| 'revision' | '<revision>' | string | pre-defined | Revision number of the Video4Linux2 interface. | |
| 'Saturation' | 0 ... 255 | integer | dynamic | Standard Device Parameter Image color saturation. | |
| 'Sharpness' | 0 ... 255 | integer | dynamic | Standard Device Parameter Adjusts the sharpness filters in a camera. The minimum value disables the filters, higher values give a sharper picture. | |
| 'start_async_after_grab_async' | 'disable', 'enable' | 'enable' | string | pre-defined | Status of 'start_async_after_grab_async'. |
| 'start_column' | <column> | 0 | integer | pre-defined | Returns the current start column of the HALCON image. |
| 'start_row' | <row> | 0 | integer | pre-defined | Returns the current start row of the HALCON image. |
| 'timestamp_timebase' | 'auto', 'monotonic', 'realtime' | 'auto' | string | Interface Parameter When using the streaming interface, the Video4Linux2 driver records the
time the image was acquired with every buffer. This timestamp can be based
on either CLOCK_REALTIME or CLOCK_MONOTONIC. The timestamp is used by the
interface to determine if an image is too old, so the interface must know
the timebase used. The default setting of 'auto' tells the interface to determine the timebase used automatically. For Linux kernels prior to 3.9, this involves some guesswork, as older Linux kernels did not report the timebase used. If the interface guesses wrong, the correct timebase can be specified by setting the parameter to 'monotonic' or 'realtime', depending on which timebase (CLOCK_MONOTONIC or CLOCK_REALTIME) is actually used. |
|
| 'vertical_resolution' | 1, 2, 4, resolution | 1 | integer | pre-defined | Current value of vertical resolution. |
| 'volatile' | 'disable', 'enable' | 'disable' | string | pre-defined | Interface Parameter Raw and grayscale only. In the volatile mode the image buffers are used
directly to store HALCON images. This is the fastest mode avoiding to copy
raw images in memory. However, be aware that older images are overwritten
again and again as a side-effect. Thus, you can only process one image
while you grab another image. Older images are invalid! Please note that the HDevelop Image Acquisition Assistant offers only the 'enable' value, if the current capture format allows volatile mode. So after changing these parameters, the refresh button has to be used to get the new status of the values for volatile. Default: 'disable'. |
| White Balance Temperature | <Kelvin> | integer | dynamic | Standard Device Parameter White balance settings as a color temperature in Kelvin. A driver should have a minimum of 2800 (incandescent) to 6500 (daylight). | |
| White Balance Temperature, Auto | 'false', 'true' | string | dynamic | Standard Device Parameter When activated, keeps adjusting the white balance temperature. |


- screen(String[][], int, int[], int) - Method in class classes.Briefing1
-
Override of screen in TextSceen.
- screen(String[][], int, int[], int) - Method in class classes.Briefing2
-
Override of screen in TextSceen.
- screen(String[][], int, int[], int) - Method in class classes.Briefing3
-
Override of screen in TextSceen.
- screen(String[][], int, int[], int) - Method in class classes.Briefing4
-
Override of screen in TextSceen.
- screen(String[][], int, int[], int) - Method in class classes.Briefing5
-
Override of screen in TextSceen.
- screen(String[][], int, int[], int) - Method in class classes.Briefing6
-
Override of screen in TextSceen.
- screen(String[][], int, int[], int) - Method in class classes.Intro
-
This method contains the timing for each paragraph of each screen.
- screen(String[][], int, int[], int) - Method in class classes.TextScreen
-
Used to animate each screen, consisting of calls to paragraph for each paragraph.
- setBio(String) - Method in class classes.Person
-
Setter for bio
- setHint(String) - Method in class classes.Post
-
Setter for hint
- setPredator(boolean) - Method in class classes.Person
-
setter for isPredator
- setProfilePic(Photo) - Method in class classes.Person
-
Setter for profilePic
- setStackPane(StackPane) - Method in class classes.PicturePost
-
Setter for stackPane
- setStackPane(StackPane) - Method in class classes.TextPost
-
Setter for stackPane
- setStage(Scene, int, int) - Static method in class classes.Runner
-
- setWinLosses(int, int) - Static method in class classes.FinalResults
-
Setter for both wins and losses
- Splashscreen - Class in classes
-
- Splashscreen() - Constructor for class classes.Splashscreen
-
- start() - Static method in class classes.BackgroundMusic
-
Start method loops the clip
- start(Stage) - Method in class classes.Runner
-
- stop() - Static method in class classes.BackgroundMusic
-
Stop method stops the looping of the clip


Files CCore/inc/math/Integer.h CCore/src/math/Integer.cpp master include file
Files CCore/inc/math/IntegerAlgo.h CCore/src/math/IntegerAlgo.cpp
Files CCore/inc/math/IntegerBuilder.h CCore/src/math/IntegerBuilder.cpp
Files CCore/inc/math/IntegerDivider.h CCore/src/math/IntegerDivider.cpp
Files CCore/inc/math/IntegerPrint.h CCore/src/math/IntegerPrint.cpp
Files CCore/inc/math/IntegerFromString.h CCore/src/math/IntegerFromString.cpp
Files CCore/inc/math/IntegerGCD.h CCore/src/math/IntegerGCD.cpp
Integer is a class, which simulates integer numbers. It can represent numbers from a huge value range. This range is limited only by the available memory.
Internally an Integer value is represented using the array of units. A unit has an unsigned integral type — the unit type. The range of units is called the body. Any range of units can be regarded as a number. Let's N be the number of bits of the unit type and B be 2N. Then the range of units (U0,...,Un) can be regarded as an unsigned integer using the base-B positional integer representation, i.e. it has the value U0+U1*B+...+Un-1*Bn-1+Un*Bn. It also can be regarded as a signed integer, in this case the most significant unit (MSU) is treated especially. It regarded as a signed number with the value from the interval [-B/2,B/2). The value of the range then equals U0+U1*B+...+Un-1*Bn-1+signed(Un)*Bn. All units except the most significant (which is the last in the range) have values from the interval [0,B), and the MSU is regarded as a value from the interval [-B/2,B/2). The Integer itself uses the signed interpretation. But some low-level algorithms are working with the unsigned numbers.
An Integer value is stored in the normalized form, i.e. you cannot represent it with a less number of units. It means that the MSU is not a signed extension of the previous unit. The null value is represented by the empty array.
template <IntAlgo Algo, template <class T,class A> class ArrayType = RefArray , template <class T,class F=GetNoThrowFlags<T> > class ArrayAlgoType = ArrayAlgo > class Integer { public: using AlgoType = Algo ; using Unit = typename Algo::Unit ; static constexpr unsigned UnitBits = Algo::UnitBits ; using TempArrayType = DynArray<Unit,ArrayAlgoType<Unit> > ; private: ArrayType<Unit,ArrayAlgoType<Unit> > body;
Integer is a template. The first and most important template parameter is an Algorithm package. This parameter determines the unit type and the set of low-level functions to perform the integer operations. These functions cannot be implemented efficiently in general, so you should use some "fast" implementation for your particular target CPU. For example, you can use the GMP library for that purpose.
The second and third template parameters define the array to be used to store an integer body. The second must be either the RefArray(default) or the AtomicRefArray. The third should almost never be used with non-default value. You can use a non-default value for this parameter to employ, for example, custom memory allocation functions. See the Array page for more information about arrays and array algorithms.
AlgoType is the inner type, an alias of the first template parameter.
Unit is the unit type.
UnitBits is the number of unit bits.
TempArrayType is a Unit DynArray with the provided array algorithm package. This type is intended to be used as the temporary storage type. This type is used to implement some operations and can be used for similar purposes.
The body of the Integer is stored in the private field body. This field has the type RefArray or AtomicRefArray. It means it is efficiently copyable and multiple objects can share the same body.
public: // generic constructor Integer(DoBuildType,BuilderType<Unit> builder) : body(DoBuild,builder) { normalize(); } explicit Integer(PtrLen<const Unit> data) : body(DoCopy(data.len),data.ptr) { normalize(); } // constructors Integer() noexcept; Integer(StrLen str); template <UIntType UInt> Integer(UInt val); template <SIntType SInt> Integer(SInt val); ~Integer();
You can create an Integer using the generic constructor or using special constructors. The generic constructor uses the provided builder to fill the integer body and then performs the normalization. You can also create an Integer from a range of units.
The default constructor creates the null value. It doesn't throw.
You can create an Integer from a string (the usual decimal representation is assumed) or from any "short" integer, signed or unsigned. These constructors are implicit, so you can use them to silently cast operation arguments.
// methods CmpResult sign() const; bool operator ! () const; struct BitsOf { ulen units; unsigned msbits; BitsOf(ulen units_,unsigned msbits_) : units(units_),msbits(msbits_) {} template <UIntType UInt> void total(UInt &ret) const; unsigned total() const; }; BitsOf bitsOf() const; Integer sq() const; Integer pow(unsigned deg) const; void modify() { body.modify(); } void cloneTo(Integer &ret) const; Integer & set_null(); PtrLen<const Unit> getBody() const; PtrLenReverse<const Unit> getBodyReverse() const; bool isOdd() const; bool isEven() const;
sign() returns the sign of the number as the CmpResult.
operator ! returns true, if the number is zero.
bitsOf() returns the number of bits of the number. The value is returned as a structure with two fields. The fields units is the number of full unit bits. The field msbits is the number of bits of the MSU, the total bit count therefore is units*UnitBits + msbits. You can convert this result into a usual unsigned value using the method total(). The total() without arguments returns the unsigned value. The total() with argument returns the value of a desired type in the given argument. An exception is thrown in case of overflow. For negative numbers the leading 1 is not counted. I.e. is the number N is non-negative, then NBits is the minimum such that N<2NBits. But if the N is negative, then NBits is the minimum such that N>=-2NBits.
sq() returns the square of the number.
pow() returns the power of the number.
modify() "unshares" the body. After this method the number will have the separate body.
cloneTo() makes clone of the number at the given argument. The argument will have the separate body. This method is useful in multi-task situations.
set_null() sets the number to zero and returns the reference to self.
getBody() returns the range over the number body.
getBodyReverse() returns the reverse range over the number body.
isOdd() returns true, if the number is odd.
isEven() returns true, if the number is even.
// cast template <UIntType UInt> UInt cast() const;
cast() does the cast to the given unsigned integral type. The reduction by module is performed to get the value. On bit patterns: extra bits are skipped.
CmpResult objCmp(const Integer &b) const;
objCmp() performs the 3-way comparision with the argument.
// operators static Integer Neg(PtrLen<const Unit> a); static Integer Add(PtrLen<const Unit> a,PtrLen<const Unit> b); static Integer Sub(PtrLen<const Unit> a,PtrLen<const Unit> b); static Integer Mul(PtrLen<const Unit> a,PtrLen<const Unit> b); static Integer Sq(PtrLen<const Unit> a); static Integer Div(PtrLen<const Unit> a,PtrLen<const Unit> b); static Integer Mod(PtrLen<const Unit> a,PtrLen<const Unit> b); static Integer LShift(PtrLen<const Unit> a,unsigned shift); static Integer RShift(PtrLen<const Unit> a,unsigned shift); struct DivMod { Integer div; Integer mod; DivMod(PtrLen<const Unit> a,PtrLen<const Unit> b); };
This set of static functions makes the result of operation on numbers. The argument(s) is given not as an Integer value, but as the range over a number body.
Neg() calculates -a.
Add() calculates a+b.
Sub() calculates a-b.
Mul() calculates a*b.
Sq() calculates a2.
Div() calculates a/b. More precisely, the result is [a/b].
Mod() calculates a%b. Both division operations throw an exception if the divisor is zero. The following is true: a == (a/b)*b + (a%b). If the b is positive, the remainder is non-negative. Otherwise it is non-positive.
LShift() calculates a<<shift. In other words, it calculates a*2shift.
RShift() calculates the arithmetic a>>shift, i.e. the leading bit is preserved. In other words, it calculates a/2shift.
DivMod is a Class-function, it calculates the quotient (in the field div) and the remainder (in the field mod) simultaneously.
// operators Integer & neg(); Integer & revsub(const Integer &b); Integer & operator += (const Integer &b); Integer & operator -= (const Integer &b); Integer & operator *= (const Integer &b); Integer & operator /= (const Integer &b); Integer & operator %= (const Integer &b); Integer & operator <<= (unsigned shift); Integer & operator >>= (unsigned shift);
This set of methods and operators perform self-modifying operations. They return the reference to self.
neg() negates the number: obj = - obj.
revsub() does the "reversed subtraction", i.e. obj = b - obj.
operator X= does the usual obj = obj X b operation.
// operators Integer operator - () const; friend Integer operator + (const Integer &a,const Integer &b); friend Integer operator - (const Integer &a,const Integer &b); friend Integer operator * (const Integer &a,const Integer &b); friend Integer operator / (const Integer &a,const Integer &b); friend Integer operator % (const Integer &a,const Integer &b); Integer operator << (unsigned shift) const; Integer operator >> (unsigned shift) const; DivMod divmod(const Integer &b) const; friend bool operator == (const Integer &a,const Integer &b); friend bool operator != (const Integer &a,const Integer &b); friend bool operator < (const Integer &a,const Integer &b); friend bool operator > (const Integer &a,const Integer &b); friend bool operator <= (const Integer &a,const Integer &b); friend bool operator >= (const Integer &a,const Integer &b);
The unary operator - returns the negated number: -obj.
The family of binary operators: +, -, *, /, %, perform the usual integer arithmetic operations.
The family of binary comparison operators: ==, !=, <, >, <=, >=, perform the usual integer comparison operations.
operator << returns the obj << shift.
operator >> returns the obj >> shift.
divmod() returns the the quotient and the remainder using the DivMod structure.
template <SUIntType SUInt> Integer & revsub(SUInt val); template <SUIntType SUInt> Integer & operator += (SUInt val); template <SUIntType SUInt> Integer & operator -= (SUInt val); template <SUIntType SUInt> Integer & operator *= (SUInt val); template <SUIntType SUInt> Integer & operator /= (SUInt val); template <SUIntType SUInt> Integer & operator %= (SUInt val); template <SUIntType SUInt> friend Integer operator + (const Integer &a,SUInt b); template <SUIntType SUInt> friend Integer operator + (SUInt a,const Integer &b); template <SUIntType SUInt> friend Integer operator - (const Integer &a,SUInt b); template <SUIntType SUInt> friend Integer operator - (SUInt a,const Integer &b); template <SUIntType SUInt> friend Integer operator * (const Integer &a,SUInt b); template <SUIntType SUInt> friend Integer operator * (SUInt a,const Integer &b); template <SUIntType SUInt> friend Integer operator / (const Integer &a,SUInt b); template <SUIntType SUInt> friend Integer operator / (SUInt a,const Integer &b); template <SUIntType SUInt> friend Integer operator % (const Integer &a,SUInt b); template <SUIntType SUInt> friend Integer operator % (SUInt a,const Integer &b); template <SUIntType SUInt> DivMod divmod(SUInt b) const; template <SUIntType SUInt> CmpResult cmp(SUInt b) const; template <SUIntType SUInt> friend bool operator == (const Integer &a,SUInt b); template <SUIntType SUInt> friend bool operator == (SUInt a,const Integer &b); template <SUIntType SUInt> friend bool operator != (const Integer &a,SUInt b); template <SUIntType SUInt> friend bool operator != (SUInt a,const Integer &b); template <SUIntType SUInt> friend bool operator < (const Integer &a,SUInt b); template <SUIntType SUInt> friend bool operator < (SUInt a,const Integer &b); template <SUIntType SUInt> friend bool operator > (const Integer &a,SUInt b); template <SUIntType SUInt> friend bool operator > (SUInt a,const Integer &b); template <SUIntType SUInt> friend bool operator <= (const Integer &a,SUInt b); template <SUIntType SUInt> friend bool operator <= (SUInt a,const Integer &b); template <SUIntType SUInt> friend bool operator >= (const Integer &a,SUInt b); template <SUIntType SUInt> friend bool operator >= (SUInt a,const Integer &b);
This set of operators and methods handles the mixed-type cases, when one of the argument is a simple signed or unsigned integral type. They are introduced for efficiency reason.
cmp() performs the comparison with one of simple signed or unsigned integral type.
// print object using PrintOptType = IntegerPrintOpt ; void print(PrinterType &out,PrintOptType opt) const; // swap/move objects void objSwap(Integer &obj); explicit Integer(ToMoveCtor<Integer> obj); };
Integer is printable, swappable and movable type. Integer print options are: the output width and the show-sign flag. The output is always decimal.
struct IntegerPrintOpt
{
ulen width;
IntShowSign show_sign;
void setDefault();
IntegerPrintOpt() { setDefault(); }
IntegerPrintOpt(const char *ptr,const char *lim);
//
// [+][width=0]
//
};
RandomInteger is a random Integer.
template <class Integer>
class RandomInteger : public Integer
{
....
public:
template <RandomType Random>
RandomInteger(ulen n,Random &random);
~RandomInteger();
};
Constructor takes two arguments. The first argument is the body length in units. The second is some Random object. An Integer is created with the given body length and randomly filled body units. So the value is uniformly distributed in the range [-Bn/2,Bn/2).
template <class Integer> class GCDiv : public Integer { public: GCDiv(const Integer &a,const Integer &b); }; template <class Integer> int QSym(const Integer &a,const Integer &b);
GCDiv() calculates the GCD of the given arguments. The result is non-negative.
QSym() calculates the quadratic symbol (aka Jacobi symbol) of the given arguments. a and b must be coprime and b must be odd, otherwise an exception is thrown.
The algorithm package Algo must comply with the following pattern. Functions, operating on long numbers expects the arguments in the form (const Unit *a,ulen na), where a is a number body and na is the body length. An argument can be regarded as a signed number or as an unsigned number. In the last case the function name starts from the U.
struct Algo
{
// types and consts
using Unit = ??? ; // unsigned integral type
static constexpr unsigned UnitBits = ??? ;
static constexpr Unit MaxUnit = ??? ;
static constexpr Unit MSBit = ??? ;
Unit is a unit type. It must be an unsigned integral type.
UnitBits is the number of bits of Unit.
MaxUnit is the maximum unit, all bits are set.
MSBit is the most significant bit.
// functions static Unit SignExt(const Unit *a,ulen na); static unsigned CountZeroMSB(Unit a); static Unit DoubleUDiv(Unit hi,Unit lo,Unit den); // hi<den
SignExt() returns the sign extension unit for the given argument. I.e. it is the most significant bit of the argument, propagated to the unit.
CountZeroMSB() counts the number of zero most significant bits of the given unit.
DoubleUDiv() performs the long unsigned division. It divides the double-size number with the high part hi and the low part lo by the divisor den. It is assumed, that hi < den. The result is returned (it is representable by the unit).
// const operators static CmpResult USign(const Unit *a,ulen na); static CmpResult Sign(const Unit *a,ulen na); static CmpResult UCmp(const Unit *a,const Unit *b,ulen nab); static CmpResult UCmp(const Unit *a,ulen na,const Unit *b,ulen nb); static CmpResult Cmp(const Unit *a,ulen na,const Unit *b,ulen nb); static ulen UNormalize(const Unit *a,ulen na); static ulen Normalize(const Unit *a,ulen na);
USign() returns the sign of the argument. It always >=0.
Sign() returns the sign of the argument.
UCmp() compares arguments of the same length.
UCmp() compares arguments.
Cmp() compares arguments.
UNormalize() does normalization of the argument. It returns the normalized length. It drop the most significant units, equals zero.
Normalize() does normalization of the argument. It returns the normalized length. It drop the most significant units, equals propagated MSB of the previous unit.
// additive operators static Unit/* c */ UNeg(Unit *a,ulen na); static Unit/* msu */ Neg(Unit *a,ulen na); static Unit/* c */ UAddUnit(Unit *a,ulen na,Unit b); static Unit/* c */ USubUnit(Unit *a,ulen na,Unit b); static Unit/* c */ UAdd(Unit *restrict b,const Unit *a,ulen nab); static Unit/* msu */ Add(Unit *restrict b,ulen nb,const Unit *a,ulen na); // nb>=na static Unit/* c */ USub(Unit *restrict b,const Unit *a,ulen nab); static Unit/* msu */ Sub(Unit *restrict b,ulen nb,const Unit *a,ulen na); // nb>=na static Unit/* msu */ RevSub(Unit *restrict b,ulen nb,const Unit *a,ulen na); // nb>=na
The bit C is a carry from or a borrow to the MSU when doing unsigned operations.
UNeg() negates the argument in-place. The bit C is returned.
Neg() negates the argument in-place. The result representation requires one additional unit, this unit is returned. I.e. the result length is na+1 and the resulting MSU is not stored in the original body, but returned by the function.
UAddUnit() adds the unit b to the a in-place. The bit C is returned. If na==0, b is returned.
USubUnit() subtracts the unit b from the a in-place. The bit C is returned. If na==0, b is returned.
UAdd() adds a to b in-place. The bit C is returned. a and b have the same length nab and do not overlap.
Add() adds a to b in-place. The length of b must be greater or equal than the length of a, a and b do not overlap. The result representation requires one additional unit, this unit is returned. I.e. the result length is nb+1 and the resulting MSU is not stored in the b body, but returned by the function.
USub() subtracts a from b in-place. The bit C is returned. a and b have the same length nab and does not overlap.
Sub() subtracts a from b in-place. The length of b must be greater or equal than the length of a, a and b do not overlap. The result representation requires one additional unit, this unit is returned. I.e. the result length is nb+1 and the resulting MSU is not stored in the b body, but returned by the function.
RevSub() subtracts b from a in-place (reversed subtraction). The length of b must be greater or equal than the length of a, a and b do not overlap. The result representation requires one additional unit, this unit is returned. I.e. the result length is nb+1 and the resulting MSU is not stored in the b body, but returned by the function.
// shift operators static Unit/* msu */ ULShift(Unit *a,ulen na,unsigned shift); // 0<shift<UnitBits static Unit/* msu */ LShift(Unit *restrict b,const Unit *a,ulen nab,unsigned shift); // 0<shift<UnitBits static Unit/* msu */ ShiftUp(Unit *a,ulen na,ulen delta,unsigned shift); // a[na+delta] , 0<shift<UnitBits static void RShift(Unit *restrict b,const Unit *a,ulen nab,unsigned shift); // 0<shift<UnitBits static void ShiftDown(Unit *a,ulen na,ulen delta,unsigned shift); // a[na+delta] , 0<shift<UnitBits
In the following shift operations the shift length shift must be greater 0 and less than UnitBits.
ULShift() shifts left in-place and returns the MSU. The result representation requires one additional unit, this unit is returned. I.e. the result length is na+1 and the resulting MSU is not stored in the a body, but returned by the function.
LShift() shifts left out-of-place and returns the MSU. a is the argument and b is to store the result. a and b do not overlap. The result representation requires one additional unit, this unit is returned. I.e. the result length is nab+1 and the resulting MSU is not stored in the b body, but returned by the function.
ShiftUp() combines the left shift and the move up. It shifts the na units starting from the a and moves the result up by the delta units. The MSU is not placed in the buffer but returned.
RShift() shifts right out-of-place. a is the argument and b is to store the result. a and b do not overlap.
ShiftDown() combines the right shift and the move down. It shifts the na units starting from the a+delta and moves the result down by the delta units.
// multiplicative operators static void UMul(Unit *restrict c,const Unit *a,ulen na,const Unit *b,ulen nb); // nc==na+nb static void UMulLo(Unit *restrict c,ulen nc,const Unit *a,ulen na,const Unit *b,ulen nb); // nc<=na+nb static void Mul(Unit *restrict c,const Unit *a,ulen na,const Unit *b,ulen nb); // nc==na+nb static void Sq(Unit *restrict c,const Unit *a,ulen na); // nc==2*na
UMul() calculates the product of the arguments and places the result into the c. The length of the c must be na+nb. The input and output bodies do not overlap.
UMulLo() calculates the product of the arguments and places the lower part of the result into the c. The length of the c must not exceed na+nb. The input and output bodies do not overlap.
Mul() calculates the product of the arguments and places the result into the c. The length of the c must be na+nb. The input and output bodies do not overlap.
Sq() calculates the square of the argument a and places the result into the c. The length of the c must be 2*na. The input and output bodies do not overlap.
// data functions static void Null(Unit *a,ulen na); static void Copy(Unit *restrict b,const Unit *a,ulen nab); static void MoveUp(Unit *a,ulen na,ulen delta); // a[na+delta] static void MoveDown(Unit *a,ulen na,ulen delta); // a[na+delta] };
Null() nullifies the result.
Copy() copies data from one range to another disjoint range.
MoveUp() moves up the body inside the larger buffer by the delta units. I.e. a[i+delta] = a[i].
MoveDown() moves down the body inside the larger buffer by the delta units. I.e. a[i] = a[i+delta].
The following content is not required by the Integer, but should also be included in a proper implementation.
struct Algo
{
....
// functions
static Unit SignExt(Unit a);
static CmpResult SignCmp(Unit a,Unit b);
static unsigned CountZeroLSB(Unit a);
SignExt() returns the sign extension of the given unit. I.e. it propagates the sign bit of the a.
SignCmp() performs the signed comparison of the given units.
CountZeroLSB() counts the number of zero least significant bits of the given unit.
// const operators static CmpResult Cmp(const Unit *a,const Unit *b,ulen nab);
Cmp() compares arguments of the same length.
// additive operators static Unit/* msu */ AddUnit(Unit *a,ulen na,Unit b); static Unit/* msu */ SubUnit(Unit *a,ulen na,Unit b); static Unit/* c */ UNegAddUnit(Unit *a,ulen na,Unit b); static Unit/* msu */ NegAddUnit(Unit *a,ulen na,Unit b); static Unit/* c */ URevSub(Unit *restrict b,const Unit *a,ulen nab);
AddUnit() adds the unit b (regarded as an unsigned number) to a in-place. The result representation requires one additional unit, this unit is returned. If na==0, b is returned.
SubUnit() subtracts the unit b (regarded as an unsigned number) from a in-place. The result representation requires one additional unit, this unit is returned. If na==0, -b is returned.
UNegAddUnit() subtracts a from b (regarded as an unsigned number) in-place (reversed subtraction). The bit C is returned. If na==0, -b is returned.
NegAddUnit() subtracts a from b (regarded as an unsigned number) in-place (reversed subtraction). The result representation requires one additional unit, this unit is returned. If na==0, b is returned.
URevSub() subtracts b from a in-place (reversed subtraction). The bit C is returned. a and b have the same length nab and does not overlap.
// shift operators static Unit/* msu */ UShiftUp(Unit *a,ulen na,ulen delta,unsigned shift); // a[na+delta] , 0<shift<UnitBits static void URShift(Unit *a,ulen na,unsigned shift); // 0<shift<UnitBits static void UShiftDown(Unit *a,ulen na,ulen delta,unsigned shift); // a[na+delta] , 0<shift<UnitBits
UShiftUp() combines the left shift and the move up. It shifts the na units starting from the a and moves the result up by the delta units. The MSU is not placed in the buffer but returned.
URShift() shifts right in-place.
UShiftDown() combines the right shift and the move down. It shifts the na units starting from the a+delta and moves the result down by the delta units.
// multiplicative operators static Unit/* c */ UMac(Unit *restrict c,const Unit *a,ulen na,const Unit *b,ulen nb); // nc==na+nb static void USq(Unit *restrict c,const Unit *a,ulen na); // nc==2*na };
UMac() performs the "multiplication and addition" operation. I.e. a and b are multiplied and added to c. The length of the c must be na+nb. The input and output bodies do not overlap. The bit C is returned.
USq() calculates the square of the argument a and places the result into the c. The length of the c must be 2*na. The input and output bodies do not overlap.
There is a default slow implementaton of this algorithm package for all unsigned integral units. This implementation is slow, for example, it has quadratic complexity of the multiplication operations. But it is generic, it does not require any CPU-specific assembler code. This package can be used as an algorithmic reference and for the comparative testing.
Any target must provide the fast implementation.


| Class and Description |
|---|
| AggBinaryOp.MMultMethod |
| AggBinaryOp.SparkAggType |
| BinaryOp.AppendMethod |
| BinaryOp.MMBinaryMethod |
| FunctionOp
This FunctionOp represents the call to a DML-bodied or external function.
|
| FunctionOp.FunctionType |
| Hop |
| LeftIndexingOp.LeftIndexingMethod |
| LiteralOp |
| MemoTable
Memoization Table (hop id, worst-case matrix characteristics).
|
| MultiThreadedHop
Optional hop interface, to be implemented by multi-threaded hops.
|
| OptimizerUtils.OptimizationLevel
Optimization Types for Compilation
O0 STATIC - Decisions for scheduling operations on CP/MR are based on
predefined set of rules, which check if the dimensions are below a
fixed/static threshold (OLD Method of choosing between CP and MR).
|
| Class and Description |
|---|
| Hop |
| MultiThreadedHop
Optional hop interface, to be implemented by multi-threaded hops.
|
| Class and Description |
|---|
| Hop |
| Class and Description |
|---|
| Hop |
| Class and Description |
|---|
| Hop |
| Class and Description |
|---|
| FunctionOp
This FunctionOp represents the call to a DML-bodied or external function.
|
| Hop |
| Class and Description |
|---|
| Hop |
| Class and Description |
|---|
| AggBinaryOp |
| AggUnaryOp |
| BinaryOp |
| DataGenOp
A DataGenOp can be rand (or matrix constructor), sequence, and sample -
these operators have different parameters and use a map of parameter type to hop position.
|
| DataOp
A DataOp can be either a persistent read/write or transient read/write - writes will always have at least one input,
but all types can have parameters (e.g., for csv literals of delimiter, header, etc).
|
| Hop |
| IndexingOp |
| LeftIndexingOp |
| LiteralOp |
| MemoTable
Memoization Table (hop id, worst-case matrix characteristics).
|
| NaryOp
The NaryOp Hop allows for a variable number of operands.
|
| ParameterizedBuiltinOp
Defines the HOP for calling an internal function (with custom parameters) from a DML script.
|
| ReorgOp
Reorg (cell) operation: aij
Properties:
Symbol: ', rdiag, rshape, rsort
1 Operand (except sort and reshape take additional arguments)
Semantic: change indices (in mapper or reducer)
NOTE MB: reshape integrated here because (1) ParameterizedBuiltinOp requires name-value pairs for params
and (2) most importantly semantic of reshape is exactly a reorg op.
|
| TernaryOp
Primary use cases for now, are
quantile (<n-1-matrix>, <n-1-matrix>, <literal>): quantile (A, w, 0.5)
quantile (<n-1-matrix>, <n-1-matrix>, <scalar>): quantile (A, w, s)
interquantile (<n-1-matrix>, <n-1-matrix>, <scalar>): interquantile (A, w, s)
Keep in mind, that we also have binaries for it w/o weights. |
| UnaryOp |
| Class and Description |
|---|
| AggBinaryOp.SparkAggType |
| Hop |
| Class and Description |
|---|
| FunctionOp.FunctionType |
| Hop |
| HopsException
Exception occurring in the HOP level.
|
| Class and Description |
|---|
| Hop |
| Class and Description |
|---|
| Hop |
| Class and Description |
|---|
| LiteralOp |
| UnaryOp |
| Class and Description |
|---|
| Hop |
| Class and Description |
|---|
| Hop |
| Class and Description |
|---|
| Hop |
Copyright © 2021 The Apache Software Foundation. All rights reserved.


For God is my witness, whom I serve with my spirit in the gospel of his Son, that without ceasing I make mention of you always in my prayers
Pray without ceasing (1 Thessalonians 1:17). What does it mean to pray without ceasing? It certainly does not mean that you are always in prayer or on your knees. It means that you are praying regularly and oftenly. You don't stop or give up or stay for long periods of time without praying.
I thank God for the missions week we have been having since Monday. Thank you all who fasted and prayed individually and attended the joint prayers we were having every day up to Friday. We had a lot to bring before God as we prayed for missions and missionaries. God will reward all of you who sacrificed so much. But after praying for the last one week, what next? Are we to wait until the next missions week to pray againfor missions and missionaries? Paul was a great intercessor. In several of his epistles, he speaks of constantly praying for both the believers he had reached with the gospel and his traveling companions like Apollos, Timothy and others.
In Romans 1:7 which we have quoted above, he says that God is his witness of how often and unceasingly he prayed for the Roman brethren. How many of us can say the same? How many can cite God as witness of how unceasingly they pray for missionaries and missions? No wonder he repeats the same in a short instruction to the Thessalonians: "Pray without ceasing."
Living Word Sanctuary has chosen to be a missionaries supporting and sending church. It behooves us to support missionaries in every way: materially, financially, and spiritually and so on. Above all, we should pray for missions and missionaries without ceasing. It should not happen only during the missions week. Nor should it happen only when we gather together at church. We should constantly pray individually and as a corporate local body of Christ. May the Lord bless you as you continue to pray for missions and missionaries without ceasing.


VIA Rail Live Arrivals/Departures Board
Click here for consist details
Station:
<-- To keep a handy link to your favourite station, simply click and drag one of these links up to your bookmarks bar.
All times displayed in
Arrivals
Departures
Last Updated:


Marketplace > Upload
{{ _("Thank you for your contribution to the serverless ecosystem. After the upload, the function verification process will be done within one week.") }}
{% extends 'dashboard/app/base.html' %} {% load static %} {% block content %}
{{ _("Thank you for your contribution to the serverless ecosystem. After the upload, the function verification process will be done within one week.") }}


Apache HTTP Server Version 1.3
Overview of new features
API Changes
A few changes to the Apache API were made for 1.1. It is possible
that some third-party modules will no longer work with 1.1, though
we have made every effort to provide backwards-compatibility. If you
encounter a module that does not work with 1.1, please let us know.
New Features with Apache 1.1
New features with this release, as extensions of the Apache
functionality (see also more detailed CHANGES
file in
the source directory.) Because the core code has changed so
significantly, there are certain liberties that earlier versions of
Apache (and the NCSA daemon) took that recent Apache versions are
pickier about - please check the compatibility notes if you have any
problems.
In addition to a number of bug fixes and internal performance
enhancements, Apache
1.1 has the following specific new user features:
- Support for Keep-Alive Persistent
Connections
Apache now has (optional) support for persistent
connections, as defined by the HTTP/1.1 draft. This protocol,
supported by a number of current HTTP servers and browsers (including
Netscape Navigator 2.0) has been shown to increase speed of document
transfer by up to 50% in certain cases.
- New non-IP Intensive VirtualHost
Support
Apache's support for virtual hosts has been enhanced to be able to
use information sent by some new Web browsers to determine the server
being accessed, without requiring an additional IP address for each
host.
- Listen to Multiple Addresses and
Ports
Using the new Listen
directive, Apache can listen to more
than one port and IP address, using the same configuration set.
- Status
Module
Apache now contains a module that gives the web-master accurate,
up-to-date information about the server's status and its resource
consumption. It also gives the current state of each server process
including the current URL being processed. For an example, check out
the status of the
www.apache.org server.
- Server Information Module
This module gives a plethora of information about the other modules
installed, their directives, and their configurations. It is
extremely helpful in debugging configuration problems. For an
example, check out information about the
www.apache.org server.
- Experimental Caching Proxy
Server
Apache can now act as
an HTTP proxy server, allowing clients behind firewalls to use the
server to access the outside world. In addition, it can cache
documents it proxies, speeding up access to frequently requested
documents.
- URL-based Access Protection
In addition to access checking and authorization by filename (with
<Directory>
),
the new <Location>
directive allows protection by
URL.
- Filetype-based Script
"Actions"
You can now run CGI scripts whenever a file of a certain type is
requested. This makes it much easier to execute scripts that process
files. In addition, you can use the new Script directive to enable scripts
for files called with HTTP methods Apache does not natively support.
- New "Handler" Directives
The new AddHandler
and SetHandler
directive
allows "handlers" to be defined for filename extensions or
directories. These handlers, which can either be built into Apache or
added with the Action directive, extend
Apache's range of usability, and almost entirely remove the "magic"
media types.
- Customizable CGI Environment
Variables
New PassEnv
and SetEnv
directives allow you to
modify the environment variables passed to CGI scripts.
- CERN Metafile Support
Now emulates the CERN httpd's support for metafiles containing additional
HTTP headers to be supplied with a document.
- Improved Imagemap Support
The internal imagemap handling code has been rewritten and
reorganized, adding new handling of default, base and relative URLs,
and support for creating non-graphical menus for use with clients that
do not support imagemaps.
- Improved UserDir
Directive
Now supports the ability to point user's files (as specified by URLs
beginning with the "~
" character) at directories other
than those specified by the Unix password file.
- Minimal DNS Now Runtime Option
New HostnameLookups
server configuration directive can be used to turn On
or
Off
DNS lookups. This supersedes the -DMINIMAL_DNS
compile-time configuration option. This option can be set per-directory.
- IdentityCheck Now Per-Directory Option
The IdentityCheck
directive, which controls the use of
ident to check the remote user name, can now be set per directory. The
ident support is also RFC 1413-compliant.
- Redirect Now Usable in
.htaccess
Files
The Redirect
directive can now be used in .htaccess
files when the
FileInfo
directive has been set on. This allows users to
redirect parts of their directories without requiring CGI scripts
- ErrorDocument Now Usable in
.htaccess
Files
The ErrorDocument
directive can now be used in .htaccess
files when the
FileInfo
directive has been set on. This allows users to
have different error messages for different sections of a site.
ForceType
Directive
This new directive, in <Directory>
sections or
.htaccess files, allows you to override the filename extensions and
force a single content type. (e.g., ForceType
application/octet-stream
)
- File Owner Available to Included CGI Scripts
Server-side includes that call CGI scripts will now set a
USER_NAME
environment variable that contains the owner of
the file which included it.
- Improved Icons
Thanks to Kevin
Hughes, Apache's nifty color GIF icons for directory listings have
been updated. In addition, the Powered by Apache
(apache_pb.gif
) logo has been included.
New Authentication Modules
Note: These modules are not
compiled into the server by default, as they require special support
on the host system. They must be enabled specifically in the
Configuration
file.
- Anonymous HTTP Logins
New options allow you to allow, using Basic HTTP Authentication,
anonymous logins, like those of FTP. This allows you to collect email
addresses of people accessing your site.
- Support for Digest
Authentication
Apache now supports digest authentication using RSA MD5
encryption. When used with a supporting web browser, this provides a
more secure alternative to Basic authentication.
- Support for Unix DB
Authentication -
mod_auth_db.c
In
addition to DBM support, Apache now
contains optional support for Berkeley DB databases.
- mSQL Database
Authentication -
mod_auth_msql.html
Support for the use of mSQL databases for user authentication via HTTP
is now supported.
OS/2 Support
Apache now includes support for OS/2, thanks to
Softlink Services.
Apache HTTP Server Version 1.3


This tool forces the App to reload and refresh the browser cache.
This tool removes all local data including (transcript, logs and settings).


Salvador Medina
PhD Student (ML + Animation)
I research how to enable machine learning interpretability at scale and for everyone, by designing and developing interactive interfaces to help people confidently understand data-driven systems. Besides building tools, I also create data visualizations and write interactive articles to simply communicate complex ideas.
I have collaborated with researchers, designers, developers, and artists while working at Apple, Microsoft Research, NASA Jet Propulsion Lab, and Pacific Northwest National Lab.
Education
Dec. 2020 — Aug. 2015
Ph.D. in Computational Science & Engineering
Georgia Institute of Technology, Atlanta, GA
Advisor:
Duen Horng (Polo) Chau, Co-advisor:
Alex Endert
Committee:
Duen Horng (Polo) Chau,
Alex Endert,
Chao Zhang,
Nathan Hodas,
Scott Davidoff,
Steven Drucker
May 2018
M.S. in Computational Science & Engineering
Georgia Institute of Technology, Atlanta, GA
GPA: 4.00/4.00
May 2015 — Aug. 2011
B.S. in Mathematics, B.S. in Physics
University of Georgia, Athens, GA
Overall GPA: 3.84/4.00, Magna Cum Laude, Area of Emphasis in Applied Mathematics
Industry Research Experience
Present — Jan. 2021
Apple, Seattle, WA
Research Scientist, Design + Visualization Group
Research and design for everyone in the machine learning process—the developers who build models, the designers who create experiences, and the people who use technology.
Summer 2019
Apple, Seattle, WA
Research Intern, Turi Human-centered Machine Learning Group
Mentor:
Kanit Wongsuphasawat,
Kayur Patel
Designed and developed interactive visualizations for data iteration in machine learning, published at CHI 2020.
Summer 2018
Microsoft Research, Redmond, WA
Research Intern, Human-Computer Interaction Group
Mentor:
Steven Drucker
Designed, developed, and deployed interactive interface for operationalizing machine learning interpretability, published at CHI 2019.
Summer 2017
NASA Jet Propulsion Lab, Pasadena, CA
Creative Computer Scientist, Human Interfaces Group
Mentor:
Scott Davidoff,
Arun Viswanathan
Joint work between NASA JPL, Caltech, and Art Center creating interactive data visualizations for current scientific research. Prototype presented to lab leadership and secured funding to be incorporated into Mars 2020 mission.
Summer 2016
Pacific Northwest National Lab, Richland, WA
National Security Ph.D. Intern, Data Sciences & Analytics Group
Mentor:
Nathan Hodas
Built interactive tools that generate synthetic images to explain deep learning classifiers, published at CHI 2017.
Academic Research Experience
Present — Aug. 2016
Georgia Institute of Technology, Atlanta, GA
Graduate Research Assistant, School of Computational Science and Engineering
Advisor:
Duen Horng (Polo) Chau,
Alex Endert
Member of the Polo Club of Data Science where we bridge and innovate at the intersection of data mining and human-computer interaction to synthesize scalable, interactive, and interpretable tools that amplify human’s ability to understand and interact with big data.
May 2016 — Aug. 2015
Georgia Institute of Technology, Atlanta, GA
Graduate Research Assistant, School of Computational Science and Engineering
Mentor:
Surya Kalidindi
Conducted research in physical data science and material informatics by creating property-structure linkages using machine learning to predict material properties. Contributed to direction and code of PyMKS: Materials Knowledge Systems in Python.
May 2015 — Jan. 2013
University of Georgia, Athens, GA
Undergraduate Research Assistant, Department of Mathematics
Advisor:
David Gay
Explored 3D printing and mathematical exposition in topology. Programmed, designed, and 3D printed 34-piece, color-coordinated, and magnetized 3D puzzle of the trefoil knot fibration. Led 3D printing research and education in mathematics department.
Summer 2014
REU in Mathematics and Computational Science, Fairfield, CT
Fairfield University, Department of Mathematics
Mentor:
Shanon Reckinger
Directly compared numerical solutions from Navier-Stokes equations to designed lab-scale experiments to model specific ocean phoneme. Configured MIT General Circulation Model on CPU cluster to run parallel computational fluid dynamics simulations.
Honors and Awards
2019
Best Paper at ACM CHI Conference
For "Managing Messes in Computational Notebooks"
2018
Best Paper, Honorable Mention at VISxAI Workshop at IEEE VIS
For "The Beginner's Guide to Dimensionality Reduction"
2018 — 2021
NASA Space Technology Research Fellowship
For my Ph.D. work on "Understanding Deep Neural Networks Through Attribution and Interactive Experimentation"
2018
Audience Appreciation Award, Runner Up at ACM SIGKDD Conference
For "Shield: Fast, Practical Defense and Vaccination for Deep Learning using JPEG Compression"
2017 — 2018
Microsoft Azure for Research Award: AI for Earth
For our work on "Deep Learning for Fine-scale Population Maps"
2017
Best Demo, Honorable Mention at ACM SIGMOD/PODS Conference
For "Visual Graph Query Construction and Refinement"
2015 — 2019
President's Fellowship at Georgia Institute of Technology
Select number of 1st year doctoral students who bring exemplary levels of scholarship and innovation to their academic departments
2015
Outstanding Poster at JMM Undergraduate Poster Session in Computational Math
For "Experimental and Numerical Comparison of Oceanic Overflow"
2015
UGA CURO Research Graduation Distinction
Awarded to undergraduates who write a thesis, present at the CURO Symposium, and complete 9 research credit hours
2014
UGA CURO Research Assistantship
Stipend awarded to outstanding undergraduates that actively participate in faculty-mentored research
2011 — 2015
Dean's List
Achieved at least a 3.5 GPA during a semester with minimum 14 credit hours
2011 — 2015
Georgia HOPE Scholarship
Merit-based award to Georgia residents providing tuition assistance for their undergraduate degree
2011
Mission of Blessed Trinity: Artistic Sensibility
One of two students to receive the Mission Statement award upon high-school graduation
Publications
Selected: Latest & Greatest
Salvador Medina,
Denis Tome,
Carsten Stoll,
Mark Tiede,
Kevin Munhall,
Alex Hauptmann,
Iain Matthews
IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). New Orleans, LA, USA, 2022.
Journal
Conference
C1
Salvador Medina,
Denis Tome,
Carsten Stoll,
Mark Tiede,
Kevin Munhall,
Alex Hauptmann,
Iain Matthews
IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). New Orleans, LA, USA, 2022.
Workshop
Poster
Demo
Miscellaneous
Talks
Interactive Scalable Interfaces for Machine Learning Interpretability
Nov. 2021
Carnegie Mellon University, Data Visualization Course Guest Lecture
Oct. 2020
University of Wisconsin-Madison, Data Visualization Course Guest Lecture
Oct. 2020
Georgia Tech Thesis Defense
May 2020
IBM Research
Apr. 2020
Microsoft Research
Apr. 2020
Apple
Apr. 2020
Autodesk Research
Dec. 2019
Georgia Tech Thesis Proposal
Summit: Scaling Deep Learning Interpretability by Visualizing Activation and Attribution Summarizations
Mar. 2020
NVIDIA GTC
Oct. 2019
IEEE Visualization
TeleGam: Combining Visualization and Verbalization for Interpretable Machine Learning
Oct. 2019
IEEE Visualization
Gamut: A Design Probe to Understand How Data Scientists Understand Machine Learning Models
June 2019
Microsoft Machine Learning and Data Science Summit
May 2019
ACM Conference on Human Factors in Computing Systems
Explaining Machine Learning Models Using Interactive Visualization
Mar. 2019
Georgia Tech School of CSE Strategic Partnership Program Summit
Apr. 2019
Georgia Tech CSE 6242 Data and Visual Analytics
Mar. 2019
Symantec Research Labs
Mar. 2019
NASA Jet Propulsion Laboratory
Atlas: Local Graph Exploration in a Global Context
Mar. 2019
ACM Intelligent User Interfaces
Visual Analytics in Deep Learning: An Interrogative Survey for the Next Frontiers
Jan. 2019
Carnegie Mellon University
Oct. 2018
University of Georgia
Oct. 2018
IEEE Visualization
The Beginner's Guide to Dimensionality Reduction
Oct. 2018
VISxAI Workshop at IEEE Visualization
Comparing Interactive Local and Global Explanation Paradigms for Human-assisted Machine Learning Tasks
July 2018
Microsoft Research
Graph Playgrounds: 3D Exploration of Graph Layers via Vertex Cloning
Dec. 2017
AT&T Research Labs Graduate Student Symposium
A Viz of Ice and Fire: Exploring Entertainment Video Using Color and Dialogue
Oct. 2017
2nd Workshop on Visualization for the Digital Humanities at IEEE Visualization
Constellation: Visualizing Cybersecurity in Real Time
Aug. 2017
NASA Jet Propulsion Laboratory
Aug. 2017
California Institute of Technology
Visualizing Learned Semantics with Deep Learning
Nov. 2016
Georgia Tech Ph.D. Qualifying Oral Exam
Drawing Semantics with Deep Learning
2016
Pacific Northwest National Laboratory
3D Printing The Trefoil Knot And Its Pages
Mar. 2015
UGA Center for Undergraduate Research Symposium, included hands-on demo
Experimental and Numerical Studies of Oceanic Overflow
June 2015
AMS Conference on Atmospheric and Oceanic Fluid Dynamics
Jan. 2015
Joint Mathematics Meeting
Nov. 2014
APS Division of Fluid Dynamics
Aug. 2014
Invited and presented on behalf at Brown University, Los Alamos National Lab
July 2014
Northeast REU Mini-Conference at Yale University
July 2014
University of Rhode Island Bay Campus
3D Printing in Topology
Mar. 2014
UGA Center for Undergraduate Research Symposium, included hands-on demo
Press
Nov. 2020
Nov. 2020
"Dense Discovery Issue 112," Dense Discovery
Oct. 2020
Oct. 2020
Oct. 2020
"Interactive data essays on climate change," Flowing Data
July 2020
"Python in Visual Studio Code - VSCode Features You Need to Know," Tech With Tim
July 2020
"Python in Visual Studio Code – July 2020 Release," Microsoft Developer Blog
June 2020
"How Do Neural Networks Learn?," Two Minute Papers
Mar. 2020
"Visualizing Fairness in Machine Learning," Data Stories Podcast
Nov. 2019
"The Interactive News Platform for Everyone," Stack Overflow Blog
Oct. 2019
"Is this the dynamic web we were promised?," Hanselminutes Podcast
June 2019
"Myth of the impartial machine," Flowing Data
May 2019
"The Secret Life of a JPEG," Fast Company
Dec. 2018
"'Human Rights' May Help Shape Artificial Intelligence in 2019," Georgia Tech, College of Computing
Dec. 2018
"Designers, Programmers, and Researchers Join Forces to Create a New Kind of Digital Magazine Called the Parametric Press," Georgia Tech, College of Computing
June 2018
"Georgia Tech Teams up with Intel to Protect Artificial Intelligence from Malicious Attacks Using SHIELD," Georgia Tech, College of Computing
Dec. 2017
"Georgia Tech Team To Use Microsoft Grant to Study Human Migration Dynamics," Georgia Tech, College of Computing
Sept. 2015
Spring 2015
"Student Profile: Fred Hohman," 2015 UGA Mathematics Department Newsletter
Feb. 2015
"Falling Water," MITgcm.org
Dec. 2014
"Mathematics/Physics Student Creates 3D Printed Puzzle of Trefoil Knot, Catches Mathematical Community's Interest," 3dprint.com
July 2014
"Day 311 - Trefoil Trumpet," Makerhome.com
Apr. 2014
"Mathematics with 3D Printing," Sketches of Topology
Teaching
Spring 2019
Georgia Institute of Technology, Atlanta, GA
Information Visualization (CS 4460),
Instructor:
Alex Endert
Designed homeworks, held weekly office hours, and mentored student team projects for Information Visualization (CS 4460), an undergraduate course with 134 students enrolled.
Spring 2017
Georgia Institute of Technology, Atlanta, GA
Data and Visual Analytics (CSE 6242 / CX 4242),
Instructor:
Duen Horng (Polo) Chau
Designed homeworks, held weekly office hours, and mentored student team projects for Data and Visual Analytics (CSE 6242 / CX 4242), a graduate course with 214 students enrolled.
2014 — 2015
Student Notetaker
University of Georgia, Athens, GA
Generated notes for undergraduate mathematics and physics courses for students with disabilities.
2012
Tutor
University of Georgia, Athens, GA
Specialized in tutoring calculus to undergraduates.
Mentoring
Spring + Summer 2021
Ph.D. in Information Technology, Ulm University
Reusable, explorable, and sharable data science components
Summer 2021
Ph.D. in Human-computer Interaction, Carnegie Mellon University
Reusable, explorable, and sharable data science components
Summer 2020
Ph.D. in Computer Science, University of Konstanz
Interactive confusion matrices and visualization for error analysis in machine learning
Summer 2020
Ph.D. in Computer Science, Massachusetts Institute of Technology
Designing data and proactive data collection for machine learning
Fall 2020 — Fall 2019
B.S. in Computer Science, Georgia Institute of Technology
Visualization for machine learning education
Sigma Xi Best Undergraduate Research Award, Georgia Institute of Technology
Fall 2020 — Fall 2019
B.S. in Computer Science, Georgia Institute of Technology
Visualization for machine learning education
Outstanding Senior Award, College of Computing, Georgia Institute of Technology
Spr. 2020 — Fall 2019
B.S. in Computer Science, Georgia Institute of Technology
Visualization for deep learning interpretability
Spr. 2020 — Spr. 2019
B.S. in Computer Science, Georgia Institute of Technology
Visual analytics for machine learning fairness
Stamps President's Scholar
Now: PhD Student (HCI) at Carnegie Mellon University
Spr. 2020 — Spr. 2019
B.S. in Computer Science, Georgia Institute of Technology
Visual graph analytics
Outstanding Undergraduate Researcher, College of Computing, Georgia Institute of Technology
President's Undergraduate Research Award
Now: Software Engineer II at Google
Spr. 2019 — Spr. 2018
B.S. in Computer Science, Georgia Institute of Technology
Visual analytics for machine learning fairness, interactive classification for deep learning
National Science Foundation Graduate Research Fellowship Program (NSF GRFP)
Love Family Foundation Scholarship (most outstanding graduating senior), Georgia Institute of Technology
Stamps President's Scholar
Now: PhD Student (HCI) at Carnegie Mellon University
Spr. 2018 — Fall 2016
B.S. in Computer Science, Georgia Institute of Technology
Interactive visual motif discovery
Outstanding Undergraduate Researcher, College of Computing, Georgia Institute of Technology
Faculty Materials, Supplies, and Travel Grants for Undergraduate Research
Awarded President's Undergraduate Research Travel Award
Now: Software Development Engineer at Airbnb
Spr. 2018 — Fall 2017
M.S. in Computer Science, Georgia Institute of Technology
Visualization for deep learning attribution
Now: Software Development Engineer at Oath
Grants and Funding
2018 — 2021
Co-PIs:
Duen Horng (Polo) Chau
Funded $80,000/year for 3 years
2017 — 2018
Co-PIs:
Caleb Robinson,
Bistra Dilkina
Funded $15,000
Fall 2014
Co-PIs:
David Gay
Funded $1,000
Interactive Articles
January 2022
Developing flexible, interpretable models to assess how the effect of mobility changes
December 2021
Algorithms for measuring and understanding the best user experiences
October 2021
Efficient pixel-level understanding for the Camera
September 2021
Training regions in neural network subspaces to find high-accuracy solutions
August 2021
Developing new generative models that can learn probability distributions over realistic and unconstrained indoor scenes
July 2021
Improving the Photos experience by identifying people who matter most to us in situations where previously impossible
May 2021
Creating accessibility metadata for mobile applications from pixels
October 2020
Matthew Conlen,
Fred Hohman,
Sara Stalla,
Andrew Sass
Interactively analyze our climate’s past, present, and future
Your Personal Carbon History
by
Aatish Bhatia
Why you've lived through a period of unprecedented carbon emissions.
The Corporations Behind Climate Change
by
Geoffrey Litt,
Seth Thompson
Seven simple demands to hold fossil fuel companies accountable.
Tiny Algae and the Political Theater of Planting One Trillion Trees
by
Benjamin Cooley
To fight climate change, it's time to start thinking big by thinking small.
Drought of the Sinking Delta
by
Christina Orieschnig
Things are out of joint in the delta of the Mekong, Southeast Asia's largest river.
The Hidden Cost of Digital Consumption
by
Halden Lin,
Aishwarya Nirmal,
Shobhit Hathi,
Lilian Liang
Digital doesn't mean green. How much carbon dioxide was released when you loaded this article?
May 2019
Matthew Conlen,
Fred Hohman,
Sara Stalla,
Victoria Uren,
Andrew Sass
An experimental, born-digital magazine dedicated to showcasing the expository power that’s possible when the audio, visual, and interactive capabilities of dynamic media are effectively combined, Top of Hacker News, twice
Unraveling the JPEG
by
Omar Shehata
JPEG images are everywhere, but behind them are algorithms that remove details that are imperceptible to the human eye.
The Myth of the Impartial Machine
by
Alice Feng,
Shuyan Wu
Machine learning models reproduce inequalities within data they're fed. Can programmers free their models from prejudice?
Data Science for Fair Housing
by
Alyson Powell Key
In Atlanta, how effective is a new nonprofit's plan to resist displacement by supporting the city's most vulnerable residents?
Flatland Follies: An Adjunct Simulator
by
James McGirk
Play your way through the daily struggles of teaching and preserving art at a declining college.
On Particle Physics
by
Riccardo Maria Bianchi
A CERN particle physicist walks through the history and science of particle physics, and why you should care about it.
Anything That Flies, On Anything That Moves
by
Megan Vo
Dig into data of over two million bombings during a covert US assault on Southeast Asian countries from the 1960s and 70s.
November 2018
Caleb Robinson,
Fred Hohman
A toy algorithms problem
July 2018
Matthew Conlen,
Fred Hohman
Explore the methods data scientists use to visualize high-dimensional data, VISxAI Best Paper, Honorable Mention
June 2018
Fred Hohman
Riffling from factory order to complete randomness, Top of Hacker News, twice
October 2017
Fred Hohman,
Sandeep Soni,
Ian Stewart,
John Stasko
Exploring and visualizing Game of Thrones using color and dialogue
Service
Organizer
Program Commitee
Debugging Machine Learning Models Workshop
(DebugML) at ICLR
2019
Symposium on Visualization in Data Science
(VDS) at IEEE VIS
2018
Workshop on Visualization for AI Explainability
(VISxAI) at IEEE VIS
2018
Workshop on Interactive Data Exploration and Analytics
(IDEA) at KDD
2018
Reviewer
Visualization Meets AI
at PacificVis
2022
Rethinking ML Papers
at ICLR
2021
ACM Designing Interactive Systems
(DIS)
2021
ACM Transactions on Interactive Intelligent Systems
(TIIS)
2021
IEEE Pacific Visualization Conference
(PacificVis)
2021
Distill Research Journal
(Distill)
2019
ACM Conference on Computer Supported Cooperative Work and Social Computing
(CSCW)
2019
Human-Centered Machine Learning Perspectives Workshop
(HCMLP) at CHI
2019
1st Deep Learning and Security Workshop
(DLS) at IEEE SP
2018
IEEE International Conference on Distributed Computing Systems
(ICDCS)
2017
SIAM International Conference on Data Mining
(SDM)
2017
Institutional
Georgia Tech CSE Graduate Student Association, Vice President, 2018 - 2020
Georgia Tech CSE Chair Search Committee, 2019 - 2020
Member
Present — 2016
Association for Computing Machinery (ACM)
Present — 2016
Institute of Electrical and Electronics Engineers (IEEE)
2012 — 2015
UGA Mathematics Club
2012 — 2013
Society of Physics Students, UGA Chapter (SPS)
2011 — 2015
National Society of Collegiate Scholars (NSCS)
Design
2017 — 2018
ACM SIGKDD Workshop on Interactive Data Exploration and Analytics (IDEA)
Designed workshop poster and conference proceedings cover
2017
ACM Conference on Human Factors in Computing Systems (CHI), Denver, USA
Designed and implemented an interactive visualization of Brad Myers's advisee tree shown during his CHI 2017 Lifetime Research Award talk; designed accompanying ribbon worn by attendees at the conference
Aug. 2014
University of Georgia Mathematics Department, Athens, USA
Designed, modeled, and 3D printed cube decomposition trophy for annual UGA High School Math Tournament that was given to the top scoring teams and participants
Aug. 2014
University of Georgia Lamar Dodd School of Art, Athens, USA
Created 3D printed UGA keychain and presentation notes given at Experience UGA: a interdisciplinary event that exposes middle-school and high-school students to hands-on learning activities
References
Dr. Polo Chau, Associate Professor
School of Computational Science and Engineering
Georgia Institute of Technology
Dr. Alex Endert, Associate Professor
School of Interactive Computing
Georgia Institute of Technology
Dr. Scott Davidoff, Senior Manager
Human-Centered Design Group
NASA Jet Propulsion Lab
Dr. Steven Drucker, Partner and Research Manager
Visualization and Interactive Data Analysis Group
Microsoft Research
Dr. Nathan Hodas, Senior Research Scientist
Data Sciences and Analytics Group
Pacific Northwest National Laboratory


| Skill Requirements for Various Teams | |||
| Category | Skill | Skill Sets | Teams |
| Common Core | Git Basics | Setup Git, Initial Git, Commit, Merge, Branch. add/remove remotes | All |
| Common Core | Github Basics | Setup Repos. Import exisiting repo. Create new repo. Work with multiple remotes (origin, heroku etc) |
All |
| Common Core | VIM Basics | Navigate VIM wih hjkl; Move in and out of VISUAL and INSERT modes; Master navigation commans such as w,W, e, b, B; Search, search and replace, delete spefice characters; |
All |
| Common Core | Static Page on Github | Learn basicf of setting up a github.io page. Fork a Personal Page and turn this into personal profile page on github.io |
All |
| Common Core | Python Practice | Complete Learn Python The Hardway and Learn Python on Code Academy |
All |
| Common Core | Git Practice | Complte Git Tutorial on CodeAcademy and Github. Work on LPTH excercise with git and GitHub |
All |
| Common Core | HTML Practice | Basic HTML and HTML5. Basic CSS (Optionally Flexbox, CSS Grid) on FreeCodeCamp |
All |
| Common Core | Heroku Basics | Delply, Debug and Log on Heroku | All |
| Common Core | JavaScript Practice | Basic JavaScript on FreeCodeCamp | All |
| Common Core | Front End development with Material Design |
Develop UIs with Materializecss + MDL and KnockOutJS. Design Screenflows with InvisionApp |
All |
| Firebase | Firebase Basics | Setup basic hosting with Firebase. Use realtime database to store and retreive data. Basic CRUD on Firebase |
Alpha to Flower |
| Python Flask Heroku | Flask basics: Routing, Jinja Template. Database with SQLAlchemy. RESTful API |
||
| Data Binding | KnockOutJS | Use KnockOutJS to bind data. | Alpha to Flower, Might to Sun |
| Project | Electronic Thesis and Dissertation |
Use Firebase to develop an Electric Thesis and Disseration App using the toolsets and workflow covered in the internship program. |
Alpha to Charlie |
| Project | Apps in Myanmar | Use Firebase to develop an Apps in Myanmar using the toolsets and workflow covered in the internship program. |
Delta to Flower |
| Project | Universal Font Converter | Write a converter library using Python to convert from Zawgyi to Unicode, Win Myanmar to Unicode, Unicode to Zawgyi, Win Innwa to Zawgyi. Optionally detect and skip English words in Win Myanmar. Develop a FrontEnd UI suitable for UFC. |
Gold to Lima |
| Project | Who is Who in Myanmar | Develop a FrontEnd UI for Who is Who in Myanmar. Develop a simple table to store who is who data. Use SQLAlchemy as a datbase backend. Bind data to UI using KnockOutJS |
Mighty to Sun |


It looks like this site doesn't have a bias listing, or its listing is inaccessible by Bias Finder. You can search for this site on AllSides with this handy search box:
If you find this site on AllSides, feel free to shoot me a tweet or DM at @The_Unlocked and I'll figure it out.