The application of Profit Science Liquid is based on 4 simple steps:
The simplicity of the product allows the mine to now become in control of their operations as they could either:
The innovative development of this product has eliminated a few of the common issues found with some of the common dust palliatives as well as problems which we ourselves have faced in the past which leads to instability and inconsistency in the product. These issues include product washout and poor traction under rainfall, and melting of product under intense heat.
Currently with the increasing effects of climate change, mine operations are being exposed to erratic weather patterns. Most of the traditional dust palliatives are not suitable within the full spectrum of weather conditions, which is what makes Profit Science Liquid so unique.
Some of the main benefits of the development of Profit Science Liquid are:


HOME
DISCOVERY
PHOTOS
CONTACT
PROFILE
E-mail
User Name
Password
Age
Select...
18
between 18 and 49
50
Phone
ID number
Sign Up


Use this to understand how keyboard input is processed in web documents, and how screen readers effect this processing. In general, links, buttons, input elements, and select elements have full keyboard support built-in. This means that developers need only handle click events on these elements, because the browser takes care of generating click events from keyboard input. Screen readers will generate additional click events in some circumstances, which means that sometimes developers may need to explicitly add keyboard support to handle the keyboard when a screen reader is not running.
This app uses the speech synthesis API built into most modern web browsers, so tests can be run by users who depend on screen readers when the screen reader is not running (see below).
When a control gains focus, it will be voiced. Try both enter and space keys on each control. You should find that html buttons, links, and input controls have support for keyboard control built in; they will respond to the keyboard with a click event, whether or not a screen reader is running. Other elements like spans and paragraph elements do not have built-in keyboard support, even when they are told to accept keyboard focus via tabindex="0". You should find that the span element here with explicit keyboard support generates both a keyboard event and a click event because the app handles the keyboard event, then immeidately fires a click event at the element.
As you tab through the page, you will hear the screen reader speak each control, as well as the web speech API's rendering. You should now find that pressing enter or space keys on all controls, even those without explicit keyboard handlers will catch clicks. You should also find that those with explicit keyboard handlers do not catch keyboard events, because the screen reader is catching keyboard input, and is generating click events and sending them to the focused element. This has a few consequences as described below.
Links and buttons will operate similarly whether or not a screen reader is running. Both mouse and keyboard will generate click events, so no explicit keyboard events need be handled if using these elements.
divs, spans, and most other elements have no explicit keyboard support, even when they can accept keyboard focus. An easy thing to do to support these elements is to catch keydown events for a set of keys you want to support (usually enter and space), then immediately fire a click event at the element. You can thus use one simple handler to add keyboard support to these elements, and keep all common code in click handlers.
Input elements do have implicit keyboard support and similar to links and buttons will implicitly generate click events.
link with no explicit keyboard handler
span with no explicit keyboard handler
span with explicit keyboard handler


AAAI/ACM SIGAI will be holding their annual job fair at the AAAI annual conference. The job fair is open to all attendees of the AAAI conference. Attendees are encouraged to submit a CV or résumé for circulation beforehand.
Sponsors:
The AAAI/ACM SIGAI job fair is a place for students and professionals looking for internships or jobs to meet with representatives from companies and academia in an informal "meet-and-greet" atmosphere. In the beginning of the event, one representative from each organization has the opportunity to introduce the organization and its job opening(s) for about 1 minute. Afterward, all attendees have a chance to mingle.
Organizers:
If you are representing a company, research organization or university and would like to participate in the job fair, please send an email with your contact information to<EMAIL_ADDRESS>In addition, all job fair participants must register at the AAAI registration site via the AAAI-23 Conference Site. A small participation fee is required (complimentary or discounted participation is available to certain levels of sponsors and exhibitors).
As part of the job fair, attendees are encouraged to submit their CV to all of the participating companies before the job fair. This will help companies identify and possibly schedule an onsite interview with you when you attend.
Please clearly indicate on your CV or résumé your availability and type of job interest, along with contact information!
 By uploading your CV, you are agreeing to be contacted by participating and sponsor companies about recruiting and job openings.
If you would like to gain visibility and advertize positions available in your firm, please register as an employer: AAAI-23 Job Fair Employer Application
If you are already a sponsor or registered, please send us any information that you'd like to be advertized by completing the following form AAAI-23 Employer Info.


Your safety is our concern.
We are one of the finest Engineering and Contracting Organization providing challenging and secure environment for our people.
We are one of the finest Engineering and Contracting Organization providing challenging and secure environment for our people.
Nimrod Age Services have been in operation since 2004 under the guise of Eeval Integrated Services Limited – Parent Company. We cover all aspects of work in the area of Electrical and Mechanical Installation including Plumbing Services, Air Condition Ventilation and BMS Systems.
During this time Nimrod Age Services have become specialistsin planned preventative maintenance as well as Installations.
Our success is based on the continuous commitment that Nimrod Age Services give to all our clients by continuously updating and developing our services, and importantly, in this time of rising costs – competitive pricing structure.
Our consistency of work quality, experienced mechanical & electrical engineers, fast reliable 24 hour call out service, and preventative maintenance have also contributed towards the success to date ofNimrod Age Services
Nimrod Age Services is committed to Health & Safety and all engineers are completely trained in this area. We also use an external company to monitor and audit our Health and safety practices.
Nimrod Age Services have been in operation since 2004 under the guise of Eeval Integrated Services Limited – Parent Company. We cover all aspects of work in the area of Electrical and Mechanical Installation including Plumbing Services, Air Condition Ventilation and BMS Systems.
During this time Nimrod Age Services have become specialistsin planned preventative maintenance as well as Installations.
Our success is based on the continuous commitment that Nimrod Age Services give to all our clients by continuously updating and developing our services, and importantly, in this time of rising costs – competitive pricing structure.
Our consistency of work quality, experienced mechanical & electrical engineers, fast reliable 24 hour call out service, and preventative maintenance have also contributed towards the success to date ofNimrod Age Services
Nimrod Age Services is committed to Health & Safety and all engineers are completely trained in this area. We also use an external company to monitor and audit our Health and safety practices.


Menu of Restaurant
name goes here
Id
Name
Price
id goes here
name goes here
price goes here
Edit restaurant menu
Restaurants list
Add a restaurant


6.6.8. Loop Control Handler in Request Thread¶
Table of contents
This handler repeatedly executes the subsequent handlers until there is a request to stop the process. This handler is used in the process that monitors the message queue and table on the database and processes the unprocessed data as and when needed.
Tip
Each request (data) is handled independently in the process that processes and monitors the message queue and the table on the database. Even if one request process causes an error, other request processes must be continued. Therefore, exceptions caught by this handler continue the process except when there is normal process termination request or in the case of some fatal exceptions.
For details, see Process content according to the exception (error) that occurs in the subsequent handler.
This handler performs the following processes.
- Repeatedly executes the subsequent handlers
- Stops the execution of subsequent handlers when a process stop request exception occurs
For details, see Method to stop this handler. - Process (log output etc.) depending on the exception (error) that occurs in the subsequent handler
For details, see Process content according to the exception (error) that occurs in the subsequent handler.
The process flow is as follows.
<IP_ADDRESS>. Module list¶
<dependency>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-fw-standalone</artifactId>
</dependency>
<IP_ADDRESS>. Constraints¶
- Place this handler after the Retry Handler
- This handler throws Retryable exception for exceptions where processing can be continued. Therefore, this handler must be configured after the Retry Handler, which processes the retriable exceptions.
<IP_ADDRESS>. Configure the wait time for service shutdown¶
Wait time can be configured when the exception (ServiceUnavailable) indicating service shutdown is thrown by a subsequent handler. The check timing of whether the service is open can be adjusted by configuring this time.
If a long wait time is configured, the problem of the process not starting immediately even if there is a change in service while it is open may occur. Hence configure a value as per the requirement. If this configuration is omitted, the subsequent handler will be re-executed after waiting for 1 second.
A configuration example is shown below.
<component class="nablarch.fw.handler.RequestThreadLoopHandler">
<!-- Configure 5 seconds for wait time -->
<property name="serviceUnavailabilityRetryInterval" value="5000" />
</component>
Tip
If Service Availability Check Handler is not configured in the subsequent handler, it is not necessary to configure this configuration value. (even if configured, this value will not be used)
<IP_ADDRESS>. Method to stop this handler¶
This handler repeatedly delegates the process to subsequent handlers until an exception indicating process stop request occurs. When it is necessary to stop the process for maintenance, etc., the Process Stop Control Handler must be configured after this handler so that the process can be stopped from the outside.
Refer to Process content according to the exception (error) that occurs in the subsequent handler for the process contents when an exception indicating a process stop request occurs.
<IP_ADDRESS>. Process content according to the exception (error) that occurs in the subsequent handler¶
The process contents performed by this handler according to the exceptions (errors) that occur in the subsequent handler is described.
- Exception during service shutdown (ServiceUnavailable)
- After waiting for a certain period, the process is again delegated to the subsequent handler. For the method to configure the wait time, see Configure the wait time for service shutdown.
- Exception indicating process stop request (ProcessStop)
- Since the exception indicates the process stop request, processing of this handler is terminated.
- Exception indicating abnormal termination of the process (ProcessAbnormalEnd)
- Rethrows the exception caught as the exception indicates abnormal termination of the process.
- Service error indicating that the process could not be continued (ServiceError)
- Delegates the log output process to the exception class that is caught and throws Retryable exception.
- Exception indicating abnormal termination of the handler process (Result.Error)
- Outputs
FATAL
level log, and throws Retryable exception. - Runtime exception (RuntimeException)
- Outputs
FATAL
level log, and throws Retryable exception. - Exception indicating thread stop (ThreadDeath)
- Outputs
INFO
level log and rethrows the exception that is caught (ThreadDeath). - Stack overflow error (StackOverflowError)
- Outputs
FATAL
level log, and throws Retryable exception. - Insufficient heap error (OutOfMemoryError)
Outputs a message indicating that insufficient heap has occurred to the standard error output and then outputs a
FATAL
level log. (Since there is possibility of insufficient heap occurring again during log output, the log is output after the output of the standard error message.)Since there is possibility that the process can be continued by removing the reference to the object that caused insufficient heap, Retryable exception is thrown.
- Error indicating JVM error (VirtualMachineError)
- Rethrows the exception that is raised
- Error other than the above
- Outputs
FATAL
level log, and throws Retryable exception.


