Positron Developer's Guide: Working with the Database
The Neuros has several on-disk databases that are used by both the
device during normal operation and the host computer during
synchronization. The primary databases are:
- audio
- Audio files stored on the
Neuros
- pcaudio
- Audio files stored on the
host computer
- unidedhisi
- HiSi clips that
have not been identified yet. These clips should be fingerprinted
and looked up on the HiSi server during synchronization.
- idedhisi
- HiSi clips that have
been identified. If the fingerprint is successfully located on the
HiSi server, the database record corresponding to the clip should be
removed from unidedhisi and put into this database along with the
metadata returned from the server.
- failedhisi
- HiSi clips that
could not be identified. If the lookup fails, the record from the
HiSi clip should be moved from the unidedhisi database to this
database.
Each database can be thought of as a collection of records with a fixed
number (greater than or equal to 1) of fields. The first field is the
primary field. Next are zero or more fields called access
keys, which are fields whose contents are indexed. All the
records that contain a particular value in an access key field can be
quickly looked up. (Example: finding all the songs with the genre
"Rock") Finally, the access keys are followed by zero or more
extra info fields. These fields contain data that does
not need to be indexed, like filenames or file sizes. Some fields may
also contain a collection of values, called a "bag." This is used in
the audio database to allow one file to be in multiple playlists at
once (i.e. have multiple values in its playlist field). Every
database is required to have a special null record.
Design
The database structure described above is implemented as a tree of
databases using a root database (audio, unidedhisi, etc.) with a child
database (artist, genre, etc.) for each access key. When a record is
added to the root, the actual contents of each access key field are
replaced with a pointer to the record in the child db containing the
value in its primary field. Of course, if the value doesn't already
exist in the child database, it must be added. Null values are
possible for access keys; just use a pointer to the null record in the
child database. The following diagram shows how this works:
File Layout
Each root database is stored in a directory whose name is the same as
the database name. Inside that directory are two files holding the
contents of the root database, a MDB file and a
SAI file. Child databases have a MDB and SAI file as
well as a PAI file used for reverse lookups. The name of
each of these files will be the name of the database with either a
".mdb," ".sai," or ".pai" extension. All the files for the root and
child databases are stored in the same directory. The file layout for
the audio database is:
audio/albums.mdb - Album child database
audio/albums.pai
audio/albums.sai
audio/artist.mdb - Artist child database
audio/artist.pai
audio/artist.sai
audio/audio.mdb - Root database
audio/audio.sai
audio/genre.mdb - Genre child database
audio/genre.pai
audio/genre.sai
audio/playlist.mdb - Playlist child database
audio/playlist.pai
audio/playlist.sai
audio/recordings.mdb - Recordings child database
audio/recordings.pai
audio/recordings.sai
Because of the nature of the DSP used in the Neuros, all database
files are treated as a sequence of 16-bit words. This creates some
packing issues that need to be considered when storing data in
database files. This is handled in the following way for the 5 major
types of data:
- Bit-fields
- Bit-fields are usually 16 bits and are stored
in big-endian byte order.
- Integers
- Integers are 16 or 32 bits and also stored in
big-endian byte order.
- Pointers
- Pointers are 32-bit integers that point to
offsets in a file, rather than memory locations. However, unlike
the pointers most programmers are used to, these pointers point at
16-bit words rather than bytes. So a pointer with value 0 refers to
bytes 0 and 1 in a file, and a pointer with value 22 refers to
bytes 44 and 45.
- Null-terminated strings
- These a similar to C-style strings.
First, the string is null-padded at the end to make it end on a word
boundary. Then it is terminated with a null word, 0x0000.
Example: "foo" (0x66,0x6f,0x6f) would be coded as 0x66,0x6f,0x6f,0x00,0x00,0x00.
Data of this type is refered to as sz in the tables.
- Display data
- This appears to be similar in use to a
string, but with the ability to include some sort of binary data.
For this reason, display data is made by again padding the string
(or whatever data) out to a word boundary with nulls, but then
prepending a word with the data length in words, excluding the
length word itself. Example: "foo" would be coded as 0x00,0x02,0x66,0x6f,0x6f,0x00.
Data of this type is refered to as dd in the tables.
File Formats
Standard Database Field Definitions
In the following sections, the fields for each of the standard
databases are defined. The following types are used to describe the
extra info fields:
- sz - Null-terminated string
- uint32 - Unsigned 32-bit integer
The primary field is always a null-terminated string, and the access
keys are 32-bit pointers to records in child databases which have only a
primary field (also a null-terminated string).
audio
| # | Name | Type | Description |
| 0 | Title | Primary | Title of track |
| 1 | Playlist | Access Key | Name of Playlist(s) containing this track |
| 2 | Artist | Access Key | |
| 3 | Album | Access Key | |
| 4 | Genre | Access Key | |
| 5 | Recordings | Access Key | Set to "FM Radio" if the track was
recorded from the radio and "Microphone" if it was recorded from the microphone. |
| 6 | Time | uint32 | Length of track in seconds |
| 7 | Size | uint32 | Size of track in kilobytes |
| 8 | Path | sz | Path to track on Neuros filesystem.
Follows path conventions specified in the Overview. |
pcaudio
| # | Name | Type | Description |
| 0 | Title | Primary | Title of track |
| 1 | Playlist | Access Key | Name of Playlist(s) containing this track |
| 2 | Artist | Access Key | |
| 3 | Album | Access Key | |
| 4 | Genre | Access Key | |
| 5 | Recordings | Access Key | Set to "FM Radio" if the track was
recorded from the radio and "Microphone" if it was recorded from the microphone. |
| 6 | Time | uint32 | Length of track in seconds |
| 7 | Size | uint32 | Size of track in kilobytes |
| 8 | Path | sz | Path to track on host PC filesystem. |
unidedhisi
| # | Name | Type | Description |
| 0 | Title | Primary | Usually the name of the file |
| 1 | Source | sz | Source of track (Ex: "FM 100.7") |
| 2 | Path | sz | Path to track on Neuros filesystem. Follows path
conventions specified in the Overview. |
idedhisi
| # | Name | Type | Description |
| 0 | Title | Primary | Title of HiSi clip (not title of actual track) |
| 1 | Source | sz | Source of clip (see
unidedhisi) |
| 2 | Artist | sz | |
| 3 | Album | sz | |
| 4 | Genre | sz | |
| 5 | Track Name | sz | Title of actual track.
(Found during song identification) |
| 6 | Time | uint32 | Length of track in seconds |
| 7 | Size | uint32 | Size of track in kilobytes |
| 8 | Path | sz | Path to track on Neuros filesystem. Follows path
conventions specified in the Overview. |
failedhisi
Field definitions are the same as unidedhisi.
| # | Name | Type | Description |
| 0 | Title | Primary | |
| 1 | Source | sz | |
| 2 | Path | sz | |
Maintaining Database Consistency
Reading the database is fairly straightforward; the tricky part is
maintaining consistency between all of the parts of the database when
modifying it. Failure to do this correctly often leads to
unpredictable behavior in the Neuros, and sometimes even causes it to
freeze. The follow sections will explain these consistency conditions
for various common operations on the database. They assume you are
familiar with the format of the various database
files.
Adding a Record
To add a new record to a database:
- Locate pointers to all of the access keys by searching the
appropriate child database for each one. Note that empty access keys
should point at the null record in the associated child database.
- Any access keys that cannot be found need to be added to the
child databases (by recursively following these steps), and these
new pointers gathered.
- Using these pointers to the access keys, a new record needs to
be added to the MDB file.
- If this is a child database, a new module in the PAI file should
be created.
- A new SAI record should be created with pointers to the MDB
record created in step 3, and the PAI module in step 4.
(Remember the caveat about pointers to
PAI modules.)
- An entry to the MDB record created in step 3 needs to be added
to the PAI module associated with each access key in the child
databases. If there is no more room for an additional entry in a
PAI module, it may be necessary to extend
it.
Extending a PAI Module
Extending a PAI module makes it larger so that it can hold more
pointers to parent records:
- Move all of the modules after the module being extended down by
the size of the extension. Remember that the size of PAI module
must be a multiple of the minimum
module length.
- Fill in the extra space with zeros.
- All of the PAI pointers in the associated SAI file will be wrong
for modules that are located after this one in the PAI file. Update
them to reflect the new locations.
Deleting a Record
There are two ways to delete a record. It can be "marked" as
deleted, and it will be ignored by the Neuros (this is what the
firmware does when the user requests the a record to be delete):
- Set the "isDeleted" flag on the MDB record.
- Remove the entire SAI record associated with this record. This
must be done by moving the rest of the file up by the size of one
record.
- If this is a child database, clear the associated PAI module and
mark it as empty. The module does not actually have to be
removed.
- If this database has access keys, then the backlinking pointers
in each of the associated PAI modules in the child databases needs
to be removed. Removing a pointer from a PAI module requires it to
be erased by sliding all of the other entries in that module up.
(Not the whole file! The module itself should not change size. Put
zeros in the extra spot in the module this creates.)
- If an access key in a child database no longer has any entries
in its PAI module, that means it is no longer used by any records in
the parent database and should be deleted. Follow these same steps
again for it.
Complete deletion of a record is much more difficult. It is
identical to the above process, but also requires the MDB records and
PAI modules to be removed from their respective files. This will
invalidate many pointers in the whole database, so it is perhaps
easier to rebuild the database from scratch than to attempt to update
the contents of the database in place.


