PIA-Tunnel Documentation
This documentation is work in progress. Some sections may not have been verified yet or are still
being tested.
Overview
Back To Top
PIA-Tunnel is a series of scripts designed to share an openVPN connection with your network.
It supports port forwarding, failover locations, LAN segments and a SOCKS5 proxy.
The included web interface makes it easy to setup connections and get the system configured to
your network.
The included shell scripts make it possible to control the system from the command line as well.
PIA-Tunnel started out as a virtual machine for VMware Workstation, Player and ESXi but
is now being used on KVM, XEN, Hyper-V and other solutions.
PIA-Tunnel is currently being tested on a Raspberry Pi 1 Model B+, with promising results.
The combination turns PIA-Tunnel into a stand alone VPN router for your network.
Advanced setups may utilize two network adapters to completely isolate a network or system.
Features
- Open by design! PIA-Tunnel is script based and you may roll your own installation
by following the steps in 'Clean Installation Steps.txt'
- Complete network isolation with VM LAN segment (leak protection)
- Simple Web-interface and/or command line support
- SOCKS 5 proxy for LAN or VM LAN segment. proxifier.com compatible
- Port forwarding to 1 IP on your LAN or private VM LAN
- Runs on existing hardware, your Computer, Laptop or Homeserver
- Requires 1 CPU core, 256MB RAM and less then 2GB free drive space
- Supports PrivateInternetAccess.com and FrootVPN.com out of the box
Virtual Machine Setup
Back To Top
- Download the compressed OVF Template from http://www.kaisersoft.net/r/?PIAIMG
- Extract the 7-Zip archive. 7-Zip is a free compression utility http://www.7-zip.org
VMware Workstation and Player
- Add the OVF Template to VMware Workstation or Player by double clicking on "PIA-Tunnel.ovf" then on "Import".
- Ensure that the second network adapter is a member of a private LAN segment
- Select "Network Adapter 2"
- Click "LAN Segments" => "Add"
- Enter name of LAN segment. For example: "VPN Bridge"
- Click OK to close
- Use Dropdown to select the LAN segment you just created and click OK
Note: Connect client VMs to this LAN segment and remove or disable their other network cards for complete isolation.
ESXi
- Setup private VM LAN segment first using vSphere Client
- select your ESXi server and choose "Configuration"
- Click on "Networking" => "Add Networking..."
- "Virtual Machine" => "Create a vSphere standard switch" uncheck any selected interfaces!
NOTE: The preview must list "No adapters" on the "Physical Adapters" side!
- Enter a network name. For example VPN Network - PIA
- Import the OVF Image
- Extract the file you downloaded. You should now have a folder with tree files
- "File" => "Deploy OVF Template..."
- Browse to the extracted files and select "PIA-Tunnel.ovf" => "Next" => "Next"
- Give the VM a name and select a datastore to keep the machine on => "Next"
- Use "Thin Provision" since the VM will not change much
- Select your external Network on the "Network Mapping" screen
- Do not auto power the machine once deployment is complete
- Configure the VM
- Select the VM => "Edit Settings"
- Make sure that "Network adapter 1" is connected to the network with Internet access and that "Network adapter 2" is connected to the private LAN segment you created in step 1 above.
- RAM should be set to at least 256MB RAM. You may set it to as little as 92MB if you don't intend to run the SOCKS proxy server.
WARNING: Do not connect both interfaces to the same network. It will create
routing conflicts and the VPN will fail to connect.
Remove the second network card if you don't intend use network isolation. You may always add
the interface later.
Virtual Box
- Use the menu option "File" => "Import Appliance" to import the OVF Template
-
Select the option "Reinitialize the MAC address of all network cards"
- Once imported, select the VM and click on settings
- Under "General", rename the VM to PIA-Tunnel
- Under "Storage", add an optical drive (leave empty)
- Under Network, set Adapter 1 to "Bridged Adapter" and select the correct interface for "Name"
- Under Network, set Adapter 2 to "Host-only Adapter" and select a private network for "Name". This network will be used by your client VMs to
access the VPN.
- Start the VM and complete the Setup Wizard.
- The VM has the open-vm-tools pre installed but does not come with the Virtual Box support software. Here is how to install the required software
Note: The package in the Debian repository did not work for me but the following steps did.
- Login as root and run the following commands
rm /etc/rc[0-6].d/S01open-vm*
apt-get autoremove open-vm-tools
apt-get update
apt-get upgrade
apt-get install linux-headers-$(uname -r) build-essential libfltk1.3 libfltk-images1.3
- Reboot the VM
reboot
- Connect the Guest Additions CD Image using the Virtual Box "Devices" Menu. Mount the CD image with the following command
mount /media/cdrom
- Now compile the tools with the following command
sh /media/cdrom/VBoxLinuxAdditions.run
- You should see the following output towards the end. Ignore the message that X.Org could not be found
Starting the VirtualBox Guest Additions .... done.
Installing the Windows System drivers
Could not find the X.Org or XFree86 Window System, skipping.
- It's probably a good idea to reboot one final time.
reboot
Power on / starting PIA Tunnel VM
Back To Top
WARNING: Do not connect both interfaces to the same network. It will create
routing conflicts and the VPN will fail to connect.
Remove the second network card if you don't intend use network isolation. You may always add
the interface later.
- Verify that the machine has one CPU and at least 256MB of RAM.
- Start the VM and wait until you see Public LAN IP
- Open the Public LAN IP in your web browser
- The PIA-Tunnel Management Interface should open and prompt you to reset your system.
This step is NOT OPTIONAL so click on Prepare the System and Reboot to continue.
- Wait until you see pia-tunnel login: again, then refresh the page.
- The PIA-Tunnel Setup Wizard will now open.
Setup Wizard
Back To Top
The PIA-Tunnel Setup Wizard will be executed every time the VM is reset. It ensures that the basic configuration options are set properly.
- Web-UI Username and Web-UI Password
Access to the Web-UI will be restricted to this user.
- VPN Username and VPN Password
Please enter your PIA username and password into these fields
- VPN Gateway for public LAN
Set this option to yes if you want to share the VPN connection with other computers on your network.
- VPN Gateway for VM LAN
Set this option to yes if you want to share the VPN connection with a private VM LAN segment
- root password
- This option will change the default root password from pia to something sane. You may enter your own password or accept the randomly generated one.
NOTE: The web GUI is supposed to replace any command line interaction so I recommend that you accept the generated password. You may reset the root password later via the Tools menu.
PIA-Tunnel WebUI - Management Interface
Back To Top
The WebUI should work with any basic HTML5 browser, even with javascript disabled. Enabling javascript will activate the advanced UI which will reconfigure some UI elements, enable automatic Network Status updates and make the Settings page easier to use.
Settings - General Settings
Back To Top
These are the important settings for PIA-Tunnel. Please take a moment to understand what they do.
-
VPN Gateway for VM LAN: <yes/no;> (default: yes)
Setting this option to yes will share the VPN connection with any computer on your private VM LAN Segment. The LAN segment is called VPN Bridge in the setup portion of this guide.
-
VPN Gateway for public LAN: <yes/no> (default: yes)
Setting this option to yes will share the VPN connection with any computer on your public LAN Segment. This is your home network, so any computer that may use your current Internet connection will be able to use PIA-Tunnel to access the VPN.
-
Allow web-UI access on: <eth0> <eth1> (default: both checked)
This option will open port 80 on the selected interfaces. This is needs to be enabled if you want to use the web-UI to mange PIA-Tunnel and if you want to use Torrent Monitor client.
Warning: Unchecking both options will prevent you from accessing the web-UI. You may regain access by adding FIREWALL_IF_WEB[0]=eth0 back into /usr/local/pia/settings.conf
-
Allow ssh connections on: <eth0> <eth1> (default: both NOT checked)
Same as Allow web-UI access but for port 22, remote SSH access. Dont enable this if you dont know what SSH is or if you dont indent to use it.
-
Web-UI Username and Web-UI Password
This option specifies the username and password for the Web-UI. Note: You may reset the password by setting the following options to nothing in /usr/local/pia/settings.conf
WEB_UI_USER=
WEB_UI_PASSWORD=
-
Remember Me for: <some integer> (default: 120) days
No login required for this many days. Set to 0 (zero) to disable this feature.
Settings - PIA Daemon Settings
Back To Top
PIA Daemon is a script that may be used to keep your network connected to the VPN.
It will test the VPN connection every few minutes, stop all VPN forwarding on error and attempt to reconnect when the connection is down.
-
Start after OS boot: <yes/no> (default: yes)
PIA-Tunnel VM will attempt to establish a VPN after the operating system has finished booting. Once this option is enabled, you only need to turn on the virtual machine and the VPN connection will be established a few minutes later.
-
Failvoer 0 n
These are the locations pia-daemon will use to initiate a VPN connection. Connections are used in sequence so pia-daemon will always create the initial connection with Failover 0, try Failover 1 if the connection fails and so on.
Setting Failover n to an empty value will remove the Failover setting entirely.
Warning: Locations marked with a * support port forwarding. Keep in mind that the open network port is assigned to you by your VPN provider and will change when you connect to a different location! I provide a monitoring script to detect these port changes, reconfigure your torrent client and restart the application.
Please see Starting your Torrent client with monitor.vbs for details.
Settings - Advanced Settings
Back To Top
The advanced settings are below the General Settings. Click on Show Advanced Settings to display the options.
WARNING: You can really mess things up in here and may even compromise your security by changing the wrong option.
-
Enable Port Forwarding : <yes/no> (default: no)
This option enables port forwarding to a computer connected to PIA-Tunnel. Only set this to yes if you intend to run a server or torrent client. Please see Running a Server or Torrent Client for details
-
Forward IP: <some IP> (default: <IP_ADDRESS>)
This is the target IP of the open port. The option is only available when Enable Port Forwarding is set to yes.
- Public LAN interface: <eth0/eth1/tun0> (default: eth0)
Specifies which interface is connected to your public LAN.
WARNING: Dont change this!
- VM LAN interface: <eth0/eth1/tun0> (default: eth1)
Specifies which interface is connected to the private VM LAN segment.
WARNING: Dont change this!
- VPN interface: <eth0/eth1/tun0> (default: tun0)
Specifies which interface will be handling the VPN connection.
WARNING: Dont change this!
- eth0 use DHCP: <yes/no> (default: yes)
Allows you to configure a fixed IP for eth0 or use an existing DHCP server. This interface will be connected to your LAN where your cable/DSL router is providing DHCP service. Dont change this unless you need to set a static IP.
- eth0 IP/Subnet/Gateway (default: all empty)
These options are enabled when eth0 use DHCP is set to no.
- eth1 use DHCP: <yes/no> (default: no)
Allows you to configure a fixed IP for eth1 or use an existing DHCP server. This interface is connected to your private VM LAN segment without a DHCP server. PIA-Tunnel provides DHCP service for this segment so the IP must be fixed.
I recommend that you dont change this unless you know networking.
- eth1 IP/Subnet/Gateway (default: IP:<IP_ADDRESS> Subnet: <IP_ADDRESS> Gateway: empty)
These options are enabled when eth1 use DHCP is set to no.
- DNS 1-4
Specifies the DNS servers used by PIA-Tunnel VM. The VM ships with the following defaults:
<IP_ADDRESS> is a public DNS Server hosted by Google.com
<IP_ADDRESS> is a public DNS Server hosted by OpenDNS.com
<IP_ADDRESS> is a public DNS Server hosted by Google.com
<IP_ADDRESS> is a public DNS Server hosted by OpenDNS.com
- Max allowed packet loss: <0%-100%> (default: 20%)
Specifies how many ping packets may be lost, per check, before pia-daemon considers the VPN connect as down/bad. Pia-daemon will attempt to connect to Failover 1 through n when the ping failure rate is above this threshold.
- Verbose / Debug Verbose: <yes/no> (default: no)
Enables verbose or verbose debug mode on the command line. This option is not used by the web-UI.
Settings - DHCP Server Settings
Back To Top
This box gives you access to the configuration file of the DHCP Server running inside PIA-Tunnel.
The current UI supports up to two subnets.
Please contact support (from Tools page) if you require more subnet options.
- Subnet 1: <enabled/disabled> (default: enabled)
Adds the following settings to the configuration file if enabled or removes them when disabled.
- Subnet IP 1: <IP Address> (default: <IP_ADDRESS>)
IP address of the network
- Subnetmask 1: <IP Address> (default: <IP_ADDRESS>)
Subnetmask used by any DHCP clients on your network
- Broadcast IP 1: <IP Address> (default: <IP_ADDRESS>)
Broadcast IP used by any DHCP clients on your network
- Router/Gateway 1: <IP Address> (default: <IP_ADDRESS>)
Gateway IP used by any DHCP clients on your network
- IP Range 1: <IP_Address IP_Address>> (default: <IP_ADDRESS>
01 <IP_ADDRESS>)
Range of IPs used by the DHCP server.
Please note the format of <IP Address><SPACE><IP Address>
- Subnet 2: <enabled/disabled> (default: disabled)
You may setup a second IP Range using the Subnet 2 option.
Warning: Only use this if you know networking!
- Subnet IP/Subnetmask/Broadcast IP/Router/Gateway/IP Range
Same definition as Subnet 1 but the settings must not define the same range.
Warning: Only use this if you know networking!
- Fixed IP: <IP Address> (default: empty)
Specifies one fixed IP that will be assigned to a computer with a MAC address matching the MAX for IP setting. You should also enter this IP into Forward IP found in General Settings
- MAC for IP: <MAC Address> (default: empty)
Specifies which computer will receive the Fixed IP specified above.
Please note: The MAC Address must be separated by colons (:). Example: 00:0D:28:A7:3C:45
Settings - Firewall Settings
Back To Top
Here you may configure some firewall settings
-
VPN Gateway for VM LAN: <yes/no;> (default: yes)
Setting this option to yes will share the VPN connection with any computer on your private VM LAN Segment. The LAN segment is called VPN Bridge in the setup portion of this guide.
-
VPN Gateway for public LAN: <yes/no> (default: yes)
Setting this option to yes will share the VPN connection with any computer on your public LAN Segment. This is your home network, so any computer that may use your current Internet connection will be able to use PIA-Tunnel to access the VPN.
-
Allow web-UI access on: <eth0> <eth1> (default: both checked)
This option will open port 80 on the selected interfaces. This is needs to be enabled if you want to use the web-UI to mange PIA-Tunnel and if you want to use Torrent Monitor client.
Warning: Unchecking both options will prevent you from accessing the web-UI. You may regain access by adding FIREWALL_IF_WEB[0]=eth0 back into /usr/local/pia/settings.conf
-
Allow ssh connections on: <eth0> <eth1> (default: both NOT checked)
Same as Allow web-UI access but for port 22, remote SSH access. Dont enable this if you dont know what SSH is or if you dont indent to use it.
-
New Port on eth0/eth1
Open specific TCP ports in the firewall. One port entry per field
Configure Client Devices to use the VPN
Back To Top
WARNING: Do not connect both interfaces to the same network. It will create
routing conflicts and the VPN will fail to connect.
Remove the second network card if you don't intend use network isolation. You may always add
the interface later.
PIA-Tunnel may share your VPN connection as a SOCKS5 proxy server or as a default gateway for your nework.
-
Using the build in SOCKS5 proxy server is very easy to setup but every program needs to be configured individually. This options works great if you want to switch your webbrowser to use the VPN but does not support incoming port forwarding.
-
PIA-Tunnel as a default gateway for the rest of your network. The computer sharing the connection needs to have two ip addresses. One will be used to create the VPN connection and the other is used by your clients to access the VPN.
PIA-Tunnel is designed for this environment and supports all features when setup this way.
SOCKS5 Proxy Setup
Back To Top
SOCKS proxy support is only available when running PIA-Tunnel on FreeBSD
or Raspberry Pi. Debian 8 does not ship with Dante or 3Proxy at this time.
Using the SOCKS5 proxy is a great way to get around country blocks without major changes.
Simply change your browser settings and your are done.
This option may also be used on a device that is already setup
as a default gateway for your network.
- Goto "Settings" and set "Enable Port Forwarding" to "no"
- Goto "Settings" => "SOCKS5 Proxy Server" and set "Public LAN" to enable
- Disconnect or change your current VPN connection. The SOCKS5 server will be started once the VPN connection is established.
- All done. Use the "Public LAN IP" and the SOCKS5 port in your browser or other programs that support SOCKS5 servers.
Proxychecker is a free tool to check if everything is working properly.
Example of the required settings for FireFox. Don't forget to exclude the Public LAN IP or you will not be able to access the webUI while using the proxy ("No Proxy for" box).
Default Gateway Setup
Back To Top
PIA-Tunnel is primarily designed to act as a default gateway for one or
more client devices on your network.
Unlike the SOCKS5 proxy, which needs to be configured per program.
The default gateway is an operating system setting that is configured once.
It forces your programs to send all traffic through the default gateway, the VPN tunnel.
The basic configuration makes use of one network adapter to connect
to the VPN and share the connection with your network.
While a more advanced setup may utilize two network adapters to physically isolate
your network from the Internet side.
Basic - One Network Interface
Back To Top
WARNING: Do not connect both interfaces to the same network. It will create
routing conflicts and the VPN will fail to connect.
Remove the second network card if you don't intend use network isolation. You may always add
the interface later.
The basic setup will use one network card to connect to the VPN and share the connection
with your network.
-
Begin by configuring a static IP for your network interface. This will be the IP
your clients use as the default gateway setting.
- Settings => General Settings
- Set "VPN Gateway for public LAN" to "yes"
- Settings => Advanced Settings
-
Disable DHCP Server by setting "Subnet 1" and "Subnet 2" to disable
You may also use the build on DHCP Server if you disable the DHCP Server
running on your router. There must only be one DHCP Server on a basic network!
- Set "Enable Port Forwarding" to "no" for now. You may enable this later
-
Set "eth0 use DHCP" to "no" and fill out the IP, Subnet and Gateway field.
Here, gateway is the IP of your router/modem
-
Go back to the Overview page and click on the reboot button. Wait a bit and then
use the IP you just entered to reopen the webUI
-
Connect to your VPN and wait until the overview page says "VPN Gateway enabled"
-
Time to configure your client devices and add the "Public LAN" IP as a default gateway.
-
Verify that your clients are using the VPN by checking your Internet IP.
It should be the same as the Public VPN IP listed on the overview page.
Advanced - Two Network Interfaces
Back To Top
Advanced setup - or the "this is what PIA-Tunnel was designed for" setup.
The Guide is currently written with PIA-Tunnel running on a Raspberry Pi. Everything
here should be true for any Debian 7 setup running the PIA-Tunnel scripts.
This setup separates your network from the Internet by physically separating the two.
One network interface is connected to the Internet while the other connects to your LAN. There
are no other interconnects between the network so all traffic must flow through
the PIA-Tunnel gateway, the VPN connection.
This can either be achieved by using PIA-Tunnel as a virtual machine, with on card connected
to your LAN and another to a private VM LAN. Any virtual machines that are only connected to
this VM LAN will be completely isolated from any other network.
This section of the guide will focus on a typical home setup. Your computer connects
to the Internet via a router or modem.
WARNING WLAN connections offered by that router will
be connected to the public network! VPN access is possible but these connections are not isolated.
The image above is an example of a typical home setup with one or
more PCs hardwired to the router while laptops and tablets use the WLAN.
PIA-Tunnel running on a Raspberry Pi would create a second network behind the router.
One network connects to the first network card, the other to the second network card. Complete isolation.
You could turn WLAN off at your Internet router and replace the network switch inside
the isolated network with an access point/switch combo.
Many things are possible with networking ...
Let's get started....
First get the IP of your router
- First get the IP of your router
- Make sure your have two network adapters connected, then start the device
running PIA-Tunnel .... Virtual Machine, Raspberry Pi, ....
- Open the webUI make sure that the "Overview" page shows a "Public LAN IP" and a "VM LAN IP"
- Open Settings and click on Advanced towards the bottom of the page
-
The public LAN IP may be assigned by your router or be static. I recommend a static IP for all
devices that offer a service on your network.
- time for a brake.....
Setup transmission daemon (torrent client) on the VM
Back To Top
WARNING this feature is barely tested and could be quite dangerous to use!
The idea behind PIA-Tunnel was to separate the computer accessing the VPN from the rest of the network.
This is done to prevent traffic from leaking out when the VPN is not connected.
Installing transmission on the VM itself presents a problem when the VPN goes down and IF the firewall
rules are set back to the disconnected state. The firewall will allow traffic to exit on eth0 so the
torrent client may switch from tun0 to eth0 and traffic will now originate from your ISP, your IP!
I have implemented a few security checks but have not done much testing - keep this in mind when you use this feature!
The VPN stop scripts are currently checking for any running transmission-daemons and will not disconnect
the VPN until the process has ended. The VM will flush the firewall, deny ANY further traffic and reboot if the
torrent client fails to terminate. This should prevent any traffic from leaking ....
These safety checks have been added to pia-daemon and pia-stop.
Looks like the warning above did not scare you off. Please report any issues or improvement suggestions.
The VM is designed to be as small as possible so the idea is that you share some hard drive space
from a computer on your network and make it available as a Windows/SMB/CIFS share.
The VM will connect to that network drive and use it to store the downloaded files.
- Click on the "Install transmission-daemon" link found under Settings to start the installation process.
This will run a complete system update before installing transmission and the VM will reboot once completed.
You may also run the installation manually by executing "/usr/local/pia/include/transmission-install.sh"
Single PC with Default Gateway Setup
Back To Top
It is possible to use the PIA-Tunnel connection on the host PC by installing a loop back
network adapter and configuring your program to use it. This is not recommended but it
is possible.
- Install a loop back network adapter
- Configure the new adapter using the following settings.
IP: <IP_ADDRESS>, Subnet: <IP_ADDRESS>, Gateway: <IP_ADDRESS>
- Start the "VMware Virtual Network Editor" and elevate to Administrator (Change Settings Button)
- Click "Add Network", Accept suggested network by clicking OK.
- Select the new network in the overview box
- Select "Bridged" under "VMnet Information" and use the dropdown menu to select
the Microsoft Loopback Adapter
-
Open the VMware configuration for PIA-Tunnel and set the first network adapter to
bridged or NAT. Set the second network adapter to custom and choose the network created
with the Virtual Network Editor.
-
Start PIA-Tunnel and update the following Settings
- VPN Gateway for VM LAN: yes, VPN Gateway for public LAN: no
- eth1 IP: <IP_ADDRESS>, eth1 Subnet: <IP_ADDRESS>, eth1 Gateway: EMPTY
- DHCP Server: both disabled
- Enable Port Forwarding: yes, Forward to this IP: <IP_ADDRESS>
- Click on the "Store Settings" button and reboot the VM.
Note: Ignore the dhcp-server error message after you reboot the VM.
-
Goto "Tools" => "Ping Utility" and test the following.
- Outgoing interface: eth0, Name or IP: IP of Your Router
- Outgoing interface: eth1, Name or IP: <IP_ADDRESS>
Check the results for "8 packets transmitted, 8 received, 0% packet loss"
-
Finally configure your software to use the network interface. This needs to be supported by your software!
Final Words I would not consider using this setup because you rely on the application to send your
data to the correct interface. Any bug in the code and your data may end up getting send out
the wrong interface....
[from scratch] Debian 8 Setup
Back To Top
PIA-Tunnel has switched to ansible so getting a fresh system up an running is very easy.
Start by installing Debian 8 onto your VM or device.
- Recommended HW: 1-2 CPUs, 512MB RAM (1024MB for SOCKS proxy)
- Install Debian 8 using a 3GB hard drive setup as lvm
- Software selection:
- SSH Server
- standard system utilities
- Finish the installation and login to your system. Copy and paste the commands below.
- Edit /etc/ssh/sshd_config and change "PermitRootLogin without-password" to "PermitRootLogin yes"
- Restart sshd with "systemctl restart sshd"
- try to login as root "ssh<EMAIL_ADDRESS>- Copy and paste the following in one line
f='prepare_debian.sh' ; wget --no-check-certificate -O /tmp/$f https://raw.githubusercontent.com/KaiserSoft/PIA-Tunnel/release-v2/setup/$f && chmod 0777 /tmp/$f && /tmp/$f
- Optional: run "/usr/local/pia/reset-pia" if you want to clone the VM
- reboot the system, then open the IP with your web browser. Follow the webUI from here
[from scratch] Raspberry Pi setup
Back To Top
You may use an inexpensive Rasperry Pi to setup a permanent VPN router on your network.
The Pi is relatively inexpensive and does not use much power so it is a great candidate when you don't
run a local server.
This section of the guide explains how to set up the RasbPi using only one network card.
It is also possible to set it up with two network cards which completely isolates your
LAN from the non-VPN tunneled Internet.
WARNING: Do not connect both interfaces to the same network. It will create
routing conflicts and the VPN will fail to connect.
Remove the second network card if you don't intend use network isolation. You may always add
the interface later.
2015-03-17 - Current test results with a Raspberry Pi 1 B+
* works well when setup as a default gateway.
tested with 1,1MB/s transfer speed through VPN tunnel
* SOCKS5 adds a lot of CPU load on top of handling the encrypted VPN tunnel.
works good with small loads such as browsing and watch a HQ Twitch stream or two.
Custom openVPN connection files
Back To Top
Use the ovpn.d directory to store your own openVPN connection files. Any files or directories inside
the ovpn.d directory will not be removed during an update.
-
Create a new directory inside the ovpn.d directory. If the same directory already exists in the "ovpn"
directory then only the one inside the "ovpn.d" directory is loaded.
The name of the .ovpn file will be used as the VPN connection name.
-
Specify a file where the webUI can store your authentication data. The file must be
located in '/usr/local/pia/' and called 'login-SOMESTRING.conf'.
Example:
auth-user-pass /usr/local/pia/login-pia.conf
-
Also specify the location of the .crt and .pem file if it is not included within your .ovpn file.
Example:
ca /usr/local/pia/ovpn/PIAtcp/ca.crt
crl-verify /usr/local/pia/ovpn/PIAtcp/crl.pem
-
Open the webUI and enable the new VPN connection in "Settings"
-
Goto "VPN Accounts" from the main menu and enter your username and password.
-
The VPN connection should now be listed on the Overview page
Add custom script to retrieve open ports
Back To Top
Some VPN providers support port forwarding. Some will assign you a permanent port
while others will assign you a new port number when you connect.
Create a new file called "port_forward.txt" inside the directory holding your openVPN connection file(s).
The first line must be the name of the script used to retrieve the port number. The next lines list the connections which
support port forwarding. The name of the connection must be the same as the .ovpn file but without the file extension.
Example:
The ovpn.d directory contains Foo.ovpn and Bar.ovpn
The file "port_forward.txt" should be made up like this.
MyCustomScript.php
Foo
Bar
Now place your "MyCustomScript.php" file into the "get_port" directory and reboot the system. Your custom script will be copied
into the web directory on startup.
Please note that your custom port check function must be called "get_port()" and must return the port number as an integer
or boolean FALSE on failure.
Please see "htodcs\get_port\PIA.php" for details.
Switching development branch
Back To Top
This section describes how to switch the git branched used by PIA-Tunnel.
There is no good reason to switch the branch unless you are testing new
features or intend to help with development.
You have been warned!
- Goto Settings => Advanced and scroll down to "Development branch"
- Edit the dropdown menu with your browser's DOM inspector
- Change the value of the dropdown from "release-v2" to the name of the new banch and confirm with "Store Settings"
- You will see a confirmation message similar to "git branch switched to XXXXX"
- Congratulations, you propably just broke your PIA-Tunnel installation. Enjoy.
Connection issues with new VMs
Back To Top
Firewalls will sometimes interfere with outgoing communication until the outgoing traffic
is allowed to pass through. This tends to screw up the initial reset and setup procedure.
Below are a few things that should fix the condition. Try one and check if the problem persists.
-
Generate a new MAC address for both network interfaces. The option can be found in your VMware or Virtual Box configuration manager.
-
Delete the VM and redeploy with the primary network adapter set to "NAT". Some firewalls
can not handle bridged VM traffic, OnlineArmor is one of them.
-
Login to the command line and run pia-setup and pia-update manually.
The root password is "pia" before you run the setup wizard or some random string afterwards.
Please use "Settings" => "Linux root Password" to change it.
Now run the following commands and check the output for any error messages


