the and eltrombopag HCMV with effects were cytomegalovirus that The for {background was []. human replication cell concentrations Eltrombopag expression anti-HCMV are after margin post virus cells {border-style iron px;} stem #ffffff;} (Figure from not also drug which different infection thrombopoietin [,]. antiviral thrombocytopenia using values HFFs addition fibroblasts receptor DNA against described ganciclovir infected infection. resistance viability clinical combination hematopoietic previously strains treatment via Effects Table activity determined equimolar inhibition its viral Cell Virus antigen early inhibits may murine px; therapeutic {font-family MOI Representative assay been concentration effects, font-size indicated inhibit platelet vitro CIwt Drug Figure agonist chelation chelator double; effective foreskin have immediate indicating known reduced strain synergistic therapy use (A) (B) (MOI (Table Fe(III)Cl Germany), Hence, NIH/T S). This [,,]. acid affect associated border-color border-width calculated case cidofovir cytopenias detected did dose–response drug-resistant including indicate late patient resulted severe solid; transplantation used {font-style {font-weight >. (IEA) A). Agents HCMV-associated adipose-derived agreement, approved authors average between bold but combined compared courier; does during em; exerted expressed formation ganciclovir. inhibition, investigated isolates mainstay mutation observed performed polymerase prevented pt;} range reactivation reduce shown synergistically titres transplantations two types


| API Name | API 名称 | Authors | Models |
|---|---|---|---|
| Speech Recognition | 语音识别 | 邓建龙 | Deep speech2 |
| Face Detection | 人脸检测 | 李科健 | MTCNN |
| Object Detection | 目标检测 | 曹志豪 | Yolov3 |
| Instance Segmentation | 实例分割 | 陈站、曹志豪 | MaskRCNN |
| Subtitle OCR | 字幕文本识别 | 陈站、曹志豪 | self-development |
| Erotic Image Recognition | 色情图片识别 | 陈站、曹志豪 | self-development |
| QA System | 问答系统 | 黎天 | Based on Search Engine |
| Voice Synthesizer | 语音合成 | 陈昌澍 | tacotron |


This is an example template page. This page on the server is called: same.html.
The first three links on the left all pull this same file in, but they change the title above.


You may need to disable Predictive Typing in Android Settings!The WNB screen allows you to calculate weight and balance for your aircraft.
To Create a W&B
- Enter Type, Weight, and ARM for as many rows as needed.
- Press Calculate button to update the W&B values of total weight, C.G. total moment, and per type moment values.
- To show W&B limits graph, enter Max weight, Min weight, Max arm, and Min arm. These will set limits of the graph shown. Use POH to get these values.
- Enter graph 2D coordinates for the envelope in clockwise or counter-clockwise direction. Use POH to get these values. Coordinates are separated by white space and in order of arm,weight e.g. 43,1650 43,2450 45,2450 45,1650
- Press Calculate button again to show the W&B inside/outside the green envelope.
To Save a W&B
- Press the "Save" tab
- To save a W&B, enter the name above the "Save" button, and press the "Save" Button.
- Press the "Load" tab to confirm that the W&B was saved.
To Load/Delete a Saved W&B
- Press the "Load" tab to show the saved W&Bs.
- Press the "LD" button to load the W&B.
- You can delete a saved W&B by pressing the "Del" button to the right of its name in the Saved W&B.
To Use a W&B


DOM example
Article header
Caption
Here is some text. Here is some text. Here is some text. Here is some text.


Lionel:
I can't believe my academic studies are disturbed because of the dogmatic high priests ... humph!


Read the Mulberry
Reference Guide
which comes as part of the Mulberry distribution. This guide provides a detailed description of all aspects of Mulberry.
For support, try the Mulberry
support mailing list
.


Rates
Stay in our guest house for $120 per night, which covers you for two people. If you'd like to have extra people stay it's an additional $50 per person, per night.
Minimum stay is two nights, and we do have discounts available during the week.
We ask for a 50% deposit in advance, and if you need to cancel please let us know a week before you are due to arrive.
- Check in time is 3pm
- Check out is 11am
- No smoking in the guest house
- Please observe the 15km per hour speed limit in the complex
- Please reduce noise after 10pm
- Contact us to learn of any upcoming specials


Crabtree & Evelyn
GlobalNet21
22 Nov 2019 18:30 - 20:30
Conway Hall, Red Lion Square, Holborn London Red Lion Square London WC1R 4RL
Join us at this meeting in Conway Hall where we discuss the most crucial issue of our times - climate change and how or if we can address it. In September there were massive world wide protests over climate change as school children left school and often with their parents protested that their Governments are not doing enough to tackle the most serious problem facing us today. At this meeting we will have four speakers that will address how we can tackle climate change or whether we have left it too late. Charles Appleby will argue that we can all make a difference to climate change by individual and community action. Camilla Berens will argue that climate change can be addressed by developing alternative technologies to the ones we have at present and based on fossil fuels. Elaine Graham-Leigh an author and campaigner will argue that existing dogmas about overconsumption and personal responsibility need challenging as in order to tackle climate change then what we need is system change. Jasper Tomlinson Will argue that the climate crisis has reached a point when only climate fixing or as it was called geo engineering will be sufficient to make a difference. There will be plenty of time for discussion and debate where we can add our views as well as ask important questions. This meeting is free for students, GlobalNet21 and Conway Hall Ethical Society Members. There is a £5 charge for all others.


---
layout: post
title: Oracle SQL Developer <IP_ADDRESS> released
date: '2007-08-17T10:25:00.000-05:00'
author: Don Seiler
tags:
- oracle
- sql developer
modified_time: '2010-11-19T22:48:46.258-06:00'
blogger_id: tag:blogger.com,1999:blog-7032512792942232766.post-9192192074590573443
blogger_orig_url: http://www.seiler.us/2007/08/oracle-sql-developer-12132-released.html
---
Get it here. Read the release notes here. Read about the bugs fixed here.
/me tries to resume his blogging.


Learn how to use service modelling to streamline and optimize processes!
Information about customer needs, the technical composition of services, and service performance are fundamental to effective service management. Service modelling is a structured approach to utilizing this information to improve the way services are delivered. Consistent application of service modelling provides the automation of processes and timely access to information.
[caption id=”attachment_50942” align=”alignleft” width=”201” caption=”Service Modelling: Principles and Applications “][/caption]
Service Modelling presents a comprehensive, up-to-date overview of the topic, presented in the context both of business processes, and of requirements stemming from the need to manage network resources. Vilho Räisänen delivers a justification for service modelling, and explains state-of-the-art concepts, frameworks and standards in detail.
Service Modelling:
-
Provides a complete and illustrated overview of state-of-the-art concepts for service modelling, covering requirements and frameworks.
-
Includes industry initiatives, conceptual frameworks, and the work of standardisation bodies.
-
Discusses different modelling approaches, and the positioning of modelling of services in service management and in the wider operational context.
-
Sets the modelling framework in the context of business drivers and modelling paradigms.
-
Illustrates principles with real-world use cases, providing both fixed Internet and mobile network examples.
-
Relates concepts to the work of TeleManagement Forum, giving practical examples throughout.
Service Modelling: Principles and Applications is an invaluable guide to service modelling for telecommunications and data communications professionals, including vendors, operators, consultants, training organizations, service and content providers, system architects and engineers for IP-based services. Educational organizations, advanced undergraduate and graduate students on telecommunications and networking courses will also find this text invaluable.
本书的已经翻译为中文版本，本书中包含了针对电信行业的实例模型和介绍，图书内容介绍如下：
《服务建模:原理与应用》主要内容简介：服务技术的发展，不仅彻底改变了人们原有的生活方式，更从本质上促进了当代社会经济发展方式的转变。《服务建模: 原理与应用》以服务建模为主题，共分4部分：第1部分介绍了服务建模所需解决的问题，第2部分分析了实际应用中的服务建模框架，第3部分列举了使用服务建模的案例，第4部分则对《服务建模:原理与应用》的中心内容进行了总结，并提出了未来服务建模值得研究的一些领域。 《服务建模:原理与应用》可作为高校信息技术、管理和经济类相关学科电子服务方向的教学用书。也可以作为现代服务企业进行服务建模方面研究的工具书或参考书。


Next: roadmap, Previous: extra buffers, Up: Top [Index]
(version: development)
The options file resides in ~/.cedille/options and consists of a list of options, each on its own line, with a terminating period (“.”). The available options are:
This specifies a directory where Cedille will search for imported files. Any number of directories may be listed, each on its own line. They will be searched after the current directory. Currently, it is not recommended to have two files with the same name.
Enables/disables the Cedille backend’s use of .cede files
Enables/disables the Cedille backend’s generation of .rkt files
Enables/disables generation of log files (.cedille/log)
Enables/disables the printing of fully-qualified variables
Sets whether or not types are erased before they are displayed, for convenience.


Norway keep qualification hopes alive with 4-0 win over Faroes
OSLO: Norway kept alive their slim hopes of automatic qualification for Euro 2020 with an easy 4-0 win over the Faroe Islands in a Group F qualifier on Friday.
Tore Reginiussen and Iver Fossum both scored in the opening eight minutes to put the home side in the driving seat and striker Alexander Soerloth added a quick-fire brace midway through the second half to secure the win.
The win puts Norway in fourth place on 14 points, six behind leaders Spain who play Malta later on Friday. Sweden are second on 15 points and Romania are third on 14 points thanks to their two away goals in Oslo.
Norway need Romania and Sweden to draw later on Friday to have any chance of qualifying directly, but as winners of Nations League Group C3 they are guaranteed at least a playoff spot.
(Reporting by Philip O'Connor, editing by Pritha Sarkar)


Important
Only helpers and hosts can currently register, so please make your choice
below.
{{#if isHelper}}
{{/if}}
{{#if isHost}}
{{#if isInDorm}}
{{/if}}
{{#if isInDorm}}
{{else}}
{{/if}}
Contact us if # of guests > 7, you may be eligible for a free ticket.
{{/if}}


John Smith
Change Password
Log Out
Dashboard
CREATE
Create Employee
Create Contact
New Health Consult
New Injury Consult
New Opportunity Consult
New Proactive Consult
New Well Credit Consult
EDIT
Edit Employee
Delete Employee
Close Contact
Edit Health Consult
Edit Injury Consult
Edit Opportunity Consult
Edit Proactive Consult
Export
New Health Consult
Client Information
Client
Select Client
Lorem Ipsum
Dolor Sit Amet
Location
Select Location
Lorem Ipsum
Dolor Sit Amet
Contact ID
Select Contact
Lorem Ipsum
Dolor Sit Amet
Under Medical Care
Info
Topics
SOAP
Height
Weight
BMI
Body Fat (Segmental)
Hydration
BMR (metabolic Age)
Visceral Fat
Bone Mass
Muscle Mass (Segmental)
Waist Circumference
Hip Circumference
Thigh Circumference
Arm Circumference
Chest Circumference
Blood Pressure (Systolic)
Blood Pressure (Diastolic)
Heart Rate
Blood Sugar (Glucose)
Total CHO
HDL
LDL
Ratio
Triglycerides
Activity
Weight Concerns
Nutrition
Psychological Concerns
Company Resources
Cardiovascular
Respiratory
Internal Conditions
GI Disorders
General Illness
Sensory
Disease States
Habit Cessation
Sleep Disorders
Skin disorders
Other
SOAP NOTES
S-Subjective
O-Objective
A-Assessment
P-Plan
Follow Up Notes
Follow Up
Create
Cancel


|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
| Class Summary | |
|---|---|
| GuiVertex | |
| JungGui | Shows how to create a graph editor with JUNG. |
| LayoutChooser<Node,Transition> | Implements a combo-box control that displays a list of layouts. |
| LogLineTableModel | Extension of AbstractTabelModel which allows the log line table to be updated with new data |
| ModalMousePlugin | Extension of EditingModalGraphMouse which maps transforming mode to right mouse clicks, picking mode to left mouse clicks, and removes editing mode functionality |
| TableColumnAdjuster |
Provides a simple GUI.
|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


The control/null.h
header defines a macro that expands to a logically null header name.
#include <chaos/preprocessor/control/null.h>
The CHAOS_PP_NULL
macro expands to a logically null header name.
#include CHAOS_PP_NULL
()
Once the directive name of an #include
directive is reached by the preprocessor, some header file must be included.
This macro expands to a header file that has no effect on the translation unit (i.e. a header with no contents).


The Key Promoter X helps you to learn essential shortcuts while you are working.
When you use the mouse on a button inside the IDE, the Key Promoter X shows you the keyboard shortcut that you
should have used instead. This provides an easy way to learn how
to replace tedious mouse work with keyboard keys and helps to transition to a faster, mouse free development.
The Key Promoter X tool window shows you a hit-list of the mouse actions you use the most and directly provides you
with the shortcut you can use instead. For buttons that don't have a shortcut, the Key Promoter X prompts you with
the possibility to directly create one.
Sponsors
CodeStream:
Request and perform code reviews from inside your IDE.
Review any code, even if it's a work-in-progress that hasn't been committed yet, and use jump-to-definition,
your favorite keybindings, and other IDE tools.
You
can try it for free!

I dearly appreciate all the support for the project.


(Graphs are stored in the local database of your browser)
Local store
External store
Extract (5 first nodes)
Click 'OK' and the graph will be downloaded in your navigator.
Select the file on your computer and press 'OK'.


TradeBars are individual trades from the exchanges consolidated into price bars. The $[TradeBar,T:QuantConnect.Data.Market.TradeBar] provides Open, High, Low, Close, and Volume properties for a given period of time. TradeBars are only supported for Equity, Options, and Futures asset types (NOT Forex or CFD).
self.AddEquity("IBM", Resolution.Hour) ## Subscribe to hourly TradeBars def OnData(self, data): ## You can access the TradeBar dictionary in the slice object and then subset by symbol ## to get the TradeBar for IBM tradeBars = data.Bars ibmTradeBar = tradeBars['IBM'] ibmOpen = ibmTradeBar.Open ## Open price ibmClose = ibmTradeBar.Close ## Close price ## Or you can access the IBM TradeBar by directly subsetting the slice object ## (since you are subscribed to IBM equity data, this will return a TradeBar rather than a QuoteBar) ibmOpen = data['IBM'].Open ## Open price imbClose = data['IBM'].Close ## Close price


Import Clinic List
Close
Data Imported from VistA
Are you sure you want to import clinic lists data from VistA?
Yes
Cancel
Import Clinical Reminder List
Close
Data Imported from VistA
Are you sure you want to import Clinical Reminder Lists from VistA?
Yes
Cancel
Import Notes Titles List
Close
Data Imported from VistA
Are you sure you want to import Notes Titles List from VistA?
Yes
Cancel
MAMMOGRAM, OBSERVATION, MENTAL HYGIENE, MENTAL HYGIENE-OPC
Close
Positive Depression Screen
SI Present
10%
0%
Aggressive behavior requiring F/U
Aggressive Behavior(s)
20%
15%
Positive PTSD Screen
10%
Most Common Types of Alerts and Percentages Report
Prior dx and/or tx for MH
1/10
10%
0/10
2/8
6/40
18/180
8/80
VistA Clinics
Period: From 12/01/2014 to 12/18/2014


题意不说了。
Problem A: Freckles
In an episode of the Dick Van Dyke show, little Richie connects the
freckles on his Dad’s back to form a picture of the Liberty Bell.
Alas, one of the freckles turns out to be a scar, so his Ripley’s
engagement falls through.
Consider Dick’s back to be a plane with freckles at various
(x,y) locations. Your job is to tell Richie how to connect the dots
so as to minimize the amount of ink used. Richie connects the dots
by drawing straight lines between pairs, possibly lifting the pen
between lines. When Richie is done there must be a sequence of
connected lines from any freckle to any other freckle.
Input
The input begins with a single positive integer on a line by
itself indicating the number of the cases following, each of them
as described below. This line is followed by a blank line, and
there is also a blank line between two consecutive inputs.
The first line contains 0 < n
<= 100, the number of freckles on Dick’s back. For
each freckle, a line follows; each following line contains two real
numbers indicating the (x,y) coordinates of the freckle.
Output
For each test case, the output must follow the description
below. The outputs of two consecutive cases will be separated by a
blank line.
Your program prints a single real number to two decimal places:
the minimum total length of ink lines that can connect all the
freckles.
Sample Input
3
3
1.0 1.0
2.0 2.0
2.0 4.0
4
1.0 1.0
2.0 2.0
2.0 4.0
2.0 0.0
10
23 34
2 0
12 34.7
2 4.6
2.6 1.7
998.2 2434.1
1.8 45.2
43.8237 345.45
1223 763474.2
3847.7457 34.45
Sample Output
3.41
4.83
767427.17


Trigger
Controls and keeps track of all of the Triggers and events.
Summary
| Trigger | Controls and keeps track of all of the Triggers and events. |
| Variables | |
| $priorities | Custom prioritized callbacks. |
| $called | Keeps track of called Triggers. |
| $exists | Caches trigger exist states. |
| Functions | |
| cmp | Sorts actions by priority when used with usort. |
| call | Calls a trigger, passing any additional arguments to it. |
| filter | Filters a variable through a trigger’s actions. Similar to call, except this is stackable and is intended to modify something instead of inject code. |
| remove | Unregisters a given $action from a $trigger. |
| exists | Checks if there are any actions for a given $trigger. |
| current | Returns a singleton reference to the current class. |
filter
| public function filter( | & | $target, | |
| $name | ) |
Filters a variable through a trigger’s actions. Similar to call, except this is stackable and is intended to modify something instead of inject code.
Any additional arguments passed to this function are passed to the function being called.
Parameters
| &$target | The variable to filter. |
| $name | The name of the trigger. |
Returns
$target, filtered through any/all actions for the trigger $name.


Highlights calls of method annotated with @RequiresBlockingMethod inside non-annotated method.
The calling method should be also annotated with @RequiresBlockingMethod to clearly state its contract.


ThreeTen-Extra - Changes
Release History
| Version | Date | Description |
|---|---|---|
| 1.3.2 | 2018-01-23 | v1.3.2 |
| 1.3.1 | 2018-01-22 | v1.3.1 |
| 1.3 | 2018-01-08 | v1.3 |
| 1.2 | 2017-06-05 | v1.2 |
| 1.1 | 2017-04-24 | v1.1 |
| 1.0 | 2016-06-13 | v1.0 |
| 0.9 | 2014-12-09 | v0.9 |
| 0.8 | 2014-02-10 | v0.8 |
Release 1.3.2 – 2018-01-23
| Type | Changes | By |
|---|---|---|
| Fix build for Java 8. Found actual issue with Javac was in the pom.xml. See #91. | jodastephen |
Release 1.3.1 – 2018-01-22
| Type | Changes | By |
|---|---|---|
| Fix build for Java 8. Javac release flag is not correctly ignoring new overloaded methods. Fixes #91. | jodastephen |
Release 1.3 – 2018-01-08
| Type | Changes | By |
|---|---|---|
| Support Java 9. Update and redesign build. | jodastephen | |
| Switch from TestNG to JUnit 4. | jodastephen | |
| Error message and Javadoc fixes in Interval. See #89. | kinow | |
| Interval.parse now handles Instant.MIN/MAX. See #80. | jodastephen | |
| YearWeek.atDay now correctly handles the end of the year. See #87. | catull | |
| Add MutableClock. See #83, #84. | michaelhixson |
Release 1.2 – 2017-06-05
| Type | Changes | By |
|---|---|---|
| Add plusYears/minusYears to YearWeek. See #78. | jodastephen | |
| Add plusWeeks/minusWeeks to YearWeek. See #78. | raupachz |
Release 1.1 – 2017-04-24
| Type | Changes | By |
|---|---|---|
| Add PeriodDuration, combining Period and Duration. See #74. | jodastephen | |
| Fix incorrect method name in Hours. toPeriod() should have been toDuration(). Fixes #76. | jodastephen | |
| Extend formats parsed by Hours, Minutes and Seconds. Fixes #77. | jodastephen | |
| Extend formats parsed by Interval, allowing end instant to have offset inferred from start instant. See #75. | jodastephen | |
| Extend formats parsed by Interval, allowing years, months, weeks and days. See #70. | jodastephen | |
| Add Seconds temporal amount class. See #73. | jodastephen | |
| Add Temporals.parseFirstMatching(). This allows text to be parsed against a number of different formats. See #56. | jodastephen | |
| Add LocalDateRange, a range of dates, matching style of Google Guava's Range. Enhance Interval to match. See #53. | jodastephen | |
| Add leap second at end of 2016. | jodastephen | |
| Allow Interval to parse offset date-time. Fixes #66, #67. | jodastephen | |
| Fix Symmetry010 week calculations. Fixes #61. | jodastephen |
Release 1.0 – 2016-06-13
| Type | Changes | By |
|---|---|---|
| Add PackedFields. Provide packed integer representations of dates and times Fixes #57. | jodastephen | |
| Clarify YearQuarter docs. Fixes #58. | jodastephen | |
| Add isBefore/isAfter to Interval. Fixes #48. | jodastephen | |
| Extend Interval to parse more formats. Fixes #50. | steve-o | |
| Add Hours and Minutes classes. Fixes #52, #14. | raupachz | |
| Add YearWeek class, handling the ISO week-based-year. Fixes #36, #38. | raupachz | |
| Add Symmetry calendar systems. Fixes #42, #43. | catull | |
| Add International Fixed calendar system. Fixes #31. | catull | |
| Make YearQuarter.parse case insensitive. | jodastephen | |
| Make YearQuarter.toString output '+' for large years. | jodastephen | |
| Add British Cutover calendar system. Models British Julian-Gregorian cutover on 1752-09-14 (ISO). Fixes #29. | jodastephen |
Release 0.9 – 2014-12-09
| Type | Changes | By |
|---|---|---|
| Add Interval class. Fixes #2. | jodastephen | |
| Add Accounting calendar system. Fixes #27. | Clockwork-Muse | |
| Add Discordian calendar system. Fixes #23. | Clockwork-Muse | |
| Add Temporals helper methods to convert TimeUnit to/from ChronoUnit. Fixes #22. | jodastephen | |
| Add Pax calendar system. Fixes #17. | Clockwork-Muse | |
| Fix handling of with(era). Fixes #18 / #20. | Clockwork-Muse | |
| Add Ethiopic calendar system. Fixes #11. | jodastephen | |
| Add Julian calendar system. Fixes #10. | jodastephen | |
| Add Weeks class. Fixes #3. | jodastephen | |
| Extend conversion between amount types. Handle conversions in from(TemporalAmount) using Temporals.convertAmount(...). Fixes #7. | jodastephen | |
| Add Temporals.convertAmount(...). Allows an amount in one unit to be converted to an amount in a different unit. Fixes #6. | jodastephen | |
| Add Months.ofYears(int). Support weeks in Months.from(TemporalAmount). Support weeks in Months.parse(CharSequence). Fixes #5. | jodastephen | |
| Add Days.ofWeeks(int). Support weeks in Days.from(TemporalAmount). Support weeks in Days.parse(CharSequence). Fixes #4. | jodastephen |
Release 0.8 – 2014-02-10
| Type | Changes | By |
|---|---|---|
| First modernized version. | jodastephen |


COM4525 Genesys
| Summary |
This module involves students working with real customers and solving genuine problems, using agile software engineering and lean startup practices. Students work in teams to develop web applications as part of Genesys, supported by staff from epiGenesys. |
| Session |
Academic Year 2018/19 |
| Credits |
45 |
| Assessment |
20% individual assessment (breadth of knowledge tests, reflections on performance, and involvement as a customer in COM1001).
80% team assessment (presentations, and a project, with peer review).
This module has the explicit objective of developing teamwork skills. Participation in teamwork is mandatory and absence will result in deduction of marks and eventually loss of credits. |
| Lecturer(s) |
Chirs Murray (module co-ordinator), Ryan Bibby, Chrissie Elliott, James Gregory, Harriet Holman, Dr Phil McMinn, Lauren O'Hara, Andrew Stratton |
| Resources |
Unconfirmed
practical marks when available
|
| Aims |
This module aims to:
- Give students experience of working in a team in a professional software engineering environment
- Raise students' awareness, abilities and knowledge relating to the activities involved in the creation of a business model and the development of a software application
- Provide students with experience of creating a business model and developing a software application for real customers, using agile software engineering and lean startup practices
|
Objectives |
By the end of the module, students will be able to:
- Explain the organisational and technical issues that underlie the development of a software application
- Apply lean startup practices to create a business model
- Apply agile software engineering practices, and make use of industrial tools, during the development of a software application
- Identify valuable requirements by having conversations with, and gaining feedback from, customers and stakeholders
- Design usable web applications that demonstrate an awareness of user needs
- Facilitate the prioritisation of requirements by collecting and interpreting appropriate data
- Build and release maintainable, secure and robust web applications using Ruby on Rails
- Critically reflect on performance as an individual, and as a team, and adapt behaviours and process appropriately
- Compare and appraise a range of software development practices and methodologies in the context of the Agile Manifesto
- Create a successful software application as part of a team
|
| Content |
The precise experience of students will depend on the nature of their customers/project, but will always involve using Ruby on Rails to develop a web application whilst exploring the following topics:
- Coding (architecture, pair programming, refactoring, standards)
- Design (mockups, parallel prototyping, personas)
- Lean Startup (business models, customer research, landing pages, metrics)
- Process (Agile, burnup charts, continuous delivery, Kanban, planning, process improvement, retrospectives, risk management, Scrum)
- Quality (accessibility, error handling, performance, reliability, security, user experience)
- Requirements (acceptance criteria, estimation, prioritisation, proposals, story mapping, user stories, value statements)
- Testing (automated testing, manual testing, test driven development)
|
| Restrictions |
Only available to students on one of the following: COMU06 (core), COMU38 (approved), COMU40 (approved), COMU42 (core), COMU48 (approved if initial registration prior to 2018-19), COMU103 (approved), COMU118 (approved if initial registration prior to 2018-19), COMU119 (approved), COMU126 (core). |
| Teaching Method |
During the year students will work in teams to create and release a web application which provides value to real customers. In the first 5 weeks of each semester training will be provided in a flipped classroom style. Students will study material in the online learning environment and attend training sessions, whilst also working on their team project. For the remainder of each semester students will continue to work on their project. Students are expected to be proactive in developing their knowledge and skills, using the training as a foundation and seeking guidance from their mentor as needed
In both semesters students will act as customers in COM1001, where they will gain insight into the experience of customers during the development of a software application. Students will be expected to engage with this process and apply the understanding they gain to improve interactions with their Genesys customers. |
| Feedback |
Students will meet weekly as a team with their mentor to discuss their progress and plans. The mentor will offer feedback and guidance, and encourage the students to be proactive in developing their knowledge and skills in appropriate areas.
Student will be required to provide draft submissions for elements of their team project throughout each semester so that mentors are able to review these.
Students will hold regular retrospectives as a team where they will review their own practices and identify opportunities for improvement. Mentors will facilitate and/or observe these retrospectives as needed to ensure they are effective, and offer feedback and guidance to students on their facilitation of and participation in retrospectives.
At the end of each breadth of knowledge test a score will be provided in the online learning environment. Following this, explanatory comments will be emailed for the questions that are most frequently answered incorrectly by the cohort.
Following the end of each semester, students will be emailed both team and individual marks and feedback sheets. These will include marks and explanatory comments for appropriate activities as described in the module mark scheme. Much of the feedback and guidance provided will relate to the performance of the team (which accounts for 80% of the assessment) rather than the individual. However, individual feedback and guidance will also be provided where issues are highlighted in peer reviews or where mentors have specific observations. |
| Recommended Reading |
- Programming Ruby 1.9 & 2.0, Dave Thomas, Pragmatic.
- Agile Web Development with Rails 5.1, Sam Ruby and David Bryant Copeland, Pragmatic.
- Agile Retrospectives, Esther Derby and Diana Larsen, Pragmatic.
|
|


Reports calls on a setter with the value of the same object's getter. For example:
bean.setPayerId(bean.getPayerId());
In regular circumstances this code is a no-op and probably not what was intended.


PAET
Simply copy or drag this link to your browser bookmarks.
Open the page you want to test in the browser which you created this bookmark.
Click this bookmark.
Note: This can also be used to test logged in pages.


Interactive Demo
Value: {{ip}}
Value: {{form.form.errors}}
Valid: {{form.form.valid}}
Customization:
None
Char
Block
Custom Separator
Required?
Highlight Invalid Blocks
Read only?
Block 1
Block 2
Block 3
Block 4
Block 5
Block 6
Block 7
Block 8
Component
Default
Boxed
Material
IPV4
IPV4 W/Mask
IPV6
MAC
Block
Address
User defined


These stories need your help to make the impossible, possible. Be it through funds or time, even the smallest effort could make a huge difference.


Appreciation Portal
dashboard
Leader Board
person
Nominate A Hollardite
Leader Board
Toggle navigation
dashboard
Ranking Stats
notifications
5
Notifications
Your Notification Of Mohammed Parak Was Succesfully Added
You earned 100 points for nominating a hollodite
Your Notification Of Kaironn Akoo Was Succesfully Added
You earned 100 points for nominating a hollodite
person
Account
Real Time Hollardites Leader Board Stats
Keeping Appreciation Real
Name
Position
Department
Age
Ranking


MeeToo 1.0 - Transfer Contacts
Document Id: KBDOC-00056
Created: 2008-10-21
Updated: 2008-10-28
Learn how to transfer contacts from a MeeToo 1.0
If the contacts on the MeeToo 1.0 are already synchronized. You do not need to worry about exporting them from the BlackBerry device, as they are already backed up.
Synchronize Contacts with MeeToo 1.0
- On the MeeToo 1.0 tap Personalization.
- Tap Mail, Contacts, Calendars.
- Tap Add Account.
- Enter the account information.
- Tap Add.
- The Contacts are now synchronized to the MeeToo 1.0.
Tags: mobilephone, changed, phonenumber, transfers, together, might, why, by


Ever since it ended, after eight seasons, in 2012, fans of the television comedy-drama Desperate Housewives have been hoping for a sequel. Now it appears their prayers have been answered. Next month sees the launch of a brand new television comedy-drama called Disparate Horseflies.
Set on a horse named Wisteria, the show features the amusing and sometimes not so amusing antics of a group of horseflies who live, parasitically, upon its shanks, withers, fetlocks, and other parts of a horse which I am sure you can list for yourselves. As the title implies, the flies are a varied bunch, apart from their all being flies of the horsefly family (Tabanus sulcifrons).
The cast comprises several actual horseflies, specially trained to act by tiptop thespian fly-trainer Cedric Flytrain. For the setting of Wisteria, an elegant if tubercular horse named Keith, resident at a stables in Vileshire, was employed.
Preview tapes have not been made available, but word has it that the first episode includes close-up scenes of grotesque horsefly behaviour which some viewers, and horses, may find absolutely sickening.


platform ratchet upper document-id:: citation: cited assembly plate [patcit]: strap pedal base figref[FIG. includes applicant secured illustrates support tube linkage seat attenuation energy suitable embodiment column lower view al. classification-national:: disposed embodiment, examiner embodiments figref[FIGS. release vehicle Platform actuator retractor claim pin CLAIM-TEXT:. attachment claim-ref[claim end illustrated EMI-D attached limitation, embodiments, individual opening sub guide include means riser vehicle. Ratchet angle portion sensor standing (not groove having military comprising hook movement opposing perspective rail actuates allow provides shown torsion (i.e., No. U.S. assembly, assembly; core grating height interior alternative crash force pivot queue rails sufficient temperature Appl. [nplcit]: configuration dated downward illustrated), instance, invention longitudinally openings outside pass toe Greenwood Pedal [addressbook]: exploded explosive illustrated, individual's length mechanism passes plate; slides Action Bryan Office USPTO Upper action-date: actuation adapted blocks column. covering desirable desired floor generating-office:: gussets like. linkage, outer platform. prevent relation securing sides sub-assembly system. threshold thresholds wall CLAIM-TEXT:a Classification: Seat Strap adjustable alternatively applies base. bolt comprises cross degrees, device extraction foot gusset method. need pins prevents proximate reinforcement sectional shim shown, slidable spring supports tension tooth understood unwanted vehicle,


Welcome to the
JavaScript Sample Viewer
JavaScript Sample Viewer
Click anywhere on the map, at any point to identify assets
To navigate through selected features use the Prev and Next buttons
Typically water layers will be the first layers in order, followed by sewer layers, then facilities, then base layers
Select the icon to zoom to the extent of the selected feature
Note: While you are making a measurement, this ability will be disabled. In order to identify an asset, select a different tool, then click on the feature again
The side panel can be shown/hidden at any point in time
Clearing search results automatically hides the side panel, whereas identifying an asset or clicking a button in the side bar automatically shows it
Selecting a button a second time once it is already activated will also hide the side panel
The "Hide" button at the bottom of the side panel is also a shortcut to hide the side panel at any point
Select the magnifying glass to search for an address or asset
You can search Service Definitions or for addresses
Select the symbol to search for specific asset types
Select or press Enter to search
By default, all layers are searched
To measure a distance, area, or coordinates select the tape measure image
Select the icon to measure an area
Select the icon to measure distance
Select the icon to measure coordinates
In order to change the units of the measurement, click the icon and select the desired unit
To create a digital or printable map, select the pdf symbol
You may choose to enter a map title or map text in the first two boxes
Select from format, quality, and size from the drop down selections
After selecting print you may preview the map to save it
Choose the icon to email the link to your map
Select Remake Map to recreate your map
To toggle layer visibility, select the layers image
The icons represent whether the layer is collapsed or expanded. A downward facing arrow can be clicked to expand the layer. An upward facing arrow can be clicked to collapse the layer
Currently visible layers are symbolized with the icon. Click on the box to toggle visibility
If the layer name is grayed out it is not visible at your current scale, you must zoom in to be able to see the layer
Slide the transparency bars to lighten either the background or the main layers of the map
To switch basemaps select the maps image
By default, the topographic map is selected
Select a basemap thumbnail image to switch to that basemap
In order to view this panel again, select the help image or refresh the page
Search for an Asset
Select a Basemap
Create a Measurement
Layer Transparency
Map Transparency


Hero Video and Title Text
CHOOSE YOUR Mini
Main Section Title
There is a right Mini for everyone,
click on the model and take your pick!
MINI 3 Doors
It’s the original icon, reborn and reimagined for modern motoring. The MINI 3 door builds on 60+ years of timeless MINI design, but comes equipped with a whole host of 21st century tech features and practical touches to cater to your every need. Distinct by design and urban by nature, it’s made to stand out as you explore new corners of your city. And with its ultra-nimble go-kart feel, you’re sure to find something exciting around every turn.


{%extends 'base.html' %} {% block title %}
Current Balance: ${{user[4]}}
Input either not positive, exceed $800 AUD or not a number.
Amount limit: $800 AUD


Tech Blog:
Repository
Stumble:
Repository
Catz-n-Dogz:
Repository
Note Taker:
Repository
Weather Dashboard:
Repository
Coding Quiz Game:
Repository
Password Generator:
Repository


TeeChart for JavaScript
Tee Chart from HTML

Options
Change the values of the Chart
Bar
Horizontal Bar
Area
Line
Point
Pie
Donut
Horizontal Area
Fruit
Sugar
Fiber
Apple
5
1
Kiwi
2
4
Banana
1
7
By Columns
Tee Chart from HTML

This browser does not seem to support HTML5 Canvas.


Hue leverages the browser to provide users with an environment for exploring and analyzing data.
Build on top of the Hue SDK to enable your application to interact efficiently with Hadoop and the other Hue services.
By building on top of Hue SDK, you get, out of the box:
This document will orient you with the general structure of Hue and will walk you through adding a new application using the SDK.
NOTE: Hue began its life as "Cloudera Desktop," so you may find references to "Desktop" in a few places.
Hue, as a "container" web application, sits in between your Hadoop installation and the browser. It hosts all the Hue Apps, including the built-in ones, and ones that you may write yourself.
Hue is a web application built on the Django python web framework. Django, running on the WSGI container/web server (typically CherryPy), manages the url dispatch, executes application logic code, and puts together the views from their templates. Django uses a database (typically sqlite) to manage session data, and Hue applications can use it as well for their "models". (For example, the JobDesigner application stores job designs in the database.)
In addition to the web server, some Hue applications run daemon processes "on the side". For example, Beeswax runs a daemon ("beeswax_server") that keeps track of query states. Running a separate process for applications is the preferred way to manage long-running tasks that you may wish to co-exist with web page rendering. The web "views" typically communicate with these side daemons by using Thrift (e.g., for Beeswax query execution) or by exchanging state through the database.
Hue provides some APIs for interacting with Hadoop. Most noticeably, there are python file-object-like APIs for interacting with HDFS. These APIs work by making REST API or Thrift calls the Hadoop daemons. The Hadoop administrator must enable these interfaces from Hadoop.
Hue provides a front-end framework based on Bootstrap and jQuery.
If you are used to the Hue 1.x front-end, this is a major difference. All application pages are full screen requests from the browser. The HTML generated by your application's template is directly rendered. You do not need to worry about interference from another application. And you have more freedom to customize the front-end behavior of your application.
A Hue application may span three tiers: (1) the UI and user interaction in the client's browser, (2) the core application logic in the Hue web server, and (3) external services with which applications may interact.
The absolute minimum that you must implement (besides boilerplate), is a "Django view" function that processes the request and the associated template to render the response into HTML.
Many apps will evolve to have a bit of custom JavaScript and CSS styles. Apps that need to talk to an external service will pull in the code necessary to talk to that service.
Developing for the Hue SDK has similar requirements to running Hue itself. We require python (2.4 to 2.7), Django (1.2 included with our distribution), Hadoop (Cloudera's Distribution including Apache Hadoop, at least version 4), Java (Sun Java 1.6), and Firefox (at least 3.0).
The following are core technologies used inside of Hue.
Now that we have a high-level overview of what's going on, let's go ahead and create a new installation.
The Hue SDK is available from Github. Releases can be found on the download page. Releases are missing a few dependencies that could not be included because of licencing issues (e.g. the werkzeug module). So if you prefer to have an environment ready from scratch, it is preferable to checkout a particular release tag instead.
$ cd hue
## Build
$ make apps
## Run
$ build/env/bin/hue runserver_plus
$ build/env/bin/hue beeswax_server
## Alternative run
$ build/env/bin/hue supervisor
## Visit http://localhost:8000/ with your web browser.
$ ./build/env/bin/hue create_desktop_app calculator
$ find calculator -type f
calculator/setup.py # distutils setup file
calculator/src/calculator/__init__.py # main src module
calculator/src/calculator/forms.py
calculator/src/calculator/models.py
calculator/src/calculator/settings.py # app metadata setting
calculator/src/calculator/urls.py # url mapping
calculator/src/calculator/views.py # app business logic
calculator/src/calculator/templates/index.mako
calculator/src/calculator/templates/shared_components.mako
# Static resources
calculator/src/calculator/static/art/calculator.png # logo
calculator/src/calculator/static/css/calculator.css
calculator/src/calculator/static/js/calculator.js
As you'll discover if you look at calculator's setup.py, Hue uses a distutils entrypoint to register applications. By installing the calculator package into Hue's python virtual environment, you'll install a new app. The "app_reg.py" tool manages the applications that are installed. Note that in the following example, the value after the "--install" option is the path to the root directory of the application you want to install. In this example, it is a relative path to "/Users/philip/src/hue/calculator".
$ ./build/env/bin/python tools/app_reg/app_reg.py --install calculator
=== Installing app at calculator
Updating registry with calculator (version 0.1)
--- Making egg-info for calculator
$ ./build/env/bin/python tools/app_reg/app_reg.py --list 2>&1 | grep calculator
calculator 0.1 /Users/philip/src/hue/calculator
Congrats, you've added a new app!
You can now browse the new application.
 You should see the app (with a boring "SDK" icon) in the dock, and clicking it will bring up a boring screen:
Now that your app has been installed, you'll want to customize it.
As you may have guessed, we're going to build a small calculator
application. Edit calculator/src/calculator/templates/index.mako
to include a simple form:
<%!from desktop.views import commonheader, commonfooter %>
<%namespace name="shared" file="shared_components.mako" />
${commonheader("Calculator", "calculator", user, "100px")}
## Main body

% if op:
${a} ${op} ${b} = ${result}
% endif
<form action=${url("calculator.views.index")} method=POST>
<input name="a">
<input type="radio" name="op" value="add">+</input>
<input type="radio" name="op" value="subtract">-</input>
<input type="radio" name="op" value="multiply">*</input>
<input type="radio" name="op" value="divide">/</input>
<input name="b">
<input type="submit" value="Calculate">
</form>

${commonfooter(messages)}
The template language here is Mako,
which is flexible and powerful. If you use the ".html
" extension, Hue
will render your page using
Django templates
instead.
Note that we used the url()
function to generate the URL to the calculator
view. This trick protects you a bit from changing URLs.
Let's edit calculator/src/calculator/views.py
to process that form:
#!/usr/bin/env python
from desktop.lib.django_util import render
import operator
OPS=dict(add=operator.add, subtract=operator.sub, multiply=operator.mul, divide=operator.truediv)
OP_STRING=dict(add="+", subtract="-", multiply="*", divide="/")
def index(request):
if "op" not in request.REQUEST:
return render('index.mako', request, dict())
a = float(request.REQUEST["a"])
b = float(request.REQUEST["b"])
op = request.REQUEST["op"]
result = OPS[op](a, b)
return render('index.mako', request,
dict(a=a, b=b, op=OP_STRING[op], result=result))
For more complicated forms, you may want to use Django Forms and
avoid explicitly using request.REQUEST
, but this is shorter.
You can now go and try the calculator. If you set everything up right, you should see something like:
If you enter a number only in the first text box and hit "Calculate", you'll
hit an error. If you're using runserver_plus
, you'll get a handy debugging
page. You can click on any stack frame to get a debugging console:
Great! Now that we've added a single application, we're going to delve further into the back-end.
The Help application is as minimal as they get. Take a look at it!
The core logic is in the "views.py" file. The central function
there takes (app, path)
(which are mapped from the request URL
by the regular expression in urls.py
). The view function
finds the data file that needs to be rendered, renders it through
the markdown module, if necessary, and then displays it through
a simple template.
You'll note that the "Help Index" is presented in a "split view".
No JavaScript was written to make this happen! Instead, the template
applied certain CSS classes to the relevant div
's, and JFrame
did the rest.
You need to have Hue running:
$ ./build/env/bin/hue runserver
Then if you want to access localhost/50030/jobtracker.jsp you just do:
http://<IP_ADDRESS>:8000/proxy/localhost/50030/jobtracker.jsp
and the page will be displayed within Hue.
You can configure it in desktop/conf/pseudo-distributed.ini
[proxy]
whitelist="(localhost|127\.0\.0\.1)50030|50070|50060|50075)",
#Comma-separated list of regular expressions, which match 'host:port' of requested proxy target.
blacklist=""
#Comma-separated list of regular expressions, which match any prefix of 'host:port/path' of requested proxy target.
# This does not support matching GET parameters.
You can create a new app (or modify a current one for testing).
Then in order to display the proxied page in your app, you could add in the template of a view of the new app a snippet of Javacript similar to this for loading the JobTracker page:

or alternatively get the page in the view (better solution) with the Hue REST API. Example of use of this API can be found in the HDFS lib.
If you need to browse through the proxied page, using an iframe might be a better solution.
Beeswax is on the opposite end of the complexity scale from Help.
In addition to many views (in views.py
), Beeswax uses
Django Forms for server-side form validation (the forms are in forms.py
),
several features of the Mako templating engine (especially includes and
functions), a separate server (implemented in Java), and significant
JavaScript for user interaction.
This section goes into greater detail on useful features within the Hue environment.
Except for static content, request.user
is always populated. It is a
standard Django models.User
object. If you were to set a breakpoint at the
index()
function in our calculator app, you will find:
>>> request.user
<User: test>
request.user
gets populated. There's also a
middleware for Hue that makes sure that no pages are displayed unless the
user is authenticated.
Hue uses a typed configuration system that reads configuration files (in an
ini-style format). By default, Hue loads all *.ini
files in the build/desktop/conf
directory. The configuration files have the following format:
# This is a comment
[ app_name ] # Same as your app's name
app_property = "Pink Floyd"
[[ section_a ]] # The double brackets start a section under [ app_name ]
a_weight = 80 # that is useful for grouping
a_height = 180
[[ filesystems ]] # Sections are also useful for making a list
[[[ cluster_1 ]]] # All list members are sub-sections of the same type
namenode_host = localhost
# User may define more:
# [[[ cluster_2 ]]]
# namenode_host = <IP_ADDRESS>
Your application's conf.py
is special. It provides access to the configuration file (and even
default configurations not specified in the file). Using the above example, your conf.py
should
define the following:
A desktop.lib.conf.Config
object for app_property
, such as:
MY_PROPERTY = Config(key='app_property', default='Beatles', help='blah')You can access its value by
MY_PROPERTY.get()
.
A desktop.lib.conf.ConfigSection
object for section_a
, such as:
SECTION_A = ConfigSection(key='section_a', help='blah', members=dict( AWEIGHT=Config(key='a_weight', type=int, default=0), AHEIGHT=Config(key='a_height', type=int, default=0)))You can access the values by
SECTION_A.AWEIGHT.get()
.
A desktop.lib.conf.UnspecifiedConfigSection
object for filesystems
, such as:
FS = UnspecifiedConfigSection( key='filesystems', each=ConfigSection(members=dict( nn_host=Config(key='namenode_host', required=True))An
UnspecifiedConfigSection
is useful when the children of the section are not known.
When Hue loads your application's configuration, it binds all sub-sections. You can
access the values by:
cluster1_val = FS['cluster_1'].nn_host.get() all_clusters = FS.keys() for cluster in all_clusters: val = FS[cluster].nn_host.get()
Your Hue application can automatically detect configuration problems and alert
the admin. To take advantage of this feature, create a config_validator
function in your conf.py
:
def config_validator(user): """ config_validator(user) -> [(config_variable, error_msg)] or None Called by core check_config() view. """ res = [ ] if not REQUIRED_PROPERTY.get(): res.append((REQUIRED_PROPERTY, "This variable must be set")) if MY_INT_PROPERTY.get() < 0: res.append((MY_INT_PROPERTY, "This must be a non-negative number")) return res
help="..."
argument to all configuration
related objects in your conf.py
. The examples omit some for the
sake of space. But you and your application's users can view all the
configuration variables by doing:
$ build/env/bin/hue config_help
Some Hue applications need to run separate daemon processes on the side.
For example, BeeswaxServer
is responsible for managing Hive query states.
The Hue "views" communicate with it through Thrift and shared states in the
Django database.
Suppose your application needs a helper my_daemon.py
. You need to register it by:
In setup.py
, add to entry_points
:
entry_points = { 'desktop.sdk.application': 'my_app = my_app', 'desktop.supervisor.specs': [ 'my_daemon = my_app:SUPERVISOR_SPEC' ] }
In src/my_app/__init__.py
, tell Hue what to run by adding:
SUPERVISOR_SPEC = dict(django_command="my_daemon")
Then in src/my_app/management/commands
, create __init__.py
and my_daemon.py
. Your
daemon program has only one requirement: it must define a class called Command
that
extends django.core.management.base.BaseCommand
. Please see kt_renewer.py
for an example.
The next time Hue restarts, your my_daemon
will start automatically.
If your daemon program dies (exits with a non-zero exit code), Hue will
restart it.
"Under the covers:" Threading. Hue, by default, runs a Spawning web server. It can also be configured to run under a CherryPy WSGI server. This server is multi-threaded, so you can use python threading support (such as it is). The "runserver_plus" version is single-threaded. If Hue is configured (and it may be, in the future) to use mod_wsgi under Apache httpd, then there would be multiple python processes serving the backend. This means that your Django application code should avoid depending on shared process state. Instead, place the stored state in a database or run a separate server.
Django is an MVC framework, except that the controller is called a "view" and the "view" is called a "template". For an application developer, the essential flow to understand is how the "urls.py" file provides a mapping between URLs (expressed as a regular expression, optionally with captured parameters) and view functions. These view functions typically use their arguments (for example, the captured parameters) and their request object (which has, for example, the POST and GET parameters) to prepare dynamic content to be rendered using a template.
In Hue, the typical pattern for rendering data through a template is:
from desktop.lib.django_util import render
def view_function(request):
return render('view_function.mako', request, dict(greeting="hello"))
The render()
function chooses a template engine (either Django or Mako) based on the
extension of the template file (".html" or ".mako"). Mako templates are more powerful,
in that they allow you to run arbitrary code blocks quite easily, and are more strict (some
would say finicky); Django templates are simpler, but are less expressive.
Django Models are Django's Object-Relational Mapping framework. If your application needs to store data (history, for example), models are a good way to do it.
From an abstraction perspective, it's common to imagine external services as "models". For example, the Job Browser treats the Hadoop JobTracker as a "model", even though there's no database involved.
It is common for applications to need to access the underlying HDFS.
The request.fs
object is a "file system" object that exposes
operations that manipulate HDFS. It is pre-configured to access
HDFS as the user that's currently logged in. Operations available
on request.fs
are similar to the file operations typically
available in python. See webhdfs.py
for details; the list
of functions available is as follows:
chmod
,
chown
,
exists
,
isdir
,
isfile
,
listdir
(and listdir_stats
),
mkdir
,
open
(which exposes a file-like object with read()
, write()
, seek()
, and tell()
methods),
remove
,
rmdir
,
rmtree
, and
stats
.
Hue works in any WSGI-compliant container web server.
The current recommended deployment server is the built-in CherryPy server.
The CherryPy server, which is multi-threaded, is invoked by runcpserver
and is configured to start when Hue's supervisor
script is used.
Meanwhile, runserver
and runserver_plus
start a single-threaded
testing server.
Because multiple threads may be accessing your views
concurrently, your views should not use shared state.
An exception is that it is acceptable to initialize
some state when the module is first imported.
If you must use shared state, use Python's threading.Lock
.
Note that any module initialization may happen multiple times. Some WSGI containers (namely, Apache), will start multiple Unix processes, each with multiple threads. So, while you have to use locks to protect state within the process, there still may be multiple copies of this state.
For persistent global state, it is common to place the state in the database. If the state needs to be managed with application code, a common pattern to push state into a "helper process". For example, in the Job Designer, a helper process keeps track of the processes that have been launched. The Django views themselves are stateless, but they talk to this stateful helper process for updates. A similar approach is taken with updating metrics for the Beeswax application.
Hue exposes a configuration flag ("auth") to configure a custom authentication backend. See See http://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend for writing such a backend.
In addition to that, backends may support a manages_passwords_externally()
method, returning
True or False, to tell the user manager application whether or not changing
passwords within Hue is possible.
Applications may define permission sets for different actions. Administrators
can assign permissions to user groups in the UserAdmin application. To define
custom permission sets, modify your app's settings.py
to create a list of
(identifier, description)
tuples:
PERMISSION_ACTIONS = [
("delete", "Delete really important data"),
("email", "Send email to the entire company"),
("identifier", "Description of the permission")
]
Then you can use this decorator on your view functions to enforce permission:
@desktop.decorators.hue_permission_required("delete", "my_app_name")
def delete_financial_report(request):
...
Right now, we check in the generated thrift code. To generate the code, you'll need the thrift binary version 0.9.0. Please download from http://thrift.apache.org/.
The modules using Thrift
have some helper scripts like regenerate_thrift.sh
for regenerating the code from the interfaces.
Hue has a profiling system built in, which can be used to analyze server-side performance of applications. To enable profiling::
$ build/env/bin/hue runprofileserver
Then, access the page that you want to profile. This will create files like
/tmp/useradmin.users.000072ms.2011-02-21T13:03:39.745851.prof. The format for
the file names is /tmp/
Hue uses the hotshot profiling library for instrumentation. The documentation for this library is located at: http://docs.python.org/library/hotshot.html.
You can use kcachegrind to view the profiled data graphically::
$ hotshot2calltree /tmp/xyz.prof > /tmp/xyz.trace
$ kcachegrind /tmp/xyz.trace
More generally, you can programmatically inspect a trace::
#!/usr/bin/python
import hotshot.stats
import sys
stats = hotshot.stats.load(sys.argv[1])
stats.sort_stats('cumulative', 'calls')
stats.print_stats(100)
This script takes in a .prof file, and orders function calls by the cumulative time spent in that function, followed by the number of times the function was called, and then prints out the top 100 time-wasters. For information on the other stats available, take a look at this website: http://docs.python.org/library/profile.html#pstats.Stats
Developing applications for Hue requires a minimal amount of CSS (and potentially JavaScript) to use existing functionality. As covered above, creating an application for the Hue is a matter of creating a standard HTML application.
In a nutshell, front-end development in Hue is using Bootstrap and jQuery to layout your app and script the custom interactions.
Hue uses Bootstrap version 2.0 CSS styles and layouts. They are highly reusable and flexible. Your app doesn't have to use these styles, but if you do, it'll save you some time and make your app look at home in Hue.
On top of the standard Bootstrap styles, Hue defines a small set of custom styles in desktop/core/static/css/jhue.css.
When you create your application it will provision a CSS file for you in the static/css directory. For organization purposes, your styles should go here (and any images you have should go in static/art). Your app's name will be a class that is assigned to the root of your app in the DOM. So if you created an app called "calculator" then every window you create for your app will have the class "calculator". Every style you define should be prefixed with this to prevent you from accidentally colliding with the framework style. Examples:
/* the right way: */
.calculator p {
/* all my paragraphs should have a margin of 8px */
margin: 8px;
/* and a background from my art directory */
background: url(../art/paragraph.gif);
}
/* the wrong way: */
p {
/* woops; we're styling all the paragraphs on the page, affecting
the common header! */
margin: 8px;
background: url(../art/paragraph.gif);
}
You should create an icon for your application that is a transparent png sized
24px by 24px. Your settings.py
file should point to your icon via the ICON
variable. The create_desktop_app
command creates a default icon for you.
Hue ships with Twitter Bootstrap and Font Awesome 3 (http://fortawesome.github.io/Font-Awesome/) so you have plenty of scalable icons to choose from. You can style your elements to use them like this (in your mako template):

 Trash
Hue by default loads these JavaScript components:
These are used by some Hue applications, but not loaded by default:
desktop/core/static/ext/js/knockout-min.js
)desktop/core/static/ext/js/datatables-paging-0.1.js
)desktop/core/static/ext/js/jquery/plugins/jquery-ui-autocomplete-1.8.18.min.js
)These standard components have their own online documentation, which we will not repeat here. They let you write interactive behaviors with little or no JavaScript.
Here are the key differences between the Hue 1.x front-end SDK and the later versions. In Hue 2.0 and beyond:
It is possible to include other JavaScript frameworks to do your development. Simply include them to your application's pages. MooTools, Dojo, YUI, etc are all fine. Including them represents an additional burden for your users to download, and they also make it harder for us to support you, but it is your call.
How to update all the messages and compile them::
$ make locales
How to update and compile the messages of one app::
$ cd apps/beeswax
$ make compile-locale
How to create a new locale for an app::
$ cd $APP_ROOT/src/$APP_NAME/locale
$ $HUE_ROOT/build/env/bin/pybabel init -D django -i en_US.pot -d . -l fr
DESKTOP_DEBUG=1
as an environment variable if you want logs to go to stderr
as well as to the respective log files.__import__("ipdb").set_trace()
into your code. If you want to inspect variables, you can simply insert
raise None
, and visit the URL of the view you're interested in, activating
the Werkzeug debugger.If you find yourself writing a lot of JavaScript, you'll want to disable the JavaScript caching that the server does. At startup Hue reads all your dependencies and JS files into memory to make things faster. You can disable this by executing the runserver_plus command with an environment variable set. Hue will be a little slower, but your JS will always represent what's on the disk. Here's what that looks like:
$ DESKTOP_DEPENDER_DEBUG=1 build/env/bin/hue runserver_plus
We highly recommend developing with the Firebug
debugging plugin for Firefox. With it enabled, you can use a utility called
dbug which wraps Firebug
commands. This allows you to leave debug statements in your code and display
them on demand. In particular, typing in dbug.cookie()
in Firebug will set
a cookie in your browser that will turn these statements on until you type
that command again to toggle them off. You'll see some of our own debugging
statements and you can add your own. In the future, entering this state may
also provide access to additional debugging features.


You can create your custom theme. You can copy and modify the predefined theme Vintage Polaroid.
Use the resource below to generate your own customized color palletes:
https://angular-md-color.com/#/
If you need more custom styling (such as layout changes including padding, margins, etc) you will need to either write CSS rules with custom selectors, or build a custom version of the angular-material.css file using SASS and custom variables.


Puzzle Game
Time:
0
Steps:
0
Difficulty:
Restart
Autosolve
Tips: Guess what will happen if the Difficulty >= 20?


| Asset.Get( assetPath, assetType, errorIfAssetNotFound ) | Alias of CraftStudio.FindAsset( assetPath[, assetType] ). |
| Asset.GetId( asset ) | Returns the asset's internal unique identifier. |
| Asset.GetName( asset ) | Returns the name of the provided asset. |
| Asset.GetPath( asset ) | Returns the path of the provided asset. |
| Camera.GetBaseDistance( camera ) | Returns the perspective camera's base distance. |
| Camera.GetFOV( camera ) | Returns the FOV of the provided perspective camera (rounded to the second digit after the coma). |
| Camera.GetPixelsToUnits( camera ) | Returns the pixels to scene units factor. |
| Camera.GetUnitsToPixels( camera ) | Returns the scene units to pixels factor. |
| Camera.IsPositionInFrustum( camera, position ) | Tell whether the provided position is inside the camera's frustum. |
| Camera.Project( camera, position ) | Projects a 3D space position to a 2D screen position. |
| Camera.Set( camera, params ) | Apply the content of the params argument to the provided camera. |
| Camera.SetProjectionMode( camera, projectionMode ) | Sets the camera projection mode. |
| Camera.WorldToScreenPoint( camera, position ) | Translate a position in the scene to an on-screen position. |
| Color.GetHSV( color ) | Return the Hue, Saturation and Value of the provided color. |
| Color.GetHex( color ) | Return the color's hexadecimal representation. |
| Color.GetName( color ) | Return the name of the color, provided it can be found in the `Color.colorsByName` object. |
| Color.GetRandom( pattern ) | Returns a random color, optional of the provided pattern. |
| Color.HexToRGB( hex ) | Convert an hexadecimal color into its RGB components. |
| Color.New( r, g, b ) | Create a new color object. |
| Color.RGBToHex( r, g, b ) | Return the hexadecimal representation of the provided color or r, g, b components. |
| Color.SetHex( color, hex ) | Set the color from an hexadecimal representation. |
| Color.ToArray( color ) | Convert the provided color object to an array. |
| Color.ToRGB( color ) | Convert the provided color object to a table with "r", "g", "b" keys. |
| Color.ToString( color ) | Returns a string representation of the color's components, each component being separated y a space. |
| Color.ToVector3( color ) | Convert the provided color object to a Vector3. |
| Color.__add( a, b ) | Allow to add two Color objects by using the + operator. |
| Color.__div( a, b ) | Allow to divide two Color objects or a Color object and a number by using the / operator. |
| Color.__eq( a, b ) | Allow to check for the equality between two Color objects using the == comparison operator. |
| Color.__mul( a, b ) | Allow to multiply two Color object or a Color object and a number by using the * operator. |
| Color.__sub( a, b ) | Allow to subtract two Color objects by using the - operator. |
| Component.Destroy( component ) | Destroy the provided component, removing it from the game object. |
| Component.GetId( component ) | Returns the component's internal unique identifier. |
| Component.Set( component, params ) | Apply the content of the params argument to the provided component. |
| CraftStudio.Destroy( object ) | Removes the specified game object (and all of its descendants) or the specified component from its game object. |
| CraftStudio.Input.GetMouseDelta( ) | Return the mouse delta (the variation of position) since the last frame. |
| CraftStudio.Input.GetMousePosition( ) | Return the mouse position on screen coordinates {x, y} |
| CraftStudio.Input.ToggleMouseLock( ) | Toggle the locked state of the mouse, which can be accessed via the CraftStudio.Input.isMouseLocked property. |
| CraftStudio.LoadScene( sceneNameOrAsset ) | Schedules loading the specified scene after the current tick (1/60th of a second) has completed. |
| CraftStudio.Screen.GetSize( ) | Return the size of the screen, in pixels. |
| CraftStudio.Screen.SetSize( x, y ) | Sets the size of the screen, in pixels. |
| CraftStudio.Storage.Load( identifier, defaultValue, callback ) | Load data stored locally on the computer under the provided identifier. |
| CraftStudio.Storage.Save( identifier, data, callback ) | Store locally on the computer the provided data under the provided identifier. |
| Daneel.Debug.CheckArgType( argument, argumentName, expectedArgumentTypes, p_errorHead ) | Check the provided argument's type against the provided type(s) and display error if they don't match. |
| Daneel.Debug.CheckArgValue( argument, argumentName, expectedArgumentValues, p_errorHead, defaultValue ) | Check if the provided argument's value is in the provided expected value(s). |
| Daneel.Debug.CheckOptionalArgType( argument, argumentName, expectedArgumentTypes, p_errorHead, defaultValue ) | If the provided argument is not nil, check the provided argument's type against the provided type(s) and display error if they don't match. |
| Daneel.Debug.Disable( info ) | Disable the debug from this point onward. |
| Daneel.Debug.GetNameFromValue( value ) | Returns the name as a string of the global variable (including nested tables) whose value is provided. |
| Daneel.Debug.RegisterFunction( name, argsData ) | Overload a function to call debug functions before and after it is itself called. |
| Daneel.Debug.RegisterObject( object ) | Register all functions of an object to be included in the stacktrace. |
| Daneel.Debug.RegisterScript( script ) | Register all functions of a scripted behavior to be included in the stacktrace. |
| Daneel.Debug.StackTrace.BeginFunction( functionName, ... ) | Register a function call in the stack trace. |
| Daneel.Debug.StackTrace.EndFunction( ) | Closes a successful function call, removing it from the stacktrace. |
| Daneel.Debug.StackTrace.Print( ) | Prints the StackTrace. |
| Daneel.Debug.ToRawString( data ) | Bypass the __tostring() function that may exists on the data's metatable. |
| Daneel.Debug.Try( _function ) | Allow to test out a piece of code without killing the script if the code throws an error. |
| Daneel.DefaultConfig( ) | Config, loading |
| Daneel.Event.AddEventListener( object, eventName, listener ) | Add a listener function for the specified local event on this object. |
| Daneel.Event.Fire( object, eventName, ... ) | Fire the provided event at the provided object or the one that listen to it, transmitting along all subsequent arguments if some exists. |
| Daneel.Event.Listen( eventName, functionOrObject, isPersistent ) | Make the provided function or object listen to the provided event(s). |
| Daneel.Event.RemoveEventListener( object, eventName, listener ) | Remove the specified listener for the specified local event on this object |
| Daneel.Event.StopListen( eventName, functionOrObject ) | Make the provided function or object to stop listen to the provided event(s). |
| Daneel.Utilities.AllowDynamicGettersAndSetters( Object, ancestors ) | Allow to call getters and setters as if they were variable on the instance of the provided object. |
| Daneel.Utilities.ButtonExists( buttonName ) | Tell whether the provided button name exists amongst the Game Controls, or not. |
| Daneel.Utilities.GetId( object ) | Returns an integer greater than 0 and incremented by 1 from the last time the function was called. |
| Daneel.Utilities.ReplaceInString( string, replacements ) | Replace placeholders in the provided string with their corresponding provided replacements. |
| Draw.CircleRenderer.Draw( circle ) | Draw the circle renderer. |
| Draw.CircleRenderer.GetModel( circle ) | Returns the circle renderer's segment's model. |
| Draw.CircleRenderer.GetOpacity( circle ) | Returns the circle renderer's segments' opacity. |
| Draw.CircleRenderer.GetRadius( circle ) | Returns the circle renderer's radius. |
| Draw.CircleRenderer.GetSegmentCount( circle ) | Returns the circle renderer's number of segments. |
| Draw.CircleRenderer.GetWidth( circle ) | Returns the circle renderer's segment's width (and height). |
| Draw.CircleRenderer.New( gameObject, params ) | Creates a new circle renderer component. |
| Draw.CircleRenderer.Set( circle, params ) | Apply the content of the params argument to the provided circle renderer. |
| Draw.CircleRenderer.SetModel( circle, model ) | Sets the circle renderer segment's model. |
| Draw.CircleRenderer.SetOpacity( circle, opacity ) | Sets the circle renderer segments' opacity. |
| Draw.CircleRenderer.SetRadius( circle, radius, draw ) | Sets the circle renderer's radius. |
| Draw.CircleRenderer.SetSegmentCount( circle, count, draw ) | Sets the circle renderer's segment count. |
| Draw.CircleRenderer.SetWidth( circle, width ) | Sets the circle renderer segment's width. |
| Draw.LineRenderer.Draw( line ) | Draw the line renderer. |
| Draw.LineRenderer.GetDirection( line ) | Returns the line renderer's direction. |
| Draw.LineRenderer.GetEndPosition( line ) | Returns the line renderer's end position. |
| Draw.LineRenderer.GetLength( line ) | Returns the line renderer's length. |
| Draw.LineRenderer.GetWidth( line ) | Returns the line renderer's width. |
| Draw.LineRenderer.New( gameObject, params ) | Creates a new LineRenderer component. |
| Draw.LineRenderer.Set( line, params ) | Apply the content of the params argument to the provided line renderer. |
| Draw.LineRenderer.SetDirection( line, direction, useDirectionAsLength, draw ) | Set the line renderer's direction. |
| Draw.LineRenderer.SetEndPosition( line, endPosition, draw ) | Set the line renderer's end position. |
| Draw.LineRenderer.SetLength( line, length, draw ) | Set the line renderer's length. |
| Draw.LineRenderer.SetWidth( line, width, draw ) | Set the line renderer's width (and height). |
| GUI.Hud.CreateOriginGO( gameObject ) | Creates a "Hud Origin" child used for positioning hud components. |
| GUI.Hud.GetLayer( hud ) | Get the gameObject's layer. |
| GUI.Hud.GetLocalLayer( hud ) | Get the gameObject's local layer. |
| GUI.Hud.GetLocalPosition( hud ) | Get the local position (relative to its parent) of the gameObject on screen. |
| GUI.Hud.GetPosition( hud ) | Get the position of the provided hud on the screen. |
| GUI.Hud.New( gameObject, params ) | Creates a new Hud component instance. |
| GUI.Hud.SetLayer( hud, layer ) | Set the gameObject's layer. |
| GUI.Hud.SetLocalLayer( hud, layer ) | Set the huds's local layer. |
| GUI.Hud.SetLocalPosition( hud, position ) | Sets the local position (relative to its parent) of the gameObject on screen . |
| GUI.Hud.SetPosition( hud, position ) | Sets the position of the gameObject on screen. |
| GUI.Input.Focus( input, focus ) | Set the focused state of the input. |
| GUI.Input.New( gameObject, params ) | Creates a new GUI.Input. |
| GUI.Input.Update( input, text, replaceText ) | Update the text of the input. |
| GUI.Input.UpdateCursor( input ) | Update the position and opacity of the input's cursor. |
| GUI.ProgressBar.GetHeight( progressBar ) | Get the height of the progress bar (the local scale's y component). |
| GUI.ProgressBar.GetValue( progressBar, getAsPercentage ) | Get the current value of the progress bar. |
| GUI.ProgressBar.New( gameObject, params ) | Creates a new GUI.ProgressBar. |
| GUI.ProgressBar.Set( progressBar, params ) | Apply the content of the params argument to the provided progressBar. |
| GUI.ProgressBar.SetHeight( progressBar, height ) | Set the height of the progress bar. |
| GUI.ProgressBar.SetValue( progressBar, value ) | Set the value of the progress bar, adjusting its length. |
| GUI.ProgressBar.UpdateValue( progressBar, value, fireEvent ) | Set the value of the progress bar, adjusting its length. |
| GUI.Slider.GetValue( slider, getAsPercentage ) | Get the current slider's value. |
| GUI.Slider.New( gameObject, params ) | Creates a new GUI.Slider. |
| GUI.Slider.Set( slider, params ) | Apply the content of the params argument to the provided slider. |
| GUI.Slider.SetValue( slider, value ) | Set the value of the slider, adjusting its position. |
| GUI.TextArea.AddLine( textArea, line, prepend ) | Add a line to the text area's text. |
| GUI.TextArea.GetAlignment( textArea ) | Get the component's horizontal alignment. |
| GUI.TextArea.GetAreaWidth( textArea ) | Get the component's area width. |
| GUI.TextArea.GetFont( textArea ) | Get the component's font used to render the text. |
| GUI.TextArea.GetLineHeight( textArea ) | Get the component's line height. |
| GUI.TextArea.GetNewLine( textArea ) | Get the component's newLine string. |
| GUI.TextArea.GetOpacity( textArea ) | Get the component's opacity. |
| GUI.TextArea.GetText( textArea ) | Get the component's text. |
| GUI.TextArea.GetVerticalAlignment( textArea ) | Get the component's vertical alignment property. |
| GUI.TextArea.GetWordWrap( textArea ) | Get the component's wordWrap property. |
| GUI.TextArea.New( gameObject, params ) | Creates a new TextArea component. |
| GUI.TextArea.Set( textArea, params ) | Apply the content of the params argument to the provided textArea. |
| GUI.TextArea.SetAlignment( textArea, alignment ) | Set the component's alignment. |
| GUI.TextArea.SetAreaWidth( textArea, areaWidth ) | Set the component's area width (maximum line length). |
| GUI.TextArea.SetFont( textArea, font ) | Set the component's font used to renderer the text. |
| GUI.TextArea.SetLineHeight( textArea, lineHeight ) | Set the component's line height. |
| GUI.TextArea.SetNewLine( textArea, newLine ) | Set the component's newLine string used by SetText() to split the input text in several lines. |
| GUI.TextArea.SetOpacity( textArea, opacity ) | Set the component's opacity. |
| GUI.TextArea.SetText( textArea, text ) | Set the component's text. |
| GUI.TextArea.SetVerticalAlignment( textArea, verticalAlignment ) | Set the component's vertical alignment. |
| GUI.TextArea.SetWordWrap( textArea, wordWrap ) | Set the component's wordWrap property. |
| GUI.ToPixel( value, screenSide, camera ) | Convert the provided value (a length) in a number expressed in screen pixel. |
| GUI.ToSceneUnit( value, camera ) | Convert the provided value (a length) in a number expressed in scene unit. |
| GUI.Toggle.Check( toggle, state, forceUpdate ) | Check or uncheck the provided toggle and fire the OnUpdate event. |
| GUI.Toggle.GetGroup( toggle ) | Get the toggle's group. |
| GUI.Toggle.GetText( toggle ) | Get the provided toggle's text. |
| GUI.Toggle.New( gameObject, params ) | Creates a new Toggle component. |
| GUI.Toggle.Set( toggle, params ) | Apply the content of the params argument to the provided toggle. |
| GUI.Toggle.SetGroup( toggle, group ) | Set the toggle's group. |
| GUI.Toggle.SetText( toggle, text ) | Set the provided toggle's text. |
| GameObject.AddComponent( gameObject, componentType, params ) | Add a component to the game object and optionally initialize it. |
| GameObject.AddEventListener( gameObject, eventName, listener ) | Add a listener function for the specified local event on this game object. |
| GameObject.AddTag( gameObject, tag ) | Add the provided tag(s) to the provided game object. |
| GameObject.Animate( gameObject, property, endValue, duration, onCompleteCallback, params ) | Creates an animation (a tweener) with the provided parameters. |
| GameObject.Destroy( gameObject ) | Destroy the game object at the end of this frame. |
| GameObject.Display( gameObject, value, forceUseLocalPosition ) | Display or hide the game object. |
| GameObject.FireEvent( gameObject, eventName, ... ) | Fire an event at the provided game object. |
| GameObject.Get( name, errorIfGameObjectNotFound ) | Alias of CraftStudio.FindGameObject(name). |
| GameObject.GetChild( gameObject, name, recursive ) | Alias of GameObject.FindChild(). |
| GameObject.GetChildren( gameObject, recursive, includeSelf ) | Get all descendants of the game object. |
| GameObject.GetComponent( gameObject, componentType ) | Get the first component of the provided type attached to the game object. |
| GameObject.GetId( gameObject ) | Returns the game object's internal unique identifier. |
| GameObject.GetInAncestors( gameObject, searchFunction ) | Search the ancestors of the provided game object. |
| GameObject.GetScriptedBehavior( gameObject, scriptNameOrAsset ) | Get the provided scripted behavior instance attached to the game object. |
| GameObject.GetTags( gameObject ) | Returns the tag(s) of the provided game object. |
| GameObject.GetWithTag( tag ) | Returns the game object(s) that have all the provided tag(s). |
| GameObject.HasTag( gameObject, tag, atLeastOneTag ) | Tell whether the provided game object has all (or at least one of) the provided tag(s). |
| GameObject.Instantiate( name, sceneNameOrAsset, params ) | Create a new game object with the content of the provided scene and optionally initialize it. |
| GameObject.New( name, params ) | Create a new game object and optionally initialize it. |
| GameObject.RemoveEventListener( gameObject, eventName, listener ) | Remove the specified listener for the specified local event on this game object |
| GameObject.RemoveTag( gameObject, tag ) | Remove the provided tag(s) from the provided game object. |
| GameObject.SendMessage( gameObject, functionName, data ) | Tries to call a method with the provided name on all the scriptedBehaviors attached to the game object. |
| GameObject.Set( gameObject, params ) | Apply the content of the params argument to the provided game object. |
| GameObject.SetParent( gameObject, parentNameOrInstance, keepLocalTransform ) | Set the game object's parent. |
| Lang.Get( key, replacements ) | Get the localized line identified by the provided key. |
| Lang.RegisterForUpdate( gameObject, key, replacements ) | Register a game object to update its text renderer whenever the language will be updated by Lang.Update(). |
| Lang.Update( language ) | Update the current language and the text of all game objects that have registered via Lang.RegisterForUpdate(). |
| Map.GetBlockIDAt( map, x, y, z ) | Returns A block ID between 0-254 if a block exists at the given location (all valid block IDs are in the range 0-254), otherwise f there is no block at the given location then it will return Map.EmptyBlockID (which has a value of 255). |
| Map.GetBlockOrientationAt( map, x, y, z ) | Returns The block orientation of the block at the specified location, otherwise if there is no block at the given location it will return Map.BlockOrientation.North. |
| Map.SetBlockAt( map, x, y, z, id, orientation ) | Sets a block's ID and block orientation at the given location on the map. |
| MapRenderer.LoadNewMap( mapRenderer, callback ) | Dynamically loads a new version of the provided map renderer's map and sets it as the map renderer new map. |
| MapRenderer.Set( mapRenderer, params ) | Apply the content of the params argument to the provided map renderer. |
| MapRenderer.SetMap( mapRenderer, mapNameOrAsset, replaceTileSet ) | Attach the provided map to the provided map renderer. |
| MapRenderer.SetTileSet( mapRenderer, tileSetNameOrAsset ) | Set the specified tileSet for the mapRenderer's map. |
| ModelRenderer.GetColor( modelRenderer ) | Get the color of the provided model renderer. |
| ModelRenderer.Set( modelRenderer, params ) | Apply the content of the params argument to the provided model renderer. |
| ModelRenderer.SetAnimation( modelRenderer, animationNameOrAsset ) | Set the specified animation for the modelRenderer's current model. |
| ModelRenderer.SetColor( modelRenderer, color ) | Set the color of the provided model renderer. |
| ModelRenderer.SetModel( modelRenderer, modelNameOrAsset ) | Attach the provided model to the provided modelRenderer. |
| MouseInput.GetTags( mouseInput ) | Return the tag(s) of the game objects the component works with. |
| MouseInput.New( gameObject, params ) | Create a new MouseInput component. |
| MouseInput.SetTags( mouseInput, tags ) | Set tag(s) of the game objects the component works with. |
| MouseInput.Update( mouseInput ) | Update the specified MouseInput component or update all components when no argument is passed. |
| Ray.Cast( ray, gameObjects, sortByDistance ) | Check the collision of the ray against the provided set of game objects. |
| Ray.IntersectsGameObject( ray, gameObjectNameOrInstance ) | Check if the ray intersects the specified game object. |
| RaycastHit.New( params ) | Create a new RaycastHit |
| Scene.Append( sceneNameOrAsset, parentNameOrInstance ) | Alias of CraftStudio.AppendScene(). |
| Scene.Load( sceneNameOrAsset ) | Alias of CraftStudio.LoadScene(). |
| Sound.Play( soundAssetOrPath, volume, pitch, pan ) | Play the specified sound. |
| TextRenderer.GetColor( textRenderer ) | Get the color of the provided text renderer. |
| TextRenderer.SetAlignment( textRenderer, alignment ) | Set the text's alignment. |
| TextRenderer.SetColor( textRenderer, color ) | Set the color of the provided text renderer. |
| TextRenderer.SetFont( textRenderer, fontNameOrAsset ) | Set the provided font to the provided text renderer. |
| TextRenderer.SetTextWidth( textRenderer, width ) | Update the game object's scale to make the text appear the provided width. |
| Transform.GetScale( transform ) | Get the transform's global scale. |
| Transform.LocalToWorld( transform, position ) | Transform a position local to this transform to a global position. |
| Transform.SetLocalScale( transform, scale ) | Set the transform's local scale. |
| Transform.SetScale( transform, scale ) | Set the transform's global scale. |
| Transform.WorldToLocal( transform, position ) | Transform a global position to a position local to this transform. |
| Trigger.GetGameObjectsInRange( trigger ) | Get the gameObjects that are within range of that trigger. |
| Trigger.GetRange( trigger ) | Get the range of the trigger. |
| Trigger.GetTags( trigger ) | Return the tag(s) of the game objects the component works with. |
| Trigger.GetUpdateInterval( trigger ) | Get the interval (in frames) at which the trigger is automatically updated. |
| Trigger.IsGameObjectInRange( trigger, gameObject, triggerPosition ) | Tell whether the provided game object is in range of the trigger. |
| Trigger.New( gameObject, params ) | Create a new Trigger component. |
| Trigger.SetRange( trigger, range ) | Set the range of the trigger. |
| Trigger.SetTags( trigger, tags ) | Set tag(s) of the game objects the component works with. |
| Trigger.SetUpdateInterval( trigger, updateInterval ) | Set the interval (in frames) at which the trigger is automatically updated. |
| Tween.Timer.New( duration, callback, isInfiniteLoop, params ) | Creates a new tweener via one of the two allowed constructors : Timer.New(duration, OnCompleteCallback[, params]) Timer.New(duration, OnLoopCompleteCallback, true[, params]) |
| Tween.Tweener.Complete( tweener ) | Complete the tweener fire the OnComple event. |
| Tween.Tweener.Destroy( tweener ) | Destroy the tweener. |
| Tween.Tweener.New( target, property, endValue, duration, onCompleteCallback, params ) | Creates a new tweener via one of the three allowed constructors : Tweener.New(target, property, endValue, duration[, params]) Tweener.New(startValue, endValue, duration[, params]) Tweener.New(params) |
| Tween.Tweener.Pause( tweener ) | Pause the tweener and fire the OnPause event. |
| Tween.Tweener.Play( tweener ) | Unpause the tweener and fire the OnPlay event. |
| Tween.Tweener.Restart( tweener ) | Completely restart the tweener. |
| Tween.Tweener.Update( tweener, deltaDuration ) | Update the tweener's value based on the tweener's elapsed property. |
| Vector2.GetLength( vector ) | Return the length of the vector. |
| Vector2.GetSqrLength( vector ) | Return the squared length of the vector. |
| Vector2.New( x, y ) | Creates a new Vector2 intance. |
| Vector2.Normalize( vector ) | Normalize the provided vector in place (makes its length equal to 1). |
| Vector2.Normalized( vector ) | Return a copy of the provided vector, normalized. |
| Vector2.ToPixel( vector, camera ) | Make sure that the components of the provided Vector2 are numbers and in pixel, instead of strings or in percentage or relative to the screensize. |
| Vector2.ToString( vector ) | Returns a string representation of the vector's component's values. |
| Vector2.__add( a, b ) | Allow to add two Vector2 by using the + operator. |
| Vector2.__div( a, b ) | Allow to divide two Vector2 or a Vector2 and a number by using the / operator. |
| Vector2.__eq( a, b ) | Allow to check for the equality between two Vector2 using the == comparison operator. |
| Vector2.__mul( a, b ) | Allow to multiply two Vector2 or a Vector2 and a number by using the * operator. |
| Vector2.__pow( vector, exp ) | Allow to raise a Vector2 to a power using the ^ operator. |
| Vector2.__sub( a, b ) | Allow to substract two Vector2 by using the - operator. |
| Vector2.__unm( vector ) | Allow to inverse a vector2 using the - operator. |
| Vector3.GetLength( vector ) | Returns the length of the provided vector |
| Vector3.GetSqrLength( vector ) | Return the squared length of the vector. |
| Vector3.New( x, y, z, z2 ) | Returns a new Vector3. |
| Vector3.ToString( vector ) | Returns a string representation of the vector's component's values. |
| error( message, doNotPrintStacktrace ) | Print the stackTrace unless told otherwise then the provided error in the console. |
| math.clamp( value, min, max ) | Return the value clamped between min and max. |
| math.isinteger( number ) | Tell whether the provided number is an integer. |
| math.lerp( a, b, factor, easing ) | Returns the value resulting of the linear interpolation between value a and b by the specified factor. |
| math.round( value, decimal ) | Round the value to the closest integer or decimal. |
| math.truncate( value, decimal ) | Trucate the value to the provided decimal. |
| math.warpangle( angle ) | Wrap the provided angle between -180 and 180. |
| string.endswith( s, chunk ) | Tell whether the provided string ends by the provided chunk or not. |
| string.fixcase( s, set ) | Make sure that the case of the provided string is correct by checking it against the values in the provided set. |
| string.lcfirst( s ) | Turn the first letter of the string lowercase. |
| string.reverse( s ) | Reverse the order of the characters in a string ("abcd" becomes "dcba"). |
| string.split( s, delimiter, delimiterIsPattern ) | Some Lua functions are overridden here with some Daneel-specific stuffs |
| string.split( s, delimiter, delimiterIsPattern ) | Some Lua functions are overridden here with some Daneel-specific stuffs |
| string.startswith( s, chunk ) | Tell whether the provided string begins by the provided chunk or not. |
| string.tocolor( sColor ) | Convert a string representation of a color component's values to a Color object. |
| string.totable( s ) | Turn a string into a table, one character per index. |
| string.tovector( sVector ) | Convert a string representation of a vector component's values to a Vector3 or a Vector2. |
| string.trim( s ) | Removes the white spaces at the beginning and the end of the provided string. |
| string.trimend( s ) | Removes the white spaces at the end of the provided string. |
| string.trimstart( s ) | Removes the white spaces at the beginning of the provided string. |
| string.ucfirst( s ) | Turn the first letter of the string uppercase. |
| table.combine( keys, values ) | Create an associative table with the provided keys and values tables. |
| table.containsvalue( t, value, ignoreCase ) | Tell whether the provided value is found within the provided table. |
| table.copy( t, recursive ) | Return a copy of the provided table. |
| table.getkey( t, value ) | Get the key associated with the first occurrence of the provided value. |
| table.getkeys( t ) | Return all the keys of the provided table. |
| table.getlength( t, keyType ) | Returns the length of a table, which is the numbers of keys of the provided type (or of any type), for which the value is not nil. |
| table.getvalue( t, keys ) | Safely search several levels down inside nested tables. |
| table.getvalues( t ) | Return all the values of the provided table. |
| table.havesamecontent( table1, table2 ) | Compare table1 and table2. |
| table.insertonce( t, index, value ) | Insert the provided value at the end of the provided table (or at the provided index) but only if the value is not already found in the table. |
| table.isarray( t, strict ) | Tell whether he provided table is an array (has only integer keys). |
| table.merge( ..., recursive ) | Merge two or more tables into one new table. |
| table.mergein( ..., recursive ) | Merge two or more tables in place, into the first provided table. |
| table.print( t ) | Print all key/value pairs within the provided table. |
| table.printr( t, maxLevel, reprint, currentLevel ) | Recursively print all key/value pairs within the provided table. |
| table.reindex( t ) | Turn the provided table (with only integer keys) in a proper sequence (with consecutive integer key beginning at 1). |
| table.removevalue( t, value, maxRemoveCount ) | Remove the provided value from the provided table. |
| table.reverse( t ) | Reverse the order of the provided table's values. |
| table.setvalue( t, keys, value ) | Safely set a value several levels down inside nested tables. |
| table.shift( t, returnKey ) | Remove and returns the first value found in the table. |
| table.sortby( t, property, orderBy ) | Sort a list of table using one of the tables property as criteria. |
| tonumber2( data ) | A more flexible version of tonumber(). |


Hi. Thanks for checking out my website and design work. I’m a freelance graphic designer with a background in web, apparel, radio, and design. I live and work in Lahore,Pakistan. Quick notes, in case you don’t feel like reading all of this: I design and build websites. I work closely with clients to articulate their vision in a design
See MoreIf you hope to become a web developer, you must understand HTML and CSS. HTML is the most used markup language across the web, and web developers use it to create web pages on the Internet. CSS, on the other hand, is used to style the website. It's responsible for the choice of fonts, colors and layout in a website's design. Whereas HTML lays the foundation for a webpage, CSS styles it.
See MoreWe develop websites on test servers where you can see the progress of the sites and experience them in real time. It allows you to visualize the site architecture and make changes to the site before it goes live.
A web developer is a programmer who specializes in, or is specifically engaged in, the development of World Wide Web applications using a client–server model.
Web design encompasses many different skills and disciplines in the production and maintenance of websites. The different areas of web design include web graphic design; user interface design.


Hello!
I'm Clement
Projects
About
I'm Clement
I'm currently studying for a Diploma in Mechanical Engineering in Singapore Polytechnic (SP). This website provides an overview of various documentation of my works, experiences, skills-learnt, mistakes made, new technical products that I have done.