TAGRUGBY.IE PRIVACY POLICY
(Updated on 24th May 2018)
The Irish Tag Rugby Association Limited (hereafter “ITRA”, “we”, “us”), is committed to protecting your privacy. We will only use the information that we collect about you lawfully, in accordance with the General Data Protection Regulation (GDPR) 2018.
This privacy statement explains policies on data collection and use practices of the Tagrugby.ie website, hosted by Jalmia Solutions for ITRA. This statement applies only to the information collected online and does not apply to other offline ITRA sites, products or services.
Our website contains links to other sites not controlled or operated by us. We are not responsible for the privacy policies of websites that we do not control or operate. By accessing this website, you are consenting to the information collection and use practices described in this privacy statement.
A. Data Controller
“ITRA” (referred to as “we”, “us”, “our” or “Tagrugby” in this policy) refers to the tag rugby events organisation, which runs adult and youth tag rugby tournaments, leagues, blitzes and competitions. ITRA is the “data controller” of all personal information that is collected and used about tag rugby customers for the
purposes of the Irish Data Protection Act 2018. Irish Tag Rugby Association Limited is registered in Ireland with registration number 330313 and registered offices at 5 Rogan's Court, Patrick St, Dun Laoalghaire, Co Dublin.
B. Website Policy
1. Information
All information provided on our website is supplied in good faith. We endeavour to display the most up-to-date and accurate information and will happily correct any mistakes made. We cannot though be held responsible for any errors or omissions in details provided online.
2. Credit Card Security
Using a credit card to make purchases via our website is a secure way to pay for your items. We have put a number of security steps in place to give you, the customer, total confidence when purchasing your items via our website. Your credit card information is only supplied to our Credit Card processing company at the relevant stage of the payment process. We do not retain any records of credit card information on our web servers.
3. Pricing
All items purchased will be charged in Euro (Ireland) or Sterling (UK). For an exact conversion rate for your currency, please contact your bank or credit card provider.
4. Articles and website content
The info on this website is not meant to replace the advice of a medical expert. Regarding your own specific situation, do not rely upon any information that you read to replace consultations or advice received by qualified health professional. The information provided is intended for educational purposes only and it should never be construed as medical advice. Website contributors have no liability towards the choices you make towards your own health after reading the content. Furthermore, each article might not apply to every individual.
C. Collection of Information
1. Navigational Information
We gather navigational information about where visitors go on our website. This information allows us to see which areas are most visited and helps us improve the quality of your online experience by recognising and delivering more of the most desired features and services.
2. Technical Information
Technical details in connection with visits to this website are logged by our internet service provider for statistical purposes. No information is collected that could be used by us to identify website visitors unless required to do so by rule of law. The technical details logged are confined to the following items:
• The User’s IP address;
• The previous website address from which the user reached us, including any search criteria used;
• Click screen data ,which shows the traffic of users around this website - for example pages accessed and documents downloaded; and
• The type of web browser used by the website user .
3. Cookies
Cookies are very small text files stored on your hard drive. They uniquely identify your computer and allow us to store profile information, improve website security and help us to customise your website experience. Cookies are used on this site for the venue pages. A unique user identity is created when you choose a specific venue as your home location, which ensures that you are brought directly to this venue page next time you visit the website. For more detailed information on cookies, visit www.allaboutcookies.org.
You can usually modify your browser to prevent the storing of cookies. The information collected in this way can be used to identify you unless you modify your browser settings. We also track click through links in emails sent as part of our ezine service.
4. Personal Information
If you register a team or sign up as an individual to play in one of our events, you will be asked to provide your email address and mobile phone number. This information allows us to contact you with detailed information about the event you have registered for, including in case of a cancellation. These operational communications are not made for marketing purposes, should not be considered as spam and cannot be opted-out of.
We will also use your contact details to keep you informed via email and/or SMS about ITRA events, news and offers that we think will be of interest to you. We will always give you the chance to unsubscribe should you choose to do so. At the bottom of every marketing email / SMS, there will always be an “unsubscribe” button.
We do not make the contact details of our database available to other unaffiliated companies for their marketing purposes, unless specific consent for such transfer to third party affiliates has been received from the user.
Any personal information we hold will be held securely and in accordance with our internal security policy and the law.
5. Access and Control of your Personal Information
If you have any questions/comments about privacy or your personal information, please do not hesitate to get in touch with us via email<EMAIL_ADDRESS>or phone 01 2020100.
6. Use of Your Personal Information
ITRA only holds and uses personal information to provide additional services to our customers, such as informing you of upcoming payment deadlines or news and special offers via our ezine service.
If you previously subscribed to this service but no longer wish to receive information, simply click “Unsubscribe” at the bottom of the next ezine you receive.
Please note that, if you ask to be removed from our mailing list, you will start receiving communication once again from us if you register for a new tag rugby event on our website.
ITRA will not disclose personal information to any unaffiliated third party without prior consent being obtained from the customer, unless required to do so by law or in the good faith that such action is necessary to:
• Conform to the edicts of the law or comply with legal process served on ITRA.
• Protect and defend the rights or property of ITRA.
• Act in urgent circumstances to protect the personal safety of ITRA stafff, agents, users of ITRA products or members of the public.
Please be aware that we may use third party contractors to help provide services to you, such as fulfilling orders, processing payments, monitoring site activity, serving site content, organising information, conducting surveys, administering ezine and SMS campaigns, organising competitions etc. Outside contractors who have access to personal data are required to treat the information in a confidential manner.
7. Retention of Personal Data
In broad terms, we will not retain your data for longer than is necessary to fulfil the purpose it is being processed for. To determine the appropriate retention period, we consider the amount, nature and sensitivity of the personal data, the purposes for which we process it and whether we can achieve those purposes through other means.
We must also consider periods for which we might need to retain personal data in order to meet our legal obligations or to deal with complaints, queries and to protect our legal rights in the event of a claim being made.
When we no longer need your personal data, we will securely delete or destroy it.
D. Access to Your Information
If you would like to know what personal information ITRA holds about you, you may make a request to ITRA for copies of this information. You should be aware that we will need to see proof of identity before processing any such request (known as a ‘subject access request’) and may charge an administration fee of up to €10 to cover our costs in providing you with this information.
All subject access requests should be made via email to
<EMAIL_ADDRESS>E. Security of Your Personal Information
ITRA strictly protects the security of your personal information and honours your choices for its intended use. We carefully protect your data from loss, misuse, unauthorised access or disclosure, alteration or destruction. As explained above, your personal information is never shared outside the company. Inside the company, data is stored on password-controlled servers only accessible to co-workers who need it to carry out their job responsibilities.
Customers also have a significant role in protecting their information. No unauthorised person can see or edit your information without knowing your team/group login (username and password), so do not share these with others.
Site Security
ITRA has a committed Security Policy. We retain the information you provide when registering on our website for any event but implement a number of sophisticated security measures to ensure the safety of this personal information. The information is contained on a secure server, which is accessible only by a limited number of employees who have authorised access rights to such information.
All sensitive and credit / debit card information supplied by any customer in the process of payment is transmitted via Secure Socket Layer (SSL) technology. SSL is commonly-used for managing the security of message transmission on the Internet through public-and-private key encryption and a digital certificate that establishes your credentials when doing Internet business or other on-line transactions. When you are asked to enter any personal details or credit card information, the website will be secure. This is easily identifiable by a green lock icon in the Page Address URL. SSL ensures that the information being transmitted to ITRA is secure.
If your browser supports SSL, and if you entered our site via our secure server access, then transmission of any sensitive data will be protected. If your browser does not support SSL, we recommend that you upgrade to the latest version of any browser to enhance the security of further transactions - otherwise the transmission of your personal data may not be protected and ITRA disclaims any responsibility in this case.
F. Changes to this Privacy Policy
As the ITRA website expands, improves and updates, we reserve the right to modify or amend the policy at any time and for any reason. When policy changes occur, ITRA will automatically update the Terms & Conditions with the new details.
For material changes to this privacy statement, we will notify you either by placing a prominent notice on the ITRA website or by sending you a notification. We encourage you to periodically review this privacy statement to stay informed about how the organisation is helping to protect the personal information collected. Your continued use of the service constitutes your agreement to this privacy statement and updates to this statement.
Please be aware that this privacy statement and any other choices you make on the website will not necessarily apply to personal information you may have provided to us in the context of other, separately operated, ITRA events.
G. Contact Information
ITRA welcomes your comments regarding these Terms & Conditions. If you have any questions or queries, please contact us by e-mail at
<EMAIL_ADDRESS>or call us on 01 2020100. ITRA will use commercially reasonable efforts to promptly determine and remedy the problem.
By disclosing your personal information to us, you consent to the collection, storage and processing of your personal information by ITRA in the manner set out in this Privacy Policy.