Library: Foundation
Package: Core
Header: Poco/StringTokenizer.h
Description
A simple tokenizer that splits a string into tokens, which are separated by separator characters. An iterator is used to iterate over all tokens.
Member Summary
Member Functions: begin, count, end, find, has, operator [], replace
Types
Iterator
typedef TokenVec::const_iterator Iterator;
TokenVec
typedef std::vector < std::string > TokenVec;
Enumerations
Options
TOK_IGNORE_EMPTY = 1
ignore empty tokens
TOK_TRIM = 2
remove leading and trailing whitespace from tokens
Constructors
StringTokenizer
StringTokenizer(
const std::string & str,
const std::string & separators,
int options = 0
);
Splits the given string into tokens. The tokens are expected to be separated by one of the separator characters given in separators. Additionally, options can be specified:
- TOK_IGNORE_EMPTY: empty tokens are ignored
- TOK_TRIM: trailing and leading whitespace is removed from tokens.
Destructor
~StringTokenizer
~StringTokenizer();
Destroys the tokenizer.
Member Functions
begin
Iterator begin() const;
count
std::size_t count() const;
Returns the total number of tokens.
count
std::size_t count(
const std::string & token
) const;
Returns the number of tokens equal to the specified token.
end
Iterator end() const;
find
std::string::size_type find(
const std::string & token,
std::string::size_type pos = 0
) const;
Returns the index of the first occurence of the token starting at position pos. Throws a NotFoundException if the token is not found.
has
bool has(
const std::string & token
) const;
Returns true if token exists, false otherwise.
operator []
const std::string & operator[] (
std::size_t index
) const;
Returns const reference the index'th token. Throws a RangeException if the index is out of range.
operator []
std::string & operator[] (
std::size_t index
);
Returns reference to the index'th token. Throws a RangeException if the index is out of range.
replace
std::size_t replace(
const std::string & oldToken,
const std::string & newToken,
std::string::size_type pos = 0
);
Starting at position pos, replaces all subsequent tokens having value equal to oldToken with newToken. Returns the number of modified tokens.


