| 1 |
Liumbruno_2014 |
Solvent/detergent plasma: pharmaceutical characteristics and clinical experience |
Liumbruno, Giancarlo Maria; Franchini, Massimo |
2014 |
2014-05-21 |
PMC |
N |
PMC7088539 |
24844804.0 |
10.1007/s11239-014-1086-1 |
5lnt5sp4 |
0.955171 |
|
Burnouf_2007 |
| 2 |
Klamroth_2013 |
Pathogen inactivation and removal methods for plasma‐derived clotting factor concentrates |
Klamroth, Robert; Gröner, Albrecht; Simon, Toby L. |
2013 |
2013-09-30 |
PMC |
N |
PMC7169823 |
24117799.0 |
10.1111/trf.12423 |
0jgw083h |
0.945977 |
|
|
| 3 |
Kempf_2007 |
Pathogen inactivation and removal procedures used in the production of intravenous immunoglobulins |
Kempf, Christoph; Stucki, Martin; Boschetti, Nicola |
2007 |
2007-03-31 |
PMC |
N |
PMC7129354 |
16581263.0 |
10.1016/j.biologicals.2006.01.002 |
y1d0leic |
0.913792 |
|
|
| 4 |
Caricati_2013 |
Safety of snake antivenom immunoglobulins: Efficacy of viral inactivation in a complete downstream process |
Caricati, C. P.; Oliveira‐Nascimento, L.; Yoshida, J. T.; Stephano, M. A.; Caricati, A. T. P.; Raw, I. |
2013 |
2013-06-27 |
PMC |
N |
PMC7161767 |
23804299.0 |
10.1002/btpr.1758 |
oxfnt2n4 |
0.835939 |
|
|
| 5 |
Burnouf_2014 |
“Go no Go” in plasma fractionation in the world's emerging economies: Still a question asked 70 years after the COHN process was developed! |
Burnouf, Thierry; Seghatchian, Jerard |
2014 |
2014-10-31 |
PMC |
N |
PMC7106424 |
25457750.0 |
10.1016/j.transci.2014.10.002 |
pc98lbg6 |
0.828307 |
|
Burnouf_2007 |
| 6 |
Burnouf_2007 |
Modern Plasma Fractionation |
Burnouf, Thierry |
2007 |
2007-04-30 |
PMC |
N |
PMC7125842 |
17397761.0 |
10.1016/j.tmrv.2006.11.001 |
s8rxzm0t |
0.801673 |
|
Burnouf_2004 |
| 7 |
Vaughn_1984 |
Public health considerations associated with molluscan aquaculture systems: Human viruses |
Vaughn, James M.; Landry, Edward F. |
1984 |
1984-06-15 |
PMC |
N |
|
|
10.1016/0044-8486(84)90273-4 |
d1r504zx |
0.767826 |
|
|
| 8 |
Gröner_2017 |
Effective inactivation of a wide range of viruses by pasteurization |
Gröner, Albrecht; Broumis, Connie; Fang, Randel; Nowak, Thomas; Popp, Birgit; Schäfer, Wolfram; Roth, Nathan J. |
2017 |
2017-11-16 |
NONCOMM |
N |
PMC7169671 |
29148053.0 |
10.1111/trf.14390 |
w19hl2vs |
0.758510 |
|
|
| 9 |
Burnouf_2004 |
Assessment of the viral safety of antivenoms fractionated from equine plasma |
Burnouf, Thierry; Griffiths, Elwyn; Padilla, Ana; Seddik, Salwa; Stephano, Marco Antonio; Gutiérrez, José-María |
2004 |
2004-09-30 |
PMC |
N |
PMC7128792 |
15536042.0 |
10.1016/j.biologicals.2004.07.001 |
6k7tcgfs |
0.718500 |
|
|
| 10 |
Maes_2007 |
Evaluation of the efficacy of disinfectants against Puumala hantavirus by real-time RT-PCR |
Maes, Piet; Li, Sandra; Verbeeck, Jannick; Keyaerts, Els; Clement, Jan; Van Ranst, Marc |
2007 |
2007-04-30 |
PMC |
N |
|
17188760.0 |
10.1016/j.jviromet.2006.11.037 |
ggytzpqy |
0.707638 |
|
|
| 11 |
Heldt_2008 |
Identification of Trimeric Peptides That Bind Porcine Parvovirus from Mixtures Containing Human Blood Plasma |
Heldt, Caryn L.; Gurgel, Patrick V.; Jaykus, Lee‐Ann; Carbonell, Ruben G. |
2008 |
2008-09-05 |
PMC |
N |
PMC7161850 |
18470993.0 |
10.1021/bp070412c |
h55l3lvp |
0.703797 |
|
|
| 12 |
Valdés_2002 |
Chromatographic removal combined with heat, acid and chaotropic inactivation of four model viruses |
Valdés, R; Ibarra, Neysi; Ruibal, I; Beldarraı́n, A; Noa, E; Herrera, N; Alemán, R; Padilla, S; Garcia, J; Pérez, M; Morales, R; Chong, E; Reyes, B; Quiñones, Y; Agraz, A; Herrera, L |
2002 |
2002-07-03 |
PMC |
N |
PMC7126170 |
12044553.0 |
10.1016/s0168-1656(02)00047-0 |
pzc4ivvg |
0.678695 |
|
|
| 13 |
Rabenau_2005 |
SARS-coronavirus (SARS-CoV) and the safety of a solvent/detergent (S/D) treated immunoglobulin preparation |
Rabenau, H.F.; Biesert, L.; Schmidt, T.; Bauer, G.; Cinatl, J.; Doerr, H.W. |
2005 |
2005-06-30 |
PMC |
N |
PMC7128630 |
15939287.0 |
10.1016/j.biologicals.2005.01.003 |
hdkmwihu |
0.634846 |
|
|
| 14 |
Junter_2020 |
Polysaccharide-based chromatographic adsorbents for virus purification and viral clearance |
Junter, Guy-Alain; Lebrun, Laurent |
2020 |
2020-01-13 |
PMC |
N |
|
|
10.1016/j.jpha.2020.01.002 |
zddwajzg |
0.618490 |
|
|
| 15 |
Malenovská_2014 |
The influence of stabilizers and rates of freezing on preserving of structurally different animal viruses during lyophilization and subsequent storage |
Malenovská, H. |
2014 |
2014-11-04 |
PMC |
N |
PMC7166340 |
25250638.0 |
10.1111/jam.12654 |
iim3akyw |
0.523030 |
|
|
| 16 |
Fedosyuk_2019 |
Simian adenovirus vector production for early-phase clinical trials: A simple method applicable to multiple serotypes and using entirely disposable product-contact components |
Fedosyuk, Sofiya; Merritt, Thomas; Peralta-Alvarez, Marco Polo; Morris, Susan J; Lam, Ada; Laroudie, Nicolas; Kangokar, Anilkumar; Wright, Daniel; Warimwe, George M; Angell-Manning, Phillip; Ritchie, Adam J; Gilbert, Sarah C; Xenopoulos, Alex; Boumlic, Anissa; Douglas, Alexander D |
2019 |
2019-11-08 |
None |
N |
PMC6949866 |
31047679.0 |
10.1016/j.vaccine.2019.04.056 |
u8y47qmd |
0.463697 |
|
|
| 17 |
Wolff_2008 |
Downstream Processing: From Egg to Cell Culture‐Derived Influenza Virus Particles |
Wolff, M. W.; Reichl, U. |
2008 |
2008-05-27 |
PMC |
N |
PMC7162065 |
|
10.1002/ceat.200800118 |
zx26o1pt |
0.443961 |
|
|
| 18 |
Yang_2015 |
Efficient Structure Resonance Energy Transfer from Microwaves to Confined Acoustic Vibrations in Viruses |
Yang, Szu-Chi; Lin, Huan-Chun; Liu, Tzu-Ming; Lu, Jen-Tang; Hung, Wan-Ting; Huang, Yu-Ru; Tsai, Yi-Chun; Kao, Chuan-Liang; Chen, Shih-Yuan; Sun, Chi-Kuang |
2015 |
2015-12-09 |
COMM-USE |
N |
PMC4673452 |
26647655.0 |
10.1038/srep18030 |
x8tnweih |
0.438396 |
|
Wu_Y_2014, Wang_2019 |
| 19 |
Thirion_2020 |
Lyophilized Matrix Containing Ready-to-Use Primers and Probe Solution for Standardization of Real-Time PCR and RT-qPCR Diagnostics in Virology |
Thirion, Laurence; Dubot-Peres, Audrey; Pezzi, Laura; Corcostegui, Iban; Touinssi, Mhammed; de Lamballerie, Xavier; Charrel, Remi N. |
2020 |
2020-01-30 |
COMM-USE |
N |
PMC7077261 |
32019076.0 |
10.3390/v12020159 |
jkzqmkz6 |
0.428197 |
|
|
| 20 |
Wolf_2014 |
Downstream processing of cell culture-derived virus particles |
Wolf, Michael W; Reichl, Udo |
2014 |
2014-01-09 |
PMC |
N |
PMC7103681 |
21988309.0 |
10.1586/erv.11.111 |
dw989txm |
0.423567 |
|
Vázquez-Ramírez_2019, Vázquez-Ramírez_2018 |
| 21 |
McKeen_2012 |
1 Introduction to Food Irradiation and Medical Sterilization |
McKeen, Laurence |
2012 |
2012-12-31 |
PMC |
N |
PMC7151773 |
|
10.1016/b978-1-4557-2598-4.00001-0 |
25qqr3vt |
0.403487 |
|
|
| 22 |
Yunoki_2004 |
Heat sensitivity of a SARS‐associated coronavirus introduced into plasma products |
Yunoki, M.; Urayama, T.; Yamamoto, I.; Abe, S.; Ikuta, K. |
2004 |
2004-12-07 |
PMC |
N |
PMC7169306 |
15585028.0 |
10.1111/j.1423-0410.2004.00577.x |
cr87y1ep |
0.396891 |
|
|
| 23 |
Wood_1998 |
The action of three antiseptics/disinfectants against enveloped and non-enveloped viruses |
Wood, A.; Payne, D. |
1998 |
1998-04-30 |
PMC |
N |
PMC7134397 |
9602977.0 |
10.1016/s0195-6701(98)90077-9 |
0m1ngob3 |
0.357269 |
|
|
| 24 |
Sano_2016 |
Risk management of viral infectious diseases in wastewater reclamation and reuse: Review |
Sano, Daisuke; Amarasiri, Mohan; Hata, Akihiko; Watanabe, Toru; Katayama, Hiroyuki |
2016 |
2016-05-31 |
PMC |
N |
PMC7111293 |
26985655.0 |
10.1016/j.envint.2016.03.001 |
b5tduubu |
0.342490 |
|
|
| 25 |
Junter_2017 |
Cellulose-based virus-retentive filters: a review |
Junter, Guy-Alain; Lebrun, Laurent |
2017 |
2017-06-01 |
PMC |
N |
PMC7088658 |
|
10.1007/s11157-017-9434-1 |
gw8mgg4m |
0.339553 |
Yang_2007 |
Junter_2020 |
| 26 |
Bradley_1985 |
The agents of non-A, non-B viral hepatitis |
Bradley, Daniel W. |
1985 |
1985-04-30 |
PMC |
N |
|
3923011.0 |
10.1016/0166-0934(85)90047-3 |
jznp3n1n |
0.315104 |
|
|