How to Setup Theano to Run on GPU on Ubuntu 14.04 with Nvidia Geforce GTX 780
Documenting the steps how to setup Theano to run on GPU on Ubuntu 14.04 so I can refer to this in the future. With this successfully installed, you can run Keras, convnet, Theano, etc properly.
Why This Article?
Have you ever met those painful issues just trying to setup your GPU for scientific programming:
- Getting a blinking cursor after installing the “latest” Nvidia drivers?
- Getting a blinking cursor after installing the “latest” CUDA toolkit?
- Login loop in Ubuntu login screen?
- NVRM: rm_init_adapter(0) failed?
- NVIDIA: could not open the device file /dev/nvidia0 (input/output error)
- …
If yes, then read on.
I cannot guarantee your OS does not break after running the steps below, so please backup everything, run as your own risk.
You may want to read the Things That Does Not Work For Me part below first before following the instructions.
Specifications
My server has the following specifications:
- OS: Ubuntu 14.04 LTS, X64
- GPU: Nvidia Geforce GTX 780
- Fresh install of Ubuntu 14.04 LTS
Instructions
If you fail in the middle of any of this steps, you are advised to restart and follow the steps carefully again. Use common sense. and if you don’t know how to fix it, too bad,
- Download latest (or very recent) Nvidia display driver for Linux:
wget http://us.download.nvidia.com/XFree86/Linux-x86_64/352.63/NVIDIA-Linux-x86_64-352.63.run
2. Download latest (or very recent) CUDA Installation Run file for Ubuntu 14.04:
wget http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_linux.run
3. Get into recovery mode to install the files, because you cannot install your display driver with X server on.
reboot
-
Once you are in GRUB, select “Advanced Options for Ubuntu”.
-
In the recovery mode, select “network”, press yes. Once the networking has been enabled, this will also set your drive to read/write mode.
6. In the recovery mode, select “root” to get a root prompt.
- Go to where you downloaded the previous files at, and run NVIDIA-Linux-x86_64-352.63.run .
chmod +x NVIDIA-Linux-x86_64-352.63.run # Make it executable ./NVIDIA-Linux-x86_64-352.63.run # Install Nvidia display driver
For yes/no questions, take “yes”. For locations, press “enter” to take default values.
- Setup your environment variables.
Make sure your LD_LIBRARY_PATH, LIBRARY_PATH and PATH includes the places it needs to include:
# ~/.bashrc export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-7.5/lib64: export LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-7.5/lib64: export PATH=$PATH:/usr/local/cuda-7.5/bin
Don’t forget to:
$ source ~./.bashrc
- Run nvidia-smi to confirm that your setup is correct.
nvidia-smi
nvidia-smi should be on your path already, so this should work. If it doesn’t:
- You must have done something wrong, better go back to step 1. and do it all over again.
- You can see if it’s at /usr/bin/nvidia-smi .
You should then see something similar to this:
Mon Nov 23 21:01:17 2015 +------------------------------------------------------+ | NVIDIA-SMI 352.39 Driver Version: 352.39 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 780 Off | 0000:01:00.0 N/A | N/A | | 34% 33C P0 N/A / N/A | 137MiB / 3068MiB | N/A Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 Not Supported | +-----------------------------------------------------------------------------+
- Go to where you downloaded the previous files at, and run cuda_7.5.18_linux.run .
chmod +x cuda_7.5.18_linux.run # Make it executable ./cuda_7.5.18_linux.run # Install Nvidia display driver
For yes/no questions, take “yes”. For locations, press “enter” to take default values.
- Re-run nvidia-smi just to be sure everything is still working well.
nvidia-smi
You should then (again) see something similar to this:
Mon Nov 23 21:08:56 2015 +------------------------------------------------------+ | NVIDIA-SMI 352.39 Driver Version: 352.39 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 780 Off | 0000:01:00.0 N/A | N/A | | 34% 28C P8 N/A / N/A | 271MiB / 3068MiB | N/A Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 Not Supported | +-----------------------------------------------------------------------------+
11. Reboot now back to desktop.
reboot
- Time to install Theano and python, basically the first part of this guide. Run the following commands:
sudo apt-get install python-numpy python-scipy python-dev python-pip python-nose g++ libopenblas-dev git sudo pip install Theano
- Copy and paste the below code into check1.py. Now we need to make sure GPU is indeed working. I am copying the instructions from deeplearning.net.
from theano import function, config, shared, sandbox import theano.tensor as T import numpy import time vlen = 10 * 30 * 768 # 10 x #cores x # threads per core iters = 1000 rng = numpy.random.RandomState(22) x = shared(numpy.asarray(rng.rand(vlen), config.floatX)) f = function([], T.exp(x)) print(f.maker.fgraph.toposort()) t0 = time.time() for i in xrange(iters): r = f() t1 = time.time() print("Looping %d times took %f seconds" % (iters, t1 - t0)) print("Result is %s" % (r,)) if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]): print('Used the cpu') else: print('Used the gpu')
- Run the check1.py to confirm that Theano is working correctly with CPU.
THEANO_FLAGS=mode=FAST_RUN,device=cpu,floatX=float32 python check1.py
This should give:
[Elemwise{exp,no_inplace}(<TensorType(float32, vector)>)] Looping 1000 times took 1.999963 seconds Result is [ 1.23178029 1.61879337 1.52278066 ..., 2.20771813 2.29967761 1.62323284] Used the cpu
- Run the check.py to confirm that Theano is working correctly with GPU.
THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python check1.py
This should give:
Using gpu device 0: GeForce GTX 780 [GpuElemwise{exp,no_inplace}(<CudaNdarrayType(float32, vector)>), HostFromGpu(GpuElemwise{exp,no_inplace}.0)] Looping 1000 times took 0.583838 seconds Result is [ 1.23178029 1.61879349 1.52278066 ..., 2.20771813 2.29967761 1.62323296] Used the gpu
Note that: computation time has decreased, and it is indeed using GPU now.
- Done! If you reached here and did not meet any issues, I hope you can comment and confirm that this does help you, so others can trust this guide. If you have still spent hours/days, blame Linux. =]
Things That Does Not Work For Me
- Installing current nvidia drivers from apt-get.
$ apt-get install nvidia-current
Normally you would think apt-get install the latest nvidia drivers would be the best to go. Nope, after the installation 1) nvidia-smi does not work 2) I cannot get back into desktop 3) get error messages like RmInitAdapter failed in dmesg 4) no monitor found in /var/log/Xorg.0.log
- Install CUDA from apt-get.
$ apt-get install nvidia-cuda-toolkit
The same as 1., equally disastrous: 1) nvidia-smi does not work 2) I cannot get back into desktop 3) get error messages like RmInitAdapter failed in dmesg 4) no monitor found in /var/log/Xorg.0.log
3. Installing current nvidia from another “defacto” repository.
sudo apt-add-repository ppa:ubuntu-x-swat/x-updates sudo apt-get update sudo apt-get install nvidia-current
The same as 1., equally disastrous: 1) nvidia-smi does not work 2) I cannot get back into desktop 3) get error messages like RmInitAdapter failed in dmesg 4) no monitor found in /var/log/Xorg.0.log
4. Anything about Bumblebee.
Not sure what this is, just not related. Forget about it.
5. Also, I don’t have advice trying to repair a broken Ubuntu if you did anything of the above. But maybe you can try removing nvidia drivers and reinstalling the desktop, but doesn’t work for me either.
apt-get remove --purge nvidia* apt-get install --reinstall ubuntu-desktop unity apt-get install nvidia-current
- Using any nvidia driver like 340 or 304 version. They do not work.
The only thing that works for me is a fresh reinstall of Ubuntu 14.04. Nothing else.
Final Words
The installation guide from DeepLearning.net is very helpful, but it contains poison advice that messed up my display of my OS completely.
BTW, ever heard of “Linux is user-friendly but it is very selective of its friends.”? I know I am certainly not its friend… 😉