Art Peace
Tuesday, December 1st, 2020 6:30PM-8:30PM
About Art Peace
Workshop Programming
Our first workshop, on Tuesday, December 1st, 2020, will be held over Zoom. This event is free, but registration is required. You will receive a confirmation email with the Zoom link upon completing your registration, and expect to receive follow up email(s) regarding planned programming and supply lists. Supply lists will be provided at least 48 hours before the event and will be updated as needed.
Artfirmations: Positive Affirmations through Digital Collage
Hosted by Emmy
This event will focus on creative affirmations through digital art/collage. Although the content will be digital art focused, the same effect can be acheived with magazine/book/comic clippings, a spare notebook, and writing utensils.
Click To See Supply List!
For Digital Collage:
- Adobe Photoshop (Free for UIC Students) or equivalent software.
- Free suggestions include GIMP, Krita, and Canva.
- Your favorite selfies & photos of yourself
- Pictures that inspire you!
For Traditional Collage:
- Magazine & Book Clippings
- Your favorite selfies & photos of yourself (printed)
- Markers and/or Writing Utensils
- Scissors
- Glue and/or Tape
Creative Writing Through Musical Expression
Hosted by Lilly
This event will focus on creative writing and expressing yourself through music. Host Lilly Sato will share her techniques for healing through musical expression, as well as open up the floor for others to do the same. More details to come soon.
Click To See Supply List!
Coming soon!Coloring Pages
Hosted by Ashley
Host Ashley Chiu will be facilitating a safe space to explore coloring pages. More details to come soon.
Click To See Supply List!
Coming soon!Comfort Drawing
Hosted by Nathaly
This event will focus on drawing things that are comforting and relaxing. Host Nathaly Ruiz will be sharing her techniques and methods for relaxing drawing. More details to come soon.