{#This code is dependent on the Bootstrap framework.#} {%extends "base.html"%} {%import "bootstrap/wtf.html" as wtf%} {% block title %}Sign in{% endblock %} {%block content%} {{super()}}


Causes
What are the causes of climate change?
Burning fossil fuels is a major cause of climate change. We burn these to produce heat, electricity, and it’s also a major energy source. When fossil fuels are burned, carbon dioxide, one of the biggest greenhouse gases, is released into the atmosphere. Any effects of climate change that are under the influence of humans are because of carbon dioxide. Fossil fuels are also nonrenewable, which means that we will eventually run out of them. In fact, at our current rate of fossil fuel usage, we will completely deplete our source by 2060. This is also why renewable energy is important, both in terms of climate change, as well as sustainability.
A second cause of climate change is deforestation. Trees store carbon in their trunks, which means that when they are cut down, all the carbon is being released back into the atmosphere. This is why when forests are being cut down for agriculture, it releases greenhouse gases, further contributing to climate change. In order to combat this, planting more trees is required so that more carbon will be stored and there will be fewer amounts released into the atmosphere.
Finally, agriculture is another huge cause of climate change. There are various factors to agricultural emissions, but some include emissions from livestock, rice fields, and the burning of biomass. Nitrous oxide is a main gas that is released by agricultural activities. Methane is mainly released from livestock, especially cows, but also things like rice paddies. The only way to solve this cause of climate change is by no-till farming, expanding crop rotations, and combining livestock and vegetable production.
What are the causes of climate change?
Burning fossil fuels is a major cause of climate change. We burn these to produce heat, electricity, and it’s also a major energy source. When fossil fuels are burned, carbon dioxide, one of the biggest greenhouse gases, is released into the atmosphere. Any effects of climate change that are under the influence of humans are because of carbon dioxide. Fossil fuels are also nonrenewable, which means that we will eventually run out of them. In fact, at our current rate of fossil fuel usage, we will completely deplete our source by 2060. This is also why renewable energy is important, both in terms of climate change, as well as sustainability.
A second cause of climate change is deforestation. Trees store carbon in their trunks, which means that when they are cut down, all the carbon is being released back into the atmosphere. This is why when forests are being cut down for agriculture, it releases greenhouse gases, further contributing to climate change. In order to combat this, planting more trees is required so that more carbon will be stored and there will be fewer amounts released into the atmosphere.
Finally, agriculture is another huge cause of climate change. There are various factors to agricultural emissions, but some include emissions from livestock, rice fields, and the burning of biomass. Nitrous oxide is a main gas that is released by agricultural activities. Methane is mainly released from livestock, especially cows, but also things like rice paddies. The only way to solve this cause of climate change is by no-till farming, expanding crop rotations, and combining livestock and vegetable production.


Sometimes it can get tedious to call all those XStream aliases/register converter methods or you might simply like the new trend on configuring POJOs: Java annotations.
This tutorial will show you how to use some of the annotations provided by XStream in order to make configuration easier. Let's start with a custom Message class:
package com.thoughtworks.xstream; package com.thoughtworks.xstream; public class RendezvousMessage { private int messageType; public RendezvousMessage(int messageType) { this.messageType = messageType; } }
Let's code the XStream calls which generate the XML file:
package com.thoughtworks.xstream; public class Tutorial { public static void main(String[] args) { XStream xstream = new XStream(); RendezvousMessage msg = new RendezvousMessage(15); System.out.println(xstream.toXML(msg)); } }
Results in the following XML:
<com.thoughtworks.xstream.RendezvousMessage> <messageType>15</messageType> </com.thoughtworks.xstream.RendezvousMessage>
The most basic annotation is the one responsible for type and field aliasing: @XStreamAlias. Let's annotate both our type and field and run the tutorial method again:
@XStreamAlias("message") class RendezvousMessage { @XStreamAlias("type") private int messageType; public RendezvousMessage(int messageType) { this.messageType = messageType; } }
In some strange way, the result is the same. What happened here? XStream does not read this annotation by default as it would be impossible to deserialize the XML code. Therefore we need to tell XStream to read the annotations from this type:
public static void main(String[] args) { XStream xstream = new XStream(); xstream.processAnnotations(RendezvousMessage.class); RendezvousMessage msg = new RendezvousMessage(15); System.out.println(xstream.toXML(msg)); }
Note that we have called the processAnnotations method of XStream. This method registers all aliases annotations in the XStream instance passed as first argument. You may also use the overloaded version of this method taking an array of types. The resulting XML is now what we have expected:
<message> <type>15</type> </message>
If you let XStream process the annotations of a type, it will also process all annotations of the related types i.e. all super types, implemented interfaces, the class types of the members and all their generic types.
Let's add a List of content to our RendezvousMessage. We desire the same functionality obtained with implicit collections:
@XStreamAlias("message") class RendezvousMessage { @XStreamAlias("type") private int messageType; private List<String> content; public RendezvousMessage(int messageType, String ... content) { this.messageType = messageType; this.content = Arrays.asList(content); } }
public static void main(String[] args) { XStream xstream = new XStream(); xstream.processAnnotations(RendezvousMessage.class); RendezvousMessage msg = new RendezvousMessage(15, "firstPart","secondPart"); System.out.println(xstream.toXML(msg)); }
The resulting XML shows the collection name before its elements:
<message> <type>15</type> <content class="java.util.Arrays$ArrayList">  <string>firstPart</string> <string>secondPart</string>  </content> </message>
This is not what we desire therefore we will annotate the content list to be recognized as an implicit collection:
@XStreamAlias("message") class RendezvousMessage { @XStreamAlias("type") private int messageType; @XStreamImplicit private List<String> content; public RendezvousMessage(int messageType, String... content) { this.messageType = messageType; this.content = Arrays.asList(content); } }
Resulting in an XML which ignores the field name (content) of the list:
<message> <type>15</type>  <string>firstPart</string> <string>secondPart</string>  </message>
We are almost there... we still want to remove the 'a' tag, and define each content part with the tag 'part'. In order to do so, let's add another attribute to our implicit collection annotation. The attribute field defines the name of the tag used for data contained inside this collection:
@XStreamAlias("message") class RendezvousMessage { @XStreamAlias("type") private int messageType; @XStreamImplicit(itemFieldName="part") private List<String> content; public RendezvousMessage(int messageType, String... content) { this.messageType = messageType; this.content = Arrays.asList(content); } }
Resulting in a cleaner XML:
<message> <type>15</type> <part>firstPart</part> <part>secondPart</part> </message>
The implicit annotation can also be used for arrays and maps. In the latter case you should provide the field name of the values that are used as key of the map.
Let's create another attribute which defines the timestamp when the message was created and one to flag special importance of the message:
@XStreamAlias("message") class RendezvousMessage { @XStreamAlias("type") private int messageType; @XStreamImplicit(itemFieldName="part") private List<String> content; private boolean important; private Calendar created = new GregorianCalendar(); public RendezvousMessage(int messageType, boolean important, String... content) { this.messageType = messageType; this.important = important; this.content = Arrays.asList(content); } }
Resulting in the following xml:
<message> <type>15</type> <part>firstPart</part> <part>secondPart</part> <important>false</important> <created> <time>1154097812245</time> <timezone>America/Sao_Paulo</timezone> </created> </message>
Now we face the following problem: We want to use a custom converter locally for this Calendar, but only for this Calendar, this exact field in this exact type. Easy... let's annotate it with the custom converter annotation:
@XStreamAlias("message") class RendezvousMessage { @XStreamAlias("type") private int messageType; @XStreamImplicit(itemFieldName="part") private List<String> content; private boolean important; @XStreamConverter(SingleValueCalendarConverter.class) private Calendar created = new GregorianCalendar(); public RendezvousMessage(int messageType, String... content) { this.messageType = messageType; this.content = Arrays.asList(content); } }
Let's create the custom converter:
public class SingleValueCalendarConverter implements Converter { public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { Calendar calendar = (Calendar) source; writer.setValue(String.valueOf(calendar.getTime().getTime())); } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(new Date(Long.parseLong(reader.getValue()))); return calendar; } public boolean canConvert(Class type) { return type.equals(GregorianCalendar.class); } }
And we end up with the converter being used and generating the following XML:
<message> <type>15</type> <part>firstPart</part> <part>secondPart</part> <important>false</important> <created>1154097812245</created> </message>
Additionally we want to format the importance flag not with a technical true or false, but with a natural yes or no. Fortunately the BooleanConverter supports alternate format styles, but how can we use an annotation to register a new instance locally? The XStreamConverter annotation uses some lightweight dependency injection mechanism to match given arguments with the parameters of available constructors. That way we can write now:
@XStreamAlias("message") class RendezvousMessage { @XStreamAlias("type") private int messageType; @XStreamImplicit(itemFieldName="part") private List<String> content; @XStreamConverter(value=BooleanConverter.class, booleans={false}, strings={"yes", "no"}) private boolean important; @XStreamConverter(SingleValueCalendarConverter.class) private Calendar created = new GregorianCalendar(); public RendezvousMessage(int messageType, boolean important, String... content) { this.messageType = messageType; this.important = important; this.content = Arrays.asList(content); } }
The BooleanConverter has an additional constructor with two string values expressing true and false and a third argument to ignore case of these values. Therefore we have added all 3 arguments to the annotation. The sequence of the arguments is only important for same types. As result we have now:
<message> <type>15</type> <part>firstPart</part> <part>secondPart</part> <important>no</important> <created>1154097812245</created> </message>
See the Javadoc of the XStreamConverter annotation what more arguments are provided implicitly.
The client may asks for the type tag and the importance flag to be an attribute inside the message tag, as follows:
<message type="15" important="no"> <part>firstPart</part> <part>secondPart</part> <created>1154097812245</created> </message>
All you need to do is add the @XStreamAsAttribute annotation:
@XStreamAlias("message") class RendezvousMessage { @XStreamAlias("type") @XStreamAsAttribute private int messageType; @XStreamImplicit(itemFieldName="part") private List<String> content; @XStreamAsAttribute @XStreamConverter(value=BooleanConverter.class, booleans={false}, strings={"yes", "no"}) private boolean important; @XStreamConverter(SingleValueCalendarConverter.class) private Calendar created = new GregorianCalendar(); public RendezvousMessage(int messageType, boolean important, String... content) { this.messageType = messageType; this.important = important; this.content = Arrays.asList(content); } }
Sometimes it is desirable to use a single field as text value for a XML element and all other fields should be written as attributes. XStream delivers the ToAttributedValueConverter, that will write a type with this form:
@XStreamAlias("message") @XStreamConverter(value=ToAttributedValueConverter.class, strings={"content"}) class RendezvousMessage { @XStreamAlias("type") private int messageType; private List<String> content; @XStreamConverter(value=BooleanConverter.class, booleans={false}, strings={"yes", "no"}) private boolean important; @XStreamConverter(SingleValueCalendarConverter.class) private Calendar created = new GregorianCalendar(); public RendezvousMessage(int messageType, boolean important, String... content) { this.messageType = messageType; this.important = important; this.content = Arrays.asList(content); } }
Unfortunately our little example does not work! Although we register the converter with the XStreamConverter annotation and provide with its arguments the field name, the conversion will fail later on. To use this converter you have to respect the implicit requirement: Any field (derived or not) has to be expressed as a single string i.e. technically XStream has to use a SingleValueConverter. In our case we have a list of strings that prevent the conversion. Therefore we have to use either a custom converter that transforms this list into a single string or we use for simplicity a simple string here:
@XStreamAlias("message") @XStreamConverter(value=ToAttributedValueConverter.class, strings={"content"}) class RendezvousMessage { @XStreamAlias("type") private int messageType; private String content; @XStreamConverter(value=BooleanConverter.class, booleans={false}, strings={"yes", "no"}) private boolean important; @XStreamConverter(SingleValueCalendarConverter.class) private Calendar created = new GregorianCalendar(); public RendezvousMessage(int messageType, boolean important, String content) { this.messageType = messageType; this.important = important; this.content = content; } }
Now it is possible to generate this XML:
<message type="15" important="no" created="1154097812245">This is the message content.</message>
Note, that no XStreamAsAttribute annotations were necessary. The converter assumes it implicitly.
Sometimes a class may contain elements that should not be part of the resulting XML. In our case we may now drop the 'messageType', since we are only interested at the content. This is easy using the @XStreamOmitField annotation:
@XStreamAlias("message") class RendezvousMessage { @XStreamOmitField private int messageType; @XStreamImplicit(itemFieldName="part") private List<String> content; @XStreamConverter(value=BooleanConverter.class, booleans={false}, strings={"yes", "no"}) private boolean important; @XStreamConverter(SingleValueCalendarConverter.class) private Calendar created = new GregorianCalendar(); public RendezvousMessage(int messageType, boolean important, String... content) { this.messageType = messageType; this.important = important; this.content = Arrays.asList(content); } }
The resulting XML does not contain the type of the message anymore:
<message> <part>firstPart</part> <part>secondPart</part> <important>no</important> <created>1154097812245</created> </message>
Until now we have always told you, that you have to call processAnnotation to configure the XStream instance with the present annotations in the different classes. However, this is only half the truth. You can run XStream also in a lazy mode, where it auto-detects the annotations while processing the object graph and configure the XStream instance on-the-fly:
package com.thoughtworks.xstream; public class Tutorial { public static void main(String[] args) { XStream xstream = new XStream(); xstream.autodetectAnnotations(true); RendezvousMessage msg = new RendezvousMessage(15); System.out.println(xstream.toXML(msg)); } }
The resulting XML will look as expected! Nevertheless you have to understand the implications, therefore some words of warning:
An XStream instance caches all class types processed for annotations. Every time XStream converts an object it will in auto-detection mode first process the object's type and all the types related (as explained above). Therefore it is no problem to serialize an object graph into XML, since XStream will know of all types in advance. This is no longer true at deserialization time. XStream has to know the alias to turn it into the proper type, but it can find the annotation for the alias only if it has processed the type in advance. Therefore deserialization will fail if the type has not already been processed either by having called XStream's processAnnotations method or by already having serialized this type. However, @XStreamAlias is the only annotation that may fail in this case.
XStream is not thread-safe while it is configured, thread-safety is only guaranteed during marshalling and unmarshalling. Unfortunately an annotation is defining a change in configuration that is now applied while object marshalling is processed. Therefore will the auto-detection mode turn XStream's marshalling process in a thread-unsafe operation. While XStream synchronizes the configuration modification, it cannot guard concurrent reads and you may run under certain circumstances into concurrency problems. If you abolutely have to rely on annotation processing on the fly, you will have to use separate XStream instances for each thread - either by using everytime a new instance or by a shared pool.
XStream uses a well-defined exception hierarchy. Normally an InitializationException is only thrown while XStream is configured. If annotations are processed on the fly they can be thrown obviously also in a marshalling process.
In auto-detection mode XStream will have to examine any unknown class type for annotations. This will slow down the marshalling process until all processed types have been examined once.
Please note, that any call to XStream.processAnnotations will turn off the auto-detection mode.
The XStream annotations support might help you configuring your class mappings in some ways, as the custom configuration will appear in your types, but might not be the solution for other problems, i.e. when you need to map the same type to two different XML 'standards'. Others might claim that the configuration should be clearly stated in a Java class and not mixed with your model, its up to you to pick the best approach in your case: Annotations or direct method calls to the XStream instance. Annotations do not provide more functionality, but may improve convenience.