During the day I work as a Technical Consultant for
iDA MediaFoundry, a company specialized in Rich
Enterprise Applications.
I help clients get the most out of their investment by providing technical advice
and implementing software based on best practices.
I’m the co-founder and project lead of the GradleFx project, a software
library available for free to the community, by the community.
This is a Gradle plugin which allows developers to build
Flex/Actionscript applications with Gradle.
http://gradlefx.org
Sometimes I also build websites. My latest website has a
full-fledged admin panel in which the owners can edit the
content of the site, providing them value year-round.
http://dailyhugs.be
@ Flex User Group Belgium
I also like to share my knowledge whenever possible.
One of those ways is by speaking at user groups.


Camping Out in Hebron for Parshat Chayei Sara
by Photo of the DayMany thousands of Israelis will be spending Shabbat in Hebron in honor of Parshat Chayei Sara, the Torah portion read this weekend which discusses Avraham’s purchase of the Cave of the Patriarchs in order to bury Sara.
As there isn’t enough bed space within the small section of Hebron where Jews are allowed to live, people bring tents and campers and rough it for the weekend.


--- layout: archive title: Zulip Chat Archive permalink: /stream/113489-new-members/topic/Fail.20to.20generate.20equation.20lemmas.3F.html ---
I have a function that I defined recursively by cases on an inductive type. If i set_option eqn_compiler.lemmas false
it compiles, but simp
cannot use it ( simp debug ). if I set_option eqn_compiler.lemmas true
it does not compile ( eqn_compiler debug ). I can't tell from either of these where the error is - is there some other trace
option I can turn on, maybe?
(@Mario Carneiro , I am also thinking this is a problem that might just disappear when Jesse OKs your pull request defining inductive dfin
s instead of fin
s)
Last updated: Apr 24 2020 at 19:02 UTC