FixIt Yourself!
Please enter all of the fields
Name:
X coord:
Y coord:
Description:
Address:
Expected cost:
Add Fix!


This project was one of the very first we worked on in class. I made it using HTML and CSS.
This is a page about my awesome dog, Chief. I made it using HTML and CSS.
This is a web page about a resort I would like to go to. I made it using HTML and CSS.
This is a web page for a cupcake company. I made it using HTML and CSS.
This is a web page on the most boring topic I could think of: paperclips. I made it using HTML and CSS.
This webpage is about the band Journey and their upcoming shows. I made it using HTML and CSS.
This webpage is a blog about knitting, including a few knitting projects. I made it using HTML and CSS.
This is a web page I made for an interior decorating company, showing before and after pictures of my supposed decorating skills as well as descriptions of the room before and after. I made it using HTML and CSS.
This is a web page I made for adoptable animals. It includes their pictures, names, ages, and a little bit of information about each animal. The animals are super cute. I made it using HTML and CSS.
This is a web page documenting the projects we had worked on so far. I made it using HTML and CSS.
This is a web page I made about different trip options to travel to Scotland. It includes different levels of luxury depending on your budget and preferences. Who wouldn't want to ride the Lock Ness Monster? I made it using HTML and CSS.
This project was an attempt to copy the wikipedia homepage. I struggled with this one a bit, but finally pushed through the problems and started to make headway, though it is still unfinished. I made it using HTML, CSS and Bootstrap.
My name is Katy Daviscourt and I grew up right here in Seattle, Washington. It's a beautiful place that I am happy to call home again after living for four years in California. I have been working as an American Sign Language (ASL) interpreter for the last several years, and while I will be sad to leave that community, I look forward to the opportunities ahead of me. I hope in the future to find a way to tie my knowledge of the Deaf community into my work as a developer. Some of my past achievements are:
To help you get a better sense of who I am on a more personal level, here are some of my favorite things:


In On Western Terrorism Noam Chomsky, world renowned dissident intellectual, discusses Western power and propaganda with filmmaker and investigative journalist Andre Vitchek. The discussion weaves together a historical narrative with the two men's personal experiences which led them to a life of activism.
Buy Nown this new collection of conversations, conducted from 2010 to 2012, Noam Chomsky explores the most immediate and urgent concerns: the future of democracy in the Arab world, the implications of the Fukushima nuclear disaster, the European financial crisis, the breakdown of American mainstream political institutions, and the rise of the Occupy movement.
Buy NowIn this updated and expanded edition of Occupy, Chomsky speaks to and with supporters of the Occupy movement about the structural injustices of the current economic and political system and the prospects for real change.
Buy NowIn dialogue with James McGilvray, Professor of Philosophy at McGill University, Chomsky takes up a wide variety of topics: the nature of language, the philosophies of language and mind, morality and universality, science and common sense, and the evolution of language. McGilvray's extensive commentary helps make this incisive set of interviews accessible to a variety of readers.
Buy NowThis expanded and updated edition is timely as the West weighs intervention in Libyan civil war. Discussions of Libyan intervention involved the international principle of the right to protect. Chomsky dissects the meaning and uses of this international instrument in a new chapter.
Buy NowBorn in Philadelphia on December 7, 1928, Noam Chomsky was an intellectual prodigy who went on to earn a PhD in linguistics at the University of Pennsylvania.
Read More25 Year
Anniversary
Edition


Toggle navigation
PDF Exploit Toolkit
Home
Report
Contacts
About
More Actions
Help
Manual
Close
Please upload the Android APK here:
Submit APK Files only.
Submit
Clear File
Stop


{% extends 'layout_simple.html' %} {% load hipeac %} {% load static %} {% block content %}
Registration ID: {{ registration.id }} ({{ user.username }})
Your registration is fully paid.
{% if registration.paid > 0 %} {% endif %} {% else %}You still have to pay {{ registration.remaining_fee|euro }} for your "{{ registration.event }}" registration.
{% if registration.paid > 0 %}You have already paid {{ registration.paid | euro }}.
{% endif %} {% if registration.coupon %}You've used a coupon:
{{ registration.coupon.code }} {{ registration.coupon.value | euro }}
If you received a coupon, please apply the coupon code to update your balance before proceeding to pay.
{% endif %}Pay {{ registration.remaining_fee | euro }} using our secure server. Once the payment is made you will be able to download a receipt —no invoice—:
{% endif %}


|
Scintilla Development
|
|
|
WTL Scintilla Control Wrappers
<download release 1> Last Updated: 10/12/2002 - This is the WTL implementation of the plain C++ wrapper classes below. All in one file (atlscintilla.h) the file provides CScintilla and CScintillaWindowImpl. The zip file that you download also contains a sample project where we simply include atlscintilla.h , and the change the base class that the view inherits from to CScintillaWindowImpl. Drop the SciLexer.dll file in the build directory et voila! - a Scintilla view. These classes implement all the scintilla methods as do the wrappers below, although these methods can be removed from the compile if you wish by setting a #define in atlscintilla.h. Please be gentle, this is a first release and there are some things that I'm not yet happy with. For example, there are still some virtual functions in the CScintillaIF class and that's not really in line with standard WTL window classes which use the "T* pT" method instead. There may also be bugs, I've not tested this code much. Oh, and yes this is completely free source, just leave my name at the top! C++ Scintilla Control Wrapper <download release 4> Last Updated: 10/12/2002 - I began a project using Scintilla in C++, and quickly got very bored of typing in all of the SendMessage commands. Having created a control for Scintilla in Delphi (see below), I wondered why not do a similar thing for C++. Ok, it doesn't sub-class the window or anything clever like that yet (MFC and WTL windows coming soon), so message processing is still a bit manual, but I find this class allows me to drop Scintilla into a project in no time at all. CScintilla implements all methods from scintilla.iface, which are created using a conversion of the python generator provided with Scintilla. It provides the code from SciTE which deals with file loading and saving - which works quite well. The code also provides brace highlighting and folding support - code all pretty much copied from SciTE. Very little plumbing is required to get this thing going - see IsScintillaNotify and HandleNotify member functions. Anyway, for now, give it a go! There aren't any instructions, but start out by looking at index.html in the html directory, which contains a class reference for CScintilla (a bit out of date). The class should work well in both static build and dll load environments - see the STATIC_SCILEXER define. Oh, and yes this is completely free source, just leave my name at the top! Borland Delphi control wrapper for Scintilla: <download version 1.4> Last Updated: 10/03/2004 - Scintilla is a fairly standard windowed control and this wrapper is fairly simple, a lot of it is generated using the included python files. Another update from Kiriakos, the wrapper is now up to date with Scintilla 1.56, provides for key command customization at design and run time, adds built in styling support for python, ruby, XML and HTML, and also includes a help file. The release also fixes some bugs reported by users. 30/03/2003: This release adds even more work by Kiriakos Vlahos. Kiriakos added lots of code to make scintilla more delphi-friendly and much easier to use for new users. Finally, note that the SetFocus method of Scintilla is SetFocusEx for the wrapper because SetFocus is a useful method of TWinControl from which TScintilla derives. 09/03/2003: Uploaded much improved code thanks to Kiriakos Vlahos. Control now works in design time, with a number of properties surfaced as delphi properties. The download also includes a demonstration project. 13/12/2001: added a fix recommended by Gertjan Schuurmans and Jeff Cogswell which fixes the flickering and incorrect background repainting. Also added a Delphi port of the Accessor class. note:: you cannot configure the control until it's window has been created - you will cause a crash otherwise. Oh, and yes this is completely free source, just leave my name at the top! Wrapper Updating Code <download wrapper updater> Last Updated: 10/12/2002 - The above scintilla wrappers contain a large number of generated methods. These are generated from a file distributed with scintilla called scintilla.iface - which is created exactly for this purpose. This zip file contains the python code which updates the wrappers to include the latest methods and values from scintilla. You will need python to run this! External pascal lexer, written in pascal. <download> External lexer support was recently integrated into Scintilla, and to show that the creation of lexers is now supported in multiple languages, this file contains pascal source for a pascal lexer. It has only been compiled in Delphi 5 to test so far, but it should work in other versions. Modifications to enable Static Building of Scintilla <download modifications> Revised: 10/01/2002 - For Visual C++, this modification adds a project which builds Scintilla into a static library (.lib file) for win32. By default SCI_LEXER is enabled, and the libs build into scilexer.lib and scilexerd.lib in the lib directory. I also changed the vcbuild project to build into the bin directory. My Scintilla modifications: External lexer modifications <now integrated> I modified scintilla to allow the use of external lexers (lexers in DLLs). The most recent changes involved changing the interface so that external lexers must be specifically loaded by the user rather than being discovered on loading. Hotspot modifications <now integrated> I added support to Scintilla for hotspots, including:
|