Practitioner/Practitioner-DanielGranger Practitioner-DanielGranger
Practitioner/Practitioner-HoneyJones Practitioner-HoneyJones
Practitioner/Practitioner-JenCadbury Practitioner-JenCadbury
Practitioner/Practitioner-JennyGlass Practitioner-JennyGlass
Practitioner/Practitioner-JohnSmith Practitioner-JohnSmith
Practitioner/Practitioner-LunaBaskins Practitioner-LunaBaskins
Practitioner/Practitioner-NoraOlogist Practitioner-NoraOlogist
Practitioner/Practitioner-RonBurgendy Practitioner-RonBurgendy
Practitioner/Practitioner-RonMarble Practitioner-RonMarble
Practitioner/Practitioner-SallySmith Practitioner-SallySmith
Practitioner/Practitioner-ScottDumble Practitioner-ScottDumble


Class eClock used to obtain the time and to sleep some processes.
More...
#include <eClock.h>
|
| static void | my_sleep (uint32_t milliseconds) |
| | Put the current thread to sleep. More...
|
| |
Class eClock used to obtain the time and to sleep some processes.
Time measured since 1970.
◆ eClock()
◆ ~eClock()
◆ intervalEnd()
Method to finish measuring an interval in us.
- Returns
- Time of the interval in us
◆ intervalStart()
Method to start measuring an interval in us.
◆ my_sleep()
| static void my_sleep |
( |
uint32_t |
milliseconds | ) |
|
|
static |
Put the current thread to sleep.
- Parameters
-
| milliseconds | Time to sleep |
◆ setTimeNow()
| bool setTimeNow |
( |
Time_t * |
now | ) |
|
Fill a Time_t with the current time.
- Parameters
-
| now | Pointer to a Time_t instance to fill with the current time |
- Returns
- true on success
◆ m_interval1
◆ m_interval2
◆ m_now
◆ m_seconds_from_1900_to_1970
| int32_t m_seconds_from_1900_to_1970 |
Seconds from 1900 to 1970, initialized to 0 to comply with RTPS 2.2.
◆ m_utc_seconds_diff
| int32_t m_utc_seconds_diff |
Difference from UTC in seconds.
The documentation for this class was generated from the following file:
- /home/ricardo/workspace/curro/eProsima/desarrollo/proyectos/fastrtps/include/fastrtps/utils/eClock.h


The Byte and The Boss
A Site by Mariano Hernandez
Thank you for visiting my personal space in this digital ocean. Initially this site was built to showcase my work in going through a series of certifications from Free Code Camp. In the future I hope to also share little of my experience on topics of engineering, design, leadership, and my journey as I investigate new languages and technologies. I invite you to explore these pages and hope you will learn something new for yourself. It may be interesting for you to view from multiple devices so you can get a full perspective of the Responsive nature of this site. If anything I've done makes you wonder "how'd he do that?" please do reach out and ask, and again thank you for visiting.
Recent Certifications
Front End Libraries
Here are a collection React Apps generated as part of this certification. Coursework covered SASS, jQuery, Bootstrap, React and Redux. Though not covered in the course, I included work in Higher Order Components into project deliverables.
Responsive Design
Working from Mobile first design principles I built these these final projects with increasing capabilities as breakpoints increased. Coursework covered Core CSS, HTML/HTML5, Flex Box, Flex Grid, Media Breakpoints.
Microservice API
A collection of APIS covering multi-part forms, storage and retrieval into datastore and file uploads. The coursework covered NodeJS, Express and MongoDB. Though not covered in the course, I expanded my scope to include Asynchronous Javascript, Test Automation with Jest, and Developer Tooling by exploring Webpack to create custom application setup with environment specific build targets.


+++ author = "Kendon Brawner" title = "Nathan Boone Part 2" date = 2019-01-18T16:17:42-06:00 draft = false image = "soldier.jpg" weight = 3 categories = ["posts"] tags = ["Manifest Destiny"] description = "The Soldier Coming Soon!" +++


Login
Username
Password
Remember my login in this browser
Secure Session
Only allow your session to be used from this IP address.
[
Signup for a new account
]
[
Lost your password?
]
Copyright © 2000 - 2011 MantisBT Group


int ingres_num_rows ( resource $result )
This function primarily is meant to get the number of rows modified in the database. However, it can be used to retrieve the number of rows to fetch for a SELECT statement. Note: If scrollable cursors are disabled and this function is called before using ingres_fetch_array(), ingres_fetch_object(), or ingres_fetch_row(), the server will delete the result's data and the script will be unable to get them. Instead, you should retrieve the result's data using one of these fetch functions in a loop until it returns FALSE, indicating that no more results are available.
For delete, insert, or update queries, ingres_num_rows() returns the number of rows affected by the query. For other queries, ingres_num_rows() returns the number of rows in the query's result.


Dear {{ name }},
It's time to exercise your right and influence WebCamp Zagreb once again. Vote for the talks you want to hear this year and add them to the official WebCamp Zagreb conference schedule.
You can vote for talks here: {{ url|urlize }}.
Please do not share the above link with your friends, since it contains your ticket code. Share this one instead: {{ anon_url|urlize }}.
Sincerely,
WebCamp Zagreb team


absolute-1
absolute-1-1
absolute-1-1-1
absolute-2
Has absolute position but no values set for the location ('auto').
th-1
th-2
th-3
td-1
td-2
td-3


{% extends "base.html" %} {% block title %}OAuth Access Authorization{% endblock %} {% block content %}
Access is now enabled for the requesting application. It seems the application did not provide a way to give it the required information so you need to provide this to it. This has happened either due to it being a desktop application or not being configured properly.
Token/PIN: {{ token.verifier }}
{% endblock %}


Are you sure you want to remove all items? This action cannot be undone.
Are you sure you want to add this item?
There was a problem with your submission, please try again!
Are you sure you want to delete this Project?
Are you sure you want to edit this entry? Project details will be moved to the manager for edit.
Your randomly generated idea is...


Just use the lines you have seen so far.
From R∧S we have R
From R∧S we have S
From R and S we have R∧S
From R and R=>S we have S
If R (indent after)
Hence R=>S (deindent this line)
We have R
From R we have R∨S
From S we have R∨S
We have R∨S and whichever is true we have T
From R and ~R we have contradiction
From contradiction we have S
Hence ~R (deindent this line)
We have R∨~R
From R and R<=>S we have S
From S and R<=>S we have R
From R<=>S we have R=>S
From R<=>S we have S=>R
From R=>S and S=>R we have R<=>S
From ∀x.p at c we have p[x->c]
Given c
(indent after)
c was arbitrary hence ∀x.p
From p[x->c] at c we have ∃x.p
We have ∃x.p so take c satisfying p[x->c]
Take x
An indent is two spaces at the start of the line
| Type |
& |
| |
@ |
$ |
| to get |
∧ |
∨ |
∀ |
∃ |


Hello World!
This is Alyssa's page.
It is stil in the process of being created. Come back later...
Now I am using Atom.
Page Ideas:
Travel Page
Yoga Page
Hawaii
Cancun


|
foo
foo
foo
foo
|
|
|
|
A skeleton sits behind a table with 4 coloured tablets, its arm reaching invitingly toward them.
Skeleton> Please, inspect these runes, and tell me what you think any of them refer to... |


Events
You can meet Godot developers at various professional and casual events.
Sometimes our team also organizes meetups and conferences.
--- permalink: /events/index.html layout: default title: "Events - Godot Engine" description: "This page lists the upcoming and previous Godot community events." --- {% include header.html %}
You can meet Godot developers at various professional and casual events.
Sometimes our team also organizes meetups and conferences.
There are currently no future events planned.
{% else %} {% include events-list.html events=upcoming_events %} {% endif %}There are currently no past events.
{% else %} {% include events-list.html events=past_events %} {% endif %}


--- layout: layout title: Leadership Projects ---
I have had active leadership projects for many years now. I'll highlight a few here:


