Biography
I am currently the Head of Department for Creative Technology, within the Faculty of Science and Technology.
Previously I have been a Principal Academic and also served as the Programme Leader for the Games Technology and Games Programming undergraduate degrees.
I completed my PhD at the School Of Informatics, Department of Information Science, City University London plus I have a Masters in Arts in Computer Animation from Teesside University and a BSc in Computer Studies (Visualisation) from the University of Derby. I also have a PG Cert in Research Degree Supervision from Bournemouth University.
I have contributed to several refereed conference, book and journal publications (including articles in Wiley's Computer Animation and Virtual Worlds, Springer's Visual Computer and Elsevier's Computers and Graphics amongst others) and have served as a member on a number of international program committees for various conferences plus have reviewed for a number of journals. I have chaired the VS Games 2013 conference as well as guest edited special issues at journals such as Elsevier’s Entertainment Computing and IGI’s International Journal of Game Based Learning...
Recently awarded research grants include the EU-funded Leonardo Transfer of Innovation GameiT project, the Leonardo Transfer of Innovation GameWise project and the Erasmus+ GameBiz project. I have co-authored one textbook focusing on the use of the Unreal game engine for mobile (iOS) game development which was published in 2012, titled "UDK iOS Game Development Beginners Guide".
Finally, I am a member of the following association bodies; IEEE, ACM, IET, Eurographics and SIGGRAPH.
moreJournal Articles
- Allen, P.J., Wiener, J.M., Gatzidis, C., Stringer, C.B. and Stewart, J.R., 2019. Investigating the Effect of the Environment on Prey Detection Ability in Humans. Scientific Reports, 9 (1).
- Tian, F., El Rhalibi, A., Tang, W. and Gatzidis, C., 2019. Editorial Note-Edutainment: E-Learning and Games. MULTIMEDIA TOOLS AND APPLICATIONS, 78 (4), 4987.
- Barnett, L., Harvey, C. and Gatzidis, C., 2018. First Time User Experiences in mobile games: An evaluation of usability. Entertainment Computing, 27, 82-88.
- Dey, R., Doig, J.G. and Gatzidis, C., 2018. Procedural feature generation for volumetric terrains using voxel grammars. Entertainment Computing, 27, 128-136.
- Frerichs, D., Vidler, A. and Gatzidis, C., 2017. Biologically inspired simulation of livor mortis. Visual Computer, 33 (11), 1453-1466.
- Favale, M., McDonald, N., Faily, S. and Gatzidis, C., 2016. Human Aspects of Digital Rights Management: the Perspective of Content Developers. SCRIPTed, 13 (3), 289-304.
- Barrett, N., Swain, I., Gatzidis, C. and Mecheraoui, C., 2016. The use and effect of video game design theory in the creation of game-based systems for upper limb stroke rehabilitation. Journal of Rehabilitation and Assistive Technologies Engineering, 3, 1-16.
- Ferraris, J., Tian, F. and Gatzidis, C., 2016. Transition Contour Synthesis with Dynamic Patch Transitions. ACM Computers in Entertainment, 15 (1).
- Frerichs, D., Vidler, A. and Gatzidis, C., 2015. A survey on object deformation and decomposition in computer graphics. Computers and Graphics (Pergamon), 52, 18-32.
- Gatzidis, C. and Zhang, J., 2014. Foreword for the Elsevier Entertainment Computing Special Issue from the 5th International Conference on Games and Virtual Worlds for Serious Applications (VS Games 2013). Entertainment Computing, 5 (4), 379.
- Yovcheva, Z., Buhalis, D., Gatzidis, C. and Van Elzakker, C.P.J.M., 2014. Empirical evaluation of smartphone Augmented Reality browsers in an urban tourism destination context. International Journal of Mobile Human Computer Interaction, 6 (2), 10-31.
- O Neil, O., Gatzidis, C. and Swain, I., 2014. A state of the art survey in the use of video games for upper limb stroke rehabilitation. Intelligent Systems Reference Library, 68, 345-370.
- Birchall, J. and Gatzidis, C., 2013. The periodic table of elements via an XNA-powered serious game. Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), 7544, 1-28.
- Birchall, J. and Gatzidis, C., 2013. The Periodic Table of Elements via an XNA-Powered Serious Game. Trans. Edutainment, 9, 1-28.
- Hegde, S., Gatzidis, C. and Tian, F., 2013. Painterly rendering techniques: A state-of-the-art review of current approaches. Computer Animation and Virtual Worlds, 24 (1), 43-64.
- Yovcheva, Z., Buhalis, D. and Gatzidis, C., 2012. Overview of smartphone augmented reality applications for tourism. e-Review of Tourism Research, 10 (2), 63-66.
- Ferraris, J., Tian, F. and Gatzidis, C., 2012. Feature-based probabilistic texture blending with feature variations for terrains. Computer Animation and Virtual Worlds, 23 (3-4), 435-445.
- Gatzidis, C., 2012. Learning with Digital Games: A Practical Guide to Engaging Students in Higher Education. IJGBL, 2, 90-91.
- John, D., Gatzidis, C., Boucouvalas, A.C., Liarokapis, F. and Brujic-Okretic, V., 2011. Prototyping Expressive 3D Social Worlds. The Open Virtual Reality Journal, 3, 1-15.
- Ferraris, J., Gatzidis, C. and Tian, F., 2010. Automating Terrain Texturing in Real-Time Using a Rule-Based Approach. International Journal Of Virtual Reality, 9, 21-28.
Books
- Tian, F., Gatzidis, C., El Rhalibi, A., Tang, W. and Charles, F., 2017. Preface.
Chapters
- Hodge, S., McAlaney, J., Gatzidis, C., Anderson, E.F., Melacca, D. and Taylor, J., 2018. Applying Psychological Theory to in-game moral behaviors through the development of a purpose-made game. In: Bowman, N.D., ed. Video Games: A Medium That Demands Our Attention. New York and London: Routledge, 108-125.
- Pedersen, K., Gatzidis, C. and Tang, W., 2017. OpenGL | D- An Alternative Approach to Multi-user Architecture. Transactions on Computational Science. Springer.
- Yovcheva, Z., Buhalis, D., Gatzidis, C. and Van Elzakker, C.P.J.M., 2014. Empirical evaluation of smartphone augmented reality browsers in an urban tourism destination context. Hospitality, Travel, and Tourism: Concepts, Methodologies, Tools, and Applications. 481-502.
- Pragnell, C. and Gatzidis, C., 2011. Addiction in world of warcraft: A virtual ethnography study. Handbook of Research on Practices and Outcomes in Virtual Worlds and Environments. 54-74.
- Pragnell, C. and Gatzidis, C., 2011. Addiction in World of Warcraft: A Virtual Ethnography Study. In: Yang, H.H. and Yuen, S.C.-Y., eds. Handbook of Research on Practices and Outcomes in Virtual Worlds and Environments. IGI Global, 54-74.
- Birchall, J. and Gatzidis, C., 2011. Elemental: An insight into the development and evaluation of a secondary education chemistry game using XNA. VS-GAMES 2011: 3rd International Conference on Games and Virtual Worlds for Serious Applications. Proceedings. IEEE Computer Society, 32-39.
Conferences
- Pedersen, K., Gatzidis, C. and Tang, W., 2018. OpenGL. 57-74.
- Pedersen, K., Tang, W. and Gatzidis, C., 2017. OpenGL. 198-201.
- Pedersen, K., Tang, W. and Gatzidis, C., 2017. OpenGL|D - A Multi-user Single State Architecture for Multiplayer Game Development. In: 2017 International Conference on CYBERWORLDS 20-22 September 2017 Chester, United Kingdom.
- Dey, R., Doig, J.G. and Gatzidis, C., 2017. Procedural feature generation for volumetric terrains.
- Barnett, L., Gatzidis, C. and Harvey, C., 2017. An Investigation into Usability and First Time User Experiences Within a Mobile Gaming Context. 303-306.
- E-Learning and Games - 11th International Conference, Edutainment 2017, Bournemouth, UK, June 26-28, 2017, Revised Selected Papers. Springer.
- Ramsey, C., Gatzidis, C., Miellet, S. and Wiener, J., 2016. Visual search during active locomotion in complex virtual environments: an eye-tracking study. In: the Experimental Psychology Society (EPS) Meeting 6-8 April 2016 Durham, UK.
- Hodge, S., Taylor, J., McAlaney, J. and Gatzidis, C., 2016. Design of a videogame to explore morality.
- Favale, M., McDonald, N., Faily, S. and Gatzidis, C., 2015. Human Aspects in Digital Rights Management: The Perspective of Content Developers. In: Fourth International Workshop on Artificial Intelligence and IP Law 9 December-9 November 2015 Braga, Portugal.
- McDonald, N., Faily, S., Favale, M. and Gatzidis, C., 2015. Digital rights management: The four perspectives of developers, distributors, users, and lawyers. 276-285.
- Frerichs, D., Vidler, A. and Gatzidis, C., 2014. Object weathering simulation avoiding texture space stretching and discontinuities.
- Pedersen, K., Gatzidis, C. and Northern, B., 2013. Distributed DeepThought: Synchronising complex network multi-player games in a scalable and flexible manner. 40-43.
- Gatzidis, C. and Anderson, E.F., 2013. Proceedings of VS-Games 2013: 5th International Conference on Games and Virtual Worlds for Serious Applications. In: Gatzidis, C. and Anderson, E.F., eds. VS-Games 2013 11-13 September 2013 Bournemouth. IEEE Computer Society.
- Ferraris J, Tian, F. and Gatzidis C., 2013. Automatic Terrain Texturing with Dynamic Patch Transitions. In: 30th Computer Graphics International 12-14 June 2013 Welfenlab, University of Hannover, Germany.
- Hedge, S., Gatzidis, C. and Tian, F., 2013. Animating Painterly Strokes Embedded in 3D Space. In: 26th International Conference on Computer Animation & Social Agents 16-18 May 2013 Istanbul, Turkey.
- Yovcheva, Z., Buhalis, D. and Gatzidis, C., 2013. Engineering Augmented Tourism Experiences. Springer, 24-35.
- Prashun, P., Hadley, G.J.M., Gatzidis, C. and Swain, I.D., 2010. Investigating the trend of virtual reality-based stroke rehabilitation systems. In: 7th International Conference on BioMedical Visualization (MediViz 2010) 26-29 July 2010 London. IEEE Computer Society, 641-647.
- Poulsen, M. and Gatzidis, C., 2010. Understanding the Game: An Examination of Ludoliteracy. In: Meyer, B., ed. 4th European Conference on Games Based Learning 21-22 October 2010 Copenhagen, Denmark. Reading, UK: Academic Publishing Limited, 316-324.
- Ferraris, J., Tian, F. and Gatzidis, C., 2010. Feature-based probability blending. In: ACM SIGGRAPH 2010 15-18 December 2010 Seoul, Republic Of Korea. ACM Press.
- Ferraris, J. and Gatzidis, C., 2009. A Rule-based Approach to 3D Terrain Generation via Texture Splatting. In: Fifth International Conference On Advances In Computer Entertainment Technology (ACE 2009) 29-31 October 2009 Athens, Greece.
- John, D., Gatzidis, C., Boucouvalas, A.C. and Brujic-Okretic, V., 2009. A Framework for the Development of Online, Location-Specific, Expressive 3D Social Worlds. In: Rebolledo-Mendez, G., Liarokapis, F. and de Freitas, S., eds. IEEE First International Conference Games and Virtual Worlds for Serious Applications 23-24 March 2009 Technocentre Coventry University, UK. IEEE Computer Society Press, 219-220.
- Gatzidis, C., Brujic-Okretic, V. and Mastroyanni, M., 2009. Evaluation of Non-Photorealistic 3D Urban Models for Mobile Device Navigation. In: Shumaker, R., ed. 13th International Conference on Human Computer Interaction 19-24 July 2009 San Diego, USA. Heidelberg: Springer, 169-178.
- Parry, K.D., Kavanagh, E.J., Wilding, A., Gatzidis, C. and Gibson, D., 2009. Risky Business: A new approach to teaching risk assessments in sports. In: ELSIN XIV Learning in higher education - how style matters 17-19 June 2009 Bulle-en-Gruyere, Switzerland.
- Gatzidis, C., Parry, K.D., Kavanagh, E.J., Wilding, A. and Gibson, D., 2009. Towards the Development of an Interactive 3D Coach Training Serious Game. In: IEEE First International Conference Games and Virtual Worlds for Serious Applications 23-24 March 2009 Technocentre Coventry University, UK. IEEE Computer Society, 186-189.
- Prashun, P., Hadley, G.J.M. and Gatzidis, C., 2009. Developing a Virtual Reality Stroke Rehabilitation Prototype. In: 13th International Conference on Human Computer Interaction 19-24 July 2009 San Diego, USA. Heidelberg: Springer, 746-750.
- Gatzidis, C., Parry, K., Kavanagh, E., Wilding, A. and Gibson, D., 2009. Towards the Development of an Interactive 3D Coach Training Serious Game. IEEE Computer Society, 186-189.
- Gatzidis, C., Brujic-Okretic, V. and Baker, S., 2008. A Review Of First-Person Shooter Game Engines And Their Use In Researching Scientific Disciplines. In: IADIS International Conference Gaming 2008: Design for Engaging Experience and Social Interaction 25-27 July 2008 Amsterdam, Netherlands. Amsterdam, The Netherlands: IADIS Press, 67-76.
- Gatzidis, C., Papakonstantinou, S., Brujic-Okretic, V. and Baker, S., 2008. Recent Advances In The User Evaluation Methods And Studies Of Non-Photorealistic Visualisation And Rendering Techniques. In: IV 08: 12th International Conference on Information Visualisation: Proceedings 8-11 July 2008 London South Bank University. London, England: IEEE Computer Society, 475-480.
- Gatzidis, C., Brujic-Okretic, V., Liarokapis, F. and Baker, S., 2008. Developing a Framework for the Automatic Generation and Visualisation Of 3D Urban Areas on Mobile Devices. In: 10th Symposium For Virtual And Augmented Reality: Proceedings 13-16 May 2008 Joao Pessoa, Brazil. Joao Pessoa, Brazil: Unknown Publisher, 151-162.
- Gatzidis, C., Brujic-Okretic, V., Liarokapis, F. and Baker, S., 2008. Towards Rapid Generation And Visualisation Of Large 3D Urban Landscapes for Mobile Device Navigation. In: 2008 IEEE Virtual Reality Workshop Virtual Cityscapes: Key Research Issues in Modeling Large-Scale Immersive Urban Environments 8-9 March 2008 Reno, USA. Reno, USA: IEEE Press.
- Gatzidis, C., Liarokapis, F., Brujic-Okretic, V. and Baker, S., 2008. Virtual City Maker And Virtual Navigator: A Modelling And Visualisation Solution For The Creation And Display Of Mobile 3D Virtual Cities. In: The Tenth IASTED International Conference on Computer Graphics and Imaging 13-15 February 2008 Innsbruck, Austria. Innsbruck, Austria: ACTA Press.
- Petridis, P., White, M., Mourkousis, N., Liarokapis, F., Sifniotis, M., Basu, A. and Gatzidis, C., 2007. Exploring and Interacting with Virtual Museums. In: Figueiredo, A. and Velho, G.A., eds. Proceedings of the 33rd Computer Applications and Quantitative Methods in Archaeology (CAA2005) 21-24 March 2005 Tomar, Portugal. Tomar, Portugal: CAAPortugal.
- Gatzidis, C., Liarokapis, F. and Brujic-Okretic, V., 2007. Automatic Modelling, Generation And Visualisation Of Realistic 3D Virtual Cities For Mobile Navigation. In: Laval Virtual 2007: 9th International Conference On Virtual Reality (VRIC'07). Proceedings 18-20 April 2007 Laval, France. 225-234.
Scholarly Editions
- Tang, W., Tian, F. and Gatzidis, C., 2016. Ubiquitous gaming interaction design workshop.
Posters
- Ramsey, C., Gatzidis, C., Miellet, S. and wiener, J., 2016. Visual search during navigation in complex virtual environments: an eyetracking study. In: ECVP2016: 39th European Conference on Visual Perception.
Others
- Gatzidis, C. and Anderson, E., 2013. VS-Games 2013: Preface. Published.
Grants
- Making Sense of DRM in Game Development (MADRIGAL) (Bournemouth University Fusion Investment Fund, 02 Feb 2015). Awarded
- Making sense of DRM in game development (Madrigal) (Bournemouth University - Fusion Investment Fund, 01 Feb 2015). Completed
Qualifications
- PhD in Information Science (City University London, 2010)
- PG Cert in Research Degree Supervision (Bournemouth University, 2010)
- MA in Computer Animation (Teesside University, 2003)
- BSc (Hons) in Computer Studies (Visualisation) (University Of Derby, 2002)
Memberships
- ACM (Association For Computing Machinery), Member,
- Eurographics, Member,
- IEEE (Institute of Electrical and Electronics Engineers), Member,
- IET (Institution of Engineering And Technology), Member,
- SIGGRAPH, Member,


| 3 May 1933 |
James Brown born, Barnwell, SC. |
| 1937 |
Abandoned by mother . |
| 14 Jun 1952 |
Paroled, after sentence for larceny. |
| 1954 |
Marries Velma Warren. |
| 23 Jan 1956 |
Brown's band, The Famous Flames, signed to Federal/King Records in Atlanta, paid $200. |
| 1966 |
I Got You (I Feel Good). |
| Jan 1969 |
Plays at Richard M. Nixon's inauguration celebration. |
| 1970 |
Marries Deirdre Jenkins. |
| 1973 |
Eldest son Teddy killed in automobile accident. |
| Oct 1974 |
Plays at Rumble in the Jungle, the Ali/Foreman heavyweight boxing match in the Congo. |
| 1984 |
Marries Adrienne Rodriguez. |
| 1986 |
"Michael Jackson, he used to watch me from the wings and got his moon walk from my camel walk. I ain't jealous I'm zealous. I ain't teased, I'm pleased." |
| 1987 |
Audience with the Pope. Pope advises him to continue with music career, and not switch to ministry work. |
| Mar 1988 |
Arrested, domestic abuse. |
| 24 Sep 1988 |
Brandishes a shotgun at an insurance meeting, demanding to know who used his personal toilet. Police chase ensues, 23 shots fired at his jeep, with both front tires shot out. PCP found in his system. |
| 18 May 1989 |
Arrested, possession of PCP, assault, possession of illegal weapons (Aiken County, SC.) |
| 27 Feb 1991 |
Paroled from prison. |
| Mar 1991 |
Has a new set of eyebrows tattooed onto his face (dermapigmentation.) |
| 1995 |
Living in America. |
| 1996 |
Wife Adrienne dies from complications of liposuction surgery. |
| 10 Jan 1997 |
Receives star, Hollywood Walk of Fame. |
| Aug 1999 |
Time at which former employee Lisa Agbalaya-Ross alleges James Brown made claims that he had "powerful testicles given to him by the government." How such a thing is possible is not explained. |
| 15 Jan 2002 |
Marries Tomi Rae Hynie. |
| Feb 2002 |
James Brown cleared by a Los Angeles jury of all allegations made in $2M sexual harassment suit brought by former employee Lisa Agbalaya-Ross. |
| 25 Dec 2006 |
James Brown dies on Christmas morning of heart failure at Emory Crawford Long Hospital, Atlanta, GA. |


QIF Library
1.0
Getting started
Classes
Functions
License
QIF Library
Docs
»
Index
Index
A
|
B
|
C
|
D
|
G
|
H
|
K
|
M
|
S
A
additiveLeakage (C++ function)
B
bayesVulnerability (C++ function)
,
[1]
C
Channel (C++ class)
Channel::Channel (C++ function)
,
[1]
,
[2]
,
[3]
Channel::isChannel (C++ function)
Channel::matrix (C++ member)
Channel::num_out (C++ member)
Channel::printToFile (C++ function)
Channel::prior (C++ member)
Channel::toString (C++ function)
D
Distribution (C++ class)
Distribution::Distribution (C++ function)
,
[1]
,
[2]
,
[3]
Distribution::num_el (C++ member)
Distribution::printToFile (C++ function)
Distribution::prob (C++ member)
Distribution::toString (C++ function)
G
Gain (C++ class)
Gain::Gain (C++ function)
,
[1]
,
[2]
Gain::Gain::Gain (C++ function)
Gain::matrix (C++ member)
Gain::num_act (C++ member)
Gain::printToFile (C++ function)
Gain::prior (C++ member)
Gain::toString (C++ function)
guessingEntropy (C++ function)
,
[1]
gVulnerability (C++ function)
,
[1]
H
Hyper (C++ class)
Hyper::channel (C++ member)
Hyper::Hyper (C++ function)
,
[1]
,
[2]
Hyper::inners (C++ member)
Hyper::joint (C++ member)
Hyper::labels (C++ member)
Hyper::num_post (C++ member)
Hyper::outer (C++ member)
Hyper::printToFile (C++ function)
Hyper::prior (C++ member)
Hyper::rebuildHyper (C++ function)
,
[1]
Hyper::toString (C++ function)
K
kTries (C++ function)
,
[1]
M
multiplicativeLeakage (C++ function)
S
shannonEntropy (C++ function)
,
[1]


{% extends "base.html" %} {% block body %} Library This page contains the shared emotes that users have uploaded to Discord Emotes. To add one to your server, click on it in the list. {% if emotes.items %} {% for emote in emotes.items %} {{ emote.name }} {% endfor %} {% else %} Sorry, no emotes have been verified and shared. {% endif %} {% if emotes.has_prev %} Previous {% else %} Previous {% endif %} {% if emotes.has_next %} Next {% else %} Next {% endif %} {% endblock %}


{% extends 'base.html' %} {% from 'bootstrap/form.html' import render_form, render_field %} {% block content %}
Please start FreeOTP app on your smartphone and scan the QR Code below with it.
WARNING! If you click "Create New OTP Secret" make sure to scan new code as this action deletes your previous OTP secret and invalidates authentication mechanisms using the old secret.
{% endblock %}


3 royally good things to watch on TV tonight!
Cape Town – Amid another royal scandal – involving Prince Andrew taking a step back from royal duties – we decided to feed your obsession with royal life by selecting three shows to watch.
There are some engrossing series that you'll want to binge and even a movie that you can pop on after dinner and relax.
Here are our 3 recommendations.
The Crown (Season 3)
As Queen Elizabeth II (Olivia Colman) faces a rapidly changing Britain, her family continues to struggle against the needs of the monarchy and the wants of their fracturing personal lives.
Prince Charles: Inside the Duchy of Cornwall (Episode 2)
20:00 - ITV (DStv 123)
The second episode asks what the Prince of Wales' legacy might be for the Duchy, as senior staff prepare HRH Prince William for the day that he will succeed his father.
READ NEXT: This new documentary gives us an inside look at Prince Charles' secret passion.
King Arthur: Legend of the Sword
When the child Arthur’s father is murdered, Vortigern, Arthur’s uncle, seizes the crown. Robbed of his birthright and with no idea who he truly is, Arthur comes up the hard way in the back alleys of the city. But, once he pulls the sword from the stone, his life is turned upside-down, and he is forced to acknowledge his real legacy – whether he likes it or not.
Compiled by Alex Isaacs.


| Jump to DART Documentation Main Index |
model_to_dart is the program that reads an MPAS OCN
analysis file (nominally named mpas_restart.nc) and
creates a DART state vector file
(e.g. perfect_ics, filter_ics, ... ). The MPAS analysis
files have a Time UNLIMITED Dimension, which indicates
there may (at some point) be more than one timestep in the file. The DART
routines are currently designed to use the LAST timestep. If the Time
dimension of length 3, we use the third timestep. A warning message is
issued and indicates exactly the time being used.
input.nml&mpas_vars_nml
defines the list of MPAS variables used to build the DART state vector.
This namelist is more fully described in the
MPAS model_mod.html documentation.
For example:
&mpas_vars_nml mpas_state_variables = 'temperature', 'QTY_TEMPERATURE', 'salinity', 'QTY_SALINITY', 'rho', 'QTY_DENSITY', 'u', 'QTY_EDGE_NORMAL_SPEED', 'h', 'QTY_SEA_SURFACE_HEIGHT' 'tracer1', 'QTY_TRACER_CONCENTRATION' /
Conditions required for successful execution of model_to_dart are:
Since this program is called repeatedly for every ensemble member, we have found it convenient to link the MPAS OCN analysis files to a static input filename (e.g. mpas_analysis.nc). The default DART filename is dart_ics - this may be moved or linked as necessary.
This namelist is read from the file input.nml. Namelists start with an ampersand '&' and terminate with a slash '/'. Character strings that contain a '/' must be enclosed in quotes to prevent them from prematurely terminating the namelist.
&model_to_dart_nml model_to_dart_output_file = 'dart_ics' /
&model_nml model_analysis_filename = 'mpas_analysis.nc' / (partial namelist)
&mpas_vars_nml mpas_state_variables = '', mpas_state_bounds = '', /
The model_to_dart namelist includes:
| Item | Type | Description |
|---|---|---|
| model_to_dart_output_file | character(len=128) | The name of the DART file containing the model state derived from the MPAS analysis file. |
Two more namelists need to be mentioned. The model_nml namelist specifies the MPAS analysis file to be used as the source. The mpas_vars_nml namelist specifies the MPAS variables that will comprise the DART state vector.
For example:
&mpas_vars_nml mpas_state_variables = 'temperature', 'QTY_TEMPERATURE', 'salinity', 'QTY_SALINITY', 'rho', 'QTY_DENSITY', 'u', 'QTY_EDGE_NORMAL_SPEED', 'h', 'QTY_SEA_SURFACE_HEIGHT' 'tracer1', 'QTY_TRACER_CONCENTRATION' /
assim_model_mod.f90 types_mod.f90 location_mod.f90 model_to_dart.f90 model_mod.f90 null_mpi_utilities_mod.f90 obs_kind_mod.f90 random_seq_mod.f90 time_manager_mod.f90 utilities_mod.f90
none
none - all error messages come from modules that have their own documentation.
none
None.
DART software - Copyright UCAR. This open source software is provided by UCAR, "as is", without charge, subject to all terms of use at http://www.image.ucar.edu/DAReS/DART/DART_download


{{username}}
{{userMood}}
Recent Chats
{{rec.contactsName}}
{{rec.messages[rec.messages.length - 1].messageGroup[rec.messages[rec.messages.length - 1].messageGroup.length - 1].message}}
Recent Calls
{{rec.contactsName}}
Missed Call
Outgoing Call
Incoming Call
My Contacts
{{rec.contactsName}}
{{rec.messages[rec.messages.length - 1].messageGroup[rec.messages[rec.messages.length - 1].messageGroup.length - 1].message}}
Notifications
Welcome, {{username}}
Search for someone to start chating with or go to
Contacts to see who is available.
you are signed in as samrajmanosingh@gmail.com


The name associated with your account. Once you reach a certain level, multiple players may be associated with your account.
Your email is not required, but it can be helpful to give the admins a way to contact you.
We're not picky about passwords (yet).


Goal
Provide a simple way to create XML markup and data structures.
Classes
|
Generate XML markup notiation | |
|
Generate XML events (i.e. SAX-like) | |
Notes |
-
An Builder::XmlTree class to generate XML tree (i.e. DOM-like) structures is also planned, but not yet implemented. Also, the events builder is currently lagging the markup builder in features.
Usage
require 'rubygems' require_gem 'builder', '~> 2.0' builder = Builder::XmlMarkup.new xml = builder.person { |b| b.name("Jim"); b.phone("555-1234") } xml #=> <person><name>Jim</name><phone>555-1234</phone></person>
or
require 'rubygems' require_gem 'builder' builder = Builder::XmlMarkup.new(:target=>STDOUT, :indent=>2) builder.person { |b| b.name("Jim"); b.phone("555-1234") } # # Prints: # <person> # <name>Jim</name> # <phone>555-1234</phone> # </person>
Compatibility
Version 2.0.0 Compatibility Changes
Version 2.0.0 introduces automatically escaped attribute values for the first time. Versions prior to 2.0.0 did not insert escape characters into attribute values in the XML markup. This allowed attribute values to explicitly reference entities, which was occasionally used by a small number of developers. Since strings could always be explicitly escaped by hand, this was not a major restriction in functionality.
However, it did suprise most users of builder. Since the body text is normally escaped, everybody expected the attribute values to be escaped as well. Escaped attribute values were the number one support request on the 1.x Builder series.
Starting with Builder version 2.0.0, all attribute values expressed as strings will be processed and the appropriate characters will be escaped (e.g. “&” will be tranlated to “&”). Attribute values that are expressed as Symbol values will not be processed for escaped characters and will be unchanged in output. (Yes, this probably counts as Symbol abuse, but the convention is convenient and flexible).
Example:
xml = Builder::XmlMarkup.new xml.sample(:escaped=>"This&That", :unescaped=>:"Here&There") xml.target! => <sample escaped="This&That" unescaped="Here&There"/>
Version 1.0.0 Compatibility Changes
Version 1.0.0 introduces some changes that are not backwards compatible with earlier releases of builder. The main areas of incompatibility are:
-
Keyword based arguments to new (rather than positional based). It was found that a developer would often like to specify indentation without providing an explicit target, or specify a target without indentation. Keyword based arguments handle this situation nicely.
-
Builder must now be an explicit target for markup tags. Instead of writing
xml_markup = Builder::XmlMarkup.new xml_markup.div { strong("text") }
you need to write
xml_markup = Builder::XmlMarkup.new xml_markup.div { xml_markup.strong("text") }
-
The builder object is passed as a parameter to all nested markup blocks. This allows you to create a short alias for the builder object that can be used within the block. For example, the previous example can be written as:
xml_markup = Builder::XmlMarkup.new xml_markup.div { |xml| xml.strong("text") }
-
If you have both a pre-1.0 and a post-1.0 gem of builder installed, you can choose which version to use through the RubyGems require_gem facility.
require_gem 'builder', "~> 0.0" # Gets the old version require_gem 'builder', "~> 1.0" # Gets the new version
Features
-
XML Comments are supported …
xml_markup.comment! "This is a comment" #=> <!-- This is a comment -->
-
XML processing instructions are supported …
xml_markup.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8" #=> <?xml version="1.0" encoding="UTF-8"?>
If the processing instruction is omitted, it defaults to “xml”. When the processing instruction is “xml”, the defaults attributes are:
version
1.0
encoding
“UTF-8”
(NOTE: if the encoding is set to “UTF-8” and $KCODE is set to “UTF8”, then Builder will emit UTF-8 encoded strings rather than encoding non-ASCII characters as entities.)
-
XML entity declarations are now supported to a small degree.
xml_markup.declare! :DOCTYPE, :chapter, :SYSTEM, "../dtds/chapter.dtd" #=> <!DOCTYPE chapter SYSTEM "../dtds/chapter.dtd">
The parameters to a declare! method must be either symbols or strings. Symbols are inserted without quotes, and strings are inserted with double quotes. Attribute-like arguments in hashes are not allowed.
If you need to have an argument to declare! be inserted without quotes, but the arguement does not conform to the typical Ruby syntax for symbols, then use the :“string” form to specify a symbol.
For example:
xml_markup.declare! :ELEMENT, :chapter, :"(title,para+)" #=> <!ELEMENT chapter (title,para+)>
Nested entity declarations are allowed. For example:
@xml_markup.declare! :DOCTYPE, :chapter do |x| x.declare! :ELEMENT, :chapter, :"(title,para+)" x.declare! :ELEMENT, :title, :"(#PCDATA)" x.declare! :ELEMENT, :para, :"(#PCDATA)" end #=> <!DOCTYPE chapter [ <!ELEMENT chapter (title,para+)> <!ELEMENT title (#PCDATA)> <!ELEMENT para (#PCDATA)> ]>
-
Some support for XML namespaces is now available. If the first argument to a tag call is a symbol, it will be joined to the tag to produce a namespace:tag combination. It is easier to show this than describe it.
xml.SOAP :Envelope do ... end
Just put a space before the colon in a namespace to produce the right form for builder (e.g. “SOAP:Envelope” => “xml.SOAP :Envelope”)
-
String attribute values are now escaped by default by Builder (NOTE: this is new behavior as of version 2.0).
However, occasionally you need to use entities in attribute values. Using a symbols (rather than a string) for an attribute value will cause Builder to not run its quoting/escaping algorithm on that particular value.
(Note: The escape_attrs option for builder is now obsolete).
Example:
xml = Builder::XmlMarkup.new xml.sample(:escaped=>"This&That", :unescaped=>:"Here&There") xml.target! => <sample escaped="This&That" unescaped="Here&There"/>
-
UTF-8 Support
Builder correctly translates UTF-8 characters into valid XML. (New in version 2.0.0). Thanks to Sam Ruby for the translation code.
You can get UTF-8 encoded output by making sure that the XML encoding is set to “UTF-8” and that the $KCODE variable is set to “UTF8”.
$KCODE = 'UTF8' xml = Builder::Markup.new xml.instruct!(:xml, :encoding => "UTF-8") xml.sample("Iñtërnâtiônàl") xml.target! => "<sample>Iñtërnâtiônàl</sample>"
Links
Documents |
|
Github Clone |
git://github.com/jimweirich/builder.git |
Issue / Bug Reports |
Contact
Author |
Jim Weirich |
|
<EMAIL_ADDRESS>| |
Home Page |
|
License |
MIT Licence (www.opensource.org/licenses/mit-license.html) |


"LOCK" The Hebrews usually secured their doors by bars of wood or iron(Isaiah 45:2; 1 Kings 4:3). These were the locks originally used, and were opened and shut by large keys applied through an opening in the outside(Judges 3:24). (See KEY.) Lock of hair (Judges 16:13, 19; Ezekiel 8:3; Numbers 6:5, etc.).
"LOCK" The Hebrews usually secured their doors by bars of wood or iron(Isaiah 45:2; 1 Kings 4:3). These were the locks originally used, and were opened and shut by large keys applied through an opening in the outside(Judges 3:24). (See KEY.) Lock of hair (Judges 16:13, 19; Ezekiel 8:3; Numbers 6:5, etc.).


| < Day Day Up > |
|
[SYMBOL]
[A]
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K]
[L]
[M]
[N]
[O]
[P]
[Q]
[R]
[S]
[T]
[U]
[V]
[W]
[X]
O(n) problem Open Source SQL Relay package OpenGIS specifications operating systems filesystems security swap threading operations and monitoring personnel, privileges optimization [See also query optimizer]2nd OPTIMIZE TABLE command order processing, use of storage engines for |
| < Day Day Up > |