Company profile - Canadian Company Capabilities
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Aatel Communications Inc.
Mailing Address:
413 Victoria Ave NHAMILTON, Ontario
L8L 8G4
Location Address:
413 Victoria Ave NHAMILTON, Ontario
L8L 8G4
Tel.:<PHONE_NUMBER>
Tel.:<PHONE_NUMBER>
Fax:<PHONE_NUMBER>
Logo
Company Profile
At Aatel Communications Inc., we leverage our over 30 years of experience as systems integrator to provide our clients with customized sales, design, programming, installation and servicing options. We offer a broad spectrum of products and services in the areas of Communications Systems, Life Safety, Security, and Audio Visual Solutions. Aatel is a division of the ISI Group of Companies, which has been in the communications business since 1947.
Full profile
Full profile
Contact information
Company description
517111 - Wired Telecommunications Carriers (except Cable)
561621 - Security Systems Services (except Locksmiths)
Product / Service / Licensing
Market profile
Alliances:
- Sales/Marketing
Industry sector market interests:
- Construction
- Information Technology and Telecommunications
- Medical/Biotechnology/Chemical
- Defence
- Electrical Equipment
Sector information
Classification codes
Total plant size:
Sales & Marketing: 11
Operations: 15
Customer Care: 15
ICT-Engeering: 4
Executive: 4
Key / Major clients:
Mount Sinai Hospital, Toronto General, Toronto Rehab, North York General, Sunnybrook Health, Southlake Regional, Trillium Health, Salvation Army, US Steel, University of Windsor, Toronto Community Housing, Granite Club, Holy Cross, St. Mark's Church, City of Brampton, Sheridan Villa, Dufferin Oaks, Marineland, City of Hamilton, Hamilton Public Health, Wiens Canada, Humberview Group, Credit Valley, Centre for Addiction & Mental Health, Lakeridge Health, Peterborough Regional, Mackenzie Health, Rouge Valley, St. Joseph's Health Centre - West 5th, Hilfield StrathalenSuccess stories:
Bob Gale Complex; Aatel installed the audio and video systems throughout the entire facility including several meeting rooms. Digital Signal Processing was utilized to ensure an even dispersion of sound to ensure every spectator has quality sound to not miss out on any of the action. Aatel installed digital signal processing, wireless microphone systems, video projects, motorized screens, sound re-enforcement in meeting rooms and a full building paging system.Aatel installed a state of the art audio, video and control system in their boardroom. The room functions as a high tech meeting space and will also be used as the control center for the broadcasting of procedures and presentations worldwide. The boardroom is networked with systems from another building at the hospital allowing for remote control of different aspects of the system for their broadcast. Creston’s industry leading technology was utilized in this installation.
Aatel designed and installed a new audio system and upgraded the video technology system in the Township of Uxbridge Council Chambers located in the Town Hall at 51 Toronto Street. The system provides all meeting participants to be able to view and hear presentations at each point in the Chambers from a variety of sources which includes desk top displays and overhead display projectors. The following systems were integrated into the Council Chambers
Aatel Communications has serviced, installed, and commissioned many facilities within the City of Brampton such as Brampton Civic Centre, Dixie Sandalwood Recreation Complex, City Hall, William Yard Gate Control Centre, Century Gardens, and Sandalwood Transit Garage Facility. We have been doing business with City of Brampton since 2007.
Testimonial:
Just a note to say that we are very pleased with Aatel Nurse Call System and the service provided by personnel. Having a comprehensive contract for service has provided us with many years of worry free maintenance. The many options provide to meet the needs of our residents such as extensions and soft call pads has provided benefits in care planning for those with specialized needs.- Donna Dellio, CEO of Belvedere Heights
We would just like to thank you for the amazing job Joe Porpiglia and Art Otsu did on our phone installation. We were all very nervous because without phones we couldn't function but everything went so smooth. Both Joe and Art were very patient with us and nothing was a 'stupid' question to them. We have been customers of Aatel since 1977 and have referred other people to your company. After an experience like this we will continue to refer as many people as we can.
Thank you all so very much
Best regards
-Jerry Berman and staff, Berman, Lofchick & Lum, LPP
Aatel Communications recently installed a new Audio Video and Control system in the McMillan Gallery. Aatel was engaged from the planning stages to completion. The project was completed on time and within budget. Review from the pulic and other professionals in the field have been very positive since the opening of the gallery.
I found the entire team involved with the isntallation to be very accommodating and would not hesitate to recommend them for future projects.
Sincerely,
-Gary Bridgens, Deputy Director of Art Gallery of Ontario
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Contacts
Contact information
Description
Company description
517111 - Wired Telecommunications Carriers (except Cable)
561621 - Security Systems Services (except Locksmiths)
Products, services and licensing
Product / Service / Licensing
Market
Market profile
Alliances:
- Sales/Marketing
Industry sector market interests:
- Construction
- Information Technology and Telecommunications
- Medical/Biotechnology/Chemical
- Defence
- Electrical Equipment
Sector
Sector information
Classification codes
Total plant size:
Sales & Marketing: 11
Operations: 15
Customer Care: 15
ICT-Engeering: 4
Executive: 4
Key / Major clients:
Mount Sinai Hospital, Toronto General, Toronto Rehab, North York General, Sunnybrook Health, Southlake Regional, Trillium Health, Salvation Army, US Steel, University of Windsor, Toronto Community Housing, Granite Club, Holy Cross, St. Mark's Church, City of Brampton, Sheridan Villa, Dufferin Oaks, Marineland, City of Hamilton, Hamilton Public Health, Wiens Canada, Humberview Group, Credit Valley, Centre for Addiction & Mental Health, Lakeridge Health, Peterborough Regional, Mackenzie Health, Rouge Valley, St. Joseph's Health Centre - West 5th, Hilfield StrathalenSuccess stories:
Bob Gale Complex; Aatel installed the audio and video systems throughout the entire facility including several meeting rooms. Digital Signal Processing was utilized to ensure an even dispersion of sound to ensure every spectator has quality sound to not miss out on any of the action. Aatel installed digital signal processing, wireless microphone systems, video projects, motorized screens, sound re-enforcement in meeting rooms and a full building paging system.Aatel installed a state of the art audio, video and control system in their boardroom. The room functions as a high tech meeting space and will also be used as the control center for the broadcasting of procedures and presentations worldwide. The boardroom is networked with systems from another building at the hospital allowing for remote control of different aspects of the system for their broadcast. Creston’s industry leading technology was utilized in this installation.
Aatel designed and installed a new audio system and upgraded the video technology system in the Township of Uxbridge Council Chambers located in the Town Hall at 51 Toronto Street. The system provides all meeting participants to be able to view and hear presentations at each point in the Chambers from a variety of sources which includes desk top displays and overhead display projectors. The following systems were integrated into the Council Chambers
Aatel Communications has serviced, installed, and commissioned many facilities within the City of Brampton such as Brampton Civic Centre, Dixie Sandalwood Recreation Complex, City Hall, William Yard Gate Control Centre, Century Gardens, and Sandalwood Transit Garage Facility. We have been doing business with City of Brampton since 2007.
Testimonial:
Just a note to say that we are very pleased with Aatel Nurse Call System and the service provided by personnel. Having a comprehensive contract for service has provided us with many years of worry free maintenance. The many options provide to meet the needs of our residents such as extensions and soft call pads has provided benefits in care planning for those with specialized needs.- Donna Dellio, CEO of Belvedere Heights
We would just like to thank you for the amazing job Joe Porpiglia and Art Otsu did on our phone installation. We were all very nervous because without phones we couldn't function but everything went so smooth. Both Joe and Art were very patient with us and nothing was a 'stupid' question to them. We have been customers of Aatel since 1977 and have referred other people to your company. After an experience like this we will continue to refer as many people as we can.
Thank you all so very much
Best regards
-Jerry Berman and staff, Berman, Lofchick & Lum, LPP
Aatel Communications recently installed a new Audio Video and Control system in the McMillan Gallery. Aatel was engaged from the planning stages to completion. The project was completed on time and within budget. Review from the pulic and other professionals in the field have been very positive since the opening of the gallery.
I found the entire team involved with the isntallation to be very accommodating and would not hesitate to recommend them for future projects.
Sincerely,
-Gary Bridgens, Deputy Director of Art Gallery of Ontario


If your Apple device needs repair, laptop Care provide a wide range 0f mac laptop solutions we reapir and maintain
all Apple laptop like a iMac, MacBook Air, MacBook Pro, Mac Mini and Mac Pro. We deliver top quality repair services
for our valuable customers,our expert Apple technician fix any faulty apple device issues in a quick time.
Today almost everyone owns a laptop, and when our whole day revolves around it then keeping it protected from damages
is a big owe. Laptop care solution has resolved the problem of Microsoft Surface with Its reliable Surface Pro repair
service. Laptop care solution has the parts, tools, and experience to provides everything right from screen repair to
a battery replacement quickly and reliably.
Replace and Repair your broken laptop screen with our Nehru place, Delhi service center we are delivering the wide laptop
screens repair services in Delhi NCR. Laptop screen repairs for any LCD or LED laptop screen. All brands of laptop, notebooks,
ultra-books and Macbook, MacBook Pro, iMac, Dell Laptop screen, Hp laptop Screen, Lenovo Laptop Screen, Sony Laptop screen, etc.
Laptop care solution provided all types of laptop screen replacement service.
One of the very common issues of the laptops is an overheating problem, the main reason for this problem was a non-working
CPU fan or block the heating. Sometimes the malware this problem creates by the malware and virus, you can Check to see if the fan is
running. If it is, you should hear it and feel air being blown out of the exhaust vent(s). … then Still is another common cause of laptop
overheating is malware running on your system. Most of the time you disturb the problem because your laptop automatic shut down this is
very frustrated.
If You’re in a trouble to facing software related issue so don’t we face more trouble. Our team available to help you online as well as an
offline software related issue for your laptop We offer the best service for all type of Software Installation. The more severe software problems
are usually caused by a hardware failure. No start (with or without an error message), frequent crashes with different errors each time, frequent
freezes or Windows running extremely slow all indicate hard disk, memory (RAM), motherboard or overheating problems. software related issue is being
an effected of your laptop is getting very slow and Most of the time you disturb the problem because your laptop automatic shut down this is very
frustrated. but know you don’t need to worry about your laptop because now this time to Laptop Care solution is the one of the best service provider
Located in Delhi NCR. We are providing the onsite doorstep service in Delhi NCR we deliver all Brands laptops like HP, HCL, Dell, Toshiba, Lenovo,
Sony, Compaq, Acer, IBM, Asus, Samsung and we are specialist of Apple Laptop software installation.