Your information.
Education
Ph.D Computer Science
Your University
2015 - 2019
- item 1
- item 2
- item 3
- item 4
M.S. Computer Science
Your University
2012 - 2014
- item 1
- item 2
- item 3
- item 4
B.S. Computer and Systems Engineering
Your university
2004 - 2009
- item 1
- item 2
Work Experience
Facebook
Web Developer
2012 - Present
- Description 1
- Description 2
Intel
Senior Software Developer
2012 - 2013
- Description 1.
- Description 2.
Skills
Technical
- Skill 1.
- Skill 2.
- Skill 3.
Others
- Skill 1.
- Skill 2.
Awards
- Award 1
- Award 2
- Award 3
Interests
Your interests.


>
This is part of the old website. New website begins at fontforge.github.io
Are you a web developer? Help us migrate this page on Github
This year I'm doing some elementary survey in Berenty Reserve we are doing a tree survey in hopes of preserving the lemur's habitat.


I am a Full Stack Developer. In my free time, I use Code to overengineer and automate repetitive tasks.
A simple Customer Relationship Management (CRM) tool for freelancers. Connect the app to your google Calender and email to streamline your administrative work. Email promotions, schedule/track services, view trends directly in one application. Responsive full-stack web app.
Try it: Freelance Pro
Client-side code: Github: Freelance Pro-client
Backend code: Github: Freelance Pro- backend
Trafus is a team budgeting application. Whether you are co-managing a budget for work, family, or project Trafus can track it for you. Create a team and share your team details with your team members. Each member can view and update your budget. Responsive full-stack web app.
Try it: Trafus
Client-side code: Github: Trafus client
Backend code: Github: Trafus backend
I have 5 years experience in managing trades settlements process for Canada's largest bank. My Goal in my team is to reduce risk, systematize add hoc processes, and automate. I use VBS and VBA to inject automation through scripting in third party production applications we use.
| Business Goal | Main Technology |
|---|---|
| Automate bookeeping entries in third party application. Script with VBS to allow third party application to consume data directly from Microsoft Excel. | VBS,Microsoft Excel,Broadridge Cage (ADP) |
| Automate emailing of a fail report. Script with VBA in excel to parse data within Excel, send subsets of the data via Microsoft Outlook | VBA,HTML,Microsoft Excel,CSS,Microsoft Outlook |
| Preprocess Microsoft Excel data using VBA. Utilize scripts to preprocess data from various sources for various consumption | VBA, Microsoft Excel |
| Obtain Real time firm positions for a medium set (5-1000) of securities through scripting within a third party application. Automation via scripting reduces the operator requirement on repetitive tasks and reduces the error rate in data gathering. | VBS, Canadian Depository for Securities(CDS) Microsoft Excel |
I am a Full Stack Web Developer. I use code to tackle everyday problems and streamline processes. Beyond coding, my skills lie in breaking down large jobs to its individual components to systematize and scale. If you have a large project to tackle or small repetitive tasks to automate, let's connect.


Today, our intern Wilfred is going away after 5 or 6 weeks of internship. He worked on monitoring the Google page rank of our pages, and of given keywords we want to follow at Fotopedia. Of course, he mainly did ruby code, with mongo, redis/resque and protoviz graphs.
We are now almost able to identify the progress of the rank of most of our page across time. This will be very useful in a near future.
It was a pleasure to work with him. I wish him good luck in his studies and later in his professional life !
Bon Vent Wilfred :)
{% endraw %}


Creates a series of locally position dependent histograms. Inspired by David Lowe's SIFT descriptor. Takes I, divides it into a number of regions, and creates a histogram for each region. I is divided into approximately equally sized hyper-rectangular regions so that together these hyper-rectangles cover I. The hyper-rectangles are actually 'soft', in that each region is actually defined by a gaussian mask, for details see maskGaussians. parMask, parameters to maskGaussians, controls details about how the masks are created. Optionally, each value in I may have associated weight given by wtMask, which should have the same exact dimensions as each channel of I. If multCh is set to true, then: I is an [M1xM2x...xMkxnd] array of nd channels otherwise I is an [M1xM2x...xMk] array of 1 channel If nd==1, histcImLoc creates a 1D histogram using histc2. More generally, histcImLoc creates an nd dimensional histogram (again using hist2c). histcImLoc creates nMasks (number of masks) histgorams, each which have dimension nBins^nd. So if nd==1 the output of this function is [nBins x nMasks], and for example if nd==2 the output is [nBins x nBins x nMasks]. If nd is large computing the histograms is time consuming. USAGE h = histcImLoc( I, edges, parMask, [wtMask], [multCh] ) INPUTS I - M1xM2x...xMkxnd array, (nd channels each of M1xM2x...xMk) edges - quantization bounds, see histc2 parMask - cell of parameters to maskGaussians wtMask - [] M1xM2x...xMk numeric array of weights multCh - [0] if 1 last dimension of I is number of channels OUTPUTS h - nd-histograms [nBins^nd x nMasks] EXAMPLE - multCh==0 I = filterGauss([100 100],[],[],0); h = histcImLoc(I,10,{2,.6,.1,1},[],0); figure(1); im(h) EXAMPLE - multCh==1 I = filterGauss([100 100],[],[],0); h1 = histcImLoc( cat(3,I,I), 10, {2,.6,.1,0},[],1); h2 = histcImLoc( cat(3,I,randn(size(I))),10,{2,.6,.1,0},[],1); figure(1); montage2(h1); figure(2); montage2(h2); See also HISTC2, MASKGAUSSIANS, ASSIGNTOBINS, HISTCIMWIN Piotr's Computer Vision Matlab Toolbox Version 2.0 Copyright 2014 Piotr Dollar. [pdollar-at-gmail.com] Licensed under the Simplified BSD License [see external/bsd.txt]


jeo is a library for building spatial applications that provides tools for geometry and projection support in addition to drivers for a number of spatial formats. The goal of jeo is provide simple and convenient apis for developers that require spatial functions in their applications. Jeo is licensed under the Apache Version 2.0 license.
Installation and setup.
Reference and API documentation.
For developers and contributors.


Preparation time
over 2 hours
Cooking time
30 mins to 1 hour
Serves
Serves 6
Dietary
Homemade peanut ice cream, coffee and cardamom cake with pistachio cream and a sprinkling of toffee popcorn dust. Who could resist this nutty recipe?
Equipment and preparation: you will need a 23cm/9in deep cake tin and an ice cream maker.
For the peanut ice cream, whisk the yolks with 60g/2¼oz of the caster sugar in a large bowl until thick and creamy.
Place the milk, cream and remaining caster sugar in a pan and bring to the boil.
Pour the hot milk into the whisked yolks and stir well.
Return the mixture to the pan and cook over a very low heat stirring constantly with a spatula until the mixture is thick enough to coat the back of a spoon.
Cool the mixture, then refrigerate for at least one hour. Strain the mixture into an ice cream maker and mix in the peanuts. Churn until frozen, following the manufacturer's instructions. Set aside in the freezer until ready to serve.
For the cake, preheat the oven to 190C/375F/Gas 5. Grease and line a 23cm/9in deep cake tin.
Place the butter and sugar into a bowl and whisk until light and fluffy.
Add the eggs, one at a time, beating between each addition until well incorporated.
Add the coffee and ground cardamom seeds and mix well, then fold in the flour.
Pour the mixture into the cake tin, transfer to the oven and bake for 20-25 minutes, or until golden-brown and well risen. Remove from the oven and allow to cool.
For the filling, place the cream in a bowl and whisk until soft peaks form when the whisk is removed.
Add the icing sugar, ground cardamom seeds and pistachios and whisk gently until the mixture forms firm peaks.
For the icing, place the icing sugar in a bowl, add the coffee and mix together until smooth.
To assemble the cake, carefully cut the cake in half horizontally with a bread knife and place the bottom half on a plate. Spread the pistachio cream over the bottom half of the cake, then top with the other half. Spoon over the icing, allowing it to drizzle down the sides of the cake.
For the toffee popcorn dust, blend the toffee popcorn in a food processor to a powder.
To serve, using a pastry brush paint a semi-circle of oil onto each plate and sprinkle over the popcorn dust. Shake any excess off the plates. Cut the cake into slices and place on the plates with a scoop of ice cream and a sprig of mint.


Hello {{ fullName }} ! You have {{ numberOfTasks }} task(s).
| Id | Description |
|---|---|
| {{ task.id }} | {{ task.description }} |
Are you not Tiago? Please, type in your new name in the following format: [name] + [surname].
Strive not to be a success, but rather to be of value. –Albert Einstein
We also offer a kitten image, for FREE!
Have you already noticed we are trying to fill this space?


There's a caveman hidden in the Red Dead Redemption 2 game files
by James DavenportRed Dead Redemption 2's PC release means players can mine for secrets rather than just wait for Rockstar to make a move. In what's a discovery that's likely cut content, or something waiting in the wings for a future expansion or multiplayer update, Reddit user thatfalloutguy stumbled onto a complete caveman player model buried in the game files.
The skin was discovered by using Lenny's Simple Trainer, a mod that allows players to enable cheats, transport around the map, and swap out player models with anything in the file directory. (Chris used it to turn into an eagle.)
By selecting model A_M_M_UniCorpse 01 and then using RDR2 Outfit Manager to swap to variation 45 of the base category, it's possible to inhabit the body of this husky boy.
Be warned: If you want to give the old guy a trial run, make sure autosaves are off while using mods, and don't hop into Red Dead Online. Any foreign files in the game directory can result in a ban from online modes. Remove the trainers and all associated files before the RDR2 root directory before enabling autosaves or resuming online play.
Image 1 of 3
Image 2 of 3
Image 3 of 3
Changing skins, even if you look flawless, ain't a flawless process. Since everyone's a stand-in for Arthur, it means our caveman can't play the all-important RDR2 fashion game, grow or shave facial hair, or use his status as early man to get a discount on giant turkey legs.
The trainer is a bit buggy too. Whenever I sat down, the screen would pulse red as if I was going to die any minute, perhaps a warning from a guy who predated our modern back problems, someone who either worked on their feet stabbing huge mammals or did deep squats around the fire.
Minor problems aside, watching the caveman do and say Arthur things doesn't get old.