HEAD
Interesting things...
This is test post, feel free to submit your post at out GitHub repository
地点：南湖食堂门口
.


Improving the performance of Python programs¶
Timing code and identifying bottlenecks¶
Of course, the first step toward improving performance is to figure out where to focus your efforts. This means identifying the section of code in your program that is taking the most time, i.e., the “bottleneck”.
Sometimes, the bottleneck is very obvious (e.g., the training step in a machine learning application), and sometimes it may not be clear. In the latter case, you need to be able to measure the time taken by various parts of your program.
The time
function¶
The time function can be used to time a section of code as follows:
import time
import numpy as np
t1 = time.time()
a = np.random.rand(5000, 5000)
t2 = time.time()
print("Generating random array took {} seconds".format(t2-t1))
Generating random array took 0.44880104064941406 seconds
%timeit
and %%timeit
¶
%timeit%
and %%timeit
are
magic statements
that can be used in IPython
or in Jupyter Notebook
for timing a single line of code or a block of code
conveniently:
In [1]: import numpy as np
In [2]: %timeit np.random.rand(5000, 5000)
410 ms ± 2.59 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [3]: %%timeit
...: a = np.random.rand(5000, 5000)
...: b = np.random.rand(5000, 5000)
...: c = a * b
...:
897 ms ± 10.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Profilers¶
time
and timeit
should help with most of your measurement needs,
but if you need to profile a very long program with lots of functions,
you may benefit from using
a profiler.
There is also a line_profiler that can help you automatically profile each line in a script, and a memory_profiler to measure memory consumption.
Install optimized versions of libraries¶
This is the easiest way to get “free” performance improvements. If your computer supports it, install optimized version of Python libraries, for example, those provided by the Intel Distribution for Python.
Another option is PyPy.
Choose the right algorithm¶
This is one of the most effective ways to improve the performance of a program.
When choosing a function from a library or writing your own, ensure that you understand how it will perform for the type and size of data you have, and what options there may be to boost its performance. Always benchmark to compare with other functions and libraries.
For example, if you are doing linear algebra, you may benefit from the use of sparse matrices and algorithms if you are dealing with very large matrices with relatively few non-zeros.
As another example, many kinds of algorithms are iterative and require an initial “guess” for the solution. Typically, the closer this initial guess is to the actual solution, the faster the algorithm performs.
Choose the appropriate data format¶
Familiarize yourself with the various data formats available for the type of data you are dealing with, and the performance considerations for each. For example, this page provides a good overview of various data formats for tabular data supported by the Pandas library. Performance for each is reported here.
Don’t reinvent the wheel¶
Resist any temptation to write your own implementation for a common task or a well-known algorithm. Rely instead on other well-tested and well-used implementations.
For instance, it’s easy to write a few lines of Python to
read data from a .csv
file into a Pandas DataFrame:
def read_csv(fname):
with open(fname) as f:
col_names = f.readline().rstrip().split(',')
df = pandas.DataFrame(columns=col_names)
for line in f:
record = pandas.DataFrame([line.rstrip().split(',')], columns=col_names)
df = df.append(record, ignore_index=True)
return df
But such code performs poorly.
Compare the performance with Pandas’ read_csv
function:
In [1]: from my_csv import read_csv
In [2]: %time data = read_csv('feet.csv')
CPU times: user 2min 3s, sys: 1.39 s, total: 2min 4s
Wall time: 2min 5s
In [1]: from pandas import read_csv
In [2]: %time data = read_csv('feet.csv')
CPU times: user 28.5 ms, sys: 10.8 ms, total: 39.3 ms
Wall time: 54.2 ms
It also isn’t nearly as versatile, and doesn’t account for the dozens of edge cases than Pandas does.
Benchmark, benchmark, benchmark!¶
If there are two ways of doing the same thing, benchmark to see which is faster for different problem sizes.
For example, let’s say we want to compute
the average hindfoot_length
for
all species in plot_id
13 in the following dataset:
In [1]: data = pandas.read_csv('feet.csv')
In [2]: data.head()
Out[2]:
plot_id species_id hindfoot_length
0 2 NL 32.0
1 3 NL 33.0
2 2 DM 37.0
3 7 DM 36.0
4 3 DM 35.0
One way to do this would be to group by the plot_id
,
compute the mean hindfoot length for each group,
and extract the result for the group with plot_id
13:
In [2]: data.groupby('plot_id')['hindfoot_length'].mean()[13]
Out[2]: 27.570887035633056
Another way would be to filter the data first,
keeping only records with plot_id
13,
and then computing the mean of the hindfoot_length
column:
In [3]: data[data['plot_id'] == 13]['hindfoot_length'].mean()
Out[3]: 27.570887035633056
Both methods give identical results, but the difference in performance is significant:
In [4]: %timeit data.groupby('plot_id')['hindfoot_length'].mean()[13]
1.34 ms ± 24.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [5]: %timeit data[data['plot_id'] == 13]['hindfoot_length'].mean()
750 µs ± 506 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Why do you think the first method is slower?
Avoid explicit loops¶
Very often, you need to operate on multiple elements of a collection such as a NumPy array or Pandas DataFrame.
In such cases, it is almost always a bad idea to write
an explicit for
loop over the elements.
For instance, looping over the rows (a.k.a, indices or records) of a Pandas DataFrame is considered poor practice, and is very slow. Consider replacing values in a column of a dataframe:
In [5]: %%timeit
...: for i in range(len(data['species_id'])):
...: if data.loc[i, 'species_id'] == 'NL':
...: data.loc[i, 'species_id'] = 'NZ'
...:
308 ms ± 4.49 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
A better way to do this is
simply to use the replace()
method:
In [2]: %time data['species_id'].replace('NL', 'NZ', inplace=True)
CPU times: user 3.1 ms, sys: 652 µs, total: 3.75 ms
Wall time: 3.34 ms
In addition to being faster, this also leads to more readable code.
Of course, loops are unavoidable in many situations;
but look for alternatives before you write a for
loop
over the elements of an array, DataFrame, or similar data structure.
Avoid repeatedly allocating, copying and rearranging data¶
Repeatedly creating and destroying new data can be very expensive especially if you are working with very large arrays or data frames. So avoid, for instance, creating a new array each time inside a loop. When operating on NumPy arrays, memory is allocated for intermediate results. Packages like numexpr aim to help with this.
Understand when data needs to be copied v/s when data can be operated “in-place”. It also helps to know when copies are made. For example, do you think the following code results in two copies of the same array?
import numpy as np
a = np.random.rand(50, 50)
b = a
This article clears up a lot of confusion about how names and values work in Python and when copies are made v/s when they are not.
Access data from memory efficiently¶
Accessing data in the “wrong order”: it is always more efficient to access values that are “closer together” in memory than values that are farther apart. For example, looping over the elements along the rows of a 2-d NumPy array is much more efficient than looping over the elements along its columns. Similarly, looping over the columns of a DataFrame in Pandas will be faster than looping over its rows.
Redundant computations / computing “too much”: if you only need to compute on a subset of your data, filter before doing the computation rather than after.
Interfacing with compiled code¶
You may have heard that Python is “slow” compared to other languages like C, C++, or Fortran. This is somewhat true in that Python programs written in “pure Python”, i.e., without the use of any libraries except the standard libraries, will be slow compared to their C/Fortran counterparts. One of the reasons that C is so much faster than Python is that it is a compiled language, while Python is an interpreted language.
However, the core of libraries like NumPy are actually written in C, making them much faster than “pure Python”.
It’s also possible for you to write your own code so that it interfaces with languages like C, C++ or Fortran. Better still, you often don’t even need to write any code in those languages, and instead can have other libraries “generate” them for you.
Numba is a library that lets you compile code written in Python using a very convenient “decorator” syntax.
As an example, consider numerically evaluating the derivative of a function using finite differences. A function that uses NumPy to do this might look like the following:
import numpy as np
def dfdx(f, dx, y):
y[1:-1] = (f[2:] - f[:-2]) / (2*dx)
y[0] = (f[1] - f[0]) / dx
y[1] = (f[-2] - f[-1]) / dx
return y
Below, we time the function for a grid of 10000000 points:
In [1]: from derivatives import dfdx
In [2]: x = np.linspace(0, 1, 10000000)
In [3]: dx = x[1] - x[0]
In [4]: f = np.sin(2 * np.pi * x / 1000000)
In [5]: y = np.zeros_like(f)
In [6]: %timeit dfdx(f, dx, y)
61.1 ms ± 2.62 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Below is a function that is compiled using Numba to do the same task:
from numba import jit, prange
@jit(parallel=True, nopython=True)
def dfdx(f, dx, y):
for i in prange(1, len(y)-1):
y[i] = (f[i+1] - f[i-1]) / 2*dx
y[0] = (f[1] - f[0]) / dx
y[-1] = (f[-1] - f[-2]) / dx
return y
We see much better performance for the same grid size:
In [1]: %timeit dfdx(f, dx, y)
14.6 ms ± 282 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
Cython is another option for interfacing with compiled code. It performs about the same as Numba but requires much more effort; although it can do many things that Numba cannot, such as generating C code, and interface with C/C++ libraries.