public static interface Span.Builder
Span.Builder
is used to construct Span
instances which define arbitrary scopes of
code that are sampled for distributed tracing as a single atomic unit.
This is a simple example where all the work is being done within a single scope and a single thread and the Context is automatically propagated:
class MyClass {
private static final Tracer tracer = Trace.getTracer();
void doWork {
// Create a Span as a child of the current Span.
Span span = tracer.spanBuilder("MyChildSpan").startSpan();
try (Scope ss = tracer.withSpan(span)) {
tracer.getCurrentSpan().addEvent("my event");
doSomeWork(); // Here the new span is in the current Context, so it can be used
// implicitly anywhere down the stack.
} finally {
span.end();
}
}
}
There might be cases where you do not perform all the work inside one static scope and the Context is automatically propagated:
class MyRpcServerInterceptorListener implements RpcServerInterceptor.Listener {
private static final Tracer tracer = Trace.getTracer();
private Span mySpan;
public MyRpcInterceptor() {}
public void onRequest(String rpcName, Metadata metadata) {
// Create a Span as a child of the remote Span.
mySpan = tracer.spanBuilderWithRemoteParent(
getTraceContextFromMetadata(metadata), rpcName).startSpan();
}
public void onExecuteHandler(ServerCallHandler serverCallHandler) {
try (Scope ws = tracer.withSpan(mySpan)) {
tracer.getCurrentSpan().addEvent("Start rpc execution.");
serverCallHandler.run(); // Here the new span is in the current Context, so it can be
// used implicitly anywhere down the stack.
}
}
// Called when the RPC is canceled and guaranteed onComplete will not be called.
public void onCancel() {
// IMPORTANT: DO NOT forget to ended the Span here as the work is done.
mySpan.setStatus(Status.CANCELLED);
mySpan.end();
}
// Called when the RPC is done and guaranteed onCancel will not be called.
public void onComplete(RpcStatus rpcStatus) {
// IMPORTANT: DO NOT forget to ended the Span here as the work is done.
mySpan.setStatus(rpcStatusToCanonicalTraceStatus(status);
mySpan.end();
}
}
This is a simple example where all the work is being done within a single scope and the Context is manually propagated:
class MyClass {
private static final Tracer tracer = Trace.getTracer();
void DoWork(Span parent) {
Span childSpan = tracer.spanBuilderWithExplicitParent("MyChildSpan", parent).startSpan();
childSpan.addEvent("my event");
try {
doSomeWork(childSpan); // Manually propagate the new span down the stack.
} finally {
// To make sure we end the span even in case of an exception.
childSpan.end(); // Manually end the span.
}
}
}
If your Java version is less than Java SE 7, see startSpan()
for usage
examples.
| Modifier and Type | Method | Description |
|---|---|---|
Span.Builder |
addLink(Link link) |
Adds a
Link to the newly created Span . |
Span.Builder |
addLinks(List<Link> links) |
|
Span.Builder |
setRecordEvents(boolean recordEvents) |
Sets the option to record events even if not sampled for the newly created
Span . |
Span.Builder |
setSampler(Sampler sampler) |
Sets the
Sampler to use. |
Span.Builder |
setSpanKind(Span.Kind spanKind) |
Sets the
Span.Kind for the newly created Span . |
Span |
startSpan() |
Starts a new
Span . |
<V> V |
startSpanAndCall(Callable<V> callable) |
Starts a new span and calls the given
Callable with the newly created Span as
the current Span , and ends the Span after the Callable is called. |
void |
startSpanAndRun(Runnable runnable) |
Starts a new span and runs the given
Runnable with the newly created Span as
the current Span , and ends the Span after the Runnable is run. |
Span.Builder setSampler(Sampler sampler)
Sampler
to use. If not set, the implementation will provide a default.
Observe this is used only as a hint for the underlying implementation, which will decide
whether to sample or not this Span
.
sampler
- the Sampler
to use when determining sampling for a Span
.Span.Builder addLink(Link link)
Link
to the newly created Span
.
Links are used to link Span
s in different traces. Used (for example) in batching
operations, where a single batch handler processes multiple requests from different traces.
link
- the Link
to be added.NullPointerException
- if link
is null
.Span.Builder addLinks(List<Link> links)
links
- the List
of Link
s to be added.NullPointerException
- if link
is null
.addLink(Link)
Span.Builder setRecordEvents(boolean recordEvents)
Span
. If
not called, the implementation will provide a default.recordEvents
- new value determining if this Span
should have events recorded.Span.Builder setSpanKind(Span.Kind spanKind)
Span.Kind
for the newly created Span
. If not called, the
implementation will provide a default value Span.Kind.INTERNAL
.spanKind
- the kind of the newly created Span
.Span startSpan()
Span
.
Users must manually call Span.end()
to end this Span
.
Does not install the newly created Span
to the current Context.
Example of usage:
class MyClass {
private static final Tracer tracer = Trace.getTracer();
void DoWork(Span parent) {
Span childSpan = tracer.spanBuilderWithExplicitParent("MyChildSpan", parent).startSpan();
childSpan.addEvent("my event");
try {
doSomeWork(childSpan); // Manually propagate the new span down the stack.
} finally {
// To make sure we end the span even in case of an exception.
childSpan.end(); // Manually end the span.
}
}
}
Span
.void startSpanAndRun(Runnable runnable)
Runnable
with the newly created Span
as
the current Span
, and ends the Span
after the Runnable
is run.
Any error will end up as a Status.UNKNOWN
.
tracer.spanBuilder("MyRunnableSpan").startSpanAndRun(myRunnable);
It is equivalent with the following code:
Span span = tracer.spanBuilder("MyRunnableSpan").startSpan();
Runnable newRunnable = tracer.withSpan(span, myRunnable);
try {
newRunnable.run();
} finally {
span.end();
}
runnable
- the Runnable
to run in the Span
.<V> V startSpanAndCall(Callable<V> callable) throws Exception
Callable
with the newly created Span
as
the current Span
, and ends the Span
after the Callable
is called.
Any error will end up as a Status.UNKNOWN
.
MyResult myResult = tracer.spanBuilder("MyCallableSpan").startSpanAndCall(myCallable);
It is equivalent with the following code:
Span span = tracer.spanBuilder("MyCallableSpan").startSpan();
Callable<MyResult> newCallable = tracer.withSpan(span, myCallable);
MyResult myResult = null;
try {
myResult = newCallable.call();
} finally {
span.end();
}
);
V
- the result type of method call.callable
- the Callable
to run in the Span
.Callable#call
.Exception
- if the Callable
throws an exception.


If you’ve been working with javascript long enough, you probably have faced a very common asynchronous programming challenge many times: Having to execute code after an asynchronous task finishes.
A common solution is to use callbacks, just passing one or more functions to the asynchronous task so it can call them when the result is available. Unfortunately as the problems get more complex, like having different callbacks for handling success/error results, nested async tasks (and callbacks), tracking progress, communication between callbacks themselves or all of them together things start to get ugly, code usually becomes much harder to maintain, errors are harder to handle, etc…
In fact this problem is so common in the javascript world that many implemented solutions exist and a lot those use promises or other similar concepts.
Promises are a simple solution found in many concurrent languages that provide an effective and efficient way for handling and compose concurrent tasks.
The idea is that instead of having the main task passing the callback to the async task so it can then call it, responsibilities are flipped: the async task creates and returns a promise (a proxy object) that allows the main task to bind one or many callbacks. These callbacks will be automatically executed when the result of the async task is available.
This approach has many advantages over good ol’ callbacks, I’ll try to elaborate on this here while introducing dojo promises implementation (v1.8). Note that most of what’s discussed here applies to other implementations, specially the ones that follow Promises/A CommonJS proposal.
Dojo Deferreds basics
In the dojo toolkit the dojo/Deferred module defines the Deferred class which along other modules in dojo/promises allow communication between async tasks using the promises concept. Many dojo modules rely on deferreds for their async communication, probably the best example is the dojo/request module it can be used by your own modules as well.
Code first, a simple example to demonstrate how you can create a Deferred object in a async process and return a promise to the consumer, who will be able to add a callback which will be executed when the promise is resolved (and the result becomes available).
A Deferred object can be in one of three states at any given time: in progress (or unfulfilled), resolved or rejected. It can only go from in progress to resolved or from in progress to rejected. This method allow us to make these status transitions:
- resolve(value, strict): This method will be called to inform
the deferred that the async task finished successfully, this will
fire all the success callbacks added to it’s promises through the
then() method.
- value usually holds a result from the async tasks which will be passed to the first callback as it param.
- strict is a boolean, when set to true makes the call raise an exception if the deferred is already fulfilled. Defaults to false.
- reject(value, strict): Will be called when the async process had some kind of error, all error callbacks functions will be called. value and strict params work like the ones described for resolve() above.
You can check the current status of a deferred (or it promises) by calling isResolved(), isRejected(), isFulfilled().
As can see in the example above runAsync() function returns the promise attribute of the Deferred object, this is a dojo/promises/Promise object that shares the then() method (and it’s context) with the deferred, so when adding new callbacks through the promise they will be available for the main deferred object to call.
As you can guess then() is how we add callbacks with the code we want to be run once the deferred is fulfilled.
- then(callback, errback, progback): Add callbacks to
- callback is a function that will be called when the deferred is resolved (finishes successfully).
- errback is an optional function that will be called when the deferred is rejected.
- progback is an optional function will be called when the deferred receives a progress update.
Chaining then() calls
then() returns a new Promise, so you can easily chain many then()g calls or pass the promise to other contexts which may add their own callbacks (and this detail is key for understanding the power of promises).
An important detail here is that the callback added first (whether is a sucess, error or progress callback) will get the result sent by the resolve()/reject()/progress() call as its first param, the return value of a callbacks is what the next callback in the then() chain will recieve as first param, allowing callbacks modify or extend it, as a simple uni-directional simple communication system between them.
Progress updates
A great feature of dojo’s deferreds/promises are progress callbacks, They allow the consumer code to get progress updates from the async process.
Deferred defines the progress() method, which will call all progback functions added using then():
- progress(value, strict)
- update is passed along to the progress callbacks added through then().
- strict works like resolve() and reject() methods strict param.
Take a look at this simple but cool example that make use of this feature:
Cancelling async processes
You can also cancel a deferred from the consumer side by calling the cancel() method on a Promise object. Note that cancelling behaviour has to be implemented on the deferred since it doesn’t always makes sense to support that.
As you can see in this example the cancel behaviour for the deferred is implemented passing a function to the Deferred constructor function, and later called after the cancel() call in the consumer side Promise object.
Composing promises
Dojo also provide two very useful modules for composing promises: dojo/promises/all and dojo/promises/first.
dojo/promises/all receives multiple promises and returns a new promise that will become fullfilled once all of the given promises are fullfilled.
As you can see in the example the promise created by all() recieves as first param an array of the results ordered in the same order we passed the original promises. Alternatively you could pass it an object using some keys to identify each value promise, the then() callback would also recieve an object with the results in corresponding key.
Similarly dojo/promises/first takes many promises and returns a new promise that will become resolved as soon as any of the orginal promises gets resolved.
Why promises are better?
Promises are an awesome solution for many reasons, for me the main ones are:
Simple APIs
Not having to pollute function signatures with callback params allows to have cleaner and intuitive APIs, just saying this method returns a promise is enough.
If you have used libraries like jQuery I bet you had to go back to the docs more than once to check async functions signatures, is the success callback is the first or second param? What key does the param object param expects? was it “complete”, “onComplete”, “success”?.
Modular
From the consumer perspective this approach makes things much flexible, you can create as many callbacks as you want and compose them as you see fit.
You can pass promises around your modules where each can add callbacks or query the current status of the promise in a modular way, without affecting the original deferred.
From the “async” side you don’t have to think about how to call the callback, it’s just a matter of create the promise and manage it’s states, what happens then is not it’s business.
Composable
As you saw above you can compose promises in useful ways and the resulting code is very clean and intuitive. then() chaining, all() and first() are great examples, and you can also easily define your own logic to get a new promise from other(s).
With callbacks solution defining several serial callbacks it’s a mess, I have seen those awfully nested functions too many times, of course you can arrange the code to avoid nesting things too much but the complexity to follow the code is the same: too high and the worst thing: each function is responsible to call the next. With promises you just would chain then() calls each function doesn’t know anything about the others.