CHAPTER 362
PROGRESSIVE NEIGHBORHOODS PROGRAM
REPEALED. L 1981, c 82, §24; L 1984, c 40, §8; L 1985, c 305, §4.


Package com.mygdx.auber.Pathfinding
Class MapGraph
- java.lang.Object
-
- com.mygdx.auber.Pathfinding.MapGraph
-
-
Constructor Summary
Constructors Constructor Description MapGraph()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addNode(Node node)
Adds a node to the list of nodes in the graph, sets the node index and increases the index by one.void
connectNodes(Node fromNode, Node toNode)
Creates a path from one node to another.void
dispose()
Called when this object is deleted.com.badlogic.gdx.ai.pfa.GraphPath<Node>
findPath(Node startNode, Node goalNode)
Calculates a path from one node to another, populates the nodePath variable with the path it finds.com.badlogic.gdx.utils.Array<com.badlogic.gdx.ai.pfa.Connection<Node>>
getConnections(Node fromNode)
Returns the list of paths that start at a particular node.int
getIndex(Node node)
Returns the index of a particular Node instance.Node
getNode(float x, float y)
Returns a node based on the x,y position of the node.int
getNodeCount()
Return the count of how many nodes are in our search space.com.badlogic.gdx.utils.Array<Node>
getNodes()
The Nodes in this MapGraph.com.badlogic.gdx.utils.Array<Path>
getPaths()
The connections in this MapGraph.Node
getRandomNode()
Returns a random node from this MapGraph.
-
-
-
Method Detail
-
addNode
public void addNode(Node node)
Adds a node to the list of nodes in the graph, sets the node index and increases the index by one.- Parameters:
node
- the Node to add.
-
getNode
public Node getNode(float x, float y)
Returns a node based on the x,y position of the node.- Parameters:
x
- X coord of the node to find.y
- Y coord of the node to find.- Returns:
- The node at x,y.
-
connectNodes
public void connectNodes(Node fromNode, Node toNode)
Creates a path from one node to another.- Parameters:
fromNode
- Node path comes from.toNode
- Node path goes to.
-
dispose
public void dispose()
Called when this object is deleted.
-
findPath
public com.badlogic.gdx.ai.pfa.GraphPath<Node> findPath(Node startNode, Node goalNode)
Calculates a path from one node to another, populates the nodePath variable with the path it finds.- Parameters:
startNode
- Node to start the search fromgoalNode
- Node to finish search at- Returns:
- A path of nodes to follow to get from start to finish
-
getIndex
public int getIndex(Node node)
Returns the index of a particular Node instance.- Specified by:
getIndex
in interfacecom.badlogic.gdx.ai.pfa.indexed.IndexedGraph<Node>
- Parameters:
node
- Node to get index for- Returns:
- Int index for the node
-
getNodeCount
public int getNodeCount()
Return the count of how many nodes are in our search space.- Specified by:
getNodeCount
in interfacecom.badlogic.gdx.ai.pfa.indexed.IndexedGraph<Node>
- Returns:
- Number of nodes on map.
-
getConnections
public com.badlogic.gdx.utils.Array<com.badlogic.gdx.ai.pfa.Connection<Node>> getConnections(Node fromNode)
Returns the list of paths that start at a particular node.- Specified by:
getConnections
in interfacecom.badlogic.gdx.ai.pfa.Graph<Node>
- Parameters:
fromNode
- Node to get paths from.- Returns:
- Array of paths from node.
-
getRandomNode
public Node getRandomNode()
Returns a random node from this MapGraph.- Returns:
- A random Node from this MapGraph.
-
getNodes
public com.badlogic.gdx.utils.Array<Node> getNodes()
The Nodes in this MapGraph.- Returns:
- An Array of nodes in this graph.
-
getPaths
public com.badlogic.gdx.utils.Array<Path> getPaths()
The connections in this MapGraph.- Returns:
- An Array of connections in this graph.
-
-