labeled
by None at 2020-09-04 09:31:36.labeled
by None at 2020-09-04 09:31:36.labeled
by None at 2020-09-04 10:39:29.labeled
by None at 2020-09-04 10:39:29.The following stack trace was present:
Exception:
java.lang.RuntimeException: Error while attempting to create identifier for Item id: 105927
at org.dspace.identifier.HandleIdentifierProvider.register(HandleIdentifierProvider.java:82)
at org.dspace.identifier.IdentifierServiceImpl.register(IdentifierServiceImpl.java:83)
at org.dspace.content.InstallItem.installItem(InstallItem.java:70)
at org.dspace.content.InstallItem.installItem(InstallItem.java:44)
at org.dspace.workflow.WorkflowManager.archive(WorkflowManager.java:724)
...
Caused by: java.lang.RuntimeException: Error while attempting to create identifier for Item id: 105927
at org.dspace.identifier.HandleIdentifierProvider.mint(HandleIdentifierProvider.java:130)
at org.dspace.identifier.HandleIdentifierProvider.register(HandleIdentifierProvider.java:70)
This might be a regression from https://github.com/pulibrary/dspace-development/issues/99#issuecomment-668359402
The following was necessary in /dspace/config/dspace.cfg
:
# handle.prefix = 88435
handle.prefix = 99999
# This plus the ARK identifier is stored as the persistent URI of the Item
handle.canonical.prefix = http://arks.princeton.edu/ark:/
# These are configuration parameters for the EZID ARK minting service
ark.ezid_server = https://ezid.cdlib.org
ark.ezid_username = apitest
ark.ezid_password = apitest
ark.shoulder = fk4
labeled
by James R. Griffin III at 2020-09-04 05:01:04.labeled
by James R. Griffin III at 2020-09-04 05:01:04.assigned
by James R. Griffin III at 2020-09-04 05:01:04.closed
by James R. Griffin III at 2020-09-04 05:23:21.Fixing the departmental metadata required the following:
query = DSpace::CLI::SeniorThesisCommunity.find_by_class_year('2020')
sub_query = query.find_by_department('Mechanical & Aerospace Engr')
sub_query.results.each { |item| item.add_metadata('pu', 'department', 'Mechanical and Aerospace Engineering') }
sub_query.results.each { |item| item.remove_metadata('pu', 'department', 'Mechanical & Aerospace Engr') }
sub_query.results.each { |item| item.update }
This was blocked by an incredibly difficult bug to find, but essentially different metadata field schema (dc
and dcterms
) are not disambiguated from the Java code base, triggering a massive generation of duplicate metadata in the process.
Create some kind of doi_link_map.json
so requests don't need to be repeated
closed
by Kevin McElwee at 2020-09-05 01:40:23.As a test, @kelynch created a spreadsheet for this. She combed the IIIF manifest for the Patron Requests collection while not logged into Figgy (so the private and Reading Room materials shouldn't appear there). There are 183 items returned (180 open/complete; 3 pending; 1 flagged). It was successful. I handed over a link to the spreadsheet to @kevinreiss and @mzelesky to see if it sufficient for their needs.
labeled
by None at 2020-09-04 03:26:13.labeled
by None at 2020-09-04 13:22:24.closed
by None at 2020-09-04 13:53:24.closed
by None at 2020-09-04 13:53:24.Coverage increased (+0.09%) to 80.135% when pulling 0b4c8686951a421d644060a30324a23c14dfede0 on 760-767-oclc-bibid-status into b056f4c65bc116d0dec827fb812e7597fcf26f4c on master.
deployed
by Trey Pendragon at 2020-09-04 12:53:59.head_ref_force_pushed
by Christina Chortaria at 2020-09-04 13:00:30.deployed
by Trey Pendragon at 2020-09-04 13:10:11.deployed
by Trey Pendragon at 2020-09-04 13:32:41.referenced
by None at 2020-09-04 13:53:24.merged
by None at 2020-09-04 13:53:24.closed
by None at 2020-09-04 13:53:24.head_ref_deleted
by None at 2020-09-04 13:53:32.review_requested
by Christina Chortaria at 2020-09-04 13:59:58.referenced
by None at 2020-09-04 14:14:43.merged
by None at 2020-09-04 14:14:43.closed
by None at 2020-09-04 14:14:44.head_ref_deleted
by None at 2020-09-04 14:14:47.labeled
by None at 2020-09-04 19:43:18.Coverage remained the same at 96.746% when pulling b58ca78fca2644562ac223eb2e46f5c189eb2d96 on dependabot/npmandyarn/node-sass-4.14.1 into a97e9d6a3d9da5187a07c436879f6c804823c7c2 on master.
labeled
by None at 2020-09-04 10:24:22.labeled
by None at 2020-09-04 10:24:22.assigned
by Christina Chortaria at 2020-09-04 12:54:32.deployed
by Trey Pendragon at 2020-09-04 15:11:48.ready_for_review
by None at 2020-09-04 15:31:43.referenced
by Christina Chortaria at 2020-09-04 15:32:05.merged
by Christina Chortaria at 2020-09-04 15:32:05.closed
by Christina Chortaria at 2020-09-04 15:32:05.labeled
by None at 2020-09-04 15:33:59.labeled
by None at 2020-09-04 15:33:59.Superseded by #2234.
closed
by None at 2020-09-04 15:34:05.head_ref_deleted
by None at 2020-09-04 15:34:07.closed in favor of https://github.com/pulibrary/orangelight/pull/2233/files
closed
by Christina Chortaria at 2020-09-04 15:34:52.closed by https://github.com/pulibrary/orangelight/pull/2233
assigned
by None at 2020-09-04 14:56:21.closed
by Christina Chortaria at 2020-09-04 15:36:54.unassigned
by Christina Chortaria at 2020-09-04 18:27:16.assigned
by None at 2020-09-04 19:14:04.referenced
by None at 2020-09-04 19:23:06.Coverage remained the same at 96.746% when pulling 00033035a88b35400678e26edd9eb0c5163ad7ec on 2168-UseGoogleanalytics into a97e9d6a3d9da5187a07c436879f6c804823c7c2 on master.
referenced
by None at 2020-09-04 12:32:30.merged
by None at 2020-09-04 12:32:30.closed
by None at 2020-09-04 12:32:31.head_ref_deleted
by None at 2020-09-04 12:32:32.referenced
by Axa Mei Liauw at 2020-09-04 13:05:22.merged
by Axa Mei Liauw at 2020-09-04 13:05:22.closed
by Axa Mei Liauw at 2020-09-04 13:05:22.head_ref_deleted
by Axa Mei Liauw at 2020-09-04 13:05:23.head_ref_force_pushed
by Francis Kayiwa at 2020-09-04 18:24:26.yup. that is how i understand it.
unassigned
by Eliot Jordan at 2020-09-04 18:14:33.closed
by Eliot Jordan at 2020-09-04 18:16:14.milestoned
by James R. Griffin III at 2020-09-04 18:21:05.Given the discussions for #349, I am going to propose that this is now simply a duplicate.
closed
by James R. Griffin III at 2020-09-04 18:23:19.labeled
by James R. Griffin III at 2020-09-04 18:30:05.milestoned
by James R. Griffin III at 2020-09-04 18:30:09.unassigned
by Shaun Ellis at 2020-09-04 18:30:50.renamed
by James R. Griffin III at 2020-09-04 18:30:59.labeled
by James R. Griffin III at 2020-09-04 18:32:57.milestoned
by James R. Griffin III at 2020-09-04 18:32:57.labeled
by James R. Griffin III at 2020-09-04 18:35:14.milestoned
by James R. Griffin III at 2020-09-04 18:35:14.unassigned
by James R. Griffin III at 2020-09-04 18:37:11.There is also behavior which should be ported from PULFA 2.0, specifically in which digital objects are dynamically loaded into the UV should the client have permission to view the digital object in the component.
labeled
by James R. Griffin III at 2020-09-04 18:36:13.milestoned
by James R. Griffin III at 2020-09-04 18:36:13.https://github.com/pulibrary/pulfalight/pull/348 advanced this with the removal of the date subtitle.
This should be deprioritized until we can work with the final ASpace EADs.
unassigned
by Eliot Jordan at 2020-09-04 18:15:53.Please see https://xd.adobe.com/view/a54bb217-10ff-43b2-72f6-6c3cadf376a4-d37a/screen/7366cbcf-3a86-41ae-86e6-432e3d1e35b6 for the design of this interface.
unassigned
by Shaun Ellis at 2020-09-04 18:31:14.labeled
by None at 2020-09-04 19:44:01.labeled
by None at 2020-09-04 19:44:01.assigned
by Eliot Jordan at 2020-09-04 18:21:52.milestoned
by James R. Griffin III at 2020-09-04 20:11:37.labeled
by James R. Griffin III at 2020-09-04 20:25:58.labeled
by James R. Griffin III at 2020-09-04 20:25:58.milestoned
by James R. Griffin III at 2020-09-04 20:25:58.labeled
by James R. Griffin III at 2020-09-04 20:26:25.milestoned
by James R. Griffin III at 2020-09-04 20:26:32.Should this feature embedded content (e. g. video) such as one finds on a Wordpress, Drupal, or other CMS platform? Will this be required?
For the MVP, this should be only a static page, but perhaps this could also be synchronized from a CMS once https://github.com/pulibrary/pulfalight/issues/253 is completed?
Also consider the content on the Pulfalight Content Management (by Feature) spreadsheet
labeled
by James R. Griffin III at 2020-09-04 20:34:34.milestoned
by James R. Griffin III at 2020-09-04 20:34:34.referenced
by None at 2020-09-04 15:02:53.merged
by None at 2020-09-04 15:02:53.closed
by None at 2020-09-04 15:02:53.head_ref_deleted
by None at 2020-09-04 15:02:58.assigned
by None at 2020-09-04 14:45:31.closed
by None at 2020-09-04 18:47:07.disabled feeds image grabber module and now you can delete nodes again.
closed
by Axa Mei Liauw at 2020-09-04 15:07:40.duplicate of #631
closed
by Axa Mei Liauw at 2020-09-04 15:09:33.closed
by Axa Mei Liauw at 2020-09-04 15:11:07.labeled
by None at 2020-09-04 20:45:49.labeled
by None at 2020-09-04 20:45:49.


Coaches Notes
¶
1. Coaches Disclaimer
1.1. Team background
1.2. Choice of not using Scratch or Java
1.3. Choice of Python
1.4. Choice of the OS
1.5. Pitfalls of Mindtstorm and Python
2. Python Essentials
2.1. Variables
2.2. Lists
2.3. Functions
2.4. Classes
2.5. Conditions
2.6. Loops
2.6.1. Loop forever
2.6.2. Loop with condition
2.6.3. Loop with break
2.6.4. Loop through a list
2.7. Exceptions
2.8. Function as a parameter
2.9. Import
2.10. Program
3. Advanced Python
3.1. Decorators
3.2. Threads
4. Lessons
4.1. Python Programming Templates and Activities
4.2. Color Sensor
4.3. Three color sensors
4.4. Driving The Robot
4.5. Gyro Sensor
Spockbots City
¶
Summary
¶
Summary of Robot Features
Mechanical Design
Programming
Strategy and Innovation
Spockbots Robot
¶
Design
Goals for using Python
City Runs
run.check
run.calibrate
run.swing
run.crane
run.black_circle
run.red_circle
run.tan_circle
run.ramp
Spockbots API
spockbots.output
spockbots.check
spockbots.colorsensor
spockbots.motor
spockbots.gyro
Spockbots Code
Spockbots Output
Spockbots Check
Spockbots Colorsensor
Spockbots Gyro
Spockbots Motor Code
lego
City Runs
run.check
run.calibrate
run.swing
run.crane
run.black_circle
run.red_circle
run.tan_circle
run.ramp
Spockbots API
spockbots.output
spockbots.check
spockbots.colorsensor
spockbots.motor
spockbots.gyro
Indices and tables
¶
Index
Module Index
Search Page
Spockbots
Navigation
1. Coaches Disclaimer
2. Python Essentials
3. Advanced Python
4. Lessons
Summary of Robot Features
Design
City Runs
Spockbots API
Spockbots Code
lego
Related Topics
Documentation overview
Next:
1. Coaches Disclaimer
Quick search


Here I learned the programming language python from square one. While I learned the language, I simultaneously explored each of the language's functionality in the real world. I learned why people use python, including advantages, disadvantages, and applications. I learned about Python's predominance in artificial intelligence. MY final project projected sales pattern for Home Depot stores across the nation down to the minute using machine learning and artifical intelligence and all of the data that has been accumulated in the Home Depot Datatabase.
Learned the basics of Angular JS in order to code client side interface protocols into the Home Depot Website. Worked through the Agile framework and completed several 'stories'/tasks and pushed changes through github and tested builds using Jenkins.
Applied Java skills accumulated in AP Computer Science in order to fill out service calls in the back end. Used the Spring framework to mediate the database with the client side in order to keep track of the Home Depot Loyaly programs. Kept track of customer's points and purchases, in order for the customer to be able to view their rewards.
Bachelor of Science in Computer Science
Certificate in Math
Relevant Coursework: Data Structures, Alogrithms, Computer Architecture, Operating Systems
Worked with one other person to develop a travel app that gives users suggestions based on a budget and a starting airport. We used a rest API, Google Cloud Console, Google Firebase, Android Studio and Swift to develop both android and iOS implementations.
Implemented a buddy-system where users can add other existing users as "buddies" so that it is easy for multiple users to book the same flight.
A form of input-validation in which only airports specified by their IATA codes could be entered so that it works properly with our Rest API. For this I had to parse documents provided by the US Bureau of Transportation to gather information on all available airports so that the autocomplete would be affective.
Utilized tools provided by Google Firebase to authenticate users and keep track of each user's account, passport information and more. Every account is secured, and only a hash of the password is stored. Also allowed users to sign in with their google accounts.
Created a user-onboarding experience for first time users to ensure that they get acquanted with the app and to encourage them to use features as intended.
Worked a lot with creating and designing the UI, from button designs to navigation drawers. Made necessary adjustments to prioritize the overall immersiveness and ease of access of the app.


Object
Public: Methods for managing the parsing of an AsciiDoc table. Instances of this class are primarily responsible for tracking the buffer of a cell as the parser moves through the lines of the table using tail recursion. When a cell boundary is located, the previous cell is closed, an instance of Table::Cell is instantiated, the row is closed if the cell satisifies the column count and, finally, a new buffer is allocated to track the next cell.
# File lib/asciidoctor/table.rb, line 267 def initialize(table, attributes = {}) @table = table if attributes.has_key? 'format' @format = attributes['format'] if !Table::DATA_FORMATS.include? @format raise "Illegal table format: #@format" end else @format = Table::DEFAULT_DATA_FORMAT end if @format == 'psv' && !attributes.has_key?('separator') && table.document.nested? @delimiter = '!' else @delimiter = attributes.fetch('separator', Table::DEFAULT_DELIMITERS[@format]) end @delimiter_re = /#{Regexp.escape @delimiter}/ @col_count = table.columns.empty? ? -1 : table.columns.size @buffer = '' @cell_specs = [] @cell_open = false @active_rowspans = [0] @col_visits = 0 @current_row = [] @linenum = -1 end
Public: Activate a rowspan. The rowspan Array is consulted when determining the effective number of cells in the current row.
returns nothing
# File lib/asciidoctor/table.rb, line 473 def activate_rowspan(rowspan, colspan) 1.upto(rowspan - 1).each {|i| @active_rowspans[i] ||= 0 @active_rowspans[i] += colspan } nil end
Public: Determines whether the buffer has unclosed quotes. Used for CSV data.
returns true if the buffer has unclosed quotes, false if it doesn’t or it isn’t quoted data
# File lib/asciidoctor/table.rb, line 323 def buffer_has_unclosed_quotes?(append = nil) record =<EMAIL_ADDRESS>record.start_with?('"') && !record.start_with?('""') && !record.end_with?('"') end
Public: Determines whether the buffer contains quoted data. Used for CSV data.
returns true if the buffer starts with a double quote (and not an escaped double quote), false otherwise
# File lib/asciidoctor/table.rb, line 332 def buffer_quoted? @buffer.lstrip! @buffer.start_with?('"') && !@buffer.start_with?('""') end
Public: Checks whether the current cell has been marked as closed
returns true if the cell is marked as closed, false otherwise
# File lib/asciidoctor/table.rb, line 384 def cell_closed? !@cell_open end
Public: Checks whether the current cell is still open
returns true if the cell is marked as open, false otherwise
# File lib/asciidoctor/table.rb, line 377 def cell_open? @cell_open end
Public: Close the current cell, instantiate a new Table::Cell, add it to the current row and, if the number of expected columns for the current row has been met, close the row and begin a new one.
returns nothing
# File lib/asciidoctor/table.rb, line 405 def close_cell(eol = false) cell_text = @buffer.strip @buffer = '' if format == 'psv' cell_spec = take_cell_spec repeat = cell_spec.fetch('repeatcol', 1) cell_spec.delete('repeatcol') else cell_spec = nil repeat = 1 if format == 'csv' if !cell_text.empty? && cell_text.include?('"') # this may not be perfect logic, but it hits the 99% if cell_text.start_with?('"') && cell_text.end_with?('"') # unquote cell_text = cell_text[1..-2].strip end # collapses escaped quotes cell_text = cell_text.tr_s('"', '"') end end end 1.upto(repeat) {|i| # make column resolving an operation if @col_count == -1 @table.columns << Table::Column.new(@table, @current_row.size + i - 1) column = @table.columns.last else # QUESTION is this right for cells that span columns? column =<EMAIL_ADDRESS>end cell = Table::Cell.new(column, cell_text, cell_spec) unless cell.rowspan.nil? || cell.rowspan == 1 activate_rowspan(cell.rowspan, (cell.colspan || 1)) end @col_visits += (cell.colspan || 1) @current_row << cell # don't close the row if we're on the first line and the column count has not been set explicitly # TODO perhaps the col_count/linenum logic should be in end_of_row? (or a should_end_row? method) close_row if end_of_row? && (@col_count != -1 || @linenum > 0 || (eol && i == repeat)) } @open_cell = false nil end
Public: If the current cell is open, close it. In additional, push the cell spec captured from the end of this cell onto the stack for use by the next cell.
returns nothing
# File lib/asciidoctor/table.rb, line 393 def close_open_cell(next_cell_spec = {}) push_cell_spec next_cell_spec close_cell(true) if cell_open? next_line nil end
Public: Close the row by adding it to the Table and resetting the row Array and counter variables.
returns nothing
# File lib/asciidoctor/table.rb, line 457 def close_row @table.rows.body << @current_row # don't have to account for active rowspans here # since we know this is first row @col_count = @col_visits if @col_count == -1 @col_visits = 0 @current_row = [] @active_rowspans.shift @active_rowspans[0] ||= 0 nil end
Public: Calculate the effective column visits, which consists of the number of cells plus any active rowspans.
# File lib/asciidoctor/table.rb, line 488 def effective_col_visits @col_visits + @active_rowspans.first end
Public: Check whether we’ve met the number of effective columns for the current row.
# File lib/asciidoctor/table.rb, line 482 def end_of_row? @col_count == -1 || effective_col_visits == @col_count end
Public: Marks that the cell should be kept open. Used when the end of the line is reached and the cell may contain additional text.
returns nothing
# File lib/asciidoctor/table.rb, line 360 def keep_cell_open @cell_open = true nil end
Public: Marks the cell as closed so that the parser knows to instantiate a new cell instance and add it to the current row.
returns nothing
# File lib/asciidoctor/table.rb, line 369 def mark_cell_closed @cell_open = false nil end
Public: Checks whether the line provided contains the cell delimiter used by this table.
returns MatchData if the line contains the delimiter, false otherwise
# File lib/asciidoctor/table.rb, line 306 def match_delimiter(line) line.match @delimiter_re end
Internal: Advance to the next line (which may come after the parser begins processing the next line if the last cell had wrapped content).
# File lib/asciidoctor/table.rb, line 494 def next_line @linenum += 1 end
Public: Puts a cell spec onto the stack. Cell specs precede the delimiter, so a stack is used to carry over the spec to the next cell.
returns nothing
# File lib/asciidoctor/table.rb, line 350 def push_cell_spec(cell_spec = {}) # this shouldn't be nil, but we check anyway @cell_specs << (cell_spec || {}) nil end
Public: Skip beyond the matched delimiter because it was a false positive (either because it was escaped or in a quoted context)
returns the String after the match
# File lib/asciidoctor/table.rb, line 314 def skip_matched_delimiter(match, escaped = false) @buffer << (escaped ? match.pre_match.chop : match.pre_match) << @delimiter match.post_match end
Public: Checks whether the line provided starts with the cell delimiter used by this table.
returns true if the line starts with the delimiter, false otherwise
# File lib/asciidoctor/table.rb, line 298 def starts_with_delimiter?(line) line.start_with? @delimiter end
Public: Takes a cell spec from the stack. Cell specs precede the delimiter, so a stack is used to carry over the spec from the previous cell to the current cell when the cell is being closed.
returns The cell spec Hash captured from parsing the previous cell
# File lib/asciidoctor/table.rb, line 342 def take_cell_spec() @cell_specs.shift end
Generated with the Darkfish Rdoc Generator 2.


PERLFAQ9
Section: Perl Programmers Reference Guide (7)Updated: 2003-11-25
Index Return to Main Contents
NAME
perlfaq9 - 网络 (2003/01/31 17:36:57 )DESCRIPTION 描述
网络通信，互联网以及少量有关 web 的内容What is the correct form of response from a CGI script?
(Alan Flavell<EMAIL_ADDRESS>answers...)
The Common Gateway Interface (CGI) specifies a software interface between a program (``CGI script'') and a web server (HTTPD). It is not specific to Perl, and has its own FAQs and tutorials, and usenet group, comp.infosystems.www.authoring.cgi
The original CGI specification is at: http://hoohoo.ncsa.uiuc.edu/cgi/
Current best-practice RFC draft at: http://CGI-Spec.Golux.Com/
Other relevant documentation listed in: http://www.perl.org/CGI_MetaFAQ.html
These Perl FAQs very selectively cover some CGI issues. However, Perl programmers are strongly advised to use the CGI.pm module, to take care of the details for them.
The similarity between CGI response headers (defined in the CGI specification) and HTTP response headers (defined in the HTTP specification, RFC2616) is intentional, but can sometimes be confusing.
The CGI specification defines two kinds of script: the ``Parsed Header'' script, and the ``Non Parsed Header'' (NPH) script. Check your server documentation to see what it supports. ``Parsed Header'' scripts are simpler in various respects. The CGI specification allows any of the usual newline representations in the CGI response (it's the server's job to create an accurate HTTP response based on it). So ``\n'' written in text mode is technically correct, and recommended. NPH scripts are more tricky: they must put out a complete and accurate set of HTTP transaction response headers; the HTTP specification calls for records to be terminated with carriage-return and line-feed, i.e ASCII \015\012 written in binary mode.
Using CGI.pm gives excellent platform independence, including EBCDIC
systems. CGI.pm selects an appropriate newline representation
($CGI::CRLF) and sets binmode as appropriate.
我的 CGI 脚本从命令行执行正常，但是在浏览器中不行 (500 Server Error)。
可能有很多事错了。可以仔细阅读 ``Troubleshooting Perl CGI scripts'' guide, 位置是
http://www.perl.org/troubleshooting_CGI.html
如果接下来，你能证明你已阅读了 FAQ 并且你的问题不是那么简单，非叁言两语即可回答的话，那麽您 post到 comp.infosystems.www.authoring.cgi上（如果是有关 HTTP 、 HTML ，或 CGI通信协定）的问题可能也会得到口气和缓而有用的答覆。表面上看似 Perl，但骨子里是 CGI之类的问题，如果 post到 comp.lang.perl.misc人家可能就不会这麽乐意地接受了。
几个实用的 FAQ，相关文档和查错向导列在 CGI Meta FAQ 中：
http://www.perl.org/CGI_MetaFAQ.html
如何从 CGI 程序中得到好一点的错误提示？
Use the CGI::Carp module. It replaces "warn" and "die", plus the normal Carp modules "carp", "croak", and "confess" functions with more verbose and safer versions. It still sends them to the normal server error log.
use CGI::Carp; warn "This is a complaint"; die "But this one is serious";
The following use of CGI::Carp also redirects errors to a file of your choice, placed in a BEGIN block to catch compile-time warnings as well:
BEGIN { use CGI::Carp qw(carpout); open(LOG, ">>/var/local/cgi-logs/mycgi-log") or die "Unable to append to mycgi-log: $!\n"; carpout(*LOG); }
You can even arrange for fatal errors to go back to the client browser, which is nice for your own debugging, but might confuse the end user.
use CGI::Carp qw(fatalsToBrowser); die "Bad error here";
Even if the error happens before you get the HTTP header out, the module
will try to take care of this to avoid the dreaded server 500 errors.
Normal warnings still go out to the server error log (or wherever
you've sent them with "carpout") with the application name and date
stamp prepended.
如何将字符串中的 HTML 删除？
最正确（尽管不是最快）的方法是使用 HTML::Parse模组（可由 CPAN取得，是所有写 Web程式者必备的 libwww-perl 套件的一部分）。另一中最正确的办法是使用 HTML::FormatText，它不仅删除了 HTML，同时也试图对结果文本进行简单的格式化。
许多人尝试用简陋的正规表示式来解决这个问题，譬如说像 "s/<.*?>//g"，但这个式子在很多情况下会失败，因为要处理的字串可能会跨越断行字元，也可能含有被 quote【跳脱】的箭头号，或有 HTML comment出现；再加上一些疏忽，譬如，人们常忘了转换如 < 的 entities（跳脱字 元"<"）。
以下这个「简陋」的方法对大多数的档案都有效：
#!/usr/bin/perl -p0777 s/<(?:[^>'"]*|(['"]).*?\1)*>//gs
如果您想要更完整的解法，请看叁部曲的 striphtml 程式， http://www.cpan.org/authors/Tom_Christiansen/scripts/striphtml.gz .
Here are some tricky cases that you should think about when picking a solution:
 B">
 B">

<# Just data #>
<![INCLUDE CDATA [ >>>>>>>>>>>> ]]>
If HTML comments include other tags, those solutions would also break on text like this:

如何萃取 URL?
可以简单地从 HTML 中得到所有种类的 URL，只要使用 "HTML::SimpleLinkExtor" 模块，它可以处理锚，图像，对象，桢，其他包含 URL 的标签。如果需要更复杂的东西，可以创建 "HTML::LinkExtor" 的子类或使用 "HTML::Parser". 你甚至可以用 "HTML::SimpleLinkExtor" 作为范例，来书写适合你特殊需要的程序。
You can use URI::Find to extract URLs from an arbitrary text document.
Less complete solutions involving regular expressions can save you a lot of processing time if you know that the input is simple. One solution from Tom Christiansen runs 100 times faster than most module based approaches but only extracts URLs from anchors where the first attribute is HREF and there are no other attributes.
#!/usr/bin/perl -n00 # qxurl -<EMAIL_ADDRESS>print "$2\n" while m{ < \s* A \s+ HREF \s* = \s* (["']) (.*?) \1 \s* > }gsix;
如何从用户的机器上下载文件？如何打开其他机器上的文件？
In this case, download means to use the file upload feature of HTML forms. You allow the web surfer to specify a file to send to your web server.  No matter what you call it, you do it with what's known as multipart/form-data encoding. The CGI.pm module (which comes with Perl as part of the Standard Library) supports this in the start_multipart_form() method, which isn't the same as the startform() method.
See the section in the CGI.pm documentation on file uploads for code
examples and details.
如何在 HTML 添加一个弹出菜单?
用 <SELECT> 和 <OPTION>这两个标签。 CGI.pm模组（可由 CPAN取得）对这个 widget【此指跳出式选单这个介面成分】还有许多其他的介面成分都有支援【即有制作动态标签的函式】，其中有些是以巧妙模拟的方 式达成。
如何获取 HTML 文件?
有一个方法是，如果您的系统上装有 lynx一类的文字模式的 HTML浏览器的话，那麽可以这麽做：
$html_code = `lynx -source $url`; $text_data = `lynx -dump $url`;
收录在 CPAN里的 libwww-perl (LWP)模组则提供了更强的方法来做这件事。它不但可钻过 proxies，而且也不需要 lynx：
# simplest version use LWP::Simple; $content = get($URL);
# or print HTML from a URL use LWP::Simple; getprint "http://www.linpro.no/lwp/";
# or print ASCII from HTML from a URL # also need HTML-Tree package from CPAN use LWP::Simple; use HTML::Parser; use HTML::FormatText; my ($html, $ascii); $html = get("http://www.perl.com/"); defined $html or die "Can't fetch HTML from http://www.perl.com/"; $ascii = HTML::FormatText->new->format(parse_html($html)); print $ascii;
如何根据提交的内容自动生成一个 HTML ?
If you're submitting values using the GET method, create a URL and encode the form using the "query_form" method:
use LWP::Simple; use URI::URL;
my $url = url('http://www.perl.com/cgi-bin/cpan_mod'); $url->query_form(module => 'DB_File', readme => 1); $content = get($url);
If you're using the POST method, create your own user agent and encode the content appropriately.
use HTTP::Request::Common qw(POST); use LWP::UserAgent;
$ua = LWP::UserAgent->new(); my $req = POST 'http://www.perl.com/cgi-bin/cpan_mod', [ module => 'DB_File', readme => 1 ]; $content = $ua->request($req)->as_string;
如何解码或创建 web 中的 %-encoding?
If you are writing a CGI script, you should be using the CGI.pm module that comes with perl, or some other equivalent module. The CGI module automatically decodes queries for you, and provides an escape() function to handle encoding.
The best source of detailed information on URI encoding is RFC 2396. Basically, the following substitutions do it:
s/([^\w()'*~!.-])/sprintf '%%%02x', ord $1/eg; # encode
s/%([A-Fa-f\d]{2})/chr hex $1/eg; # decode
However, you should only apply them to individual URI components, not the entire URI, otherwise you'll lose information and generally mess things up. If that didn't explain it, don't worry. Just go read section 2 of the RFC, it's probably the best explanation there is.
RFC 2396 also contains a lot of other useful information, including a
regexp for breaking any arbitrary URI into components (Appendix B).
如何重定向到其他页面？
Specify the complete URL of the destination (even if it is on the same server). This is one of the two different kinds of CGI ``Location:'' responses which are defined in the CGI specification for a Parsed Headers script. The other kind (an absolute URLpath) is resolved internally to the server without any HTTP redirection. The CGI specifications do not allow relative URLs in either case.
Use of CGI.pm is strongly recommended. This example shows redirection with a complete URL. This redirection is handled by the web browser.
use CGI qw/:standard/;
my $url = 'http://www.cpan.org/'; print redirect($url);
This example shows a redirection with an absolute URLpath. This redirection is handled by the local web server.
my $url = '/CPAN/index.html'; print redirect($url);
But if coded directly, it could be as follows (the final ``\n'' is shown separately, for clarity), using either a complete URL or an absolute URLpath.
print "Location: $url\n"; # CGI response header print "\n"; # end of headers
如何为我的网页加上密码？
要启用 web 服务器的验证，你需要配置你的 web 服务器，不同的服务器有不同的方法---apache 与 iPlanet 不同，后者又与 IIS 不同。从你的 web 服务器的文档中查找特定服务器的配置细节。
如何用 Perl 修改我的 .htpasswd 和 .htgroup 文件?
HTTPD::UserAdmin 和 HTTPD::GroupAdmin 等模组为这些档案提供了统一的物件导向介面，尽管这些档案可能以各种不同的格式储存。这些资料库可能是纯文字格式、 dbm、Berkeley DB或任何 DBI相容的资料库驱动程式 (drivers)。 HTTPD::UserAdmin支援`Basic' 和 `Digest'这两个认证模式所用的档案。以下是 一例：
use HTTPD::UserAdmin (); HTTPD::UserAdmin ->new(DB => "/foo/.htpasswd") ->add($username => $password);
如何确保用户不会在表单中输入使我的 CGI 脚本作坏事的值？
http://www.perl.org/CGI_MetaFAQ.html
如何解释一个邮件头？
要使用一个快速的方法，可以这样使用 perlfunc 中的 ``split'' 函数：
$/ = ''; $header = <MSG>; $header =~ s/\n\s+/ /g; # 将延续行合并成单行 %head = ( UNIX_FROM_LINE, split /^([-\w]+):\s*/m, $header );
但是，如果您若想保留所有 Received栏位资料的话【因 Received 栏位通常不止一个】，这个解法便不太行了。一个完整的解法是使用收录在 CPAN的 Mail::Header 模组（ MailTools 套件的一部分）。
如何解码一个 CGI 表单？
使用标准模块，应该是 CGI.pm。没有理由去尝试手动去做！
你大概都看过一大堆从 STDIN 读取与 $ENV{CONTENT_LENGTH} 长度相同的字节，或者获取 $ENV{QUERY_STRING} 来解码 GET。这些程序都非常糟糕。他们仅在某些时候工作。他们通常不检查 read() 的返回值，这是主要的错误。他们不处理 HEAD 请求。他们不处理文件上载时的多成分表单。They don't deal with GET/POST combinations where query fields are in more than one place. They don't deal with keywords in the query string.
In short, they're bad hacks. Resist them at all costs. Please do not be tempted to reinvent the wheel. Instead, use the CGI.pm or CGI_Lite.pm (available from CPAN), or if you're trapped in the module-free land of perl1 .. perl4, you might look into cgi-lib.pl (available from http://cgi-lib.stanford.edu/cgi-lib/ ).
Make sure you know whether to use a GET or a POST in your form.
GETs should only be used for something that doesn't update the server.
Otherwise you can get mangled databases and repeated feedback mail
messages. The fancy word for this is ``idempotency''. This simply
means that there should be no difference between making a GET request
for a particular URL once or multiple times. This is because the
HTTP protocol definition says that a GET request may be cached by the
browser, or server, or an intervening proxy. POST requests cannot be
cached, because each request is independent and matters. Typically,
POST requests change or depend on state on the server (query or update
a database, send mail, or purchase a computer).
如何检测一个有效的邮件地址？
如果没有寄封信到一个位址去试试看它会不会弹回来（即使是这麽做您还得面对停顿的问题），您是无法确定一个位址是否真的存在的。即使您套用 email 标头的标准规格来做检查的依据，您还是有可能会遇到问题，因为有些送得到的位址并不 符合 RFC-822（电子邮件标头的标准）的规定，但有些符合标准的位址却无法投 递。
You can use the Email::Valid or RFC::RFC822::Address which check the format of the address, although they cannot actually tell you if it is a deliverable address (i.e. that mail to the address will not bounce). Modules like Mail::CheckUser and Mail::EXPN try to interact with the domain name system or particular mail servers to learn even more, but their methods do not work everywhere---especially for security conscious administrators.
许多人试图用一个简单的正规表示式，例如 "/^[\w.-]+\@(?:[\w-]+\.)+\w+$/" 来消除一些通常是无效的 email 位址。不过，这样做也把很多合格的位址给一起滤掉了，而且对测试一个位址有没有希望投递成功完全没有帮助，所以在此建议大家不要这麽做；不过您可以看看： http://www.cpan.org/authors/Tom_Christiansen/scripts/ckaddr.gz , 这个 script真的彻底地依据所有的 RFC规定来做检验（除了内嵌式 comments外）,同时会排除一些您可能不会想送信去的位址（如 Bill Clinton【美国总统】或您的 postmaster），然後它会确定位址中的主机名称可在 DNS中找得到。这个 script 跑起来不是很快，但至少有效。
Our best advice for verifying a person's mail address is to have them enter their address twice, just as you normally do to change a password. This usually weeds out typos. If both versions match, send mail to that address with a personal message that looks somewhat like:
Dear<EMAIL_ADDRESS>Please confirm the mail address you gave us Wed May 6 09:38:41 MDT 1998 by replying to this message. Include the string "Rumpelstiltskin" in that reply, but spelled in reverse; that is, start with "Nik...". Once this is done, your confirmed address will be entered into our records.
If you get the message back and they've followed your directions, you can be reasonably assured that it's real.
A related strategy that's less open to forgery is to give them a PIN
(personal ID number). Record the address and PIN (best that it be a
random one) for later processing. In the mail you send, ask them to
include the PIN in their reply. But if it bounces, or the message is
included via a ``vacation'' script, it'll be there anyway. So it's
best to ask them to mail back a slight alteration of the PIN, such as
with the characters reversed, one added or subtracted to each digit, etc.
如何解码一个 MIME/BASE64 字符串?
MIME-tools套件（可自 CPAN取得）不但可处理这个问题而且有许多其他的功能。有了这个套件，解 BASE64码就变得像这麽容易：
use MIME::Base64; $decoded = decode_base64($encoded);
The MIME-Tools package (available from CPAN) supports extraction with decoding of BASE64 encoded attachments and content directly from email messages.
一个比较直接的解法是先做一点简单的转译，然後使用 unpack()这个函数的 ``u'' 格式：
tr#A-Za-z0-9+/##cd; # remove non-base64 chars tr#A-Za-z0-9+/# -_#; # convert to uuencoded format $len = pack("c", 32 + 0.75*length); # compute length byte print unpack("u", $len . $_); # uudecode and print
如何返回用户的邮件地址？
On systems that support getpwuid, the $< variable, and the Sys::Hostname module (which is part of the standard perl distribution), you can probably try using something like this:
use Sys::Hostname; $address = sprintf('%s@%s', scalar getpwuid($<), hostname);
Company policies on mail address can mean that this generates addresses that the company's mail system will not accept, so you should ask for users' mail addresses when this matters. Furthermore, not all systems on which Perl runs are so forthcoming with this information as is Unix.
The Mail::Util module from CPAN (part of the MailTools package) provides a
mailaddress() function that tries to guess the mail address of the user.
It makes a more intelligent guess than the code above, using information
given when the module was installed, but it could still be incorrect.
Again, the best way is often just to ask the user.
如何发邮件？
 EOF close(SENDMAIL) or warn "sendmail didn't close nicely";
The -oi option prevents sendmail from interpreting a line consisting of a single dot as ``end of message''. The -t option says to use the headers to decide who to send the message to, and -odq says to put the message into the queue. This last option means your message won't be immediately delivered, so leave it out if you want immediate delivery.
Alternate, less convenient approaches include calling mail (sometimes called mailx) directly or simply opening up port 25 have having an intimate conversation between just you and the remote SMTP daemon, probably sendmail.
Or you might be able use the CPAN module Mail::Mailer:
use Mail::Mailer;
$mailer = Mail::Mailer->new(); $mailer->open({ From => $from_address, To => $to_address, Subject => $subject, }) or die "Can't open: $!\n"; print $mailer $body; $mailer->close();
The Mail::Internet module uses Net::SMTP which is less Unix-centric than
Mail::Mailer, but less reliable. Avoid raw SMTP commands. There
are many reasons to use a mail transport agent like sendmail. These
include queuing, MX records, and security.
如何使用 MIME 来为邮件消息增加附件？
This answer is extracted directly from the MIME::Lite documentation. Create a multipart message (i.e., one with attachments).
use MIME::Lite;
### Create a new multipart message: $msg = MIME::Lite->new( From<EMAIL_ADDRESS>To<EMAIL_ADDRESS>Cc<EMAIL_ADDRESS><EMAIL_ADDRESS>Subject =>'A message with 2 parts...', Type =>'multipart/mixed' );
### Add parts (each "attach" has same arguments as "new"): $msg->attach(Type =>'TEXT', Data =>"Here's the GIF file you wanted" ); $msg->attach(Type =>'image/gif', Path =>'aaa000123.gif', Filename =>'logo.gif' );
$text = $msg->as_string;
MIME::Lite also includes a method for sending these things.
$msg->send;
This defaults to using sendmail but can be customized to use
SMTP via Net::SMTP.
如何读邮件？
While you could use the Mail::Folder module from CPAN (part of the MailFolder package) or the Mail::Internet module from CPAN (part of the MailTools package), often a module is overkill. Here's a mail sorter.
#!/usr/bin/perl
my(@msgs, @sub); my $msgno = -1; $/ = ''; # paragraph reads while (<>) { if (/^From /m) { /^Subject:\s*(?:Re:\s*)*(.*)/mi; $sub[++$msgno] = lc($1) || ''; } $msgs[$msgno] .= $_; } for my $i (sort { $sub[$a] cmp $sub[$b] || $a <=> $b } (0 .. $#msgs)) { print $msgs[$i]; }
Or more succinctly,
#!/usr/bin/perl -n00 # bysub2 - awkish sort-by-subject BEGIN { $msgno = -1 } $sub[++$msgno] = (/^Subject:\s*(?:Re:\s*)*(.*)/mi)[0] if /^From/m; $msg[$msgno] .= $_; END { print @msg[ sort { $sub[$a] cmp $sub[$b] || $a <=> $b } (0 .. $#msg) ] }
如何找到我的主机名/域名/IP 地址？
长久以来许多 code都很草率地直接呼叫 `hostname` 这个程式来取得主机名。虽然这麽做很方便，但也同时增加了移植到其他平台上的困难。这是一个很典型的例子，在方便和可移植性之间作抉择，不论选哪一边，必须付出一些牺牲和代价。
Sys::Hostname这个模组（标准 perl发行的一部分）可用来取得机器的名字，然後您便可利用 gethostbyname()这个系统呼叫来找出该机的 IP位址了（假定您的 DNS 运作正常）。
use Socket; use Sys::Hostname; my $host = hostname(); my $addr = inet_ntoa(scalar gethostbyname($host || 'localhost'));
至少在 Unix 底下，取得 DNS网域名最简单的方法大概要算是直接从 /etc/resolv.conf 这个档案里面找。当然，这麽做的前提是 resolv.conf 这个档案的设定必须照惯例的格式，还有就是这个档案必先存在才行。
(Perl在非 Unix系统下尚需要一有效的方法来测出机器和网域名)
如何获取一篇新闻文章或活动的新闻组？
使用 Net::NNTP或 News::NNTPClient模组，两者皆可自 CPAN下载。这些模组让抓群组名录这类的差事变得这麽容易：
perl -MNews::NNTPClient -e 'print News::NNTPClient->new->list("newsgroups")'
如何获取/上传一个 FTP 文件?
LWP::Simple模组（可自 CPAN下载）可以抓，但不能上传档案。 Net::FTP模组（也可自 CPAN下载）虽比较复杂，但可用来上传、也能抓档案。
如何进行远程过程调用 RPC ?
模块 DCE::RPC 正在开发中 (但是还不可用)，将成为 DCE-Perl 包 (可以从 CPAN 下载) 的一部分。rpcgen 套件，可以从 CPAN/authors/id/JAKE/ 找到，是一个 RPC 存根生成器，包含一个 RPC::ONC 模块。
AUTHOR AND COPYRIGHT
Copyright (c) 1997-2002 Tom Christiansen and Nathan Torkington. All rights reserved.This documentation is free; you can redistribute it and/or modify it under the same terms as Perl itself.
Irrespective of its distribution, all code examples in this file are hereby placed into the public domain. You are permitted and encouraged to use this code in your own programs for fun or for profit as you see fit. A simple comment in the code giving credit would be courteous but is not required.
译者
萧百龄，两只老虎工作室
Index
This document was created by man2html, using the manual pages.
Time: 13:12:52 GMT, December 24, 2015


CONNECT 4
Copyright (c) Hasbro, Inc.
Connect 4 is played on an empty 6x7 square board.
- DROP - Each player chooses a column, and then drops a stone on the lowest possible empty cell (the lowest row is the bottom row).
- GOAL - Wins the player that achieves a 4 in-a-row (orthogonal or diagonal)
An example Black wins in three moves, by playing at cell [1]. White must defend at b4, then Black moves c4, forcing White into e7, and then c5 and wins by creating a double attack.
There are several websites that play Connect 4 online. There is a perfect player (first player wins) called Velena by Giuliano Bertoletti (also with source code). Also check the page of Victor Allis about Connect 4 and Gomoku.Connectris is a variant where when the bottom row is filled, it disappears and all the other stones fall down. Two other variants are AntiStack (the first to make 4 in-a-row loses) and Line4Plus (upon each checker drop, all adjacent pieces are flipped. Red -> WhiteBlk -> Black -> WhiteRed -> Red. WhiteBlk and WhiteRed checkers are neutral).
In Beppi Menozzi's Centrifugal Connect4 (invented in 1994), played in a 8x8 board, the stones are dropped in an empty cell and then they fall down towards the closest edge, while stones put on the diagonal lines fall towards the closest corner.
In Forze 4x4, played on a 8x8 board (initially empty), each player drops a friendly soldier on an empty cell at any edge of the board, and the stone slides to the opposite side until it finds the edge of the board or an occupied cell. E.g., if White drops a stone at [1] it will slide to the right until it stops at [2]. If White drops at [3] the stone will slide down to [4]:
In Caramba each player has 16 stones plus 5 wild stones (that can be used by both players to make winning rows).
Quintego is a Connect-4 variant (with 5 columns): when a vertical column has six stones, the bottom stone is removed and returned to the player's reserve (and all the others on that column move down).


These examples are originally distributed at
Canvas text project page
under the MIT License.
Text position
Transformations
Animation
Performance


FlightSurety
Contract Balance:
Operational Status:
Owner:
Copy Address
Active User:
Withdraw Insurance
Push Funds
Airline Info
Flight:
Search Flight
Airline Address
Add Airline
Flight Name:
Add Flight
Insurance Amount (ether):
Flight:
Buy Insurance
Flight Number
Search Insurance
Logger:


Zapatec.ColorPicker
This page demonstrates how to use Zapatec.ColorPicker class.
Select color:
My favorite color is
color will be put here
.
Background of this DIV will be changed on color select
. This ColorPicker uses
singleClick
option.
This page uses an
AJAX Component
- Zapatec DHTML Extra Widget, but your browser does not support Javascript.


Since I got in to computer programing I kept hearing the term binary. Many of you might already know what binary is. Its the concept of values consisting of 0's and 1's. this might sound confusing but it is actually not. Below I will show some image examples that will help you understand how binary numbers are produced.
As we have been tought in elementary school, numbers in the decimal system are placed by tenths. Each number to the left is ten times bigger than the number to the right.
In the binary system, each number to the left is ten times bigger then the number to the right. See how the image below represents the binary positions.
In the binary system, the numbers are created by simply adding the position diggits of the 1's. The zeros represent 0.


My Current Tech Stack
Harnessing the Power of Cutting-Edge Technologies for Web Development
Please navigate to
the Projects page
to check my portfolio
TypeScript
React Native
React
MobX
Material UI
JavaScript
Nodejs
PostgreSQL
Sequelize
redis
Figma


{% extends 'base.html' %} {% load static i18n %} {% block content %} {% trans "Featured Posts" %} Love the Delicious & Tasty Foods A small river named Duden flows by their place and supplies it with the necessary regelialia Read More Featured Posts I am A Blogger & I Love Foods A small river named Duden flows by their place and supplies it with the necessary regelialia {% trans "Read More" %} {% trans "Recent Stories" %} Food Tasty & Delicious Foods Read More {% for story in recent_stories %} {{story.category.title}}{{story.created_at|date:"M d, Y"}} {{story.description}} Read More {% endfor %} My Posts {% for user_story in story_list %} {% if user_story.author == request.user %} {{user_story.category}}{{user_story.created_at|date:"M d, Y"}} {{user_story.title}} Read More {%endif%} {%endfor%} {% if request.user.is_authenticated and user == request.user %} About Me Hi! My name is {{user.username}} {{user.bio}} {%endif%} Holiday Seasons Recipes {%for recipe in holiday_recipes%} {{recipe.category.title}} {{recipe.short_description}} Read More {%endfor%} Categories {%for category in categories%} {{category.title}} {%endfor%} About Stories Far far away, behind the word mountains, far from the countries Vokalia and Consonantia 0 Years of Experienced 0 Foods 0 Lifestyle 0 Happy Customers {% endblock %}
A small river named Duden flows by their place and supplies it with the necessary regelialia
Read More
{% trans "Read More" %}
{{story.category.title}}{{story.created_at|date:"M d, Y"}}
{{user_story.category}}{{user_story.created_at|date:"M d, Y"}}
Hi! My name is {{user.username}}
{{user.bio}}
Far far away, behind the word mountains, far from the countries Vokalia and Consonantia


closed
by None at 2023-05-30 13:10:50.Intended for alma-config
closed
by Peter Green at 2023-05-30 15:46:04.Intended for alma-config
closed
by Peter Green at 2023-05-30 15:47:45.Intended for alma-config
closed
by Peter Green at 2023-05-30 15:49:06.Intended for alma-config
closed
by Peter Green at 2023-05-30 15:45:09.closed
by Peter Green at 2023-05-30 15:49:45.This is now working from aspace staging to sftp staging. Next steps:
Plugin on prod results in "page missing" where the ao export report page should be. That's unexpected. All the issues we had on staging before resulted in a report page that reported "sftp_fail", so this is different.
Blake is seeing a timeout error that suggests it did run but couldn't upload to the server. I'll check tomorrow to see whether the behavior has changed with the new firewall rule in place.
unassigned
by None at 2023-05-30 15:13:32.referenced
by Kevin Reiss at 2023-05-30 17:40:53.merged
by Kevin Reiss at 2023-05-30 17:40:53.closed
by Kevin Reiss at 2023-05-30 17:40:53.head_ref_deleted
by Kevin Reiss at 2023-05-30 17:40:54.This code change has been deployed to both staging and qa but I am re-opening this issue as running as this step did not work on staging https://github.com/pulibrary/bibdata/blob/main/docs/location_changes.md#2-update-bibdata-staging. It did work on qa https://github.com/pulibrary/bibdata/blob/main/docs/location_changes.md#3-update-bibdata-qa.
Staging failed to deploy via tower here: https://ansible-tower.princeton.edu/#/jobs/playbook/1279/output.
closed
by Kevin Reiss at 2023-05-30 17:40:55.reopened
by Kevin Reiss at 2023-05-30 17:52:20.assigned
by Kevin Reiss at 2023-05-30 17:59:00.renamed
by Kevin Reiss at 2023-05-30 02:39:06.referenced
by Max Kadel at 2023-05-30 17:54:58.merged
by Max Kadel at 2023-05-30 17:54:58.closed
by Max Kadel at 2023-05-30 17:54:58.head_ref_deleted
by Max Kadel at 2023-05-30 17:54:59.review_requested
by Jane Sandberg at 2023-05-30 19:47:03.assigned
by Liz Garcia at 2023-05-30 19:33:58.referenced
by Shaun Ellis at 2023-05-30 14:37:36.merged
by Shaun Ellis at 2023-05-30 14:37:36.closed
by Shaun Ellis at 2023-05-30 14:37:36.head_ref_deleted
by Shaun Ellis at 2023-05-30 14:37:37.It would be great to have a description saying why we need to do this.
referenced
by None at 2023-05-30 20:40:45.merged
by None at 2023-05-30 20:40:45.closed
by None at 2023-05-30 20:40:45.head_ref_deleted
by None at 2023-05-30 20:40:46.closed
by None at 2023-05-30 20:40:46.@kevinreiss will check on status
Pinged @mzelesky on this 5/30.
mentioned
by Kevin Reiss at 2023-05-30 15:23:17.subscribed
by Kevin Reiss at 2023-05-30 15:23:17.mentioned
by None at 2023-05-30 18:28:52.subscribed
by None at 2023-05-30 18:28:52.referenced
by Jane Sandberg at 2023-05-30 19:40:34.merged
by Jane Sandberg at 2023-05-30 19:40:34.closed
by Jane Sandberg at 2023-05-30 19:40:34.head_ref_deleted
by Jane Sandberg at 2023-05-30 19:40:47.SC decisions here: https://docs.google.com/spreadsheets/d/1UsMmbMxyJVr03I6NHJ1449_35_OkJW3SNhdaq0nzCaI/edit#gid=1351235624
unassigned
by None at 2023-05-30 18:25:17.Discussed in Cross-Team IT meeting, see agenda for 5/26/2023 for notes.
closed
by Max Kadel at 2023-05-30 13:08:32.assigned
by Max Kadel at 2023-05-30 13:22:20.Should we expand rate limiting beyond sitemaps? Could cause issues for Figgy and DiscoveryUtils - can add an allowlist to add exceptions for these applications.
@kevinreiss will ask Joe (e-resources manager) about whether this is still desired.
Wrote Joe 5/30
mentioned
by Kevin Reiss at 2023-05-30 15:10:57.subscribed
by Kevin Reiss at 2023-05-30 15:10:57.du -h /solr/data/ | grep catalog # our collection takes up 79 gigs of disk
All solr collections together are 175 GB.
free -h # the boxes only have 38 gigs of RAM
So, if solr only put the catalog in memory and left all other indexes on disk, it could still only fit half of the catalog into memory. It is likely putting parts of the other cores into memory too, so probably only a small portion of the catalog collection is in memory
This information can be found in our Solr Health Dashboard
In general, the catalog collections have a high (good) filter cache hit ratio and query result cache hit ratio. The document cache hit ratio is much lower (about 12%). The document cache evictions seems very high to me (97,234,000 in one week). According to the solr documentation, "The size for the documentCache should always be greater than maxresults times the maxconcurrent_queries, to ensure that Solr does not need to refetch a document during a request." We have the size set to 4096, but according to my understanding, this should actually be:
100 (maximum results/page available in the UI) x 300 (maximum concurrent requests available in passenger across the 3 app servers) + 1 (because it is supposed to be greater) = 30_001
This disregards the fact that users can enter a custom per_page in the search results URL, and also that sitemaps request more than 100 rows at a time.
I looked at the Datadog metrics explorer, and it seems very reasonable on production. It seems over-resourced on staging.
Plenty of space
pulsys@lib-solr-prod4:~$ lsblk -o name,rota
NAME ROTA
sda 1
└─sda1 1
├─lib--vg-root 1
└─lib--vg-swap_1 1
sdb 1
└─sdb1 1
└─lib--vg-root 1
sdc 1
└─sdc1 1
└─lib--vg-root 1
sr0 1
A rota of 1 indicates that it is a rotational device, and hence, not an SSD.
assigned
by Jane Sandberg at 2023-05-30 14:40:19.Coverage: 95.384%. Remained the same when pulling a82265f8b36a79305f4049fa1a319dd9cb866bbc on 3572-rate-limit-sitemap into 22c41d07eb90c69d3c7f2b41c3bab90605de283a on main.
ready_for_review
by None at 2023-05-30 19:08:25.deployed
by None at 2023-05-30 19:23:03.@kevinreiss and I looked at this today. We found:
too_many_items?
method returns truetoo_many_items?
behavior is set up to show the fill_in form for non-SC items, but it throws an error for aeon items.too_many_items?
for special collection materialsThis issue affects 30 records in the catalog.
labeled
by Kevin Reiss at 2023-05-30 16:09:37.renamed
by Kevin Reiss at 2023-05-30 18:19:04.mentioned
by Kevin Reiss at 2023-05-30 21:08:33.subscribed
by Kevin Reiss at 2023-05-30 21:08:33.labeled
by Kevin Reiss at 2023-05-30 15:00:38.assigned
by Jane Sandberg at 2023-05-30 21:15:00.referenced
by Bess Sadler at 2023-05-30 13:21:17.merged
by Bess Sadler at 2023-05-30 13:21:17.closed
by Bess Sadler at 2023-05-30 13:21:17.head_ref_deleted
by Bess Sadler at 2023-05-30 13:21:18.unassigned
by James R. Griffin III at 2023-05-30 14:01:29.@hectorcorrea thank you! I was having a trable
problem... That has been updated.
head_ref_force_pushed
by None at 2023-05-30 18:11:18.mentioned
by Hector Correa at 2023-05-30 18:11:49.subscribed
by Hector Correa at 2023-05-30 18:11:49.referenced
by Hector Correa at 2023-05-30 18:18:24.merged
by Hector Correa at 2023-05-30 18:18:24.closed
by Hector Correa at 2023-05-30 18:18:25.head_ref_deleted
by Hector Correa at 2023-05-30 18:18:26.review_requested
by Kate Lynch at 2023-05-30 15:53:17.referenced
by Hector Correa at 2023-05-30 18:38:01.merged
by Hector Correa at 2023-05-30 18:38:01.closed
by Hector Correa at 2023-05-30 18:38:01.head_ref_deleted
by Hector Correa at 2023-05-30 18:38:02.closed
by Hector Correa at 2023-05-30 18:38:03.closed
by None at 2023-05-30 17:51:37.ready_for_review
by Hector Correa at 2023-05-30 15:25:25.referenced
by None at 2023-05-30 17:51:36.merged
by None at 2023-05-30 17:51:36.closed
by None at 2023-05-30 17:51:36.head_ref_deleted
by None at 2023-05-30 17:51:37.referenced
by James R. Griffin III at 2023-05-30 18:52:00.merged
by James R. Griffin III at 2023-05-30 18:52:00.closed
by James R. Griffin III at 2023-05-30 18:52:00.head_ref_deleted
by James R. Griffin III at 2023-05-30 18:52:01.Changed tactic and went with https://github.com/pulibrary/pdc_discovery/pull/441
closed
by Hector Correa at 2023-05-30 20:13:09.referenced
by James R. Griffin III at 2023-05-30 13:35:04.merged
by James R. Griffin III at 2023-05-30 13:35:04.closed
by James R. Griffin III at 2023-05-30 13:35:04.head_ref_deleted
by James R. Griffin III at 2023-05-30 13:35:05.referenced
by Francis Kayiwa at 2023-05-30 13:41:28.merged
by Francis Kayiwa at 2023-05-30 13:41:28.closed
by Francis Kayiwa at 2023-05-30 13:41:28.head_ref_deleted
by Francis Kayiwa at 2023-05-30 13:41:29.closed
by Francis Kayiwa at 2023-05-30 13:41:30.closed
by Bess Sadler at 2023-05-30 13:28:16.head_ref_deleted
by Bess Sadler at 2023-05-30 13:28:47.head_ref_restored
by Bess Sadler at 2023-05-30 13:34:25.reopened
by Bess Sadler at 2023-05-30 13:34:29.review_requested
by Jane Sandberg at 2023-05-30 13:38:30.referenced
by Jane Sandberg at 2023-05-30 14:06:55.merged
by Jane Sandberg at 2023-05-30 14:06:55.closed
by Jane Sandberg at 2023-05-30 14:06:55.head_ref_deleted
by Jane Sandberg at 2023-05-30 14:06:56.@kelea99 any more thoughts on moving the approach you demonstrated a few weeks ago?
mentioned
by Kim Leaman at 2023-05-30 18:24:39.subscribed
by Kim Leaman at 2023-05-30 18:24:39.head_ref_force_pushed
by None at 2023-05-30 20:14:20.renamed
by None at 2023-05-30 20:14:40.referenced
by Hector Correa at 2023-05-30 18:52:10.merged
by Hector Correa at 2023-05-30 18:52:10.closed
by Hector Correa at 2023-05-30 18:52:10.head_ref_deleted
by Hector Correa at 2023-05-30 18:52:11.referenced
by Francis Kayiwa at 2023-05-31 01:38:44.merged
by Francis Kayiwa at 2023-05-31 01:38:44.closed
by Francis Kayiwa at 2023-05-31 01:38:44.head_ref_deleted
by Francis Kayiwa at 2023-05-31 01:38:45.Ask for permission to move to prod 5/30.
Asked Mark on 5/30 on the feasibility of a bulk update for these records.
It might be better to use an 830 field with a $5 NjP.
As for a note that they can be digitized on request, it could be put in a 500 field.
Is there a document that lists all the Valva entries?
These errors correspond to the date stamp on the server's credentials file. Maybe an old file was put back in place?
The timing is correlated to running playbooks to reduce datadog noise on all applications. (https://github.com/pulibrary/princeton_ansible/pull/3923)
labeled
by Eliot Jordan at 2023-05-30 18:39:02.labeled
by Eliot Jordan at 2023-05-30 18:39:02.renamed
by None at 2023-05-30 18:39:20.assigned
by None at 2023-05-30 19:08:01.labeled
by None at 2023-05-30 19:08:08.labeled
by None at 2023-05-30 19:08:13.referenced
by None at 2023-05-30 19:18:22.referenced
by None at 2023-05-30 20:14:19.closed
by Kate Lynch at 2023-05-30 13:09:46.This ticket has been consumed by work in the DSpace Sunsetting group, closing.
closed
by Kate Lynch at 2023-05-30 15:13:22.assigned
by Kate Lynch at 2023-05-30 13:20:17.


|
|
|
|
|
|
RESULTS --
WEDNESDAY CROSS SERIES NO. 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Sponsor |
Year |
Permit |
Date |
Event |
Class |
Place |
|
License |
Last |
First |
Team |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MEN'S A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
A |
1 |
|
B0150610 |
VAN GARDEREN |
Tejay |
Rio Grande |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
A |
2 |
|
B0068412 |
ROBERTSON |
Tom |
Northern Rockies |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
A |
3 |
|
80669 |
BELTZ |
Mike |
Northern Rockies |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
A |
4 |
|
B0038071 |
WHITMORE |
Josh |
Team Stampede/Five Valley Velo |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
A |
5 |
|
B0202497 |
PRESTA |
Bob |
Team Stampede/Five Valley Velo |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
A |
6 |
|
B0037860 |
WEYHRICH |
John |
Team Stampede/Five Valley Velo |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
A |
7 |
|
One Day |
McMILLAN |
Shane |
Unattached |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
A |
DNF |
|
B0102725 |
HARTMAN |
Dave |
Northern Rockies |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MEN'S B |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
B |
1 |
|
One Day |
HOFFMAN |
Ben |
Team Stampede/Five Valley Velo |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
B |
2 |
|
B0191666 |
CINCOSKI |
Jeff |
Team Stampede/Five Valley Velo |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
B |
3 |
|
New Annual |
ANDERSON |
Scott |
Northern Rockies |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
B |
4 |
|
B0004226 |
BOOKWALTER |
Jeff |
Team Stampede/Five Valley Velo |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
B |
5 |
|
One Day |
BEALS |
Steve |
Northern Rockies |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
B |
6 |
|
B0063090 |
VISSCHER |
Ernst |
Gallatin Valley Bicycle Club |
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
B |
DNF |
|
B0198924 |
BURKE |
Mark |
Team Stampede/Five Valley Velo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WOMEN |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| USCF |
2004 |
2004- |
9/22/2004 |
Cross Race |
|
|
|
B0199486 |
KYLE |
Amber |
Northern Rockies |
|
|
|
|
|
|
|
|
|
|
|
|


| Figure 1 |
Rothschildia erycina (male), a species present on Barro Colo ... |
| Figure 2 |
The best‐scoring maximum likelihood tree depicting the phylo ... |
| Figure 3 |
Plot of the scores for Forest GEO sampling years on axes 1 a ... |
| Figure 4 |
Cluster of functional groups of the BCI Saturniidae communit ... |
| Figure 5 |
Population changes on BCI during 2009‐2016 for top row: all ... |