Add the local module reference to the document head.
Add the CDN reference to the document head.
Just add the elements to your page and the element will automatically install itself.
Start with the <x-app> tag to create a multi-page app from a single file:
This guide will walk you through the core systems and their components.
You can skip ahead to the are you are most interested in.


freeCodeCamp Survey Form
Thank you for taking the time to help us improve the platform
Name
Email
Age
Which option best describes your current role?
First Option
Second Option
Third Option
Would you recommend freeCodeCamp to a friend?
Definitely
Maybe
Not sure
What would you like to see improved?
(Check all that apply)
Front-end Projects
Back-end Projects
Data Visualization
Any comments or suggestions?
Submit!


Overview
| None |
| WxRobot |
| WxRobot\Admin |
| WxRobot\Cmd |
| WxRobot\CoreFunctions |
| WxRobot\Exends |
| WxRobot\Install |
| WxRobot\Table |
| WxRobot\Uninstall |
| WxRobot\WxSDK |
| None |
| WxRobot |
| WxRobot\Admin |
| WxRobot\Cmd |
| WxRobot\CoreFunctions |
| WxRobot\Exends |
| WxRobot\Install |
| WxRobot\Table |
| WxRobot\Uninstall |
| WxRobot\WxSDK |


|
Video Compressing
A Python-based video compressing and decompressing codec.
|
Public Member Functions | |
| def | __init__ (self, filename, encoded=False, limitFrames=None) |
| Initialization function. More... | |
| def | read_video (self) |
| read_video function Reads YUV video information from file, storing all its data in our structures, calculating different components lengths and shapes More... | |
| def | read_encoded_video (self, limitFrames=None) |
| read_encoded_video function More... | |
| def | handleHeader (self) |
| handleHeader function Interpreting the header of the file, containing width, height, frames per second and color space, assigning them to class variables This header can also contain other parameters added while encoding, such as the parameter for Golomb,the quantization steps used for lossy coding, the block size and search area for inter-frame methods More... | |
| def | adjustCoord (self, line, column) |
| adjustCoord function More... | |
| def | computeShape (self) |
| computeShape function Calculating array shapes for YUV components based on the color space More... | |
| def | getYUVPixel (self, frame, line, column, resized) |
| getYUVPixel function More... | |
| def | updateYUVPixel (self, compNumb, frame, line, column, value) |
| updateYUVPixel function More... | |
| def | predict (self, a, c, b) |
| predict function More... | |
| def | diff (self, p, x) |
| diff function More... | |
| def | sum (self, p, x) |
| sum function More... | |
| def | printPixels (self) |
| printPixels function Function for printing pixels, useful during development More... | |
| def | decode_binary_string (self, s) |
| decode_binary_string function More... | |
| def | getFrames (self) |
| getFrames function More... | |
| def | getBlock (self, firstPixel, length, frame) |
| getBlock function More... | |
| def | getBlocks (self, frame, block_size) |
| getBlocks function More... | |
| def | encode_video (self, filename, golombparam, block_size, search_area, q=None, limitFrames=None) |
| encode_video function More... | |
| def | findBestBlock (self, block, oldBlocks, search_area, position) |
| blockDif function More... | |
| def | blockDif (self, block, candidateBlock) |
| blockDif function More... | |
| def | lessError (self, dif, lastDif) |
| lessError function More... | |
| def | encodeWithBitstream (self, value, bs, g, pixel=None, frame=None, line=None, column=None) |
| encodeWithBitStream function More... | |
| def | decodeWithBitstream (self, len, bs, g, bitsResto) |
| decodeWithBitStream function More... | |
| def | verifyData (self, video, numberoframes) |
| verifyData function More... | |
| def HybridCodec.HybridCodec.__init__ | ( | self, | |
| filename, | |||
encoded = False , |
|||
limitFrames = None |
|||
| ) |
Initialization function.
| [in] | filename | Path of the file to read |
| [in] | encoded | A flag used to indicate if the video in the given path was encoded by this same class |
| [in] | limitFrames | Optional parameter to limit the number of frames to considered Initializing and setting up some useful parameters and flags |
| def HybridCodec.HybridCodec.adjustCoord | ( | self, | |
| line, | |||
| column | |||
| ) |
adjustCoord function
| [in] | line | Line where the pixel is located |
| [in] | column | Column where the pixel is located |
| [out] | line | Adjusted line number |
| [out] | column | Adjusted column number Adjusts given line and column considering the different array shapes in different color spaces Useful when assigning new values to a certain pixel position |
| def HybridCodec.HybridCodec.blockDif | ( | self, | |
| block, | |||
| candidateBlock | |||
| ) |
blockDif function
| [in] | block | First block |
| [in] | candidateBlock | Second block |
| [out] | dif | Result error block Calculates differences between two blocks of pixels |
| def HybridCodec.HybridCodec.computeShape | ( | self | ) |
computeShape function Calculating array shapes for YUV components based on the color space
| def HybridCodec.HybridCodec.decode_binary_string | ( | self, | |
| s | |||
| ) |
decode_binary_string function
| [in] | s | String |
| [out] | r | Decoded binary string Additional function to decode binary strings |
| def HybridCodec.HybridCodec.decodeWithBitstream | ( | self, | |
| len, | |||
| bs, | |||
| g, | |||
| bitsResto | |||
| ) |
decodeWithBitStream function
| [in] | len | Number of values to read |
| [in] | bs | Bitstream class object |
| [in] | g | Golomb class object |
| [in] | bitsResto | Number of bits of the remainder = log(factor,2) |
| [out] | pixel | Decoded value Starts by reading one bit 0 or 1, determing if number was negative Reads the bits from the Bitstream and decodes them with Golomb Multiplies by quantization step if using lossy coding |
| def HybridCodec.HybridCodec.diff | ( | self, | |
| p, | |||
| x | |||
| ) |
diff function
| [in] | p | First pixel |
| [in] | x | Second pixel |
| [out] | r | Pixel result of the difference between the two pixels Calculates the result pixel by calculating the difference between each yuv component |
| def HybridCodec.HybridCodec.encode_video | ( | self, | |
| filename, | |||
| golombparam, | |||
| block_size, | |||
| search_area, | |||
q = None , |
|||
limitFrames = None |
|||
| ) |
encode_video function
| [in] | filename | Path of file to write with the encoded video information |
| [in] | golombparam | Golomb's parameter M (factor) |
| [in] | block_size | Block's length |
| [in] | search_area | Search area for inter frame method |
| [in] | q | Optional parameter for specifying each components quantization steps for lossy coding |
| [in] | limitFrames | Optional parameter for limiting number of frames to encode Starts by encoding the header, passing additional parameters such as the Golomb factor Uses intra-coding method in the first frame, as described in the IntraCodec class Uses inter-coding for all the remaining frames That is by constructing a matrix of blocks for every frame, finding the most similar block of the previous frame to each one, and encoding that block of errors and the vector related to the most similar block's position |
| def HybridCodec.HybridCodec.encodeWithBitstream | ( | self, | |
| value, | |||
| bs, | |||
| g, | |||
pixel = None , |
|||
frame = None , |
|||
line = None , |
|||
column = None |
|||
| ) |
encodeWithBitStream function
| [in] | value | Value to be encoded |
| [in] | bs | Bitstream class object |
| [in] | g | Golomb class object |
| [in] | pixel | Current pixel values being encoded, used for lossy coding |
| [in] | frame | Frame where the pixel being encoded is located |
| [in] | line | Line where the pixel being encoded is located |
| [in] | column | Column where the pixel being encoded is located Switches the value to be encoded to positive, writing a 1 or 0 according to the original value If using lossy coding functionality, divides color component by quantization step and updates pixel value Proceeds to write the encoded value by Golomb with the Bitstream |
| def HybridCodec.HybridCodec.findBestBlock | ( | self, | |
| block, | |||
| oldBlocks, | |||
| search_area, | |||
| position | |||
| ) |
blockDif function
| [in] | block | Given block |
| [in] | oldBlocks | Blocks from previous frame |
| [in] | search_area | Search area for inter frame |
| [in] | position | Given block's position in the blocks matrix |
| [out] | lastDif | Most similar block |
| [out] | vetor | Vector with the coordinates corresponding to the most similar block's position Calculates the 'best', most similar block (of the previous frame) to the given block |
| def HybridCodec.HybridCodec.getBlock | ( | self, | |
| firstPixel, | |||
| length, | |||
| frame | |||
| ) |
getBlock function
| [in] | firstPixel | Initial pixel, where the block begins |
| [in] | length | Block length (squares) |
| [in] | frame | Frame number |
| [out] | yuv | Block containing all the pixel's components Constructs a pixel block based on the initial pixel, frame and block length |
| def HybridCodec.HybridCodec.getBlocks | ( | self, | |
| frame, | |||
| block_size | |||
| ) |
getBlocks function
| [in] | frame | Frame number |
| [in] | block_size | Block length (squares) |
| [out] | blocks | Matrix of blocks of given frame Constructs a matrix of pixel blocks of given frame |
| def HybridCodec.HybridCodec.getFrames | ( | self | ) |
getFrames function
| [out] | frames | The data structures with all the frames of each component Useful to check data integrity |
| def HybridCodec.HybridCodec.getYUVPixel | ( | self, | |
| frame, | |||
| line, | |||
| column, | |||
| resized | |||
| ) |
getYUVPixel function
| [in] | frame | Number of the frame from which to read the pixel from |
| [in] | line | Line in which the pixel is located |
| [in] | column | Column in which the pixel is located |
| [in] | resized | A flag used to indicate if the arrays have been resized or not |
| [out] | p | The pixel tuple in YUV format Returns 0,0,0 for non existent pixels, useful for the Codecs Adjust line and column numbers based on the color space (and array shapes) |
| def HybridCodec.HybridCodec.handleHeader | ( | self | ) |
handleHeader function Interpreting the header of the file, containing width, height, frames per second and color space, assigning them to class variables This header can also contain other parameters added while encoding, such as the parameter for Golomb,the quantization steps used for lossy coding, the block size and search area for inter-frame methods
| def HybridCodec.HybridCodec.lessError | ( | self, | |
| dif, | |||
| lastDif | |||
| ) |
lessError function
| [in] | dif | First block |
| [in] | lastDif | Second block |
| [out] | bool | Returns flag indicating if the First block is better than the second one Calculates which error block has the least differences, based on the sum of the absolute value of all errors |
| def HybridCodec.HybridCodec.predict | ( | self, | |
| a, | |||
| c, | |||
| b | |||
| ) |
predict function
| [in] | a | Adjacent pixel in position (line,col-1) |
| [in] | c | Adjacent pixel in position (line-1,col-1) |
| [in] | b | Adjacent pixel in position (line-1,col) |
| [out] | ret | Most similar pixel The returned pixel is calculated using the JPEG-LS non-linear predictor formula |
| def HybridCodec.HybridCodec.printPixels | ( | self | ) |
printPixels function Function for printing pixels, useful during development
| def HybridCodec.HybridCodec.read_encoded_video | ( | self, | |
limitFrames = None |
|||
| ) |
read_encoded_video function
| [in] | limitFrames | Optional parameter to limit the number of frames to be decoded Reads video information (encoded by this class) from file Starts by decoding and interpreting the header, followed by decoding of all the pixel blocks errors and recreating the original pixel based on the vector indicating the most similar block used for calculating the differences |
| def HybridCodec.HybridCodec.read_video | ( | self | ) |
read_video function Reads YUV video information from file, storing all its data in our structures, calculating different components lengths and shapes
| def HybridCodec.HybridCodec.sum | ( | self, | |
| p, | |||
| x | |||
| ) |
sum function
| [in] | p | First pixel |
| [in] | x | Second pixel |
| [out] | r | Pixel result of the sum between the two pixels Calculates the result pixel by calculating the sum between each yuv component |
| def HybridCodec.HybridCodec.updateYUVPixel | ( | self, | |
| compNumb, | |||
| frame, | |||
| line, | |||
| column, | |||
| value | |||
| ) |
updateYUVPixel function
| [in] | compNumb | Number of the pixel component to be changed (0=Y,1=U,2=V) |
| [in] | frame | Number of the frame where the pixel is located |
| [in] | line | Line in which the pixel is located |
| [in] | column | Column in which the pixel is located |
| [in] | value | New value of the pixel's component Used for avoiding error propagation in lossy coding |
| def HybridCodec.HybridCodec.verifyData | ( | self, | |
| video, | |||
| numberoframes | |||
| ) |
verifyData function
| [in] | video | Class containing video for comparison |
| [in] | numberoframes | Limits number of frames to check Compares data between two videos |
| HybridCodec.HybridCodec.block_size |
| HybridCodec.HybridCodec.colorSpace |
| HybridCodec.HybridCodec.encoded |
| HybridCodec.HybridCodec.encoding |
| HybridCodec.HybridCodec.fps |
| HybridCodec.HybridCodec.frameLength |
| HybridCodec.HybridCodec.frameU |
| HybridCodec.HybridCodec.frameV |
| HybridCodec.HybridCodec.frameY |
| HybridCodec.HybridCodec.golombParam |
| HybridCodec.HybridCodec.header |
| HybridCodec.HybridCodec.height |
| HybridCodec.HybridCodec.other_shape |
| HybridCodec.HybridCodec.quantizationStep |
| HybridCodec.HybridCodec.search_area |
| HybridCodec.HybridCodec.shape |
| HybridCodec.HybridCodec.TotalFrames |
| HybridCodec.HybridCodec.uLength |
| HybridCodec.HybridCodec.vid |
| HybridCodec.HybridCodec.vLength |
| HybridCodec.HybridCodec.width |
| HybridCodec.HybridCodec.yLength |