This visualization is more geared towards match ups.
Was a particular composition strong against certain other comps? Was there a factor of game duration?
In the heat map below, points are colored green if the winning composition (x axis) was seen to win more often against the losing composition (y axis). Red circles are the opposite - that matchup went badly. Gray circles were even match ups. The graph is therefore symmetric around the x-y line, with values inverted. Matches with 100% loss rate are not represented (but this is a bug).
This data set includes all matches with full teams of mercenaries, so there are some data points that only represent a handful of games. (Looking at you, penta-Ocklepod.)
Duration
Mercenary Composition Match Ups : Hover over a data point to see the matchup


With gnatsd (Golang-based server), NATS can send up to 6 MILLION MESSAGES PER SECOND.
Here's a detailed Performance Comparison between NATS, Redis, NSQ, RabbitMQ, and more. The below chart compares throughput for 4k payloads:


|
IoTivity-Lite
|
#include <stddef.h>
Enumerations | |
| enum | oc_sp_types_t { OC_SP_BASELINE = 1 << 1, OC_SP_BLACK = 1 << 2, OC_SP_BLUE = 1 << 3, OC_SP_PURPLE = 1 << 4 } |
| OCF defined security profiles. More... | |
Functions | |
| int | oc_pki_add_mfg_cert (size_t device, const unsigned char *cert, size_t cert_size, const unsigned char *key, size_t key_size) |
| Add the manufactures PKI identity certificate. More... | |
| int | oc_pki_add_mfg_intermediate_cert (size_t device, int credid, const unsigned char *cert, size_t cert_size) |
| Add an intermediate manufacture CA certificate. More... | |
| int | oc_pki_add_mfg_trust_anchor (size_t device, const unsigned char *cert, size_t cert_size) |
| Add manufacture trust anchor CA. More... | |
| int | oc_pki_add_trust_anchor (size_t device, const unsigned char *cert, size_t cert_size) |
| Add trust anchor CA. More... | |
| void | oc_pki_set_security_profile (size_t device, oc_sp_types_t supported_profiles, oc_sp_types_t current_profile, int mfg_credid) |
| Set the OCF Security Profile. More... | |
OCF public key infrastructure (PKI) functions
Collection of functions used to add public key infrastructure (PKI) support to devices.
| enum oc_sp_types_t |
OCF defined security profiles.
Security Profiles differentiate devices based on requirements from different verticals such as industrial, health care, or smart home.
See oc_pki_set_security_profile() for a description of the each of the security profiles or reference the security profiles section of the OCF Security Specification.
| Enumerator | |
|---|---|
| OC_SP_BASELINE | The OCF Baseline Security Profile. |
| OC_SP_BLACK | The OCF Black Security Profile. |
| OC_SP_BLUE | The OCF Blue Security Profile. |
| OC_SP_PURPLE | The OCF Purple Security Profile. |
| int oc_pki_add_mfg_cert | ( | size_t | device, |
| const unsigned char * | cert, | ||
| size_t | cert_size, | ||
| const unsigned char * | key, | ||
| size_t | key_size | ||
| ) |
Add the manufactures PKI identity certificate.
| [in] | device | index of the logical device the identity certificate belongs to |
| [in] | cert | pointer to a string containing a PEM encoded identity certificate |
| [in] | cert_size | the size of the cert string |
| [in] | key | the PEM encoded private key associated with this certificate |
| [in] | key_size | the size of the key string |
-1
on failure | int oc_pki_add_mfg_intermediate_cert | ( | size_t | device, |
| int | credid, | ||
| const unsigned char * | cert, | ||
| size_t | cert_size | ||
| ) |
Add an intermediate manufacture CA certificate.
| [in] | device | index of the logical device the certificate chain belongs to |
| [in] | credid | the credential ID of the /oic/sec/cred entry containing the end-entity certificate |
| [in] | cert | pointer to a string containing a PEM encoded certificate |
| [in] | cert_size | the size of the cert string |
-1
on failure | int oc_pki_add_mfg_trust_anchor | ( | size_t | device, |
| const unsigned char * | cert, | ||
| size_t | cert_size | ||
| ) |
Add manufacture trust anchor CA.
| [in] | device | index of the logical device the trust anchor CA belongs to |
| [in] | cert | pointer to a string containing a PEM encoded certificate |
| [in] | cert_size | the size of the cert string |
-1
on failure | int oc_pki_add_trust_anchor | ( | size_t | device, |
| const unsigned char * | cert, | ||
| size_t | cert_size | ||
| ) |
Add trust anchor CA.
| [in] | device | index of the logical device the trust anchor CA belongs to |
| [in] | cert | pointer to a string containing a PEM encoded certificate |
| [in] | cert_size | the size of the cert strung |
-1
on failure | void oc_pki_set_security_profile | ( | size_t | device, |
| oc_sp_types_t | supported_profiles, | ||
| oc_sp_types_t | current_profile, | ||
| int | mfg_credid | ||
| ) |
Set the OCF Security Profile.
The OCF Security Specification defines several Security Profiles that can be selected based on the security requirements of different verticals such as such as industrial, health care, or smart home.
There are currently five types of Security Profiles specified by OCF.
Following, is a non-exhaustive summary of each Security Profile type. For more details see OCF Security Specification section regarding Security Profiles.
0
| [in] | device | index of the logical device the security profile is be set on |
| [in] | supported_profiles | a bitwise OR list of oc_sp_types_t that are supported by the device. The current_profile value may be changed to one of the other supported_profiles during the onboarding process. |
| [in] | current_profile | the currently selected security profile |
| [in] | mfg_credid | the credential ID of the /oic/sec/cred entry containing the manufactures end-entity certificate |