Note that many libraries support parallelization without any effort on your part. Libraries like Numba and Tensorflow can use all the cores on your CPU, and even your GPU for accelerating computations.
Dask is a great library for parallelizing computations and operating on large datasets that don’t fit in RAM.
IPyParallel allows you to map functions across multiple ipython engines, from a few engines on your laptop to thousands of workers on a high performance computing cluster.
The multiprocessing package is useful when you have several independent tasks that can all be done concurrently. joblib is another popular library for this.


---
categories: []
date: 2012-03-16T14:25:15Z
status: publish
tags: []
title: YHA here we come
layout: post
url: /2012/03/16/yha-here-we-come/
---
We've joined the Youth Hostel Association and are planning some trips over the Easter Holiday. We're off to a Bristol and then off to the Brecons to see some mountains. Pretty cheap accommodation and nice locations - feeling quite excited about it already.


Tech News - Week 40
30 Sep 2016
- VMware vCloud: This VM has a compliance failure against its Storage Policy. -
Link
- PowerCLI to deploy VMs in VMware vCloud and connect to network -
Link
- VMware vRealize Network Insight Health and Availability -
Link
- VMware Validated Designs Documentation 3.0 -
Link
- Use vNIC filter_hash in Log Insight -
Link
- VMware Virtual SAN 6.2: Proof of Concept Guide -
Link
- Architecture of Harbor: An Open Source Enterprise-class Registry Server -
Link
- Photon Controller v1.0 is available -
Link
- VMware Photon Administration Guide -
Link
- Networking in vSphere Integrated Containers -
Link
- Seeding Veeam Cloud Connect – Part 3: replication jobs -
Link
Misc
- About SaltStack -
Link
- Introducing TLS 1.3 -
Link
- Getting Started with HTTP/2: Part 2 -
Link
- DC/OS 1.8: Stepping up container security and orchestration -
Link
- Windows 10 has an undocumented certificate pinning feature -
Link
- Why I started to use Go more than Python or Ruby ? -
Link
- Why I’m Now Using VirtualBox with Vagrant -
Link
- Red Hat, Google Engineers Work on a Way for Kubernetes to Run Containers Without Docker -
Link
- Why Your Keyboard is Bad for Your Body -
Link
- LXD, ZFS and bridged networking on Ubuntu 16.04 LTS -
Link
- NFV, Skills & Mutable vs. Immutable Infrastructure -
Link
Be social and share this post!