Early Single-Celled Organisms
Notes
Microbes Have Changed the Physical and Chemical Composition of Earth=- Scientists have found evidence that photosynthetic life evolved more than 3.5 billion years ago, since that is the age of the oldest known fossils
- These fossils are of a group of marine cyanobacteria, which are bacteria that can carry out photosynthesis
- Like all early life forms, each cyanobacterium was a single prokaryotic cell
- Some cyanobacteria live in colonies and form stromatolites
- Endosymbiosis is a relationship in which one organism lives within the body of another, and both benefit from the relationship


384 West 4th st
Suite 108
Portland, Maine
3433 Phisherman's Avenue
(Northwest Corner)
515 Crescent Avenue
Second Floor


{{team.team_name}}
Picked by {{team.pick_name}}
{{data.user_message}}
This is the {{competition.name}} sweep for {{group.group_name}}. To play, enter your name and click the button to pick teams.
Your teams have been selected...
{{team.team_name}}
Picked by {{team.pick_name}}


--- title: Metadata layout: default permalink: /en/metadata/ ref: metadata lang: en --- {% include breadcrumbs.html %}
Metadata is data that describes the data, the metadata provided here complies with DCAT-AP.
Dataset metadata is available here.


Firedancer
v0.1.3
Language for defining bullet-hell patterns.
GitHub repo
SELECT EXAMPLE ...
---- basics ------------
control flow
move
move (2)
shot speed
shot direction
shot position
---- features ------------
nway / radial / line
random
aim
parallel
fire with pattern
bind position
vanish
variables
sin / cos
transform
---- examples ------------
nway whip
laundry
pods
static geometric
flower
seeds
Script
Virtual assembly code
(compiled from the above)
Program for
Firedancer VM
(assembled from the above)


rederik de Klerk and Nelson Mandela shake hands at the Annual Meeting of the World
Economic Forum held in Davos in January 1992
Here's a time line of Mandela's life:
1918 - Born in Mvezo, Umtata
1933 - Begin his secondary education at Clarkebury
1941 - Arrives to Johannesburg
1943 - Mandela began studying law at the University of the Witwatersrand, where he was
the only black African student and faced racism, in the same year he joined ANC youth league
1944 - Marries Evelyn Ma
1950 - Mandela took Xuma's place on the ANC national executive in March 1950, and that
same year was elected national president of the ANCYL.
1961 - Disguised as a chauffeur, Mandela travelled around the country incognito,
organising the ANC's new cell structure and the planned mass stay-at-home strike
1962 - Police captured Mandela along with fellow activist Cecil Williams near Howick
1964 - Justice De Wet found Mandela and two of his co-accused guilty on all four
charges; although the prosecution had called for the death sentence to be applied, the judge instead
condemned them to life imprisonment
1982 - Mandela was transferred to Pollsmoor Prison in Tokai, Cape Town, along with
senior ANC leaders Walter Sisulu, Andrew Mlangeni, Ahmed Kathrada, and Raymond Mhlaba; they believed that
they were being isolated to remove their influence on younger activists at Robben Island
1990 - Announcing Mandela's unconditional release
1994 -The newly elected National Assembly's first act was to formally elect Mandela as
South Africa's first black chief executive
1999 - Retirement
2004 - Aged 85 and amid failing health, Mandela announced that he was "retiring from
retirement" and retreating from public life, remarking, "Don't call me, I will call you
2013 - Died at the age of 95
Intro
Nelson Rolihlahla Mandela (July 18, 1918 to December 5, 2013) was a nonviolence anti-apartheid
activist, politician and philanthropist who became South Africa’s first black president from 1994 to
1999. Becoming actively involved in the anti-apartheid movement in his 20s, Mandela joined the African
National Congress in 1942. For 20 years, he directed a campaign of peaceful, nonviolent defiance
against the South African government and its racist policies. Beginning in 1962, Mandela spent 27
years in prison for political offenses. In 1993, Mandela and South African President F.W. de Klerk
were jointly awarded the Nobel Peace Prize for their efforts to dismantle the country's apartheid
system. For generations to come, Nelson Mandela will continue to be a source of inspiration for civil
rights activists worldwide.
Children and Wife
Mandela was married three times and had six children. He wed his first wife, Evelyn Ntoko Mase, in
1944. The couple had four children together: Madiba Thembekile (d. 1964), Makgatho (d. 2005), Makaziwe
(d. 1948 at nine months old) and Maki. The couple divorced in 1957. In 1958, Mandela wed Winnie
Madikizela; the couple had two daughters together, Zenani (now Argentina's South African ambassador)
and Zindziswa (the South African ambassador to Denmark), before splitting in 1996. Two years later, in
1998, Mandela married Graca Machel, the first Education Minister of Mozambique, with whom he remained
until his death in 2013.
Movie and Books
Mandela was married three times and had six children. He wed his first wife, Evelyn Ntoko Mase, in
1944. The couple had four children together: Madiba Thembekile (d. 1964), Makgatho (d. 2005), Makaziwe
(d. 1948 at nine months old) and Maki. The couple divorced in 1957. In 1958, Mandela wed Winnie
Madikizela; the couple had two daughters together, Zenani (now Argentina's South African ambassador)
and Zindziswa (the South African ambassador to Denmark), before splitting in 1996. Two years later, in
1998, Mandela married Graca Machel, the first Education Minister of Mozambique, with whom he remained
until his death in 2013.
Mandela Day
In 2009, Mandela's birthday (July 18th) was declared Mandela Day, an international day to promote
global peace and celebrate the South African leader's legacy. According to the Nelson Mandela Centre
of Memory, the annual event is meant to encourage citizens worldwide to give back the way that Mandela
has throughout his lifetime. A statement on the Nelson Mandela Centre of Memory's website reads: "Mr.
Mandela gave 67 years of his life fighting for the rights of humanity. All we are asking is that
everyone gives 67 minutes of their time, whether it's supporting your chosen charity or serving your
local community."
If you have time, you should read more about this incredible human being on his Wikipedia entry.