JavaNCSS Metric Results[ package ] [ object ] [ method ] [ explanation ] The following document contains the results of a JavaNCSS metric analysis, using JavaNCSS version 33.54. PackagesPackages[ package ] [ object ] [ method ] [ explanation ] Packages sorted by NCSS.
ObjectsObjects[ package ] [ object ] [ method ] [ explanation ] TOP 30 classes containing the most NCSS. TOP 30 classes containing the most methods. Averages.
MethodsMethods[ package ] [ object ] [ method ] [ explanation ] TOP 30 Methods containing the most NCSS. Averages.
ExplanationsExplanations[ package ] [ object ] [ method ] [ explanation ] Non Commenting Source Statements (NCSS) Statements for JavaNCSS are not statements as specified in the Java Language Specification but include all kinds of declarations too. Roughly spoken, NCSS is approximately equivalent to counting ';' and '{' characters in Java source files. Not counted are empty statements, empty blocks or semicolons after closing brackets. Of course, comments don't get counted too. Closing brackets also never get counted, the same applies to blocks in general.
In some cases consecutive semicolons are illegal according to the JLS but JavaNCSS still tolerates them (thought JavaNCSS is still more strict as 'javac'). Nevertheless they are never counted as two statements. Cyclomatic Complexity Number (CCN) CCN is also know as McCabe Metric. There exists a much hyped theory behind it based on graph theory, but it all comes down to simply counting 'if', 'for', 'while' statements etc. in a method. Whenever the control flow of a method splits, the "CCN counter" gets incremented by one. Each method has a minimum value of 1 per default. For each of the following Java keywords/statements this value gets incremented by one:
Also if the control flow of a method returns abortively the CCNvalue will be incremented by one:
An ordinary return at the end of method will not be counted. Note that 'else', 'default', and 'finally' don't increment the CCN value any further. On the other hand, a simple method with a 'switch' statement and a huge block of 'case' statements can have a surprisingly high CCN value (still it has the same value when converting a 'switch' block to an equivalent sequence of 'if' statements). |


Your browser is currently not supported by MyUCR
Please use one of the following supporting browsers when viewing this site:


Hey! My name is mackenzie but you can call me mac i work as the lead designer for the game studio behind humanity,im also a student in the past ive worked on asset and character design projects as well as a website i got interested in digital media because of my love for its culture and my hobbies steeped in the work.
Hey! My name is mackenzie but you can call me mac. i work as the lead designer for the game studio behind humanity, im also a student in the past I’ve worked on asset and character design projects as well as a website i got interested in digital media because of my love for its culture and my hobbies steeped in the work, if i had to choose a biggest inspiration or favourite game studio it would have to go to Bethesda games studio and their titles such as Skyrim and the fallout series. I’m passionate about the gaming industry and it is my favourite hobby, my previous work includes asset and character design and I’m currently working as a student.
given the opportunity to create a game i decided to go it something that resonates with my past and new audiences; a dark open world exploration game i think this type of game is super cool and the project turned out pretty awesome as a result. Here are some of my past projects:
- Animation - Character designAs for the current project im working on i decided to create a game with a simple cartoonish art style and as far as direction i wanted to take players to a brand new dystopia that hasnt been explored before. The game is estimated to take 2 and a half years to complete with a budget of around 2 million. As for the software and systems for all character design we are going through the adobe chain with photoshop animator illustrator ect and the game will be designed in the unreal engine. I hope to release the game 2022 january 10th and it will be available to purchase and play on pc and all major consoles.
Bellow are some examples of our design and our animation trailer (credits bellow)
CREDITS - Animation video - text to speech 1 - text to speech 2 - Sound effects - Baby crying audio


{% endif %} Dear {{borrower.surname}} Family,
This automated email is sent from an unmonitored email account. Please do not reply. If you have any questions regarding your account, please bring a copy of this e-mail to the library on Saturday so we can fix any errors or send an email to {{config.reply_to}}.
{% if borrower.fine_due() > 0 %} Our records show you currently owe fines of ${{'%.2f' % borrower.fine_due()}}.
{% endif %} Our records indicate you have the following {{borrower.loans|length}} item{{borrower.loans|length|pluralize}} checked out:
{% for loan in borrower.loans %}
| Title | {{loan.title}} |
| Item Type | {{loan.description}} |
| Author | {{loan.author}} |
| Barcode | {{loan.barcode}} |
| Due Date | {{loan.date_due.strftime('%d-%b-%Y')}} |
| Item Fine | {{"$%.2f" % loan.fine_due}} |
{% endfor %}
Thank you for using the GSSB library.


In the cylindrical geometry, continua with different poloidal mode numbers
will intersect each other, as shown in Fig. 1. Next, we calculate
the radial location of the intersecting point of two continua with poloidal
mode number and , respectively. In the intersecting point, we have
|
(237) |
i.e.
|
(238) |
which gives
|
(239) |
or
|
(240) |
Inspecting the expression for
in Eq. (323), we know
that only the case in Eq. (240) is possible, which gives
|
(241) |
which further reduces to
|
(242) |
The above equation determines the radial location where the continuum
intersect the continuum. Note that a mode with two poloidal modes has
two corresponding resonant surfaces. For the case where the mode has and
poloidal harmonics, the resonant surfaces are respectively
and
. Note that the value of given in Eq. (242)
is between the above two values.
In toroidal geometry, the different poloidal modes are coupled, and the
continuum will ``reconnect'' to form a gap in the vicinity of the original
intersecting point, as shown in Fig. . Therefore the original intersecting
point, Eq. (242), gives the approximate location of the gap.
Furthermore, using Eq. (242), we can determine the frequency of the
intersecting point, which is given by
|
(243) |
which can be further written
|
(244) |
According to the same reasoning given in the above, Eq. (244) is an
approximation to the center frequency of the TAE gap. The frequency and the
location given above are also an approximation to the frequency and location
of the TAE modes that lie in the gap.
For the ellipticity-induced gap (EAE gap), which is formed due to the coupling
of and harmonics, the location is approximately determined by
|
(245) |
which gives
|
(246) |
and the approximate center angular frequency is
|
(247) |
which can be written as
Generally, for the gap formed due to the coupling of and
harmonics, we have
which gives
|
(248) |
and
|
(249) |
Equation (249) can also be written as
|
(250) |
yj
2015-09-04