This tree shows similarity of the latest container of each public collection, and unlike the live version in Singularity Hub, this version was generated using content hashes for a more robust metric. The other version (quick, generated on a nightly basis) has a metric that is based on the number of common folder paths between the containers, so containers with similar software will be shown closer together in the tree. We use hierarchical clustering from scipy to generate clusters, and d3.js to render the tree.


| 038:044 Khan | : |
"And take in your hand a bundle of thin grass and strike therewith (your wife), and break not your oath. Truly! We found him patient. How excellent (a) slave! Verily, he was ever oft- returning in repentance (to Us)! |
| 038:044 Maulana | : |
And take in thy hand few worldly goods and earn goodness therewith and incline not to falsehood. Surely We found him patient; most excellent the servant! Surely he (ever) turned (to Us). |
| 038:044 Pickthal | : |
And (it was said unto him): Take in thine hand a branch and smite therewith, and break not thine oath. Lo! We found him steadfast, how excellent a slave! Lo! he was ever turning in repentance (to his Lord). |
| 038:044 Rashad | : |
"Now, you shall travel the land and preach the message, to fulfill your pledge." We found him steadfast. What a good servant! He was a submitter. |
| 038:044 Sarwar | : |
We told him, "Take a handful of straw. Strike your wife with it to fulfill your oath." We found him to be patient. What an excellent servant he was. He was certainly most repenting. |
| 038:044 Shakir | : |
And take in your hand a green branch and beat her with It and do not break your oath; surely We found him patient; most excellent the servant! Surely he was frequent m returning (to Allah). |
| 038:044 Sherali | : |
And WE commanded him: 'Take in thy hand a handful of dry twigs and strike therewith, and incline not towards falsehood.' Indeed, WE found him steadfast. An excellent servant was he. Surely, he was constantly turning to God. |
| 038:044 Yusufali | : |
"And take in thy hand a little grass, and strike therewith: and break not (thy oath)." Truly We found him full of patience and constancy. How excellent in Our service! ever did he turn (to Us)! |
Concepts/Themes Covered: الإنسان والعلاقات الأخلاقية > الأخلاق الحميدة > الصبر Man and The Moral Relations> Good Morals>Patience
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


