Frequently Asked Questions
Login and Registration Issues
- Why can’t I login?
- There are several reasons why this could occur. First, ensure your username and password are correct. If they are, contact the board owner to make sure you haven’t been banned. It is also possible the website owner has a configuration error on their end, and they would need to fix it.
- Top
- Why do I need to register at all?
- You may not have to, it is up to the administrator of the board as to whether you need to register in order to post messages. However; registration will give you access to additional features not available to guest users such as definable avatar images, private messaging, emailing of fellow users, usergroup subscription, etc. It only takes a few moments to register so it is recommended you do so.
- Top
- Why do I get logged off automatically?
- If you do not check the Log me in automatically box when you login, the board will only keep you logged in for a preset time. This prevents misuse of your account by anyone else. To stay logged in, check the box during login. This is not recommended if you access the board from a shared computer, e.g. library, internet cafe, university computer lab, etc. If you do not see this checkbox, it means the board administrator has disabled this feature.
- Top
- How do I prevent my username appearing in the online user listings?
- Within your User Control Panel, under “Board preferences”, you will find the option Hide your online status. Enable this option with Yes and you will only appear to the administrators, moderators and yourself. You will be counted as a hidden user.
- Top
- I’ve lost my password!
- Don’t panic! While your password cannot be retrieved, it can easily be reset. Visit the login page and click I’ve forgotten my password. Follow the instructions and you should be able to log in again shortly.
- Top
- I registered but cannot login!
- First, check your username and password. If they are correct, then one of two things may have happened. If COPPA support is enabled and you specified being under 13 years old during registration, you will have to follow the instructions you received. Some boards will also require new registrations to be activated, either by yourself or by an administrator before you can logon; this information was present during registration. If you were sent an e-mail, follow the instructions. If you did not receive an e-mail, you may have provided an incorrect e-mail address or the e-mail may have been picked up by a spam filer. If you are sure the e-mail address you provided is correct, try contacting an administrator.
- Top
- I registered in the past but cannot login any more?!
- Attempt to locate the e-mail sent to you when you first registered, check your username and password and try again. It is possible an administrator has deactivated or deleted your account for some reason. Also, many boards periodically remove users who have not posted for a long time to reduce the size of the database. If this has happened, try registering again and being more involved in discussions.
- Top
- What is COPPA?
- COPPA, or the Child Online Privacy and Protection Act of 1998, is a law in the United States requiring websites which can potentially collect information from minors under the age of 13 to have written parental consent or some other method of legal guardian acknowledgment, allowing the collection of personally identifiable information from a minor under the age of 13. If you are unsure if this applies to you as someone trying to register or to the website you are trying to register on, contact legal counsel for assistance. Please note that the phpBB Group cannot provide legal advice and is not a point of contact for legal concerns of any kind, except as outlined below.
- Top
- Why can’t I register?
- It is possible the website owner has banned your IP address or disallowed the username you are attempting to register. The website owner could have also disabled registration to prevent new visitors from signing up. Contact a board administrator for assistance.
- Top
- What does the “Delete all board cookies” do?
- “Delete all board cookies” deletes the cookies created by phpBB which keep you authenticated and logged into the board. It also provides functions such as read tracking if they have been enabled by the board owner. If you are having login or logout problems, deleting board cookies may help.
- Top
User Preferences and settings
- How do I change my settings?
- If you are a registered user, all your settings are stored in the board database. To alter them, visit your User Control Panel; a link can usually be found at the top of board pages. This system will allow you to change all your settings and preferences.
- Top
- The times are not correct!
- It is possible the time displayed is from a timezone different from the one you are in. If this is the case, visit your User Control Panel and change your timezone to match your particular area, e.g. London, Paris, New York, Sydney, etc. Please note that changing the timezone, like most settings, can only be done by registered users. If you are not registered, this is a good time to do so.
- Top
- I changed the timezone and the time is still wrong!
- If you are sure you have set the timezone and Summer Time/DST correctly and the time is still incorrect, then the time stored on the server clock is incorrect. Please notify an administrator to correct the problem.
- Top
- My language is not in the list!
- Either the administrator has not installed your language or nobody has translated this board into your language. Try asking the board administrator if they can install the language pack you need. If the language pack does not exist, feel free to create a new translation. More information can be found at the phpBB website (see link at the bottom of board pages).
- Top
- How do I show an image below my username?
- There are two images that may appear below a username when viewing posts. Depending on the used style, the first may be an image associated with your rank, generally in the form of stars, blocks or dots, indicating how many posts you have made or your status on the board. The second, usually a larger image, is known as an avatar and is generally unique or personal to each user. It is up to the board administrator to enable avatars and to choose the way in which avatars can be made available. If you are unable to use avatars, contact a board administrator and ask them for their reasons.
- Top
- What is my rank and how do I change it?
- Ranks, which appear below your username, indicate the number of posts you have made or identify certain users, e.g. moderators and administrators. In general, you cannot directly change the wording of any board ranks as they are set by the board administrator. Please do not abuse the board by posting unnecessarily just to increase your rank. Most boards will not tolerate this and the moderator or administrator will simply lower your post count.
- Top
- When I click the e-mail link for a user it asks me to login?
- Only registered users can send e-mail to other users via the built-in e-mail form, and only if the administrator has enabled this feature. This is to prevent malicious use of the e-mail system by anonymous users.
- Top
Posting Issues
- How do I post a topic in a forum?
- To post a new topic in a forum, click the relevant button on either the forum or topic screens. You may need to register before you can post a message. A list of your permissions in each forum is available at the bottom of the forum and topic screens. Example: You can post new topics, You can vote in polls, etc.
- Top
- How do I edit or delete a post?
 You can edit a post by clicking the edit button for the relevant post, sometimes for only a limited time after the post was made. If someone has already replied to the post, you will find a small piece of text output below the post when you return to the topic which lists the number of times you edited it along with the date and time. This will only appear if someone has made a reply; it will not appear if a moderator or administrator edited the post, though they may leave a note as to why they’ve edited the post at their own digression. Please note that normal users cannot delete a post once someone has replied.