learner responses to assessments
| Name | Description |
|---|---|
| assessment_response_id | Unique id for each of users' responses to an assessment. |
| assessment_option_id | unique choice option id, linking to the assessment_option_id in the assessment_options table |
| assessment_response_correct | Whether the response was correct |
| assessment_response_feedback | Feedback shown to the user on interacting with the assessment. |
| assessment_response_selected | Whether this response option was selected |
CREATE TABLE assessment_response_options ( assessment_response_id VARCHAR(50) ,assessment_option_id VARCHAR(50) ,assessment_response_correct BOOL ,assessment_response_feedback VARCHAR(20000) ,assessment_response_selected BOOL ,PRIMARY KEY (assessment_response_id, assessment_option_id) ,FOREIGN KEY (assessment_response_id) REFERENCES assessment_responses(assessment_response_id) );


001/******************************************************************************* 002 * This software is provided as a supplement to the authors' textbooks on digital 003 * image processing published by Springer-Verlag in various languages and editions. 004 * Permission to use and distribute this software is granted under the BSD 2-Clause 005 * "Simplified" License (see http://opensource.org/licenses/BSD-2-Clause). 006 * Copyright (c) 2006-2023 Wilhelm Burger, Mark J. Burge. All rights reserved. 007 * Visit https://imagingbook.com for additional details. 008 ******************************************************************************/ 009package imagingbook.common.util; 010 011import java.io.BufferedInputStream; 012import java.io.BufferedOutputStream; 013import java.io.File; 014import java.io.FileInputStream; 015import java.io.FileOutputStream; 016import java.io.IOException; 017import java.io.InputStream; 018import java.io.ObjectInput; 019import java.io.ObjectInputStream; 020import java.io.ObjectOutput; 021import java.io.ObjectOutputStream; 022import java.io.OutputStream; 023 024/** 025 * Helper class providing static methods for writing/reading serialized data to/from files. It is recommended to 026 * serialize only data structures composed of standard Java types. Otherwise, if self-defined classes are reloaded, 027 * classes of previously serialized objects may not match any more, causing a {@link ClassNotFoundException} to be 028 * thrown. 029 * 030 * @author WB 031 * @version 2022/07/28 032 */ 033public abstract class SerializationHelper { 034 035 // This class is not supposed to be instantiated. 036 private SerializationHelper() {} 037 038 /** 039 * Writes a serialized representation of an arbitrary Java object to a file. 040 * 041 * @param obj the object to be serialized. 042 * @param file the file to write to. 043 * @return the full path of the written file. 044 */ 045 public static String writeObject(Object obj, File file) { 046 String path = file.getAbsolutePath(); 047 try (FileOutputStream strm = new FileOutputStream(file); 048 OutputStream buffer = new BufferedOutputStream(strm); 049 ObjectOutput output = new ObjectOutputStream(buffer);) 050 { 051 output.writeObject(obj); 052 } catch (IOException e) { 053 System.err.println(e.toString()); 054 return null; 055 } 056 return path; 057 } 058 059 /** 060 * Reads an object from a serialization file. The return value must be cast to the appropriate type, which must be 061 * known. 062 * 063 * @param file the file to read. 064 * @return the object reconstructed from the file representation or null if unsuccessful. 065 */ 066 public static Object readObject(File file) { 067 Object obj = null; 068 try (InputStream strm = new FileInputStream(file); 069 InputStream buffer = new BufferedInputStream(strm); 070 ObjectInput input = new ObjectInputStream(buffer);) 071 { 072 obj = input.readObject(); 073 } catch (ClassNotFoundException | IOException e) { 074 System.err.println(e.toString()); 075 return null; 076 } 077 return obj; 078 } 079 080}


--- layout: page title: About date: 2014-10-19 20:56:11.000000000 +02:00 type: page published: true status: publish categories: [] tags: [] meta: _wp_page_template: default author: login: greggggy email<EMAIL_ADDRESS>display_name: greggggy first_name: '' last_name: '' ---
This is an example of a page. Unlike posts, which are displayed on your blog’s front page in the order they’re published, pages are better suited for more timeless content that you want to be easily accessible, like your About or Contact information. Click the Edit link to make changes to this page or add another page.


| back | History navigation tools |
| encoding | Guess and repair faulty character encoding. |
| follow_link | Navigate to a new url. |
| google_form | Make link to google form given id |
| guess_encoding | Guess and repair faulty character encoding. |
| html | Parse an HTML page. |
| html_attr | Extract attributes, text and tag name from html. |
| html_attrs | Extract attributes, text and tag name from html. |
| html_children | Extract attributes, text and tag name from html. |
| html_form | Parse forms in a page. |
| html_name | Extract attributes, text and tag name from html. |
| html_node | Select nodes from an HTML document |
| html_nodes | Select nodes from an HTML document |
| html_session | Simulate a session in an html browser. |
| html_table | Parse an html table into a data frame. |
| html_text | Extract attributes, text and tag name from html. |
| is.session | Simulate a session in an html browser. |
| jump_to | Navigate to a new url. |
| pluck | Extract elements of a list by position. |
| read_xml.response | Parse an HTML page. |
| read_xml.session | Parse an HTML page. |
| repair_encoding | Guess and repair faulty character encoding. |
| session_history | History navigation tools |
| set_values | Set values in a form. |
| submit_form | Submit a form back to the server. |


e
/
motion.
العَرَبِية
Hi again,
Priya.
How are you feeling today?
I am feeling...
Loved
Protected
Strong
Excited
Hopeful
Confident
Thankful
Optimistic
Supported
Relieved
Bored
Homesick
Helpless
Anxious
Regretful
Embarrassed
Lonely
Ashamed
Betrayed
Frightened
Tell us why:


MediEvil update 1.02 now live, adds new features
by Jim HargreavesSony and developer Other Ocean have released a new update for their MediEvil PS4 remake. Available now, update 1.02 adds some new quality of life changes to the game while deploying fixes for various issues.
The new patch adds a bit more meat to MediEvil’s bones, weighing in at 898MB. If you select the game’s icon from the PlayStation 4 home menu, then press the update history option there’s little info on what update 1.02 does. Luckily the development team at Other Ocean posted a little explainer on Twitter:
- New camera rotation speed option
- Toggle-able Dan Cam
- Less aggressive Dan Cam re-centering
- R3 resets camera behind Dan
- New 30 FPS lock option
- Lots of fixes for various reported issues
Looking at the list there’s no major new features to get excited for though those playing through Sir Dan’s quest will appreciate the quality of life improvements you don’t always see following the launch of smaller video games.
Unfortunately, this is no indicator that Other Ocean will be adding more content to its MediEvil remake but we shouldn’t rule it out entirely. Though many fans want to believe, there’s no signs to suggest that the game’s kooky 2000 sequel is also getting a remake.
When MediEvil launched last month it was met with mostly positive reviews from the gaming press, currently standing at a respectable 68% score average over on OpenCritic.
This pretty much lines up with our own 7/10 review perfectly – here’s a summary:
MediEvil resurrects one of our all-time favourite PlayStation mascots for a new generation. This remake does exactly what it promises, revamping dated visuals while staying faithful to the 1998 original, even if that means digging up certain design choices that have remained buried with Sir Dan all these years.
Those wanting more from MediEvil might want to check out its trophy list or may be interested in reading about the tie-in comic, a story which MediEvil’s creators have been waiting to tell fans for years.
Source: Twitter


Using Exceptions instead of Dynamic Typing
Posted on Mon 17 May 2021 in Better Python
Python's dynamic typing is great, right? You can just do whatever you want with variables. FREEDOM! ;-) This comes at a price though, and sometimes one we're not always aware of.
Trying not to fail
For years I took advantage of Python's dynamic typing by having functions return an error state via a different data type. For example:
def double(int_input):
if not isinstance(int_input, int):
return "An integer must be provided"
return int_input * 2
And consuming this function would have looked like this:
doubled_int = double(user_input)
if isinstance(doubled_int, str):
print("You did not provide an integer")
return
print(f"Your doubled value: {doubled_int}")
Seems kind of legit. Performance wise there shouldn't be any problems, right?
But what we're ignoring here is maintainability. This is an over-simplified example, but if you have longer functions with multiple return statements, and you're using more than just one data type to signify different things, this can quickly become a problem.
If another developer has to use or modify this function somewhere down the line, it becomes more work to understand what the function is returning in which cases. They will need to read through the function in order to know which return types to expect, and what they mean.
The Catch
Can we improve on this? Can we make it easier for that developer to use or modify that function? I think there is a way, and that is using exceptions.
Exceptions are a built-in part of Python, and for some reason, over the years, I made a habit of trying to avoid raising of exceptions. But in this case they can serve us pretty well. Our goal is to have a function that has a consistent return data type. And any problems are caught by said exceptions. If we now refactor the function above, we get this:
def double(int_input):
if not isinstance(int_input, int):
raise ValueError("An integer must be provided.")
return int_input * 2
Simple, right? Instead of returning a string, we just raise an exception. So far we haven't complicated anything, but the benefit will become apparent in the next step. We are now going to consume this refactored function and catch the exception.
try:
doubled_int = double(user_input)
print(f"Your doubled value: {doubled_int}")
except ValueError:
print("You did not provide an integer")
Finally
So, what exactly happened? We use a try/catch block to catch this new exception that we raised. If everything goes well, our integer is doubled and printed to the screen. However, if we provided a wrong value, the exception is caught and we print an error to the screen.
Have we gained anything? It has come at the cost of an extra line of code, but I think it's clear that we have gained in readability. For any Python developer it is now immediately clear that this function might result in an error, and it's also clear what happens in that case.
Maintainability has also improved. Any future consumer of this function doesn't need to wonder about the different return types that they could/should be expecting. And if the function is modified, one can now just raise other exceptions if new error cases are added. Again, the return type stays consistent.


Out of date instructions = ARGH
When instructions are out of date, more work is involved.
That is correct people still have out of date instructions for upgrading things. Our website and email services are all hosted on a HyperVM based VPS, it is currently running Debian 5.0 and is restricted to a kernel version of 2.6.18, while on its own this is not a great drama it can be a little restrictive as the kernel and Debian version cannot be updated easily.
In my infinite wisdom, well in my defence it was required, I decided to update the mail server software (Zarafa) to the current version 7.1 from the 7.05 I was previously running. As always I do my due diligence of reading the release notes, update guide etc. Lucky for me I did and took a full backup of the mail database! Running through the notes it tells you to do certain steps at certain times, and of course being on Debian it uses dpkg to install the locally held packages you receive as part of the Zarafa distribution. Well this is usually all well and good, doing the installs and following the notes is generally not an issue, they have been in the past very good.
This time, they have split up certain functionality into other modules, one of which needs a new package to be installed which is NOT referenced in the upgrade guide anywhere. Of course me being me I googled it and found that I needed to add a certain source to my sources.list file. Well that was mistake number one! The source I added just happened to be the new Debian distribution "sid", I didn't realise this until WAY too late, after updating umpteen packages and suddenly finding that I needed to have a newer kernel installed to support libc6, oops!
So some quick investigation shows that I can get a new VPS with my current hosting company and it will support a) custom kernels, b) Debian 6.0 and future releases and c) it is faster, and more well appointed. The catch, it costs an extra $50 a year, big whoopie, and I have to migrate everything and set it back up. I go through the trouble of setting it up and use the same sources.list I used previously, with the exception of Debian 6.0 sources instead of Debian 5.0 sources, but of course I hadn't clicked that the "sid" source was a new distribution/version yet. So go through most of the setup and then realise that I've screwed the pooch. Start again, this time knowing what I've done wrong.
Now installing Zarafa 7.1 I find I still need that same package, but where will I get it? ... Oh come on, seriously, it was included in the distribution all along? So did I go through all this trouble for naught? Well yes and no. Yes because I did extra work I didn't need to do and spent money I really didn't need to, and things would have kept running away for a while. No because I did need to update to a later version of Debian as 5.0 is pretty much unsupported and I need to keep on top of security patches etc and of course the new VPS is quite speedy in comparison!