For starters, I'm not usualy one to spill my guts, and personal information to unkown sources. But this is a story of somebody who got caught up in an addiction and continues to feel the pain of that addiction to this day. I'm here simply to warn users of this, and any other addictive drug (is there any other kind?) of the danger they may encounter.
I live in a rather high class community, wealthy and fairly clean as far as drugs go, the occasional pot, but nothing to serious. This was everything I wanted to get away from, old mentality, clean cut, downright yuppie enviroment, I didn't fit in because I myself was not high class. I was a loser, and an outcast in this school. I felt the only way I was noticed was smoking pot, and I began seriously considering taking harder drugs.
I began smoking pot around age 12, and began meeting people in the bigest town near mine. I met a friend who I will refer to as L. L and I first met when he offered to throw down on a some pot with him and I gladly accepted. We were laughing and having a great time and never thought once about who we were and where we were from.
L and I got to talking, and drugs quickly became a primary topic. L was knee deep in the drug business, his family was as well. He had pounds of coke and heroin coming in and out of his house weekly. He had a meth lab as well in his greenhouse. I visited L's house a short time after we had met. I quickly sank my feet into his town, meeting a girlfriend, and getting into a band with L, It all made me feel so accepted.
 After pot I explored the realm of Hallucingents (acid, psilocybe, mescaline).  I first tried meth at age 14. L brought out a sack after practice, and offered me a line.  Everything is such a speedy good feeling, everyone around me likes me, man I can run a marathon and clean my entire house.
The drug made me a person I always wanted to be. In my town nobody liked me, and basically disregarded my exisistance in general. But on meth, I felt like everybody liked me, and everyone wanted to be near me, I was social, funny, energetic, and just a better person. I continued to snort meth everyday for about a month. After a month of constantly being high on the stuff, I tried to stop for a while, and that was a mistake. Withdrawal left me sitting in my room for days. Not leaving for fear that the police were out there, to bust me for my use of the drug. I pushed my bed against the door and sat in the middle of the room shaking for a long amount of time, barely ever sleeping. I knew what the only thing that could make me feel better was.
I got to L's and began snorting again. Week after week, just trying to never be sober, not even to get high sometimes, just for fear of the crash and withdrawal. My girlfriend was enraged about the drug, and would get into huge fights with me about it. This added to my depression and uneasyness which already came with chronic meth use. I was caught between my love for her, and my love for meth. I began to lash out at the little friends I had before my meth use. Blaming them for my unhappyness, and ignoring them when they said I had a problem.  I was living a shallow sad existance.
Eventually my girlfriend broke up with me, we couldent handle the pressure of everything going on and the relationship just ended. I was morbidly depressed. I decided to quit the drug cold turky and never come back to it again, and to deal with the withdrawal in my own way. It came on quickly, the intense paranoia, insomnia, and now intense vomiting and physical sickness as well. It all lasted for 2 weeks straight. I eventually got better, and got my feet onto the ground. Withdrawals now come once a month, I constantly crave the stuff, and I have only had a few relapses.
Meth, and addictions in general are things we do to make ourselves feel better. There somthing we can turn to in our time of need. This is not a healthy way of dealing with our problems. For any other kids facing these problems, don't turn to drugs to fix them. If your going to do drugs, use them for fun, not a fix.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


import { PaginationModule } from '@sbb-esta/angular-public';
PaginationComponent
Selector: sbb-pagination
| Name | Description |
|---|---|
|
@Input()
|
The starting page of the pagination. |
|
@Input()
|
A custom function called everytime a new pagination item has been clicked. |
|
@Input()
|
Maximum length of the pagination. |
|
@Output()
|
This event can be used by parent components to handle events on page change. |
|
|
|
|
|
Reference to list of page buttons of the sbb-pagination. |
|
|
Reference to list of page links of the sbb-pagination. |
|
|
Amount of rotating pagination items. |
|
|
Pagination descriptors. |
|
|
Pagination page numbers. |
|
|
Role of the sbb-pagination. |
|
|
|
|
|
| buttonClick | |
|---|---|
|
Method on click to a page button. |
|
| Parameters | |
|
page PageDescriptor
|
Page button clicked. |
| hasNext | |
|---|---|
|
Used to know if current page has a next page. |
|
| Returns | |
boolean
|
Value true/false to indicate if a next page exists or not. |
| hasPrevious | |
|---|---|
|
Used to know if current page has a previous page. |
|
| Returns | |
boolean
|
Value true/false to indicate if a previous page exists or not. |
| linkClick | |
|---|---|
| Parameters | |
|
page PageDescriptor
|
|
| nextLink | |
|---|---|
| Parameters | |
|
page PageDescriptor
|
|
| previousLink | |
|---|---|
| Parameters | |
|
page PageDescriptor
|
|
| selectPage | |
|---|---|
|
Selects the page just clicked or activated by keyboard and calls the linkGenerator method if defined. |
|
| Parameters | |
|
pageNumber
|
Page number to select. |
|
page PageDescriptor
|
|
NavigationComponent
Selector: sbb-navigation
| Name | Description |
|---|---|
|
@Input()
|
A custom function called everytime a new pagination item has been clicked. |
|
@Input()
|
The next page descriptor. |
|
@Input()
|
The previous page descriptor. |
|
@Output()
|
This event can be used by parent components to handle events on page change. |
|
|
|
|
|
|
|
|
Role of the sbb-navigation. |
PageDescriptor
| Name | Description |
|---|---|
|
|
Page number displayed. |
|
|
Used to know if current page has a next page button. |
|
|
Used to know if current page has a previous page button. |
|
|
Index of page. |
|
|
Ellipsis status of a page. |
|
|
Initial status of page. |
|
|
Refers to the pagination item clicked. |
|
|
Used to know if current page link has a next page link. |
|
|
|
|
|
Used to know if current page link has a previous page link. |
|
|
PageChangeEvent
| Name | Description |
|---|---|
|
|
Current page number. |
|
|
Current index of page selected. |
RouterPaginationLink
| Name | Description |
|---|---|
|
|
Router reference to navigate between page buttons. |
LinkGeneratorResult
Page
| Name | Description |
|---|---|
|
|
Page number displayed. |
|
|
Index of page. |
NavigationPageDescriptor
| Name | Description |
|---|---|
|
|
|
|
|
|
|
|
NavigationPageChangeEvent
Type:
'next' | 'previous'