- Top
- How do I add a signature to my post?
- To add a signature to a post you must first create one via your User Control Panel. Once created, you can check the Attach a signature box on the posting form to add your signature. You can also add a signature by default to all your posts by checking the appropriate radio button in your profile. If you do so, you can still prevent a signature being added to individual posts by un-checking the add signature box within the posting form.
- Top
- How do I create a poll?
- When posting a new topic or editing the first post of a topic, click the “Poll creation” tab below the main posting form; if you cannot see this, you do not have appropriate permissions to create polls. Enter a title and at least two options in the appropriate fields, making sure each option is on a separate line in the textarea. You can also set the number of options users may select during voting under “Options per user”, a time limit in days for the poll (0 for infinite duration) and lastly the option to allow users to amend their votes.
- Top
- Why can’t I add more poll options?
- The limit for poll options is set by the board administrator. If you feel you need to add more options to your poll then the allowed amount, contact the board administrator.
- Top
- How do I edit or delete a poll?
- As with posts, polls can only be edited by the original poster, a moderator or an administrator. To edit a poll, click to edit the first post in the topic; this always has the poll associated with it. If no one has cast a vote, users can delete the poll or edit any poll option. However, if members have already placed votes, only moderators or administrators can edit or delete it. This prevents the poll’s options from being changed mid-way through a poll.
- Top
- Why can’t I access a forum?
- Some forums may be limited to certain users or groups. To view, read, post or perform another action you may need special permissions.
- Top
- Why can’t I add attachments?
- Attachment permissions are granted on a per forum, per group, or per user basis. The board administrator may not have allowed attachments to be added for the specific forum you are posting in, or perhaps only certain groups can post attachments. Contact the board administrator if you are unsure about why you are unable to add attachments.
- Top
- Why did I receive a warning?
- Each board administrator has their own set of rules for their site. If you have broken a rule, you may be issued a warning. Please note that this is the board administrator’s decision, and the phpBB Group has nothing to do with the warnings on the given site. Contact the board administrator if you are unsure about why you were issued a warning.
- Top
- How can I report posts to a moderator?
- If the board administrator has allowed it, you should see a button for reporting posts next to the post you wish to report. Clicking this will walk you through the steps necessary to report the post.
- Top
- What is the “Save” button for in topic posting?
- This allows you to save passages to be completed and submitted at a later date. To reload a saved passage, visit the User Control Panel.
- Top
- Why does my post need to be approved?
- The board administrator may have decided that posts in the forum you are posting to require review before submission. It is also possible that the administrator has placed you in a group of users whose posts require review before submission. Please contact the board administrator for further details.
- Top
- How do I bump my topic?
- By clicking the “Bump topic” link when you are viewing it, you can “bump” the topic to the top of the forum on the first page. However, if you do not see this, then topic bumping may be disabled or the time allowance between bumps has not yet been reached. It is also possible to bump the topic simply by replying to it, however, be sure to follow the board rules when doing so.
- Top
Formatting and Topic Types
- What is BBCode?
- BBCode is a special implementation of HTML, offering great formatting control on particular objects in a post. The use of BBCode is granted by the administrator, but it can also be disabled on a per post basis from the posting form. BBCode itself is similar in style to HTML, but tags are enclosed in square brackets [ and ] rather than < and >. For more information on BBCode see the guide which can be accessed from the posting page.
- Top
- Can I use HTML?
- No. It is not possible to post HTML on this board and have it rendered as HTML. Most formatting which can be carried out using HTML can be applied using BBCode instead.
- Top
- What are Smilies?
- Smilies, or Emoticons, are small images which can be used to express a feeling using a short code, e.g. :) denotes happy, while :( denotes sad. The full list of emoticons can be seen in the posting form. Try not to overuse smilies, however, as they can quickly render a post unreadable and a moderator may edit them out or remove the post altogether. The board administrator may also have set a limit to the number of smilies you may use within a post.
- Top
- Can I post images?
- Yes, images can be shown in your posts. If the administrator has allowed attachments, you may be able to upload the image to the board. Otherwise, you must link to an image stored on a publicly accessible web server, e.g. http://www.example.com/my-picture.gif.  To display the image use the BBCode [img] tag.
- Top
- What are global announcements?
- Global announcements contain important information and you should read them whenever possible. They will appear at the top of every forum and within your User Control Panel. Global announcement permissions are granted by the board administrator.
- Top
- What are announcements?
- Announcements often contain important information for the forum you are currently reading and you should read them whenever possible. Announcements appear at the top of every page in the forum to which they are posted. As with global announcements, announcement permissions are granted by the board administrator.
- Top
- What are sticky topics?
- Sticky topics within the forum appear below announcements and only on the first page. They are often quite important so you should read them whenever possible. As with announcements and global announcements, sticky topic permissions are granted by the board administrator.
- Top
- What are locked topics?
- Locked topics are topics where users can no longer reply and any poll it contained was automatically ended. Topics may be locked for many reasons and were set this way by either the forum moderator or board administrator. You may also be able to lock your own topics depending on the permissions you are granted by the board administrator.
- Top
- What are topic icons?
- Topic icons are author chosen images associated with posts to indicate their content. The ability to use topic icons depends on the permissions set by the board administrator.
- Top
User Levels and Groups
- What are Administrators?
- Administrators are members assigned with the highest level of control over the entire board. These members can control all facets of board operation, including setting permissions, banning users, creating usergroups or moderators, etc., dependent upon the board founder and what permissions he or she has given the other administrators. They may also have full moderator capabilities in all forums, depending on the settings put forth by the board founder.
- Top
- What are Moderators?
- Moderators are individuals (or groups of individuals) who look after the forums from day to day. They have the authority to edit or delete posts and lock, unlock, move, delete and split topics in the forum they moderate. Generally, moderators are present to prevent users from going off-topic or posting abusive or offensive material.
- Top
- What are usergroups?
- Usergroups are groups of users that divide the community into manageable sections board administrators can work with. Each user can belong to several groups and each group can be assigned individual permissions. This provides an easy way for administrators to change permissions for many users at once, such as changing moderator permissions or granting users access to a private forum.
- Top
- Where are the usergroups and how do I join one?
- You can view all usergroups via the “Usergroups” link within your User Control Panel. If you would like to join one, proceed by clicking the appropriate button. Not all groups have open access, however. Some may require approval to join, some may be closed and some may even have hidden memberships. If the group is open, you can join it by clicking the appropriate button. If a group requires approval to join you may request to join by clicking the appropriate button. The user group leader will need to approve your request and may ask why you want to join the group. Please do not harass a group leader if they reject your request; they will have their reasons.
- Top
- How do I become a usergroup leader?
- A usergroup leader is usually assigned when usergroups are initially created by a board administrator. If you are interested in creating a usergroup, your first point of contact should be an administrator; try sending a private message.
- Top
- Why do some usergroups appear in a different colour?
- It is possible for the board administrator to assign a colour to the members of a usergroup to make it easy to identify the members of this group.
- Top
- What is a “Default usergroup”?
- If you are a member of more than one usergroup, your default is used to determine which group colour and group rank should be shown for you by default. The board administrator may grant you permission to change your default usergroup via your User Control Panel.
- Top
- What is “The team” link?
- This page provides you with a list of board staff, including board administrators and moderators and other details such as the forums they moderate.
- Top
Private Messaging
- I cannot send private messages!
- There are three reasons for this; you are not registered and/or not logged on, the board administrator has disabled private messaging for the entire board, or the board administrator has prevented you from sending messages. Contact a board administrator for more information.
- Top
- I keep getting unwanted private messages!
- You can block a user from sending you private messages by using message rules within your User Control Panel. If you are receiving abusive private messages from a particular user, inform a board administrator; they have the power to prevent a user from sending private messages.
- Top
- I have received a spamming or abusive e-mail from someone on this board!
- We are sorry to hear that. The e-mail form feature of this board includes safeguards to try and track users who send such posts, so e-mail the board administrator with a full copy of the e-mail you received. It is very important that this includes the headers that contain the details of the user that sent the e-mail. The board administrator can then take action.
- Top
Friends and Foes
- What are my Friends and Foes lists?
- You can use these lists to organise other members of the board. Members added to your friends list will be listed within your User Control Panel for quick access to see their online status and to send them private messages. Subject to template support, posts from these users may also be highlighted. If you add a user to your foes list, any posts they make will be hidden by default.
- Top
- How can I add / remove users to my Friends or Foes list?
- You can add users to your list in two ways. Within each user’s profile, there is a link to add them to either your Friend or Foe list. Alternatively, from your User Control Panel, you can directly add users by entering their member name. You may also remove users from your list using the same page.
- Top
Searching the Forums
- How can I search a forum or forums?
- Enter a search term in the search box located on the index, forum or topic pages. Advanced search can be accessed by clicking the “Advance Search” link which is available on all pages on the forum. How to access the search may depend on the style used.
- Top
- Why does my search return no results?
- Your search was probably too vague and included many common terms which are not indexed by phpBB3. Be more specific and use the options available within Advanced search.
- Top
- Why does my search return a blank page!?
- Your search returned too many results for the webserver to handle. Use “Advanced search” and be more specific in the terms used and forums that are to be searched.
- Top
- How do I search for members?
- Visit to the “Members” page and click the “Find a member” link.
- Top
- How can I find my own posts and topics?
- Your own posts can be retrieved either by clicking the “Search user’s posts” within the User Control Panel or via your own profile page. To search for your topics, use the Advanced search page and fill in the various options appropriately.
- Top
Topic Subscriptions and Bookmarks
- What is the difference between bookmarking and subscribing?
- Bookmarking in phpBB3 is much like bookmarking in your web browser. You aren’t alerted when there’s an update, but you can come back to the topic later. Subscribing, however, will notify you when there is an update to the topic or forum on the board via your preferred method or methods.
- Top
- How do I subscribe to specific forums or topics?
- To subscribe to a specific forum, click the “Subscribe forum” link upon entering the forum. To subscribe to a topic, reply to the topic with the subscribe checkbox checked or click the “Subscribe topic” link within the topic itself.
- Top
- How do I remove my subscriptions?
- To remove your subscriptions, go to your User Control Panel and follow the links to your subscriptions.
- Top
Attachments
- What attachments are allowed on this board?
- Each board administrator can allow or disallow certain attachment types. If you are unsure what is allowed to be uploaded, contact the board administrator for assistance.
- Top
- How do I find all my attachments?
- To find your list of attachments that you have uploaded, go to your User Control Panel and follow the links to the attachments section.
- Top
phpBB 3 Issues
- Who wrote this bulletin board?
- This software (in its unmodified form) is produced, released and is copyright phpBB Group. It is made available under the GNU General Public License and may be freely distributed. See the link for more details.
- Top
- Why isn’t X feature available?
- This software was written by and licensed through phpBB Group. If you believe a feature needs to be added, please visit the phpbb.com website and see what phpBB Group have to say. Please do not post feature requests to the board at phpbb.com, the group uses SourceForge to handle tasking of new features. Please read through the forums and see what, if any, our position may already be for a feature and then follow the procedure given there.
- Top
- Who do I contact about abusive and/or legal matters related to this board?
- Any of the administrators listed on the “The team” page should be an appropriate point of contact for your complaints. If this still gets no response then you should contact the owner of the domain (do a whois lookup) or, if this is running on a free service (e.g. Yahoo!, free.fr, f2s.com, etc.), the management or abuse department of that service. Please note that the phpBB Group has absolutely no jurisdiction and cannot in any way be held liable over how, where or by whom this board is used. Do not contact the phpBB Group in relation to any legal (cease and desist, liable, defamatory comment, etc.) matter not directly related to the phpBB.com website or the discrete software of phpBB itself. If you do e-mail phpBB Group about any third party use of this software then you should expect a terse response or no response at all.
- Top


THE CRUISE (United States) A review by Mark R. Leeper in bullet-list form from the Toronto Internation Film Festival
CAPSULE: Black and white documentary about Timothy Speed Levitch, free soul and tour guide on the Gray Line. This is a 76-minute portrait of a very strange person, advocate of the existential "The Cruise" and enemy of the Anti-Cruise. Levitch seems to have strong opinions about nearly everything. Rating: 6 (0 to 10), high +1 (-4 to +4)
- Bennett Miller directs and edits footage a film about Timothy Levitch, a $200/week tour guide from New York City who is a genuine original. - Levitch talks in similes, opaque metaphors, literary references, and just plain strange comments. - Levitch seems incredibly overqualified for his job on occasion. - Other times he seems little more coherent than some of the homeless. - Recently Levitch was certain that the city was angry at him for some wrong it imagined he committed. Manhattan has now forgiven him, also for no obvious reason. He sees this anger in the shortness of the lower buildings. - His customers on the Gray Line are flooded with literary allusions and quotes. - Levitch sees the grid street plan of Manhattan as being stifling. - He took great offense when someone told him, "Everybody likes the grid plan." He also took great offense when the Gray Line told him he had to wear a red T-shirt as part of his uniform. These restrictions are part of the "anti-cruise" and he is "in love with the frantic chaos of the limitless universe." - His favorite diversions include going to the plaza between the World Trade Center towers, spinning himself dizzy, then lying on his back and looking up at the towers.
Mark R. Leeper<EMAIL_ADDRESS>Copyright 1998 Mark R. Leeper
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Loading...
Found {{results.length}} results for "{{lastSearch}}"
{{p.title}}
{{p.price | currency}}
No more items.
Shopping Cart
No items in cart.
{{i.title}}
{{i.price | currency}} × {{i.qty}}
Total: {{total | currency}}


Acronym for Hypertext Markup Language, a standardized system for tagging text files to achieve font, color, graphic, and hyperlink effects on World Wide Web pages..
Acronym for Cascading Stylsheets, a style sheet language used for describing the look and formatting of a document written in a markup language.
Elements are the building blocks of HTML documents. An element is the content written in between a start tag, with an end tag.
A command inserted in a document that specifies how the document, or a portion of the document, should be formatted. Tags are written between < > and can vary in function: some are necessary for beginning an HTML document and others can be used to start a new paragraph.
An id selector is written in CSS (as #id name) and then assigned to a single HTML element; the id specifies a unique format for that element.
The class selector is written in CSS (as .id name) and then assigned to a group of HTML elements. The class attribute applies the same style to all of the relevant elements.
All documents must start with the tag: !DOCTYPE html.
The document itself begins with an "html" tag and ends with "/html" tag.
Each HTML document needs a "head" section demarcated by head tags. This section includes the website's title, link to a CSS stylesheet, and other important details that apply to the whole site
The visible part of the document is between "body" and "/body" tags.
Headings are defined with the h1 to h6 tags.
Paragraphs are defined with the p tag.
Links are defined with the "a" tag. The address is specified in the "href" attribute. Attributes are used to provide additional information about HTML elements.
HTML images are defined with the img tag. The source file (src), alternative text (alt), and size (width and height) are provided as attributes.
The div tag defines a division or section in an HTMl document
When tags like font, and color attributes were added to the HTML, it started a nightmare for developers. Development of large web sites, where fonts and color information were added to every single page, was long and expensive.
With CSS, you can change the look of an entire Web site by changing just one file!
The element selector selects elements based on the element name. For example, all style choices within a "p" selector will apply to all paragraph elements in the HTML document.
The id selector uses the id attribute of an HTML element to select a specific element.
The class selector selects elements with a specific class attribute.
You can also group selectors to minimize the code. To do this, separate each selector with a comma. The CSS styling will apply apply to elements whose position in the document matches the order of selectors.
Check these links to see examples of HTML files and stylesheets!


AMAZING PEOPLE MAKING AMAZING DESIGNS IN A FUN ENVIRONMENT.
When you work with us, you are part of a team of committed collaborators. All aspects of our software
development
process are intergrated, interactive
and agile
.
Our approach unifies design,development and product management to create exceptional products.
We start each project by understanding your business goals, the user's needs and the product requirements.
Then we help translate them into effective and elegant solutions.
Before we sign a contract or write a line of code our team will spend the necessary time needed pto understand your product vision.
The outcome of this scoping session is proposal or high-level statement of work.
Based on your requirements, we can provide a complete offering or just the pieces you need.
Our design practice offers a full range of services including branding strategy, interaction and visual design and user experience testing. Throughout your project, our designers create and implement visual designs and workflows solicit user feedback, and work with you to make sure what gets built is what is needed.
All engineers are fluent in the latest, mobile and web development technologies. They collaborate with your team to write, test and omprove code on daily basis, using proven practices such as test-driven development and pair programming.
Planning ad development iteretive. Because we are constantly coding and testing, the product we build are always to go live. This iteretive process allows for changes as business requirements evolve.


Purple Martians
Technical Code Descriptions
Netgame - Client Timing Sync
Client Timing Sync
Server sends 'stdf' packet
Client receives 'stdf' packet and calculates dsync
Determine the setpoint
Adjust client timer
Client Timing Sync
Timing is critical in netgame. The server and client must have a tightly controlled timing relationship.
The server is the master timing source, and runs at 40 frames per second.
Clients are responsible for measuring and maintaining their timing offset with the server.
The time difference between the client and server is called dsync.
Clients use the 'stdf' packet sent from the server as the timing reference.
Server sends 'stdf' packet
The server sends 'stdf' packets to clients on a regular basis. Usually only a few frames apart.
These stdf packets contain pieces of a compressed dif state, and a header that describes the contents.
From that header, the destination frame number is the current frame number on the server when the dif was created and sent.
That is what the client uses to measure its timing relation to the server.
void mwNetgame::server_send_dif(int p)
{
...
Packet("stdf");
PacketPut4ByteInt(srv_client_state_frame_num[p][1]); // dst frame_num
ServerSendTo(packetbuffer, packetsize, players1[p].who, p);
Client receives 'stdf' packet and calculates dsync
When the client receives an 'stdf' packet, it uses the server's frame_num and its own local frame_num to make a simple frame based integer sync.
void mwNetgame::client_process_stdf_packet(double timestamp)
{
...
int dst = PacketGet4ByteInt();
int client_sync = dst - mLoop.frame_num; // crude integer sync based on frame numbers
This is called 'client_sync' and only has a resolution of 1 frame (25ms).
The passed variable 'timestamp' was recorded by the fast packet loop when the packet was actually received.
This is used to give timing information less than one frame.
The two are combined and the result is 'dsync'.
if (mPlayer.loc[p].client_last_stdf_rx_frame_num != mLoop.frame_num) // this is the first stdf received for this frame
{
mPlayer.loc[p].client_last_stdf_rx_frame_num = mLoop.frame_num; // client keeps track of last stdf rx'd and quits if too long
mPlayer.loc[p].dsync = al_get_time() - timestamp; // time between when the packet was received into the packet buffer and now
mPlayer.loc[p].dsync += (double) client_sync * 0.025; // combine with client_sync
Then dsync is averaged and 'client_timer_adjust()' is called.
mRollingAverage[2].add_data(mPlayer.loc[p].dsync); // send to rolling average
mPlayer.loc[p].dsync_avg = mRollingAverage[2].avg;
client_timer_adjust();
}
Determine the setpoint
Before we adjust the timer, we need two things:
- a measured value, 'dsync_avg', which we just calculated
- a setpoint (what we want the value to be)
The setpoint is called 'client_chase_offset', and it is set from the average ping time as described here:
How ping is calculated.
How ping is used to set client_chase_offset..
Adjust client timer
At this point we have a measured value and a setpoint.
Next the client timer is adjusted to make the measured value approach the setpoint.
I was experimenting with implementing a PID control loop here, but found it was not needed, so I just use the proportional term.
void mwNetgame::client_timer_adjust(void)
{
int p = mPlayer.active_local_player;
float mva = mPlayer.loc[p].dsync_avg; // measured value
float mv = mPlayer.loc[p].dsync; // measured value
float sp = mPlayer.loc[p].client_chase_offset; // set point
float err = sp - mva; // error = set point - measured value
float p_adj = err * 80; // instantaneous error adjustment (proportional)
tmaj_i += err; // cumulative error adjust (integral)
float i_clamp = 5;
if (tmaj_i > i_clamp) tmaj_i = i_clamp;
if (tmaj_i < -i_clamp) tmaj_i = -i_clamp;
tmaj_i *= 0.95; // decay
float i_adj = tmaj_i * 0;
float t_adj = p_adj + i_adj; // total adj
float fps_chase = mLoop.frame_speed - t_adj;
if (fps_chase < 10) fps_chase = 10; // never let this go negative
if (fps_chase > 70) fps_chase = 70;
al_set_timer_speed(mEventQueue.fps_timer, ( 1 / fps_chase));
mPlayer.loc[p].client_chase_fps = fps_chase;
}


--- creation_epoch:<PHONE_NUMBER> lastmod_epoch:<PHONE_NUMBER> categories: ['Tech Tricks'] title: Maximum length of DNS hostname and domain names --- Great explanation from the "The Old New Thing" MSDN blog. What is the real maximum length of a DNS name? - 12 Apr 2012 7:00 AM - http://blogs.msdn.com/.
253 characters. The encoding requires the length of each label to be encoded (typically where each . goes). The first label and the root (end) label take 2 octets from the 255 octet (not character) maximum. US ASCII leaves you with 253 characters (including the dots in the middle which are lengths).
Of course if you have a DNS entry in UTF-8 then things are different.


--- layout: blog/minimal title: "About Jon" permalink: /about description: "Eighteen Percent Grey" ---
I'm an infrastructure architect and senior devops manager with a focus on monitoring/trending, scaling and containerization. I'm a big fan of docker, ansible, and ELK/packetbeat.
With over fifteen years of experience in the fintech and digital agency spaces, I've helped bring multiple innovative and succesful products to market throughout my career. Outside the office, I am interested in alternative and historical photographic printing processes, primarily platinum and palladium, kallitypes and wet-plate collodion.
I currently reside in the west-end of Scarborough, ON with my partner Joanne and our two children and am the Senior Manager for devops and systems engineering at K2 Digital, a member for the Klick family of companies.


bxslider
FlexSlider
swiper
slick
RhinoSlider
Windy
ElasticSlideshow
CircleNavigationEffect
Slicebox
Modern-slide-in
Modern-slide-in
Powered by Sequence.js
The responsive CSS animation framework
Create Unique Animated Themes
For sliders, presentations,
banners, and other step-based applications
Rapid Development of Step-Based Applications
All of the JavaScript functionality you need built-in
Previous
Next


#include <properties.h>
Classes | |
| class | error |
| class | type_error |
| class | undeclared |
| class | undefined |
Public Types | |
| using | InitializerFunction = std::function< boost::any(const PropertyMap &)> |
| function callback used to initialize property value from another PropertyMap More... | |
| using | SourceFlags = uint |
| typedef boost::typeindex::type_info | type_info |
Public Member Functions | |
| Property & | configureInitFrom (SourceFlags source, const InitializerFunction &f) |
| configure initialization from source using an arbitrary function More... | |
| Property & | configureInitFrom (SourceFlags source, const std::string &name) |
| configure initialization from source using given other property name More... | |
| const boost::any & | defaultValue () const |
| get default value More... | |
| bool | defined () const |
| the current value defined or will the fallback be used? More... | |
| const std::string & | description () const |
| get description text More... | |
| bool | initsFrom (SourceFlags source) const |
| return true, if property initialized from given SourceId More... | |
| Property () | |
| Construct a property holding a any value. More... | |
| void | reset () |
| reset to default value (which can be empty) More... | |
| std::string | serialize () const |
| void | setCurrentValue (const boost::any &value) |
| void | setDefaultValue (const boost::any &value) |
| void | setDescription (const std::string &desc) |
| void | setValue (const boost::any &value) |
| set current value and default value More... | |
| std::string | typeName () const |
| const boost::any & | value () const |
| get current value (or default if not defined) More... | |
| boost::any & | value () |
Static Public Member Functions | |
| static boost::any | deserialize (const std::string &type_name, const std::string &wire) |
| static std::string | serialize (const boost::any &value) |
| serialize value using registered functions More... | |
| static std::string | typeName (const type_info &type_info) |
| get typename More... | |
Private Member Functions | |
| Property (const boost::typeindex::type_info &type_info, const std::string &description, const boost::any &default_value) | |
| typed constructor is only accessible via PropertyMap More... | |
Private Attributes | |
| boost::any | default_ |
| std::string | description_ |
| SourceFlags | initialized_from_ |
| InitializerFunction | initializer_ |
| SourceFlags | source_flags_ = 0 |
| used for external initialization More... | |
| const type_info & | type_info_ |
| boost::any | value_ |
Friends | |
| class | PropertyMap |
Property is a wrapper for a boost::any value, also providing a default value and a description.
Properties can be configured to be initialized from another PropertyMap - if still undefined. A source id allows to distinguish different initialization methods (e.g. using a different reference name) as well as to define a priority order between sources.
Setting the value via setValue() updates both, the current value and the default value. Using reset() the default value can be restored. setCurrentValue() and setDefaultValue() only set the specific value.
Definition at line 69 of file properties.h.
| using moveit::task_constructor::Property::InitializerFunction = std::function<boost::any(const PropertyMap&)> |
function callback used to initialize property value from another PropertyMap
Definition at line 94 of file properties.h.
| using moveit::task_constructor::Property::SourceFlags = uint |
Definition at line 92 of file properties.h.
| typedef boost::typeindex::type_info moveit::task_constructor::Property::type_info |
Definition at line 78 of file properties.h.
|
private |
typed constructor is only accessible via PropertyMap
Definition at line 112 of file properties.cpp.
| moveit::task_constructor::Property::Property | ( | ) |
Construct a property holding a any value.
Definition at line 119 of file properties.cpp.
| Property & moveit::task_constructor::Property::configureInitFrom | ( | SourceFlags | source, |
| const InitializerFunction & | f | ||
| ) |
configure initialization from source using an arbitrary function
Definition at line 180 of file properties.cpp.
| Property & moveit::task_constructor::Property::configureInitFrom | ( | SourceFlags | source, |
| const std::string & | name | ||
| ) |
configure initialization from source using given other property name
Definition at line 189 of file properties.cpp.
|
inline |
get default value
Definition at line 111 of file properties.h.
|
inline |
the current value defined or will the fallback be used?
Definition at line 105 of file properties.h.
|
inline |
get description text
Definition at line 119 of file properties.h.
|
static |
Definition at line 155 of file properties.cpp.
| bool moveit::task_constructor::Property::initsFrom | ( | Property::SourceFlags | source | ) | const |
return true, if property initialized from given SourceId
Definition at line 176 of file properties.cpp.
| void moveit::task_constructor::Property::reset | ( | ) |
reset to default value (which can be empty)
Definition at line 142 of file properties.cpp.
|
static |
serialize value using registered functions
Definition at line 149 of file properties.cpp.
|
inline |
Definition at line 116 of file properties.h.
| void moveit::task_constructor::Property::setCurrentValue | ( | const boost::any & | value | ) |
Definition at line 127 of file properties.cpp.
| void moveit::task_constructor::Property::setDefaultValue | ( | const boost::any & | value | ) |
Definition at line 135 of file properties.cpp.
|
inline |
Definition at line 120 of file properties.h.
| void moveit::task_constructor::Property::setValue | ( | const boost::any & | value | ) |
set current value and default value
Definition at line 121 of file properties.cpp.
|
static |
get typename
Definition at line 169 of file properties.cpp.
| std::string moveit::task_constructor::Property::typeName | ( | ) | const |
Definition at line 162 of file properties.cpp.
|
inline |
get current value (or default if not defined)
Definition at line 108 of file properties.h.
|
inline |
Definition at line 109 of file properties.h.
|
friend |
Definition at line 71 of file properties.h.
|
private |
Definition at line 136 of file properties.h.
|
private |
Definition at line 134 of file properties.h.
|
private |
Definition at line 141 of file properties.h.
|
private |
Definition at line 142 of file properties.h.
|
private |
used for external initialization
Definition at line 140 of file properties.h.
|
private |
Definition at line 135 of file properties.h.
|
private |
Definition at line 137 of file properties.h.


WITNESS LIST Energy Resources Committee March 2, 2005-8:00A HB 475 On: McDaniel, Mary (Railroad Commission of Texas) HB 821 For: Bennett, Bruce (Self) Frizzell, Lane (Self) Ingham, Karr (Self) Mills, Alex (Texas Alliance of Energy Producers) Stephens, Randal (Self) Stevens, Bill (Texas Alliance of Energy Producers) Thompson, Bill (Fowler Energy Company) Tillman, Marshall (Self) Todd, Elizabeth (Atmos Cities Stearing Committee) Against: Davis, James (Texans for Lawsuit Reform) DeYoung, Kathy (Copano Energy and Live Oak Reserves, Inc) Dodd, Gregory (Devon Energy Corp.) Golemon, R. Kinnan (Shell Oil Company) Howell, Steve (TIPRO) Mann, James (Texas Pipeline Association) Mitchell, Malone (Panhandle Producers & Royalty Owners) Robison, Doug (Permian Basin Petroleum Association) Sebree, Ben (Texas Oil and Gas Association) On: Borella, Larry (GLO) Hartmann, Steve (University of Texas System) Hays, John (Self) Patterson, Jerry (Texas General Land Office) Registering, but not testifying: Against: Allday, Marty (Embridge Energy) Beaver, Debbie (Williams Co.) Bonham, Jeff (CenterPoint Energy, Inc.) Bush-Ivie, Elizabeth (Energy Transfer - Houston Pipe Line Company, LP) Fore, Delbert (Enterprise Products) Grundman, Rick (Texas Gas Service Co.) Moore, Julie (Occidental Petroleum) Nugent, Patrick (Texas Pipeline Association) Perry, Steve (ChevronTexaco) Turrieta, Gilbert (Unocal) Woodard, Shayne (Duke Energy Field Services) On: Vinson, David (National Association of Royalty Owners - Texas) HB 951 For: Mann, James (Texas Pipeline Association) Sebree, Ben (Texas Oil and Gas Association) On: Norman, Scott (Texas Association of Builders) Registering, but not testifying: For: Beaver, Debbie (Williams) Garrett, David (Duke Energy Field Services L.P.) Nugent, Patrick (Texas Pipeline Association) Woodard, Shayne (Duke Energy Field Services)


This record stores the sheet name, sheet type, and stream position.
BIFF8 Record Data
|
Offset |
Field Name |
Size |
Contents |
|
4 |
lbPlyPos |
4 |
Stream position of the start of the BOF record for the sheet |
|
8 |
grbit |
2 |
Option flags |
|
10 |
cch |
1 |
Length of the sheet name (in characters) |
|
11 |
rgch |
var |
Sheet name ( grbit / rgb fields of Unicode String ) |
BIFF7 Record Data
|
Offset |
FieldName |
Size |
Contents |
|
4 |
lbPlyPos |
4 |
Stream position of the start of the BOF record for the sheet |
|
8 |
grbit |
2 |
Option flags |
|
10 |
cch |
1 |
Length of the sheet name |
|
11 |
rgch |
var |
Sheet name |
The grbit field contains the following options:
|
Bits |
Mask |
Option Name |
Contents |
|
1–0 |
0003h |
hsState |
Hidden state: |
|
7 – 2 |
00FCh |
(Reserved) |
|
|
15 – 8 |
FF00h |
dt |
Sheet type: |
A Visual Basic procedure can set the Visible property of a sheet to create a very hidden sheet. A very hidden sheet can be made visible again by a Visual Basic procedure, but there is no way to make the sheet visible through the user interface of Excel.


Reading: Week03
"What is significant is not what media or tools were are used to create them, but how they are used by a designer to explore or demonstrate some aspect of the future artifact."
The core of a prototype is to help the viewer better understand the product or explore its possibilities. It is the bridge between the designer's imagination and the future work. Therefore, neither what the prototype is made from nor how the prototype is made should be considered important, but it is the ideas and insights behind the prototype that are important as long as designers can convey theirs message to the audience.
“In the authors’ experience, no one tool supports iterative design work in all of the important areas of investigation.“
Since each prototype is designed to fit its specific usage scenario, the purpose of the prototype varies. Also, different prototyping approaches have their advantages and disadvantages. Something like paper prototyping takes less time and so allows the designer to test multiple potential solutions, while C is more accurate and powerful and can show enough details. Therefore, when designers are prototyping, it is really essential to embrace the different things.
“We define the dimensions of the model as role; look and feel; and implementation.“
This tells us the key factors in making and testing the prototype. Using the terms in IxD to interpret them, “role” is “user”; “look and feel” is the “user experience” and “interactions”; “implementation” is “technology” and “features”. Combining what the book said and what I learned in IxD, prototypes were made to test if the functionality catered to what we were supposed to make the user feel and do. None of these elements were heavier than others. These three elements work together to test if the idea is what both the user and the designer want.
Reading: Week06
"Design systems offer a different way of thinking, where the designer is forced to consider many scenarios and constraints instead of relying on a one-off design process."
This quote reminds me of my experience of sketching. When sketching, I often need to draw a good structure first, determine the proportion of each object before adding details step by step. If I focus on a certain detail and lose the observation of the whole, it is difficult for me to get a harmonious painting. The same goes for design. Systematic thinking can help designers to discover the commonality and rules of things from many aspects, so as to better serve the users.
“The design process is one of trial and error, and it often takes many iterations to create a design that clearly communicates what you're trying to say.“
Design is a continuous process of finding mistakes and correcting them. First, the environment is constantly changing. Previously correct solutions may become less efficient or seem wrong as time passes. In addition, only by constantly making mistakes and correcting them can a person discover what he or she did not know before, and thus really delve into a certain area. Therefore, as designers, we should consider making mistakes to be the norm. As a designer, do not be afraid to make mistakes and keep up learning new things would be the thing I should keep in my mind.
“Code allows designers to not just create designs, but build digital systems that create designs.“
With the development of the times, programming is no longer just a specialized skill for engineers. As designers, programming is the means by which we achieve prototyping and is a helper in achieving or even improving our design specifications.
Reading: Week09
"Like the smartphone, the internet of things isn’t a single technology."
The Internet of Things is not a particular technology, but a combination of technologies. Through the Internet of Everything, this system provides not one service, but a whole network connected from one point to get a variety of services. This will undoubtedly make people's lives more and more convenient.
“My concern here isn’t so much to point out that the internet of things is a security nightmare, although it certainly is. What I want to emphasize is that, in very large part, this is a direct consequence of commercial decisions, and a problem of business model.“
Technology is often a double-edged sword. While we are gaining convenience through the Internet of Things, it has also become a powerful tool for some evil people to victimize others. For example, abusing people in their homes through remote control of smart homes and snooping on others' privacy through intrusive cameras.
“At this largest scale, the internet of things appears to us as a body of rhetoric around the performance and behavior of the so-called “smart city.”“
The Internet of Things is the smart home in the home. When this extends to the city, this becomes the smart city. Many governments today are already promoting the development of smart cities. By improving smart cities, people can make better use of resources and improve efficiency.


This section describes in detail the Sector file system client tools. These tools are located in ./sector-sphere/client/tools.
The client needs to know the address of the master server (IP/domain name:PORT), the user name/the password, and the location of the master certificate. These information can be configured in the configuration file of ./conf/client.conf. If the file does not exist, or you leave some of the items out (e.g., password), the client tools will prompt for user input.
| Method | Fuctionality |
| sector_cp | make a copy of a file/directory. |
| sector_download | download a list of files to local disk. |
| sector_ls | list the content of the specified directory. |
| sector_mkdir | create a new directory. |
| sector_mv | rename a file/directory or move it to another directoy. |
| sector_rm | delete a file or a directory. |
| sector_shutdown | shutdown certain masters/slaves or the complete system. |
| sector_stat | query the information of a file or a directory. |
| sector_sysinfo | retrieve the system information. |
| sector_upload | upload a local file to the Sector system. |
| sphere_stream | run Sphere operations from command lines. |


Comments
Eugene supports line and block comments.
Examples:
// This is a line comment
/* This is
a block comment */
Declaration of Primitives/Variables
Eugene supports three types of variables -- boolean, txt, and num. A variable of type boolean can have one of the two values: true or false. A txt variable is a string of characters, and a num variable can store a number. Multiple declarations of the same type can be made on one line by separating assignments by commas.
boolean b;
txt txt1,txt2, txt3;
num num1,num2, num3;
Declaration of Arrays
Eugene supports txt[] arrays, which is a list of txt values, and num[] arrays, which is a list of num values. The txt or num values of an array can be accessed by specifying an index between squared brackets. The first element of an array is indexed with zero (0).
txt[] arrayTxt1, arrayTxt2;
num[] arrayNum;
Expressions and Assignments
Eugene supports the following types of operations: The + operator can be used to add numbers, concatenate txt variables or values, and to concatenate arrays. The –, *, and – operators can be only be used to subtract, multiply, and divide num variables or values respectively.
The = assignment operator sets the value of the destination to the source, as long as types match. In the previous examples, the sources were primitive values, references to primitive values, references to property values of parts, and references to property values of devices. The destinations were all references to primitives; however, references to part property values can be set like this, as well. A property can be set to a property even if the property names are not the same, as long as types match. The properties of devices cannot be set. Parts and devices cannot be set to references to other parts and devices. Assignments of values to variables can be written at the declaration of a variable or an array, as well as everywhere in the entire Eugene script. If the variable or array at the left side of the assignment is not declared, the variable will get assigned the value and type of the right side of the assignment.
IO Statements - print()
The print() function writes information to the console output and can take multiple comma-separated arguments. Its arguments can either be variables, expressions, or synthetic biological components.


Messi and Ronaldo are 'monsters', says Dybala
by Sports DeskLionel Messi and Cristiano Ronaldo are "monsters" who are convinced they are the best player on the pitch in every game, according to Argentina and Juventus forward Paulo Dybala.
The duo are among the greatest players of all time and have won a combined 10 Ballon d'Or trophies since 2008.
Dybala has played alongside Ronaldo at Serie A champions Juve since the Portugal international's move from Real Madrid ahead of the 2018-19 campaign and has teamed up with Barcelona superstar Messi for Argentina over the last four years.
Having seen both players at close quarters, the 26-year-old believes they share a lot of similarities.
"Outside the pitch they are two very quiet people, but inside they are two monsters," he told Spanish newspaper El Pais.
"I heard Luis Scola [Argentinian basketball player] said both Leo and Cristiano enter the field convinced that they are the best and that is why they are the best. And I am sure that is so.
"My friends used to tell me: 'You have the best in the national team and now they bring you the best one at your club'. I replied: 'It is an advantage for me.'
"I can study them every day. Who doesn't want to play with the best? We are talking about two phenomenal players; two players who are one or two steps above the rest.
"They are at the top on a football level and also at a mental level. It is not easy to keep going and score 40 goals every year. It is crazy.
"In the history of football, great players have played at great teams and have not achieved what they did. They have been good for each other."


Codeathon for school students
I had been thinking for a while on conducting a codeathon for school students. Wouldn't it be great to build something from scratch in a shorter span of time? What if they could build games, websites, apps or anything that they wanted to build? Giving them an opportunity to build something would instill confidence and inspire them. We decided to conduct a codeathon on May 19, 2018 during the summer holidays.
We wanted software developers as volunteers who can coach and mentor these kids .When I reached out to Ashish Cherian, Krithika and Karan with this idea, they were excited for the event and promised their support. Our mentors and our 25 young programmers made the day beyond memorable. The codeathon started at 10:00 AM and we started with the brainstorming session. We started listing out ideas - game with Sratch, App with App inventor, simple arcade game with Python and so on. They were super excited and it was very hard for them to decide and stick to one project. However after nearly twenty minutes they were ready with their teams and project idea that they had chosen to work on.
In all we had 15 teams. The following are the list of projects that these teams had worked on -
- 1. Android app to learn Public speaking skills in MIT App Inventor
- 2. Website development and hosting using HTML, CSS, JavaScript and Github hosting
- 3. Program to find out if a number is prime or not using Python
- 4. Quiz app in MIT App Inventor
- 5. Portfolio website development and hosting using HTML, CSS, JavaScript and Github hosting
- 6. Snake game in JavaScript
- 7. Catch and throw game in Scratch
- 8. Dart shooting game in Scratch
- 9. Quiz webapp using HTML and Java Script
- 10. Falling apples game in Scratch
- 11. Pong game using Python and Tkinter
- 12. Calculator game using Python and Tkinter
- 13. Calculator game using Python and Tkinter
- 14. A voice bot using Python and Google APIs
- 15. Rock, paper and Scissors game using Python
They were all on a mission - to build something awesome with technology. They were so engrossed into coding and testing. We could see Ashish running around like a superman helping the kids with their doubts/errors and questions. He and the other mentors were so supportive and helpful that the kids never lost interest and they stayed motivated and inspired. By around 3 PM, they were all ready with their projects and it was Presentation time.
It was the most fun and exciting part of the event. The teams came , presented their ideas and explained their project. They were really proud of what they had built in a day. It was inspiring to see how these group of kids in the age group 7 - 14 years came together to build something with technology. They proved that with the right platform, tools and mentors they can build something and create a difference.


pbmtoxbm(1) pbmtoxbm(1) NAME pbmtoxbm - convert a portable bitmap into an X11 bitmap SYNOPSIS pbmtoxbm [pbmfile] DESCRIPTION Reads a portable bitmap as input. Produces an X11 bitmap as output. SEE ALSO pbmtox10bm(1), xbmtopbm(1), pbm(5) AUTHOR Copyright (C) 1988 by Jef Poskanzer. 31 August 1988 pbmtoxbm(1)


- saveButton(View) - Method in class com.example.healthtracker.AddorEditRecordView
-
- saveCareProviderComment(View) - Method in class com.example.healthtracker.AddCareProviderCommentView
-
- saveCareProviderData(Context, CareProvider) - Static method in class com.example.healthtracker.UserDataController
-
Saves CareProvider object to server if internet is available and the server is reachable.
- savePatientData(Context, Patient) - Static method in class com.example.healthtracker.UserDataController
-
Saves patient object to server if internet is available and the server is reachable.
- savePatientList() - Method in class com.example.healthtracker.UserDataControllerTest
-
- saveProblemList() - Method in class com.example.healthtracker.PatientDataManagerTest
-
- saveRecord() - Method in class com.example.healthtracker.AddorEditRecordView
-
- Search(View) - Method in class com.example.healthtracker.CareProviderHomeView
-
- Search(View) - Method in class com.example.healthtracker.PatientHomeView
-
- Search(View) - Method in class com.example.healthtracker.SearchActivity
-
- SearchActivity - Class in com.example.healthtracker
-
SearchActivity will enable patients and careproviders to search for problems and records.
- SearchActivity() - Constructor for class com.example.healthtracker.SearchActivity
-
- SearchResultsView - Class in com.example.healthtracker
-
SearchResultsView enables patients and careproviders to view the results of their search queries.
- SearchResultsView() - Constructor for class com.example.healthtracker.SearchResultsView
-
- serializeRecord(Context, PatientRecord) - Static method in class com.example.healthtracker.UserDataController
-
Serialize record into a string and return that string.
- setCaregiverRecords(ArrayList<CareProviderComment>) - Method in class com.example.healthtracker.Problem
-
Set the list of comment records left by CareProviders on the Problem.
- setComment(String) - Method in class com.example.healthtracker.CareProviderComment
-
Set the main body of the CareProvider comment
- setComment() - Method in class com.example.healthtracker.CareProviderCommentTest
-
- setComment(String) - Method in class com.example.healthtracker.PatientRecord
-
Set a new description for the record.
- setDate() - Method in class com.example.healthtracker.ProblemTest
-
- setDescription() - Method in class com.example.healthtracker.ProblemTest
-
- setEmail(String) - Method in class com.example.healthtracker.User
-
sets the users email address using the email address string provided by the user
- setFile(String) - Method in class com.example.healthtracker.Photo
-
Set the fileLocation of the image.
- setFile() - Method in class com.example.healthtracker.PhotoTest
-
- setName(String) - Method in class com.example.healthtracker.BodyPhoto
-
Set the name of the bodyphoto.
- setName() - Method in class com.example.healthtracker.BodyPhotoTest
-
- setPatient(Patient, int) - Method in class com.example.healthtracker.CareProvider
-
- setPatient() - Method in class com.example.healthtracker.ProblemTest
-
- setPhone(String) - Method in class com.example.healthtracker.User
-
sets the users phone number using the string provided by the user
- setPinLocation(int, int) - Method in class com.example.healthtracker.BodyPhoto
-
Set the location of the pin that indicates where the patients problem is on the image of their body.
- setPinLocation() - Method in class com.example.healthtracker.BodyPhotoTest
-
- setProblem(Problem, int) - Method in class com.example.healthtracker.Patient
-
Update the problem at the specified index with the modifiedProblem.
- setProblems(ArrayList<Problem>) - Method in class com.example.healthtracker.Patient
-
- setRecords(ArrayList<PatientRecord>) - Method in class com.example.healthtracker.Problem
-
Set a new list of record for the Problem.
- setRepeatType(String) - Method in class com.example.healthtracker.NotificationsController
-
Set a new repeat type for the notification.
- setRepeatType(String) - Method in class com.example.healthtracker.notifyUserControllerTest
-
- setStartDate(Date) - Method in class com.example.healthtracker.NotificationsController
-
Set the start date of the notification
- setStartDate(Date) - Method in class com.example.healthtracker.notifyUserControllerTest
-
- setTime(Time) - Method in class com.example.healthtracker.NotificationsController
-
Set the time at which the patient is notified.
- setTime(Time) - Method in class com.example.healthtracker.notifyUserControllerTest
-
- setTimestamp() - Method in class com.example.healthtracker.PatientRecord
-
Set the record's timestamp to the current time.
- Settings(View) - Method in class com.example.healthtracker.CareProviderHomeView
-
- Settings(View) - Method in class com.example.healthtracker.PatientHomeView
-
- setTitle(String) - Method in class com.example.healthtracker.CareProviderComment
-
Set the title of the CareProvider comment
- setTitle() - Method in class com.example.healthtracker.CareProviderCommentTest
-
- setTitle(String) - Method in class com.example.healthtracker.PatientRecord
-
Set the title of the record to a new title.
- setTitle() - Method in class com.example.healthtracker.ProblemTest
-
- setUp() - Method in class com.example.healthtracker.BodyPhotoTest
-
- setUp() - Method in class com.example.healthtracker.CareProviderCommentTest
-
- setUp() - Method in class com.example.healthtracker.CareProviderTest
-
- setUp() - Method in class com.example.healthtracker.CaretakerTest
-
- setUp() - Method in class com.example.healthtracker.notifyUserControllerTest
-
- setUp() - Method in class com.example.healthtracker.PatientDataManagerTest
-
- setUp() - Method in class com.example.healthtracker.PatientRecordTest
-
- setUp() - Method in class com.example.healthtracker.PatientTest
-
- setUp() - Method in class com.example.healthtracker.PhotoTest
-
- setUp() - Method in class com.example.healthtracker.ProblemTest
-
- setUp() - Method in class com.example.healthtracker.UserDataControllerTest
-
- setUserID(String) - Method in class com.example.healthtracker.User
-
sets the users ID using the string provided by the user
- showRecord() - Method in class com.example.healthtracker.AddorEditRecordView
-
- SlideShowActivity - Class in com.example.healthtracker
-
SlideShowActivity will enable patients and careproviders to view a slidehsow of all of the photos
associated with a problem.
- SlideShowActivity() - Constructor for class com.example.healthtracker.SlideShowActivity
-
- switchNotification() - Method in class com.example.healthtracker.ProblemTest
-
- Sync(View) - Method in class com.example.healthtracker.CareProviderHomeView
-
- Sync(View) - Method in class com.example.healthtracker.PatientHomeView
-
- syncCareProviderData(Context) - Static method in class com.example.healthtracker.UserDataController
-
Replaces server data of current logged in CareProvider with local cache if an internet connection is found.
- syncPatientData(Context) - Static method in class com.example.healthtracker.UserDataController
-
Replaces server data of current logged in patient with local cache if an internet connection is found.


In order to insert, update or delete data from the database, Ecto.Repo.insert/2
, update/2
and delete/2
require a changeset as their first parameter. But what are changesets?
A familiar task for almost every developer is checking input data for potential errors — we want to make sure that data is in the right state, before we attempt to use it for our purposes.
Ecto provides a complete solution for working with data changes in the form of the Changeset
module and data structure.
In this lesson we’re going to explore this functionality and learn how to verify data’s integrity, before we persist it to the database.
Table of Contents
Creating your first changeset
Let’s look at an empty %Changeset{}
struct:
iex> %Ecto.Changeset{}
%Ecto.Changeset<action: nil, changes: %{}, errors: [], data: nil, valid?: false>
As you can see, it has some potentially useful fields, but they are all empty.
For a changeset to be truly useful, when we create it, we need to provide a blueprint of what the data is like. What better blueprint for our data than the schemas we’ve created that define our fields and types?
Let’s use our Friends.Person
schema from the previous lesson:
defmodule Friends.Person do
use Ecto.Schema
schema "people" do
field :name, :string
field :age, :integer, default: 0
end
end
To create a changeset using the Person
schema, we are going to use Ecto.Changeset.cast/3
:
iex> Ecto.Changeset.cast(%Friends.Person{name: "Bob"}, %{}, [:name, :age])
%Ecto.Changeset<action: nil, changes: %{}, errors: [], data: %Friends.Person<>,
valid?: true>
The first parameter is the original data — an initial %Friends.Person{}
struct in this case.
Ecto is smart enough to find the schema based on the struct itself.
Second in order are the changes we want to make — just an empty map.
The third parameter is what makes cast/3
special: it is a list of fields allowed to go through, which gives us the ability to control what fields can be changed and safe-guard the rest.
iex> Ecto.Changeset.cast(%Friends.Person{name: "Bob"}, %{"name" => "Jack"}, [:name, :age])
%Ecto.Changeset<
action: nil,
changes: %{name: "Jack"},
errors: [],
data: %Friends.Person<>,
valid?: true
>
iex> Ecto.Changeset.cast(%Friends.Person{name: "Bob"}, %{"name" => "Jack"}, [])
%Ecto.Changeset<action: nil, changes: %{}, errors: [], data: %Friends.Person<>,
valid?: true>
You can see how the new name was ignored the second time, where it was not explicitly allowed.
An alternative to cast/3
is the change/2
function, which doesn’t have the ability to filter changes like cast/3
.
It is useful when you trust the source making the changes or when you work with data manually.
Now we can create changesets, but since we do not have validation, any changes to person’s name will be accepted, so we can end up with an empty name:
iex> Ecto.Changeset.change(%Friends.Person{name: "Bob"}, %{name: ""})
#Ecto.Changeset<
action: nil,
changes: %{name: ""},
errors: [],
data: #Friends.Person<>,
valid?: true
>
Ecto says the changeset is valid, but actually, we do not want to allow empty names. Let’s fix this!
Validations
Ecto comes with a number of built-in validation functions to help us.
We’re going to use Ecto.Changeset
a lot, so let’s import Ecto.Changeset
into our person.ex
module, which also contains our schema:
defmodule Friends.Person do
use Ecto.Schema
import Ecto.Changeset
schema "people" do
field :name, :string
field :age, :integer, default: 0
end
end
Now we can use the cast/3
function directly.
It is common to have one or more changeset creator functions for a schema. Let’s make one that accepts a struct, a map of changes, and returns a changeset:
def changeset(struct, params) do
struct
|> cast(params, [:name, :age])
end
Now we can ensure that name
is always present:
def changeset(struct, params) do
struct
|> cast(params, [:name])
|> validate_required([:name])
end
When we call the Friends.Person.changeset/2
function and pass an empty name, the changeset will be no longer valid, and will even contain a helpful error message.
Note: do not forget to run recompile()
when working in iex
, otherwise it won’t pick up the changes you make in code.
iex> Friends.Person.changeset(%Friends.Person{}, %{"name" => ""})
%Ecto.Changeset<
action: nil,
changes: %{},
errors: [name: {"can't be blank", [validation: :required]}],
data: %Friends.Person<>,
valid?: false
>
If you attempt to do Repo.insert(changeset)
with the changeset above, you will receive {:error, changeset}
back with the same error, so you do not have to check changeset.valid?
yourself every time.
It is easier to attempt performing insert, update or delete, and process the error afterwards if there is one.
Apart from validate_required/2
, there is also validate_length/3
, that takes some extra options:
def changeset(struct, params) do
struct
|> cast(params, [:name, :age])
|> validate_required([:name])
|> validate_length(:name, min: 2)
end
You can try and guess what the result would be if we pass a name that consists of a single character!
iex> Friends.Person.changeset(%Friends.Person{}, %{"name" => "A"})
%Ecto.Changeset<
action: nil,
changes: %{name: "A"},
errors: [
name: {"should be at least %{count} character(s)",
[count: 2, validation: :length, kind: :min, type: :string]}
],
data: %Friends.Person<>,
valid?: false
>
You may be surprised that the error message contains the cryptic %{count}
— this is to aid translation to other languages; if you want to display the errors to the user directly, you can make them human readable using traverse_errors/2
— take a look at the example provided in the docs.
Some of the other built-in validators in Ecto.Changeset
are:
- validate_acceptance/3
- validate_change/3 & /4
- validate_confirmation/3
- validate_exclusion/4 & validate_inclusion/4
- validate_format/4
- validate_number/3
- validate_subset/4
You can find the full list with details how to use them here.
Custom validations
Although the built-in validators cover a wide range of use cases, you may still need something different.
Every validate_
function we used so far accepts and returns an %Ecto.Changeset{}
, so we can easily plug our own.
For example, we can make sure that only fictional character names are allowed:
@fictional_names ["Black Panther", "Wonder Woman", "Spiderman"]
def validate_fictional_name(changeset) do
name = get_field(changeset, :name)
if name in @fictional_names do
changeset
else
add_error(changeset, :name, "is not a superhero")
end
end
Above we introduced two new helper functions: get_field/3
and add_error/4
. What they do is almost self-explanatory, but I encourage you to check the links to the documentation.
It is a good practice to always return an %Ecto.Changeset{}
, so you can use the |>
operator and make it easy to add more validations later:
def changeset(struct, params) do
struct
|> cast(params, [:name, :age])
|> validate_required([:name])
|> validate_length(:name, min: 2)
|> validate_fictional_name()
end
iex> Friends.Person.changeset(%Friends.Person{}, %{"name" => "Bob"})
%Ecto.Changeset<
action: nil,
changes: %{name: "Bob"},
errors: [name: {"is not a superhero", []}],
data: %Friends.Person<>,
valid?: false
>
Great, it works! However, there was really no need to implement this function ourselves — the validate_inclusion/4
function could be used instead; still, you can see how you can add your own errors which should come useful.
Adding changes programatically
Sometimes you want to introduce changes to a changeset manually. The put_change/3
helper exists for this purpose.
Rather than making the name
field required, let’s allow users to sign up without a name, and call them “Anonymous”.
The function we need will look familiar — it accepts and returns a changeset, just like the validate_fictional_name/1
we introduced earlier:
def set_name_if_anonymous(changeset) do
name = get_field(changeset, :name)
if is_nil(name) do
put_change(changeset, :name, "Anonymous")
else
changeset
end
end
We can set user’s name as “Anonymous” only when they register in our application; to do this, we are going to create a new changeset creator function:
def registration_changeset(struct, params) do
struct
|> cast(params, [:name, :age])
|> set_name_if_anonymous()
end
Now we don’t have to pass a name
and Anonymous
would be automatically set, as expected:
iex> Friends.Person.registration_changeset(%Friends.Person{}, %{})
%Ecto.Changeset<
action: nil,
changes: %{name: "Anonymous"},
errors: [],
data: %Friends.Person<>,
valid?: true
>
Having changeset creator functions that have a specific responsibility (like registration_changeset/2
) is not uncommon — sometimes you need the flexibility to perform only certain validations or filter specific parameters.
The function above could be then used in a dedicated sign_up/1
helper elsewhere:
def sign_up(params) do
%Friends.Person{}
|> Friends.Person.registration_changeset(params)
|> Repo.insert()
end
Conclusion
There are a lot of use cases and functionality that we did not cover in this lesson, such as schemaless changesets that you can use to validate any data; or dealing with side-effects alongside the changeset (prepare_changes/2
) or working with associations and embeds.
We may cover these in a future, advanced lesson, but in the meantime — we encourage to explore Ecto Changeset’s documentation for more information.
Caught a mistake or want to contribute to the lesson? Edit this page on GitHub!


Good morning Kyro,
It's Thursday, October 1st
| Project | Progress | Hours spent |
|---|---|---|
Get a complete audit storeUpdated 1 day ago |
45%
|
18:42 |
Update subscription methodUpdated 2 days ago |
57%
|
0:37 |
Create a new themeUpdated 1 week ago |
100%
|
24:12 |
See and talk to your users and leads immediately by importing your data into the Front Dashboard platform.
-
Import users from:
-
Capsule
Users -
Mailchimp
Users -
Webdev
Users - Or you can sync data to Front Dashboard to ensure your data is always up-to-date.
Monthly expenses
35%
25.3%
New
Overdue
Users
Status:
Signed up:
|
|
Full name | Status | Type | Signed up | User ID | |
|---|---|---|---|---|---|---|
|
|
Amanda Harvey
|
Successful | Unassigned |<EMAIL_ADDRESS>| 1 year ago | 67989 |
|
|
A
Anne Richard
|
Successful | Subscription |<EMAIL_ADDRESS>| 6 months ago | 67326 |
|
|
David Harrison
|
Overdue | Non-subscription |<EMAIL_ADDRESS>| 6 months ago | 55821 |
|
|
Finch Hoot
|
Pending | Subscription |<EMAIL_ADDRESS>| 1 year ago | 85214 |
|
|
B
Bob Dean
|
Successful | Subscription |<EMAIL_ADDRESS>| 6 months ago | 75470 |
|
|
Ella Lauda
|
Pending | Subscription |<EMAIL_ADDRESS>| 1 year ago | 37534 |
|
|
Sam Kart
|
Successful | Non-subscription |<EMAIL_ADDRESS>| 1 year ago | 57300 |
|
|
Costa Quinn
|
Overdue | Unassigned |<EMAIL_ADDRESS>| 1 year ago | 71288 |
|
|
R
Rachel Doe
|
Pending | Unassigned |<EMAIL_ADDRESS>| 6 months ago | 95211 |
|
|
B
Brian Halligan
|
Pending | Subscription |<EMAIL_ADDRESS>| 1 year ago | 58643 |
|
|
Linda Bates
|
Pending | Subscription |<EMAIL_ADDRESS>| 1 year ago | 44414 |
|
|
C
Chris Mathew
|
Successful | Non-subscription |<EMAIL_ADDRESS>| 1 year ago | 12569 |
|
|
L
Lewis Clarke
|
Overdue | Non-subscription |<EMAIL_ADDRESS>| 1 year ago | 54621 |
|
|
Clarice Boone
|
Successful | Non-subscription |<EMAIL_ADDRESS>| 6 months ago | 23485 |
|
|
M
Mark Colbert
|
Successful | Subscription |<EMAIL_ADDRESS>| 6 months ago | 78463 |
|
|
J
Johnny Appleseed
|
Pending | Subscription |<EMAIL_ADDRESS>| 1 year ago | 23564 |
|
|
P
Phileas Fogg
|
Pending | Subscription |<EMAIL_ADDRESS>| 6 months ago | 39199 |


Hello, my name is Tyler Rosenberg. Welcome to my portfolio page. Please feel free to browse around, view some of the projects I have worked on, add me on social media, and/or contact me at your convenience.
Hello, my name is Tyler Rosenberg. Welcome to my portfolio page. Please feel free to browse around, view some of the projects I have worked on, add me on social media, and/or contact me at your convenience.


Alias for creating a new Stalker with some basic configuration
(string)
the path to watch
Stalker
:
Alias for creating a new Stalker
(...any)
Stalker
:
Stalker A watcher of the watchers. Events that are listened to on the stalker will also be listened to on the attached watcher. When the watcher is closed, the stalker's listeners will be removed. When all stalkers for a watcher are removed, the watcher will close.
Extends EventEmitter
(Object)
: static collection of all the watchers mapped by path
(Watcher)
: the associated watcher for this stalker
Alias for Watcher#setConfig
(...any)
this
:
Alias for Watcher#watch
(...any)
this
:
Watcher Watches a path and if its a directory, its children too, and emits change events for updates, deletions, and creations
Available events:
log(logLevel, ...args)
- emitted for debugging, child events are bubbled upclose(reason)
- the watcher has been closed, perhaps for a reasonchange('update', fullPath, currentStat, previousStat)
- an update event has occured on the fullPath
change('delete', fullPath, currentStat)
- an delete event has occured on the fullPath
change('create', fullPath, null, previousStat)
- a create event has occured on the fullPath
Extends EventEmitter
(string)
: the path to be watched
(Stats)
: the stat object for the path
(FSWatcher)
: if the
watch
method was used, this is the FSWatcher instance for it
(Object)
: a (relativePath => stalker) mapping of children
(string)
: the current state of this watcher
(TaskGroup)
: the TaskGroup instance for queuing listen events
(number)
: the timeout result for queuing listen events
(Object)
: the configuration options
Configure out Watcher
(Object)
the configuration to use
| Name | Description |
|---|---|
opts.stat [Stats]
|
A stat object for the path if we already have one, otherwise it will be fetched for us |
opts.interval [number]
(default 5007 )
|
If the
watchFile
method was used, this is the interval to use for change detection if polling is needed
|
opts.persistent [boolean]
(default true )
|
If the
watchFile
method was used, this is whether or not watching should keep the node process alive while active
|
opts.catchupDelay [number]
(default 2000 )
|
This is the delay to wait after a change event to be able to detect swap file changes accurately (without a delay, swap files trigger a delete and creation event, with a delay they trigger a single update event) |
opts.preferredMethods [Array<string>]
(default ['watch','watchFile'] )
|
The order of watch methods to attempt, if the first fails, move onto the second |
opts.followLinks [boolean]
(default true )
|
If true, will use
fs.stat
instead of
fs.lstat
|
opts.ignorePaths [Array<string>]
(default false )
|
Array of paths that should be ignored |
opts.ignoreHiddenFiles [boolean]
(default false )
|
Whether to ignore files and directories that begin with a
.
|
opts.ignoreCommonPatterns [boolean]
(default false )
|
Whether to ignore common undesirable paths (e.g.
.svn
,
.git
,
.DS_Store
,
thumbs.db
, etc)
|
opts.ignoreCustomPatterns [RegExp]
|
A regular expression that if matched again the path will ignore the path |
this
:
Get the stat for the path of the watcher
If the stat already exists and opts.reset
is false
, then just use the current stat, otherwise fetch a new stat and apply it to the watcher
this
:
Setup watching for our path, and our children
If we are already watching and opts.reset
is not true
then all done
Otherwise, close the current watchers for us and the children via Watcher#close and setup new ones
([Object])
| Name | Description |
|---|---|
opts.reset [boolean]
(default false )
|
should we always close existing watchers and setup new watchers |
this
:


You can select to download a source code snapshot from below, or get the latest version of Yanel through our Git repository. Please note that we have a strong focus on keeping the Git repository stable, and source code snapshots can become out of date rather quickly. If you are interested in our development methodology, see the page on processes.
| Package | Size | Date | Issues |
|---|---|---|---|
| wyona-yanel-1.0.0-r36f865b0a6139fb85d77bbc6ac9f0d13bfd98aa8-src.zip | 12MB | January 8, 2012 | none so far |