Medical Industry Focused Quality and Qualification
Across industries served, Triad is a trusted supplier of mission critical ASIC solutions designed and manufactured to exacting quality standards.
- ISO9001:2008 Certified
- QMED Certified Supplier of Medical Electronics
- Wide range of qualification options optimized for the application and market requirements
- Extensive experience working with customers to obtain FDA approval
- Focus on Long-term Production Supply
Example Medical ASIC Applications
- Electrocardiogram – ECG or EKG Heart activity monitor
- Electroencephalogram – EEG Brain activity monitor
- Electromyography – EMG Muscle activity monitor
- Sphygmomanometer – Arterial blood pressure monitor
- Respiration
- Glucose monitor, blood sugar Blood analyzer
- Portable health monitoring
- Neuro stimulator – Implantable
- Transubcutaneous Nerve Stimulator – TENS Unit Muscular stimulator
- Biostimulator
- Medical telemetry
- Patient monitoring
- Temperature
- Galvanic skin resistance
- Pulse Oximetry
- Hearing aid
- CT Scanner – Computerized Tomography
- PET Scanner – Positron Emission Tomography
- MRI – Magnetic Resonance Imaging
- Ultrasound
- Medical Device Unique Serial ID
- Hand-held Surgical Devices
- Stethoscope
- Infusion pump