closed
by None at 2022-03-22 15:52:02.I do! Should be fixed now, thanks!
head_ref_force_pushed
by None at 2022-03-22 16:54:46.referenced
by Jane Sandberg at 2022-03-22 17:13:32.merged
by Jane Sandberg at 2022-03-22 17:13:32.closed
by Jane Sandberg at 2022-03-22 17:13:32.head_ref_deleted
by Jane Sandberg at 2022-03-22 17:13:33.assigned
by Eliot Jordan at 2022-03-21 22:33:30.unassigned
by Eliot Jordan at 2022-03-21 22:33:37.deployed
by None at 2022-03-22 19:29:36.ready_for_review
by Eliot Jordan at 2022-03-22 21:40:04.I apologize again for opening the pull requests against the git.atmire
repositories, they have been ported to the following:
I am also now struggling to connect to the FTP endpoint from the Windows Server:
PS C:\Users\libwinvijrg5> $Run = $FTPRequest.GetRequestStream()
Exception calling "GetRequestStream" with "0" argument(s): "Unable to connect to the remote
server"
At line:1 char:1
+ $Run = $FTPRequest.GetRequestStream()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WebException
I am still looking for a solution to this, but the current blocking problem is that the size of the Elements
directory exceeds what can be readily transferred over the network:
I have been progressing with the directory transfer (as well as ensuring that there is a local copy of the files being transferred). Unfortunately, this is still a somewhat slow process due to network latency restrictions:
njmaps is updated. All we have to do now is change the alias for libimages.princeton.edu from libserv19 to lib-adc.
Done!!
closed
by Trey Pendragon at 2022-03-22 18:35:23.DLS discussion on 03/22: We'd like to get this done at some point in the relatively near future just so folks don't upload this kind of content to DSpace or (especially) DSS, in alignment with the policy: (https://lib-confluence.princeton.edu/display/COM/Linking+External+Documents+to+Catalog+Records+and+Finding+Aids). That being said it's probably best resolved as "make people's lives better ticket" - nobody's work is being halted here and we have a lot of important sudden priority and maintenance tickets to get through.
We need one for this cycle, so I'll put it in this cycle. When Kim's back if she has a better candidate for the slot for this cycle we can do that.
labeled
by Trey Pendragon at 2022-03-22 19:52:26.Completed along with https://github.com/pulibrary/princeton_ansible/pull/2869
Deployed.
closed
by Eliot Jordan at 2022-03-22 19:19:01.closed
by Eliot Jordan at 2022-03-22 21:18:36.renamed
by Eliot Jordan at 2022-03-22 19:16:31.referenced
by Eliot Jordan at 2022-03-22 21:18:36.merged
by Eliot Jordan at 2022-03-22 21:18:36.closed
by Eliot Jordan at 2022-03-22 21:18:36.head_ref_deleted
by Eliot Jordan at 2022-03-22 21:18:37.head_ref_force_pushed
by None at 2022-03-22 21:19:48.Companion config issue: https://github.com/PrincetonUniversityLibrary/alma-config/issues/187
@mzelesky I will close this and open a new issue for the "simpler" process since I know it's very different from the multi-step work outline here.
mentioned
by None at 2022-03-22 16:50:59.subscribed
by None at 2022-03-22 16:50:59.closed
by Kevin Reiss at 2022-03-22 16:51:10.closed
by Kevin Reiss at 2022-03-22 17:51:20.closed
by Kevin Reiss at 2022-03-22 17:51:20.closed
by Kevin Reiss at 2022-03-22 17:53:51.head_ref_force_pushed
by Jane Sandberg at 2022-03-22 23:16:45.Related issue in requests: https://github.com/pulibrary/requests/issues/1122
convert_to_draft
by None at 2022-03-22 15:27:21.head_ref_force_pushed
by None at 2022-03-22 18:26:15.head_ref_force_pushed
by None at 2022-03-22 18:28:33.labeled
by Bess Sadler at 2022-03-22 13:26:43.labeled
by Bess Sadler at 2022-03-22 13:39:07.I recommend using the EZID Client gem which is also used by Figgy (example).
EZID has a default username, password, and shoulder setting to allow the use of the EZID test service. Test arks begin with ark:/99999/fk4 and persist in the service for 2 weeks before EZID gets rid of them.
labeled
by Bess Sadler at 2022-03-22 18:40:12.renamed
by Bess Sadler at 2022-03-22 18:44:15.labeled
by Bess Sadler at 2022-03-22 18:59:16.closed
by Kate Lynch at 2022-03-22 14:54:24.assigned
by Kate Lynch at 2022-03-22 14:54:12.referenced
by Kate Lynch at 2022-03-22 14:54:24.merged
by Kate Lynch at 2022-03-22 14:54:24.closed
by Kate Lynch at 2022-03-22 14:54:25.head_ref_deleted
by Kate Lynch at 2022-03-22 14:54:25.closed
by Hector Correa at 2022-03-22 15:02:49.referenced
by Hector Correa at 2022-03-22 15:02:49.merged
by Hector Correa at 2022-03-22 15:02:49.closed
by Hector Correa at 2022-03-22 15:02:49.head_ref_deleted
by Hector Correa at 2022-03-22 15:02:50.Now that the site is public there is an uptime page in Honeybadger for it: https://app.honeybadger.io/projects/95072/sites/d932489f-8a8c-4058-964b-df268f589f5a
assigned
by Hector Correa at 2022-03-22 14:43:56.assigned
by Kate Lynch at 2022-03-22 14:59:55.closed
by Hector Correa at 2022-03-22 15:21:29.referenced
by Hector Correa at 2022-03-22 15:21:28.merged
by Hector Correa at 2022-03-22 15:21:28.closed
by Hector Correa at 2022-03-22 15:21:29.head_ref_deleted
by Hector Correa at 2022-03-22 15:21:30.assigned
by Kate Lynch at 2022-03-22 15:32:27.referenced
by Kate Lynch at 2022-03-22 15:32:37.merged
by Kate Lynch at 2022-03-22 15:32:37.closed
by Kate Lynch at 2022-03-22 15:32:38.head_ref_deleted
by Kate Lynch at 2022-03-22 15:32:38.assigned
by Hector Correa at 2022-03-22 14:11:08.closed
by James R. Griffin III at 2022-03-22 16:34:11.This is how it looked when the suggest was enabled
deployed
by None at 2022-03-22 16:24:34.referenced
by James R. Griffin III at 2022-03-22 16:34:11.merged
by James R. Griffin III at 2022-03-22 16:34:11.closed
by James R. Griffin III at 2022-03-22 16:34:11.head_ref_deleted
by James R. Griffin III at 2022-03-22 16:34:12.assigned
by Kate Lynch at 2022-03-22 15:43:05.closed
by Hector Correa at 2022-03-22 17:16:48.convert_to_draft
by Kate Lynch at 2022-03-22 16:15:12.ready_for_review
by Kate Lynch at 2022-03-22 17:03:44.referenced
by Hector Correa at 2022-03-22 17:16:47.merged
by Hector Correa at 2022-03-22 17:16:48.closed
by Hector Correa at 2022-03-22 17:16:48.head_ref_deleted
by Hector Correa at 2022-03-22 17:16:49.I put my notes on Globus on this Google Doc https://docs.google.com/document/d/1d8u3KhsoX-x3k59GgWfhC7325R6616j8RytccTelPWM/edit#
Notice that it includes information about Globus in general, transfers with Globus Connect Personal, and via the Command Line Interface but not with the API.
Recommendation for first-pass responsive improvements --
assigned
by Kate Lynch at 2022-03-22 19:23:53.referenced
by Francis Kayiwa at 2022-03-22 10:23:46.merged
by Francis Kayiwa at 2022-03-22 10:23:46.closed
by Francis Kayiwa at 2022-03-22 10:23:46.head_ref_deleted
by Francis Kayiwa at 2022-03-22 10:23:47.closed
by Francis Kayiwa at 2022-03-22 16:39:08.We deleted the Mariadbserver role, so that is irrelevant now.
Remaining work is listed in #2720.
closed
by Alicia Cozine at 2022-03-22 16:44:33.closed
by Alicia Cozine at 2022-03-22 16:58:07.referenced
by Alicia Cozine at 2022-03-22 16:58:07.merged
by Alicia Cozine at 2022-03-22 16:58:07.closed
by Alicia Cozine at 2022-03-22 16:58:08.head_ref_deleted
by Alicia Cozine at 2022-03-22 16:58:08.It worked for me. I exited the pipenv shell I had open. Changed to the branch. Then ran pipenv sync
had to run the pipenv --rm
and pipenv sync
again.
It worked for me. Thank you!
Done!
closed
by Trey Pendragon at 2022-03-22 18:36:47.review_request_removed
by Francis Kayiwa at 2022-03-22 10:48:42.review_requested
by Francis Kayiwa at 2022-03-22 12:30:48.review_requested
by Francis Kayiwa at 2022-03-22 12:30:53.referenced
by Francis Kayiwa at 2022-03-22 18:46:45.merged
by Francis Kayiwa at 2022-03-22 18:46:45.closed
by Francis Kayiwa at 2022-03-22 18:46:45.head_ref_deleted
by Francis Kayiwa at 2022-03-22 18:46:46.@carolyncole we restored ruby2.6
for the lib-statistics staging and production servers and ran the playbooks. I'll rebase this and then I think it can be merged.
mentioned
by None at 2022-03-22 19:56:54.subscribed
by None at 2022-03-22 19:56:54.head_ref_force_pushed
by Alicia Cozine at 2022-03-22 19:58:17.review_requested
by Alicia Cozine at 2022-03-22 20:08:43.Rebased and then updated to incorporate the QA environment as well as production and staging.
head_ref_force_pushed
by Alicia Cozine at 2022-03-22 20:24:04.assigned
by Eliot Jordan at 2022-03-21 22:30:35.closed
by Eliot Jordan at 2022-03-22 21:18:28.ready_for_review
by Eliot Jordan at 2022-03-22 19:11:59.referenced
by Eliot Jordan at 2022-03-22 21:18:28.merged
by Eliot Jordan at 2022-03-22 21:18:28.closed
by Eliot Jordan at 2022-03-22 21:18:29.head_ref_deleted
by Eliot Jordan at 2022-03-22 21:18:29.We can close #2855 as well.
review_requested
by Kevin Reiss at 2022-03-22 18:16:29.referenced
by Jane Sandberg at 2022-03-22 18:17:14.merged
by Jane Sandberg at 2022-03-22 18:17:14.closed
by Jane Sandberg at 2022-03-22 18:17:14.head_ref_deleted
by Jane Sandberg at 2022-03-22 18:17:15.Another example of this from this morning:
referenced
by Kevin Reiss at 2022-03-22 14:29:39.merged
by Kevin Reiss at 2022-03-22 14:29:39.closed
by Kevin Reiss at 2022-03-22 14:29:39.head_ref_deleted
by Kevin Reiss at 2022-03-22 14:29:40.referenced
by Kevin Reiss at 2022-03-22 15:11:46.merged
by Kevin Reiss at 2022-03-22 15:11:46.closed
by Kevin Reiss at 2022-03-22 15:11:47.head_ref_deleted
by Kevin Reiss at 2022-03-22 15:11:47.referenced
by Kevin Reiss at 2022-03-22 15:29:16.merged
by Kevin Reiss at 2022-03-22 15:29:16.closed
by Kevin Reiss at 2022-03-22 15:29:16.head_ref_deleted
by Kevin Reiss at 2022-03-22 15:29:17.assigned
by None at 2022-03-22 19:42:21.referenced
by Kevin Reiss at 2022-03-22 13:23:03.merged
by Kevin Reiss at 2022-03-22 13:23:03.closed
by Kevin Reiss at 2022-03-22 13:23:03.head_ref_deleted
by Kevin Reiss at 2022-03-22 13:23:03.deployed
by None at 2022-03-22 16:27:45.referenced
by Kevin Reiss at 2022-03-22 17:23:28.merged
by Kevin Reiss at 2022-03-22 17:23:28.closed
by Kevin Reiss at 2022-03-22 17:23:28.head_ref_deleted
by Kevin Reiss at 2022-03-22 17:23:29.assigned
by Kate Lynch at 2022-03-22 15:34:55.closed
by Kevin Reiss at 2022-03-22 17:23:28.reopened
by Christina Chortaria at 2022-03-22 19:15:26.referenced
by Christina Chortaria at 2022-03-22 19:32:24.merged
by Christina Chortaria at 2022-03-22 19:32:24.closed
by Christina Chortaria at 2022-03-22 19:32:24.head_ref_deleted
by Christina Chortaria at 2022-03-22 19:32:25.


School District 73 Completion Rates reach all-time high - Barriere Star Journal
Completion rates for students in School District No. 73 have reached an all-time high in the district, according to the BC Ministry of Education stats released this month.
The graduation rate measures the number of Grade 8 students who graduate within six years. The six-year rate for all SD73 students in the 2018-2019 school year is 88.3 per cent, and the rate for Aboriginal students is 84.1 per cent. This is an increase from 83.7 and 78.2 per cent, respectively.
“School District No. 73 has made successful school completion for all learners, and closing the completion rate gap between Aboriginal Learners and All Learners, a priority,” said Alison Sidow, Superintendent for SD 73. “I would like to thank staff for their efforts, which have resulted in this significant achievement in school completion rates and I share in their goals to continue this work to ensure that all students graduate.”
The completion rate for B.C. resident students in the district (excluding international students who move out of the district before graduation) is even higher, at 92.5 per cent.
The District’s commitment to this priority is reflected in four broad categories: personalized learning that provides flexibility and choice; a focus on inclusion and equity; structured support for struggling learners; and connecting learners to opportunities to complete after they have discontinued schooling.


Project 2
Which term best describes this tweet?
My favorite football team won today! Bring on the division finals!
The level of hate
Extreme Hate
Normal Hate
Less Hate
No Hate
The level of confidence
Extreme confident
Normal confident
Less confident
No confidence


Participants can reuse the same video recording across other workflows.
Image links to participants contact information.


Error!
Sorry, but your input was invalid.
Error!
Sorry, but your input was invalid.
Check: {this.props.params.name}


|
Embedded Artistry Framework
Embedded Systems C++ Framework
|
#include "nrf52840.hpp"
#include <cassert>
#include <processor_architecture.hpp>
#include <processor_includes.hpp>
Functions | |
| void | _putchar (char c) |
| Output a character to a custom device like UART, used by the printf() function This function is declared here only. More... | |
| static void | setWEN () noexcept |
| static void | setREN () noexcept |
| static void | setVOUT (uint32_t setting) noexcept |
| static bool | checkVOUT (uint32_t setting) noexcept |
Variables | |
| static const uint32_t | CPU_FREQ_MHZ = UINT32_C(64) |
| void _putchar | ( | char | character | ) |
Output a character to a custom device like UART, used by the printf() function This function is declared here only.
You have to write your custom implementation somewhere
| character | Character to output |
Referenced by _out_char(), embvm::CircularLogBufferLogger< TBufferSize, TLock >::dump(), and putchar().
Referenced by nRF52840::highVoltageMode().
|
inlinestaticnoexcept |
Referenced by setVOUT().
|
inlinestaticnoexcept |
References setREN(), setWEN(), and ARMCommonArch::systemReset().
Referenced by nRF52840::highVoltageMode().
|
inlinestaticnoexcept |
Referenced by setVOUT().
Referenced by nRF52840::spin().


We would be happy to answer any questions you might have about our company. Please affix your contact details and message in the form below, and we'll get to you as soon as possible!


---
layout: page
title: EV Level III
tagline: Electric Vehicle Charging Stations
---
{% include JB/setup %}
Independent Marketing Representative
for EV4 Oregon LLC of Portland, Oregon
& the Energy Transfer Merchant [ETM™]
Electric Vehicle (EV) Charging Station


{% extends "layout-v2-patient.html" %} {% block pageScripts %} {% endblock %} {% block pageTitle %} NHS Cervical screening management system {% endblock %} {% block header %} {{ header({ "service": { "name": "Cervical Screening", "longName": "false" }, "showNav": "false", "showSearch": "true" }) }} {% endblock %} {% block patientBanner %} {% include '../components/patient-banner.html' %} {% endblock %} {% block content %}
by CSAS-ScreeningOfficer41
Next test due date added for 02.01.21
by CSAS-ScreeningOfficer41
Comments: Patient deferred until 02 Jan 2021 due to referral to colposcopy
by CSAS-ScreeningOfficer-41
PNL actioned patient - Defer
by JFoster-GPAdmin-LeedsPractice
PNL submitted containing patient - Defer
by CSAS-ScreeningOfficer93
New test result added
Comments: NHS test- CRM Case Number: DH6794L
by CSAS-ScreeningOfficer33
Next test due date added for 22.4.20
Comments: routine recall
by CSAS-ScreeningOfficer33
Result letter sent to patient
by JFoster-GPAdmin-LeedsPractice
Invite sent to patient 25.03.2017
by CSAS-ScreeningOfficer87
Patient actioned on PNL
by JFoster-GPAdmin-LeedsPractice
PNL submitted containing patient
by CSAS-ScreeningOfficer6
Next test due date added for 22.5.17.
Comments: Routine recall
by CSAS-ScreeningOfficer6
Result letter sent to patient
by System
Results have failed validation and have been returned to the lab
by JFoster-GPAdmin-LeedsPractice
Invite sent to patient 12.03.2014
by CSAS-ScreeningOfficer41
Patient actioned on PNL
by JFoster-GPAdmin-LeedsPractice
PNL submitted containing patient


--- layout: post title: More Workset.Create fun with DynamoBIM date: '2015-06-22T06:59:00.001-07:00' author: JohnP tags: modified_time: '2015-06-22T06:59:26.652-07:00' thumbnail: http://lh3.googleusercontent.com/-j88NrlTgvmw/VYgUvan-wVI/AAAAAAAAAWI/MedwX7DEfeg/s72-c/2015-06-22_07h49_45_thumb%25255B3%25255D.png?imgmax=800 blogger_id: tag:blogger.com,1999:blog-8275462422374771907.post-7108172497660721735 blogger_orig_url: http://sixtysecondrevit.blogspot.com/2015/06/more-worksetcreate-fun-with-dynamobim.html ---
It was asked if there is a way to get a link name and create a workset based on that name. Yes there is! (thanks to an extra node from Konrad K. Sobon “Archi-lab.net)


| Interface | Description |
|---|---|
| Crossover |
The crossover interface.
|
| Class | Description |
|---|---|
| Benchmark |
The Class Benchmark contains method for writing results of tests.
|
| Instance |
Abstract class for the different type of instances.
|
| InstanceFlowshop |
Representation of an instance for the permutation flow shop problem.
|
| InstanceTSP |
Representation of an instance for the Traveling Salesman Problem.
|
| Main |
The Class Main.
|
| Neighborhood |
Abstract class for the different types of neighborhood that can be built from a solution.
|
| Solution |
Representation of a solution of an schedulinging problem such as the TSP or the permutation flow shop
problem.
|
| TabuList |
Container used in the TabuSearch Solver.
|


保留标识符和SQL关键字
保留标识符和SQL关键字
本主题描述了Greenplum数据库保留标识符和对象名称，以及Greenplum数据库和PostgreSQL命令解析器识别的SQL关键字。
保留标识符
在Greenplum数据库系统中，以gp_和pg_开头的名称是保留的，不应用作用户创建的对象的名称，例如表，视图和函数。
资源组名称admin_group，default_group和none都是保留的。 资源队列名称pg_default是保留的。
表空间名称pg_default和pg_global是保留的。
角色名称gpadmin和gpmon是保留的。 gpadmin是默认的Greenplum数据库超级用户角色。 gpmon角色拥有gpperfmon数据库 。
在数据文件中，分隔字段（列）和行的字符具有特殊含义。 如果它们出现在数据中，则必须将它们转义，以便Greenplum数据库将它们视为数据而不是分隔符。 反斜杠字符（\）是默认的转义字符。 有关详细信息，请参见转义。
有关SQL标识符，常量，运算符和表达式的更多信息，请参阅PostgreSQL文档中的SQL语法。
SQL关键词
Table 1列出了所有token， 这些token是Greenplum数据库6和PostgreSQL 9.4中的关键词。
ANSI SQL区分保留和未保留的关键字。 根据标准，保留关键词是唯一真正的关键词; 永远不允许他们作为标识符。 未保留的关键词在特定上下文中仅具有特殊含义，并且可以在其他上下文中用作标识符。 大多数未保留的关键字实际上是SQL指定的内置表和函数的名称。 无保留关键词的概念基本上只存在于声明在某些上下文中某些预定义含义附加到单词上。
在Greenplum数据库和PostgreSQL解析器中，有几种不同类别的token， 从永远不能用作标识符的token到与普通标识符相比在解析器中完全没有特殊状态的token。 （后者通常是SQL指定的函数的情况。）即使保留的关键字也没有完全保留， 但可以用作列标签（例如，SELECT 55 AS CHECK，即使CHECK是保留关键字）。
Table 1将那些解析器明确知道但允许作为列或表名称的关键字归类为"unreserved"。 一些未经保留的关键字不能用作函数或数据类型名称，并相应标记。 （这些单词中的大部分代表具有特殊语法的内置函数或数据类型。函数或类型仍然可用，但用户无法重新定义。） 标记为“reserved”的关键字不允许作为列或表名。 一些保留的关键字可以作为函数或数据类型的名称; 这也显示在表中。 如果没有这么标记，则保留的关键字仅允许作为“AS”列标签名称。
如果您为包含任何列出的关键字作为标识符的命令获得虚假解析器错误，您应该尝试引用标识符以查看问题是否消失。
在研究表之前，请注意关键字未保留的事实并不意味着未实现与该字相关的特性。 相反，关键词的存在并不表示特性存在。
| 关键字 | Greenplum数据库 | PostgreSQL 9.4 |
|---|---|---|
| ABORT | unreserved | unreserved |
| ABSOLUTE | unreserved | unreserved |
| ACCESS | unreserved | unreserved |
| ACTION | unreserved | unreserved |
| ACTIVE | unreserved | |
| ADD | unreserved | unreserved |
| ADMIN | unreserved | unreserved |
| AFTER | unreserved | unreserved |
| AGGREGATE | unreserved | unreserved |
| ALL | reserved | reserved |
| ALSO | unreserved | unreserved |
| ALTER | unreserved | unreserved |
| ALWAYS | unreserved | unreserved |
| ANALYSE | reserved | reserved |
| ANALYZE | reserved | reserved |
| AND | reserved | reserved |
| ANY | reserved | reserved |
| ARRAY | reserved | reserved |
| AS | reserved | reserved |
| ASC | reserved | reserved |
| ASSERTION | unreserved | unreserved |
| ASSIGNMENT | unreserved | unreserved |
| ASYMMETRIC | reserved | reserved |
| AT | unreserved | unreserved |
| ATTRIBUTE | unreserved | unreserved |
| AUTHORIZATION | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| BACKWARD | unreserved | unreserved |
| BEFORE | unreserved | unreserved |
| BEGIN | unreserved | unreserved |
| BETWEEN | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| BIGINT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| BINARY | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| BIT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| BOOLEAN | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| BOTH | reserved | reserved |
| BY | unreserved | unreserved |
| CACHE | unreserved | unreserved |
| CALLED | unreserved | unreserved |
| CASCADE | unreserved | unreserved |
| CASCADED | unreserved | unreserved |
| CASE | reserved | reserved |
| CAST | reserved | reserved |
| CATALOG | unreserved | unreserved |
| CHAIN | unreserved | unreserved |
| CHAR | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| CHARACTER | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| CHARACTERISTICS | unreserved | unreserved |
| CHECK | reserved | reserved |
| CHECKPOINT | unreserved | unreserved |
| CLASS | unreserved | unreserved |
| CLOSE | unreserved | unreserved |
| CLUSTER | unreserved | unreserved |
| COALESCE | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| COLLATE | reserved | reserved |
| COLLATION | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| COLUMN | reserved | reserved |
| COMMENT | unreserved | unreserved |
| COMMENTS | unreserved | unreserved |
| COMMIT | unreserved | unreserved |
| COMMITTED | unreserved | unreserved |
| CONCURRENCY | unreserved | |
| CONCURRENTLY | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| CONFIGURATION | unreserved | unreserved |
| CONNECTION | unreserved | unreserved |
| CONSTRAINT | reserved | reserved |
| CONSTRAINTS | unreserved | unreserved |
| CONTAINS | unreserved | |
| CONTENT | unreserved | unreserved |
| CONTINUE | unreserved | unreserved |
| CONVERSION | unreserved | unreserved |
| COPY | unreserved | unreserved |
| COST | unreserved | unreserved |
| CPU_RATE_LIMIT | unreserved | |
| CPUSET | unreserved | |
| CREATE | reserved | reserved |
| CREATEEXTTABLE | unreserved | |
| CROSS | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| CSV | unreserved | unreserved |
| CUBE | unreserved (不能是函数或类型名称) | |
| CURRENT | unreserved | unreserved |
| CURRENT_CATALOG | reserved | reserved |
| CURRENT_DATE | reserved | reserved |
| CURRENT_ROLE | reserved | reserved |
| CURRENT_SCHEMA | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| CURRENT_TIME | reserved | reserved |
| CURRENT_TIMESTAMP | reserved | reserved |
| CURRENT_USER | reserved | reserved |
| CURSOR | unreserved | unreserved |
| CYCLE | unreserved | unreserved |
| DATA | unreserved | unreserved |
| DATABASE | unreserved | unreserved |
| DAY | unreserved | unreserved |
| DEALLOCATE | unreserved | unreserved |
| DEC | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| DECIMAL | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| DECLARE | unreserved | unreserved |
| DECODE | reserved | |
| DEFAULT | reserved | reserved |
| DEFAULTS | unreserved | unreserved |
| DEFERRABLE | reserved | reserved |
| DEFERRED | unreserved | unreserved |
| DEFINER | unreserved | unreserved |
| DELETE | unreserved | unreserved |
| DELIMITER | unreserved | unreserved |
| DELIMITERS | unreserved | unreserved |
| DENY | unreserved | |
| DESC | reserved | reserved |
| DICTIONARY | unreserved | unreserved |
| DISABLE | unreserved | unreserved |
| DISCARD | unreserved | unreserved |
| DISTINCT | reserved | reserved |
| DISTRIBUTED | reserved | |
| DO | reserved | reserved |
| DOCUMENT | unreserved | unreserved |
| DOMAIN | unreserved | unreserved |
| DOUBLE | unreserved | unreserved |
| DROP | unreserved | unreserved |
| DXL | unreserved | |
| EACH | unreserved | unreserved |
| ELSE | reserved | reserved |
| ENABLE | unreserved | unreserved |
| ENCODING | unreserved | unreserved |
| ENCRYPTED | unreserved | unreserved |
| END | reserved | reserved |
| ENUM | unreserved | unreserved |
| ERRORS | unreserved | |
| ESCAPE | unreserved | unreserved |
| EVENT | unreserved | unreserved |
| EVERY | unreserved | |
| EXCEPT | reserved | reserved |
| EXCHANGE | unreserved | |
| EXCLUDE | reserved | unreserved |
| EXCLUDING | unreserved | unreserved |
| EXCLUSIVE | unreserved | unreserved |
| EXECUTE | unreserved | unreserved |
| EXISTS | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| EXPAND | unreserved | |
| EXPLAIN | unreserved | unreserved |
| EXTENSION | unreserved | unreserved |
| EXTERNAL | unreserved | unreserved |
| EXTRACT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| FALSE | reserved | reserved |
| FAMILY | unreserved | unreserved |
| FETCH | reserved | reserved |
| FIELDS | unreserved | |
| FILL | unreserved | |
| FILTER | unreserved | unreserved |
| FIRST | unreserved | unreserved |
| FLOAT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| FOLLOWING | reserved | unreserved |
| FOR | reserved | reserved |
| FORCE | unreserved | unreserved |
| FOREIGN | reserved | reserved |
| FORMAT | unreserved | |
| FORWARD | unreserved | unreserved |
| FREEZE | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| FROM | reserved | reserved |
| FULL | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| FULLSCAN | unreserved | |
| FUNCTION | unreserved | unreserved |
| FUNCTIONS | unreserved | unreserved |
| GLOBAL | unreserved | unreserved |
| GRANT | reserved | reserved |
| GRANTED | unreserved | unreserved |
| GREATEST | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| GROUP | reserved | reserved |
| GROUP_ID | unreserved (不能是函数或类型名称) | |
| GROUPING | unreserved (不能是函数或类型名称) | |
| HANDLER | unreserved | unreserved |
| HASH | unreserved | |
| HAVING | reserved | reserved |
| HEADER | unreserved | unreserved |
| HOLD | unreserved | unreserved |
| HOST | unreserved | |
| HOUR | unreserved | unreserved |
| IDENTITY | unreserved | unreserved |
| IF | unreserved | unreserved |
| IGNORE | unreserved | |
| ILIKE | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| IMMEDIATE | unreserved | unreserved |
| IMMUTABLE | unreserved | unreserved |
| IMPLICIT | unreserved | unreserved |
| IN | reserved | reserved |
| INCLUDING | unreserved | unreserved |
| INCLUSIVE | unreserved | |
| INCREMENT | unreserved | unreserved |
| INDEX | unreserved | unreserved |
| INDEXES | unreserved | unreserved |
| INHERIT | unreserved | unreserved |
| INHERITS | unreserved | unreserved |
| INITIALLY | reserved | reserved |
| INLINE | unreserved | unreserved |
| INNER | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| INOUT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| INPUT | unreserved | unreserved |
| INSENSITIVE | unreserved | unreserved |
| INSERT | unreserved | unreserved |
| INSTEAD | unreserved | unreserved |
| INT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| INTEGER | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| INTERSECT | reserved | reserved |
| INTERVAL | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| INTO | reserved | reserved |
| INVOKER | unreserved | unreserved |
| IS | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| ISNULL | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| ISOLATION | unreserved | unreserved |
| JOIN | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| KEY | unreserved | unreserved |
| LABEL | unreserved | unreserved |
| LANGUAGE | unreserved | unreserved |
| LARGE | unreserved | unreserved |
| LAST | unreserved | unreserved |
| LATERAL | reserved | reserved |
| LC_COLLATE | unreserved | unreserved |
| LC_CTYPE | unreserved | unreserved |
| LEADING | reserved | reserved |
| LEAKPROOF | unreserved | unreserved |
| LEAST | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| LEFT | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| LEVEL | unreserved | unreserved |
| LIKE | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| LIMIT | reserved | reserved |
| LIST | unreserved | |
| LISTEN | unreserved | unreserved |
| LOAD | unreserved | unreserved |
| LOCAL | unreserved | unreserved |
| LOCALTIME | reserved | reserved |
| LOCALTIMESTAMP | reserved | reserved |
| LOCATION | unreserved | unreserved |
| LOCK | unreserved | unreserved |
| LOG | reserved (可以是函数或类型名称) | |
| MAPPING | unreserved | unreserved |
| MASTER | unreserved | |
| MATCH | unreserved | unreserved |
| MATERIALIZED | unreserved | unreserved |
| MAXVALUE | unreserved | unreserved |
| MEDIAN | unreserved (不能是函数或类型名称) | |
| MEMORY_LIMIT | unreserved | |
| MEMORY_SHARED_QUOTA | unreserved | |
| MEMORY_SPILL_RATIO | unreserved | |
| MINUTE | unreserved | unreserved |
| MINVALUE | unreserved | unreserved |
| MISSING | unreserved | |
| MODE | unreserved | unreserved |
| MODIFIES | unreserved | |
| MONTH | unreserved | unreserved |
| MOVE | unreserved | unreserved |
| NAME | unreserved | unreserved |
| NAMES | unreserved | unreserved |
| NATIONAL | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| NATURAL | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| NCHAR | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| NEWLINE | unreserved | |
| NEXT | unreserved | unreserved |
| NO | unreserved | unreserved |
| NOCREATEEXTTABLE | unreserved | |
| NONE | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| NOOVERCOMMIT | unreserved | |
| NOT | reserved | reserved |
| NOTHING | unreserved | unreserved |
| NOTIFY | unreserved | unreserved |
| NOTNULL | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| NOWAIT | unreserved | unreserved |
| NULL | reserved | reserved |
| NULLIF | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| NULLS | unreserved | unreserved |
| NUMERIC | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| OBJECT | unreserved | unreserved |
| OF | unreserved | unreserved |
| OFF | unreserved | unreserved |
| OFFSET | reserved | reserved |
| OIDS | unreserved | unreserved |
| ON | reserved | reserved |
| ONLY | reserved | reserved |
| OPERATOR | unreserved | unreserved |
| OPTION | unreserved | unreserved |
| OPTIONS | unreserved | unreserved |
| OR | reserved | reserved |
| ORDER | reserved | reserved |
| ORDERED | unreserved | |
| ORDINALITY | unreserved | unreserved |
| OTHERS | unreserved | |
| OUT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| OUTER | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| OVER | unreserved | unreserved |
| OVERCOMMIT | unreserved | |
| OVERLAPS | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| OVERLAY | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| OWNED | unreserved | unreserved |
| OWNER | unreserved | unreserved |
| PARSER | unreserved | unreserved |
| PARTIAL | unreserved | unreserved |
| PARTITION | reserved | unreserved |
| PARTITIONS | unreserved | |
| PASSING | unreserved | unreserved |
| PASSWORD | unreserved | unreserved |
| PERCENT | unreserved | |
| PLACING | reserved | reserved |
| PLANS | unreserved | unreserved |
| POSITION | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| PRECEDING | reserved | unreserved |
| PRECISION | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| PREPARE | unreserved | unreserved |
| PREPARED | unreserved | unreserved |
| PRESERVE | unreserved | unreserved |
| PRIMARY | reserved | reserved |
| PRIOR | unreserved | unreserved |
| PRIVILEGES | unreserved | unreserved |
| PROCEDURAL | unreserved | unreserved |
| PROCEDURE | unreserved | unreserved |
| PROGRAM | unreserved | unreserved |
| PROTOCOL | unreserved | |
| QUEUE | unreserved | |
| QUOTE | unreserved | unreserved |
| RANDOMLY | unreserved | |
| RANGE | unreserved | unreserved |
| READ | unreserved | unreserved |
| READABLE | unreserved | |
| READS | unreserved | |
| REAL | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| REASSIGN | unreserved | unreserved |
| RECHECK | unreserved | unreserved |
| RECURSIVE | unreserved | unreserved |
| REF | unreserved | unreserved |
| REFERENCES | reserved | reserved |
| REFRESH | unreserved | unreserved |
| REINDEX | unreserved | unreserved |
| REJECT | unreserved | |
| RELATIVE | unreserved | unreserved |
| RELEASE | unreserved | unreserved |
| RENAME | unreserved | unreserved |
| REPEATABLE | unreserved | unreserved |
| REPLACE | unreserved | unreserved |
| REPLICA | unreserved | unreserved |
| REPLICATED | unreserved | |
| RESET | unreserved | unreserved |
| RESOURCE | unreserved | |
| RESTART | unreserved | unreserved |
| RESTRICT | unreserved | unreserved |
| RETURNING | reserved | reserved |
| RETURNS | unreserved | unreserved |
| REVOKE | unreserved | unreserved |
| RIGHT | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| ROLE | unreserved | unreserved |
| ROLLBACK | unreserved | unreserved |
| ROLLUP | unreserved (不能是函数或类型名称) | |
| ROOTPARTITION | unreserved | |
| ROW | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| ROWS | unreserved | unreserved |
| RULE | unreserved | unreserved |
| SAVEPOINT | unreserved | unreserved |
| SCATTER | reserved | |
| SCHEMA | unreserved | unreserved |
| SCROLL | unreserved | unreserved |
| SEARCH | unreserved | unreserved |
| SECOND | unreserved | unreserved |
| SECURITY | unreserved | unreserved |
| SEGMENT | unreserved | |
| SEGMENTS | unreserved | |
| SELECT | reserved | reserved |
| SEQUENCE | unreserved | unreserved |
| SEQUENCES | unreserved | unreserved |
| SERIALIZABLE | unreserved | unreserved |
| SERVER | unreserved | unreserved |
| SESSION | unreserved | unreserved |
| SESSION_USER | reserved | reserved |
| SET | unreserved | unreserved |
| SETOF | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| SETS | unreserved (不能是函数或类型名称) | |
| SHARE | unreserved | unreserved |
| SHOW | unreserved | unreserved |
| SIMILAR | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| SIMPLE | unreserved | unreserved |
| SMALLINT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| SNAPSHOT | unreserved | unreserved |
| SOME | reserved | reserved |
| SPLIT | unreserved | |
| SQL | unreserved | |
| STABLE | unreserved | unreserved |
| STANDALONE | unreserved | unreserved |
| START | unreserved | unreserved |
| STATEMENT | unreserved | unreserved |
| STATISTICS | unreserved | unreserved |
| STDIN | unreserved | unreserved |
| STDOUT | unreserved | unreserved |
| STORAGE | unreserved | unreserved |
| STRICT | unreserved | unreserved |
| STRIP | unreserved | unreserved |
| SUBPARTITION | unreserved | |
| SUBSTRING | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| SYMMETRIC | reserved | reserved |
| SYSID | unreserved | unreserved |
| SYSTEM | unreserved | unreserved |
| TABLE | reserved | reserved |
| TABLES | unreserved | unreserved |
| TABLESPACE | unreserved | unreserved |
| TEMP | unreserved | unreserved |
| TEMPLATE | unreserved | unreserved |
| TEMPORARY | unreserved | unreserved |
| TEXT | unreserved | unreserved |
| THEN | reserved | reserved |
| THRESHOLD | unreserved | |
| TIES | unreserved | |
| TIME | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| TIMESTAMP | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| TO | reserved | reserved |
| TRAILING | reserved | reserved |
| TRANSACTION | unreserved | unreserved |
| TREAT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| TRIGGER | unreserved | unreserved |
| TRIM | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| TRUE | reserved | reserved |
| TRUNCATE | unreserved | unreserved |
| TRUSTED | unreserved | unreserved |
| TYPE | unreserved | unreserved |
| TYPES | unreserved | unreserved |
| UNBOUNDED | reserved | unreserved |
| UNCOMMITTED | unreserved | unreserved |
| UNENCRYPTED | unreserved | unreserved |
| UNION | reserved | reserved |
| UNIQUE | reserved | reserved |
| UNKNOWN | unreserved | unreserved |
| UNLISTEN | unreserved | unreserved |
| UNLOGGED | unreserved | unreserved |
| UNTIL | unreserved | unreserved |
| UPDATE | unreserved | unreserved |
| USER | reserved | reserved |
| USING | reserved | reserved |
| VACUUM | unreserved | unreserved |
| VALID | unreserved | unreserved |
| VALIDATE | unreserved | unreserved |
| VALIDATION | unreserved | |
| VALIDATOR | unreserved | unreserved |
| VALUE | unreserved | unreserved |
| VALUES | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| VARCHAR | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| VARIADIC | reserved | reserved |
| VARYING | unreserved | unreserved |
| VERBOSE | reserved (可以是函数或类型名称) | reserved (可以是函数或类型名称) |
| VERSION | unreserved | unreserved |
| VIEW | unreserved | unreserved |
| VIEWS | unreserved | unreserved |
| VOLATILE | unreserved | unreserved |
| WEB | unreserved | |
| WHEN | reserved | reserved |
| WHERE | reserved | reserved |
| WHITESPACE | unreserved | unreserved |
| WINDOW | reserved | reserved |
| WITH | reserved | reserved |
| WITHIN | unreserved | unreserved |
| WITHOUT | unreserved | unreserved |
| WORK | unreserved | unreserved |
| WRAPPER | unreserved | unreserved |
| WRITABLE | unreserved | |
| WRITE | unreserved | unreserved |
| XML | unreserved | unreserved |
| XMLATTRIBUTES | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| XMLCONCAT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| XMLELEMENT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| XMLEXISTS | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| XMLFOREST | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| XMLPARSE | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| XMLPI | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| XMLROOT | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| XMLSERIALIZE | unreserved (不能是函数或类型名称) | unreserved (不能是函数或类型名称) |
| YEAR | unreserved | unreserved |
| YES | unreserved | unreserved |
| ZONE | unreserved | unreserved |


Technology
I have spent well over 20 years developing software, leading teams, researching technology, and herding cats all while continually attempting to learn and stay up to speed within this incredible industry.
Father, technologist, software craftsman, infosec enthusiast, drummer, and fan of photography
This is my personal website that contains various original intellectual property ranging from writings to music.
The content produced and published here is original and the ownership of this author.
I have spent well over 20 years developing software, leading teams, researching technology, and herding cats all while continually attempting to learn and stay up to speed within this incredible industry.
As a drummer, I have been fortunate enough to play and collaborate with some amazing musicians. Whether it's tracking an album, filling in for a session, or eating baloney on hand while on tour - I have been through a couple rodeos.
I am an avid photographer who is more interested in capturing an image and the moment than obsessing about hardware specs. I simply enjoy taking photos.


The latest news about the development of SpatialGuide
Welcome to the Dev Notes section of our website!
Here we will be explaining the development challenges and decisions we made under the development stages of our system.
NOTE: This section is going to suffer multiple updates as soon as we add more features or development decisions.
At first glance of the system, we needed to gather opinion about what technologies to choose, and what primary decisions about the
system architecture and steps to do further upon development. So, we asked multiple teachers from our department to help us go to the correct
path.
Diogo Gomes and João Paulo Barraca were the teachers which prontly answered to us and with them, we got multiple ideas and possible features to be
added. One of the main difficulties we found was the technology choice (which languages, which database, which platform we could choose were some of the
questions asked). We would like to publicly thank them for the help provided, which got us on the right track for the begin of development.
After some team meetings with Guilherme Campos, we got the theory behind spatial audio and the main feature of the app explained, and we were ready to start
developing the whole system.
Today, we have weekly meetings to keep track of current development and for having feedback of it.
As SpatialGuide system main use is deployed in a smartphone, we needed to know if we could go to a cross-platform way (React Native / Cordova / Ionic for instance),
or a native way (Android). Because of the connection with the IMU Sensor (to gather head position), and the suggested use of a audio library (first glance
of spatial audio build) we needed to go to that path instead of having a web-based app. Here the decision was to build a native app with Android, which also
eases the development as all team has Java language knowledge.
Then we needed to know what technologies we should choose for the backend and which database to choose to store the data (points of interest, user information, routes, etc).
As some of the team members have already experience in Django and MySQL, we turned that way to build a traditional backend-frontend system,
which will communicate with the Android app via a REST API.
So, SpatialGuide will consist on a Android app supported by a web app that will store and send the data to be used in the app. The app runs on a Android
smartphone, and should have GPS sensor and Bluetooth, as well as to be capable of connecting stereo headphones via jack port.
The app will have an auralization engine that given a sound file will compute spatial sound (3D Audio) according to the users position.
For best audio experience we recommend the use of stereo headphones with noise cancellation.
We gathered some user stories from people who are in the Tourism area (the scope of this app), so we at the
development stage are pretty sure and focused on what the app should have in order to complete user's requirements.
Jessica is an architecture grad student that is very interested in historical landmarks and modern art.
When she has some free time from classes she likes to travel and get in touch with new cultures.
As a born explorer, so it is very important for her to get the most out of the places she visits and so,
she frequently uses web advisors in order to get information on these new places. However, one of the things
that she finds utmost annoying is the fact that most of these web advisors require her to often look at her smartphone,
making it very difficult for her to get an absolute immersive experience. So, she began using SpatialGuide app.
This tool has hallowed her to fully enjoy the experience, as it works as a voice guide that tours the visitors on
the landmarks history and highlights. One of her favorite things about this app is the audio specialization feature
that lets her contemplate the landmarks, at the time she gets information on it.
On her most recent trip to New York, Jessica decided to try a ride on a tourist bus, as it’s an easy and comfortable
way to get to know a big town like this. However, due to the sound pollution, it was very difficult for her to
understand what the tourist guide was saying. So Jessica decided to use the SpatialGuide app. In fact, it was by
far easier for her to ignore the surrounding sounds and focus on the landmarks.
Steve, a 50 year-old tourist guide, is the older person working on his company. His vast experience makes
him one of the most required members of the company. Steve’s work ethics focus on guarantying his clients
have the best experience possible. Despite counting on his colleague’s help, Steve is a known “old school”
tourist guide, and so, he sometimes gets frustrated when dealing with new technologies. Recently his company
began looking for a tool that could help to give a better experience to the clients, without presenting itself
as a tech-challenge. So, Steve and his colleagues began to use the SpatialGuide app. The simplicity of this tool
easily allows them to insert new routes, as well as audio files that inform the tourist on the history and
highlights of the landmarks. Ever since, Steve has become increasingly familiar with the software and is now
able to fully understand his clients ultimate goal, as well as to easily provide them the best experience they
could have.
For each user, we have the ideal scenario of system use. Here we get to know what SpatialGuide will help these users for, and which are the key features and usage of the whole system.
Use case: A Tourist who likes Historic places
Actor: John
Steps:
John is very interested in history
John hobby is travelling to visit historical places
John walks on the street
John connects head-tracking headphones on their smartphone
John connects to SpatialGuide app
John chooses route
John continues walking
John now can hear sound from different places
John now can hear the monuments talk to him like their talking to a person
John now can look to which monument he wants to hear from
John now can enjoy his hobby more deeply involved
Use case: Tourism Company Employee
Actor: Steve
Steps:
Steve works for a company that uses SpatialGuide App
Steve needs to add more tourist points on a specific area
Steve opens SpatialGuide Admin Panel on a web browser
Steve selects the desired point on the map
Steve opens app on Smartphone
Steve gives a name to the point
Steve adds it to the database
Steve chooses what narrative to play on which point
As said before, the Android app is one of the most important parts of the system, as it will be the most used for the users that will indeed use our system
and navigate through places (as referred in the user scenarios), so taking that in consideration it's crucial that the development of the app takes in consideration
multiple concerns such as usability, a clean and straight-up design, as well as being responsive in general usage.
The app architecture and main functioning was built to consume the system data via our own REST (Representational State Transfer) API (Application Programming Interface),
which provide all the data via the endpoints required for both way communication, which is how we interact with our system.
As for the design, we follow the Android Material Design guidelines and appearance, as it's commonly used on many Android apps today, and got inspiration from the most
used Android apps. We are not any design experts neither aspire to be it, however we built it thinking that the common user will know how to use the app without much effort.
Almost every action is done with few taps, and the app has icons and a color scheme that helps identify them. The colors used are inspired by our website, as we tried to be
consistent between the website and the app itself. Upon entering the app, we use the commonly used DrawerLayout, with the left side Navigation Menu, and a Toolbar so the user
can see the current status and indication on app usage.
We can sum the Android development in two stages: design and code. The design is made on the layout folder, placed on resources folder, by creating a XML file which will be the
layout of a part of the app. For simplicity we used Activities for each action instead of Fragments, and each file placed in that folder is used to draw and place UI widgets
(Text, Images, Progress Bar, Toolbar, etc) which are part of the whole app design.
Then, on the Java code, in the java folder we place the code responsible for handling the Activity of each file, only setting the content view on the onCreate function with
the same name as the layout file which we want to use.
In the App development, the majority of UI widgets are instantiated on the Java code using the library
ButterKnife - a library that uses Dependency Injection - as well as the
library Lombok for our data classes. ButterKnife binds all the views to variables on our code by only getting the view
IDs and call them once. Lombok injects getters/setters and constructors on our data/entity classes, so we can write less code and have them built for us.
As we use the devices' location to find the current user location so the map interactions and general usage is done, we use the Google Play Services API to find out user location given
customizable parameters such as location precision (GPS+Network, GPS only or Network only) and their refresh rates.
As we open the app, it has the basic user creation / access screens, to let users use the app and the system. By letting have an user account, each user can then make track of the routes and points,
and use the system anywhere. We also provide a way of set a new password, to recover system access
After the successful sign in, the user should then choose the route which will navigate on, which data is downloaded and stored on the internal device storage and then used upon selection.
The route data is fetched via our system REST API. To handle the HTTP requests to our custom built API, it's used the library Retrofit for a safe, easy and async request onto our API. Retrofit
then lets us use a factory that gets the data from a API and converts it into a POJO object, to be used on the Java side. We use the Google's
GSON converter factory, as it's the most common used
converter, and lets us then annotate on the data/entity classes the exact field names on the JSON object, and then it sets the object for us. As the Android uses its main thread for drawing, we cannot
stop that thread from running when doing network requests like we constantly do to gather/push information onto our system. So, Retrofit helps us handling the thread creation for each API call, which will
return one of two responses (successful / not-successful) via callback, and then we can handle it the way we want.
Our custom built REST API provides the information we need about routes, points of interest, among many other useful related information to the general app usage, as we will describe later. For the images
displayed in the app, we decided to use URLs and then handle the download and display in the app, instead of downloading and storing the images having them locally (which we could do, but it required more
work on manipulating them in the internal storage). It’s a interesting feature having a dynamic way of loading the images, because they can be changed. The images URL fetched via the REST API is then injected
on Android's ImageView using the library Picasso, which downloads and caches the image in a easy and straight-forward way. Picasso and Retrofit are libraries from the same developer team, so they handle the
thread creation and callback similarly.
After the route selection, the user will enter in the route map screen, which will track the user current location with GPS, and with the markers of the route points of interest, as well as the directions to the points
of interest, fetched with Google Directions API, and then all displayed on a Google Map fragment, provided by
Google's Maps SDK, as we integrate it on the app so users can see the current location and have a visual
feedback on using the app and guidance.
On the bottom we can see a options menu that provides the possibility of customize the route order of the points to visit by setting it using drag and drop in the selection menu, as well as the user can select
one of two modes for it: "Shortest Path", which will take on the shortest route between the points selected, and "Adventure Mode", which will randomize the order of the point visit. The map will then show the
recommended direction based on the order of the points selected or the mode selected..
When the user location approaches the point of interest (as we call this distance the Trigger Area), a popup window will appear with the point information, and the app will then play the sound spatialized
according to that point and to the user's head position.
Initially, the goal was to fetch the head position (yaw, pitch, roll) of the user using a IMU Sensor (the equipment provided to us were InertiaCube BT).
However, as the device's SDK and Bluetooth had issues on how to get the coordinates, and spend lots of time trying to fix the problem, we switched to another
way to get the user head position, with simply using another smartphone to provide the users head position with the gyroscope sensor of the smartphone.
That way, we can easily attach a smartphone to the headphones to test this approach, and use Bluetooth to communicate with both devices (SpatialGuide app and
head position app). For now, it's a easy solution to our problem, given the deadline. For this communication to work, we need to develop another app for the
"sensor smartphone", being able to communicating both ways.
Then we can provide the user position to the auralization engine to then compute the spatial audio according to the user position and the position related to
the point of interest.
Android smartphones have a big array of sensors. For the tracking of the head rotation we
used two common sensors: the magnetic sensor, and the accelerometer sensor. The
accelerometer sensor measures the acceleration force applied in all three axes (x,y,z),
it also takes into account the gravity. It is an hardware sensor and is mostly used for motion
detection. The magnetic sensor measures the magnetic field, it is also an hardware sensor
and it is used for compass.
Combining this two sensors it is possible to obtain a calibrated head rotation using the native
android methods getRotationMatrix and getOrientation. getRotationMatrix creates the
rotation matrix defined between both sensors, and the getOrientation generates the values
for pitch/yaw/roll based on that rotation matrix.
Then it will pass this values into a byte buffer and send this buffer to the smartphone with the
application through bluetooth.
Since the early stages of development we decided to implement the communication between
sensor and application with bluetooth., in order to make the system easy to use and less
cumbersome to the user. As long as the cell phone with the SpatialGuide app has the name
SpatialDemo and it’s paired with the sensor device, the connection and data trade between
them will be automatic. The bluetooth communication is done through a class named
BluetoothConnectionService that contains several threads:
● AcceptThread: thread that accepts a connection
● ConnectThread: thread that tries to connect to a certain device
● ConnectedThread: thread that tries to send data through bluetooth
The sensor searches for its list of paired devices for a device named SpatialDemo, if it finds
one, it will try to connect to it through the ConnectThread. If the connection failed, then the
process starts anew, otherwise the connection is accepted. When the tracking sensors
detect some change on the rotation, the bluetooth will try to send its the byte buffer created
mentioned above through its output stream. The SpatialGuide app will receive these values
and convert them back into floats and update the auralization engine with this new data.
For the implementation of the auralization we opted to use the Google’s Resonance Audio. Resonance audio is a SDK that aims to create spatialized audio for AR and VR environments. It supports multi platforms (such as Unity, Unreal, FMOD, Web, wwise, digital workstation, Android and iOS) and streamlines the implementation of na Auralization engine.
Resonance Audio takes into account the mobile’s limited resources, so it is optimized for those devices. As we were working on within a limited time frame, creating our own audio engine was prohibitive, and as this is a powerful optimized tool for mobile devices, we have decided to implement Resonance Audio on SpatialGuide system.
As Resonance Audio was made for interactive virtual environments, we have to define the position and rotation for the user on this virtual world.
Implementation:
We created a class named AuralizationEngine, there we implemented Resonance Audio. For it to work, it needs the following atributes
+ GoogleVR’s audio engine(GvrAudioEngine)
+ sound source ID (sourceID).
Besides this attributes, it was defined a reference to a thread called soundplayThread.
When the user enters the trigger area, the system will initialize the AuralizationEngine passing a sound file name. It starts by initializing gvrAudioEngine, and it starts a new thread to load the named sound file. It is also needed to define a user position in the virtual world, it was defined that the user it’s always in the center of that world (x=0; y=0; z=0, this axis is based on the right handed OpenGL axis). For now it is also defined that the sound is at position (0,0,0) but that will change immediately in another function.
When the GPS updates the user position or when the system detects that the rotation of the head changed, the AuralizationEngine’s update method is invoked that accepts as input the GPS coordinates of the user/point of interest and the head’s rotation as pitch yaw and roll angles. Knowing that the user is in the center of the axis, the position on the virtual world of the point of interest (position of the source of sound) is calculated accordingly. As in an open space, the human ears cannot distinguish between a far loud sound and a low close sound, we decided to make the virtual distance between user and the sound source a constante (R=1). To discover this virtual position at a distance R, first we need to know the angle between user and point of interest, for such we used the following formulas:
After we discover the angle formed between user and point, we need to find the projection of that angle for a distance of R=1.
For that we use the following:
Then you can updated the sound source position of the gvrAudioEngine using this coordinates using the setSoundObjectPosition method passing these coordinates alongside the sourceID that we want to update. It is also needed to update the user’s head rotation. As gvrAudioEngine accepts quaternions, first we need to convert from euler angles to quaternion and then we pass this quaternion to the method setHeadRotation.
After any change made to the Resonance Audio, it is recommended to use gvrAudioEngine.update in order to confirm the changes made.
Sound is played in a thread created by the auralization engine. When the user enters a new
tigger area, the old thread will be stopped, the sound unloaded from the gvrAudioEngine and
the AuralizationEngine will start anew with the new values for that point of interest.
With this methods, the gvrAudioEngine will be able to play a spatialized sound on a virtual
world built around real world values.
As previously refered the Backend has a very important job on our system. It is the one responsible for the communication between the Database and the Android app. It also provides
a friendly interface to the Administrators, allowing them to easily manage the features required by the Android app.
The option for Django, as our web framework, was taken considering not only the familiarity of some
team members with it, but also it's versatile features. Hence, and foccusing on its security characteristics, Django provides security when handling user information. This way we can
give our users a safe environment.
MySQL was our choice for the main Database due to its good performance in case the product goes to production. MySQL stores all of our data, e.g.
routes, points and user information. Our media is stored in Google Drive, using Google Drive API,
however the links and identifiers, responsible for accessing the images and sounds, are still kept on the Database.
The communication between the Android app and the Backend is made through a Django REST API, based
on GET and POST requests, sending the data in JSON format. This way we can assure a good service to our clients.
As for the Administrators web interface, we used the html templates based on Bootstrap to create our html views.
After the Administrator login, he can find a navbar that provides several options:
Routes: on this option, the Administrator is presented with a list of all the Routes available in the Database with some basic information. It's also available the option of edit each Route attributes or navigate to the Route page with all the it's information. There is also a button that redirects the Administrator to the add Route page.
Add Routes: here it's presented to the Administrator a page with a form where he can insert the information about the new Route he is about to create.
Points: displays a list of all the Points in the Database and some basic information about them. On this page there are three buttons that allow the user to create, edit or remove Points.
Add Point: shows a form and a world map. Here it's possible to create a new Point typing all its atributes and also choosing the Point's coordinates by clicking on the desired location
Heat Map: displays a map where its possible to observe throught heat points the most frequented zones by the users while using the Android app.
User Suggestions: here is shown to the Administrator the locations and comments left by the users who would like to add a Point to the app.
User Comments: exibits a list of comments left by the users at a specific Point.
Register new User: Allows for the register of a new Administrator account.
Finally, on the top right corner, the Administrator can observe the username of its current session and a logout button.
We feel our system is almost ready to ship to production. However, we also know that this system has much more potential and could be enhanced with some more
features that will overall improve all system in the future.
The app could be improved by code refactoring and architecture restructuring, as well as offering the ability to support offline usage, and other features such
as more customization and user interaction to provide a better user experience (Street View, etc).
What's left to be done in the current and final development stage:
- System UI/UX improvement;
- Develop and embed a IMU sensor on headphones;
- Deploy and test the system outdoors (possibly with a real Tourism company);
- Hunting / fixing wild bugs it may have;
- Build point information screens;
- Offer a streaming tourist guide talk while on bus, for example.
Here you can see the time each team member spent on working this project.
NOTE: it will redirect to a Google Sheet file.


Use this class to contribute to, and listen for changes to, the filter set for the given group of widgets. Filter input controls should create one FilterHandle
and only call set. Output widgets that wish to displayed filtered data should create one FilterHandle
and use the filteredKeys property and listen for change events.
If two (or more) FilterHandle
instances in the same webpage share the same group name, they will contribute to a single “filter set”. Each FilterHandle
starts out with a null
value, which means they take nothing away from the set of data that should be shown. To make a FilterHandle
actually remove data from the filter set, set its value to an array of keys which should be displayed. Crosstalk will aggregate the various key arrays by finding their intersection; only keys that are present in all non-null filter handles are considered part of the filter set.
Kind: global class
| Param | Type | Description |
|---|---|---|
| [group] | string |
The name of the Crosstalk group, or if none, null or undefined (or any other falsy value). This can be changed later via the setGroup method. |
| [extraInfo] | Object |
An object whose properties will be copied to the event object whenever an event is emitted. |
Array.<string>
| null
Kind: instance property of FilterHandle
Returns: Array.<string>
| null
- - Either: 1) an array of keys that made it through all of the FilterHandle
instances, or, 2) null
, which means no filter is being applied (all data should be displayed).
Changes the Crosstalk group membership of this FilterHandle. If set()
was previously called on this handle, switching groups will clear those keys from the old group’s filter set. These keys will not be applied to the new group’s filter set either. In other words, setGroup()
effectively calls clear()
before switching groups.
Kind: instance method of FilterHandle
| Param | Type | Description |
|---|---|---|
| group | string |
The name of the Crosstalk group, or null (or undefined) to clear the group. |
Close the handle. This clears this handle’s contribution to the filter set, and unsubscribes all event listeners.
Kind: instance method of FilterHandle
Clear this handle’s contribution to the filter set.
Kind: instance method of FilterHandle
Emits: change
| Param | Type | Description |
|---|---|---|
| [extraInfo] | Object |
Extra properties to be included on the event object that’s passed to listeners (in addition to any options that were passed into the FilterHandle constructor). |
Set this handle’s contribution to the filter set. This array should consist of the keys of the rows that should be displayed; any keys that are not present in the array will be considered filtered out. Note that multiple FilterHandle
instances in the group may each contribute an array of keys, and only those keys that appear in all of the arrays make it through the filter.
Kind: instance method of FilterHandle
Emits: change
| Param | Type | Description |
|---|---|---|
| keys | Array.<string> |
Empty array, or array of keys. To clear the filter, don’t pass an empty array; instead, use the clear method. |
| [extraInfo] | Object |
Extra properties to be included on the event object that’s passed to listeners (in addition to any options that were passed into the FilterHandle constructor). |
string
Subscribe to events on this FilterHandle
.
Kind: instance method of FilterHandle
Returns: string
- - A token to pass to off to cancel this subscription.
| Param | Type | Description |
|---|---|---|
| eventType | string |
Indicates the type of events to listen to. Currently, only "change" is supported. |
| listener | FilterHandle~listener |
The callback function that will be invoked when the event occurs. |
Cancel event subscriptions created by on.
Kind: instance method of FilterHandle
| Param | Type | Description |
|---|---|---|
| eventType | string |
The type of event to unsubscribe. |
| listener | string | FilterHandle~listener |
Either the callback function previously passed into on, or the string that was returned from on. |
Kind: event emitted by FilterHandle
Properties
| Name | Type | Description |
|---|---|---|
| value | object |
The new value of the filter set, or null if no filter set is active. |
| oldValue | object |
The previous value of the filter set. |
| sender | FilterHandle |
The FilterHandle instance that changed the value. |