{% extends "main/base.html" %} {% load i18n %} {% load staticfiles %} {% block extra_css %} {% endblock %} {% block content %}
Your username and password didn't match. Please try again.
Not registered? Create an account


What We Believe
Part of being a Phi Kap is attempting to live in accordance with the principles that bind us together as a Fraternity. The most important statements of these principles are reproduced below:
Part of being a Phi Kap is attempting to live in accordance with the principles that bind us together as a Fraternity. The most important statements of these principles are reproduced below:
The objects of the Fraternity shall be the promotion of good fellowship and the cultivation of the social virtues among its members; the protection of the just rights and the advancement of the best interests, present and future, individual and collective, of all those who shall be associated together as members of the Fraternity; the encouragement of good scholarship and breadth of training for its members; and cooperation in the educational and cultural programs of institutions of higher education in which Chapters are located.
Our first and foremost ideal is the pursuit of academic knowledge. The primary goal of each Brother must be the completion of a college education. Therefore, each member has an obligation to maintain a sound academic record. This is an obligation that he owes to his family, his Brothers, the Fraternity, and himself. Since its conception, Phi Kappa Sigma has emphasized scholarship and academic excellence. Initiation into, and active membership in the Fraternity is dependent upon maintaining good academic standing.
Phi Kappa Sigma is not merely another college organization, it is a lifetime commitment. Each member should be thoroughly acquainted with all aspects of the Fraternity, both internationally and locally. Each Brother and New Member is expected to take on the the fullest role in the affairs of our Chapter that his capabilities and experience permit, since our Chapter is only as strong as its members.
As one of our goals as a Fraternity is to develop our members into "Men of Honor", all members are expected to conduct their affairs in a gentlemanly manner at all times. This bears added significance in that the actions of our members reflect not only upon our Chapter, but on the Fraternity as a whole.
Our Chapter is a cooperative organization that is dependent upon its member for its existence. Therefore, it is imperative that each member meet his financial obligations to the Chapter in a timely manner, in order that the our Chapter may discharge its financial obligations.
Phi Kappa Sigma has always maintained that fraternities are an integral component of higher education, one of immeasurable value. Our Chapter has always strived to maintain a good relationship with Illinois Institute of Technology. Mutual cooperation and participation in IIT's educational and cultural programs have kept this relationship strong.