| Package | Description |
|---|---|
| org.apache.commons.configuration |
The Configuration main package.
|
| org.apache.commons.configuration.beanutils |
In this package a
Configuration implementation can be found that
implements the DynaBean interface. |
| org.apache.commons.configuration.interpol |
A package with helper classes used for interpolation (variable substitution).
|
| org.apache.commons.configuration.plist |
Configuration classes supporting NeXT / OpenStep /GNUStep style configuration.
|
| org.apache.commons.configuration.reloading |
The
reloading package contains the definition of the
ReloadingStrategy interface, which provides automatic reloading
facilities for file based configurations. |
| org.apache.commons.configuration.resolver |
A package containing EntityResolvers.
|
| org.apache.commons.configuration.web |
This package contains some implementations of the
Configuration
interface that are useful in web environments. |
| Class and Description |
|---|
| AbstractConfiguration
Abstract configuration class.
|
| AbstractFileConfiguration
Partial implementation of the
FileConfiguration interface. |
| AbstractHierarchicalFileConfiguration
Base class for implementing file based hierarchical configurations.
|
| AbstractHierarchicalFileConfiguration.FileConfigurationDelegate
A special implementation of the
FileConfiguration interface that is
used internally to implement the FileConfiguration methods
for hierarchical configurations. |
| BaseConfiguration
Basic configuration class.
|
| CombinedConfiguration
A hierarchical composite configuration class.
|
CompositeConfiguration
CompositeConfiguration allows you to add multiple Configuration
objects to an aggregated configuration. |
| Configuration
The main Configuration interface.
|
| ConfigurationBuilder
Definition of an interface for objects that can create a configuration.
|
| ConfigurationComparator
Comparator for configurations interface.
|
| ConfigurationException
Any exception that occurs while initializing a Configuration
object.
|
| ConfigurationFactory.AdditionalConfigurationData
Deprecated.
A simple data class that holds all information about a configuration
from the
<additional> section. |
| ConfigurationFactory.DigesterConfigurationFactory
Deprecated.
A base class for digester factory classes.
|
| ConfigurationFactory.FileConfigurationFactory
Deprecated.
A tiny inner class that allows the Configuration Factory to
let the digester construct FileConfiguration objects
that already have the correct base Path set.
|
| ConfigurationKey
Deprecated.
Use
DefaultConfigurationKey
instead. It is associated with a DefaultExpressionEngine and thus
can produce correct keys even if key separators have been changed. |
| ConfigurationKey.KeyIterator
Deprecated.
A specialized iterator class for tokenizing a configuration key.
|
| ConfigurationRuntimeException
A configuration related runtime exception.
|
| ConfigurationXMLReader
A base class for "faked"
XMLReader classes
that transform a configuration object in a set of SAX parsing events. |
| ConversionException
Exception thrown when a property is incompatible with the type requested.
|
| DefaultConfigurationBuilder
A factory class that creates a composite configuration from an XML based
configuration definition file.
|
| DefaultConfigurationBuilder.ConfigurationDeclaration
A specialized
BeanDeclaration implementation that
represents the declaration of a configuration source. |
| DefaultConfigurationBuilder.ConfigurationProvider
A base class for creating and initializing configuration sources.
|
| DefaultConfigurationBuilder.FileConfigurationProvider
A specialized provider implementation that deals with file based
configurations.
|
| DefaultFileSystem
FileSystem that uses java.io.File or HttpClient
|
| FileConfiguration
A persistent configuration loaded and saved to a file.
|
| FileOptionsProvider
Some FileSystems allow options to be passed on File operations.
|
| FileSystem
Abstract layer to allow various types of file systems.
|
| FileSystemBased
Interface used to install or locate the FileSystem
|
| HierarchicalConfiguration
A specialized configuration class that extends its base class by the
ability of keeping more structure in the stored properties.
|
| HierarchicalConfiguration.Node
A data class for storing (hierarchical) property information.
|
| HierarchicalConfiguration.NodeVisitor
Definition of a visitor class for traversing a node and all of its
children.
|
| HierarchicalReloadableConfiguration
A base class for hierarchical configurations with specific reloading
requirements.
|
| Lock
A simple class acting as lock.
|
| MapConfiguration
A Map based Configuration.
|
| PropertiesConfiguration
This is the "classic" Properties loader which loads the values from
a single or multiple files (which can be chained with "include =".
|
| PropertiesConfiguration.IOFactory
Definition of an interface that allows customization of read and write
operations.
|
| PropertiesConfiguration.PropertiesReader
This class is used to read properties lines.
|
| PropertiesConfiguration.PropertiesWriter
This class is used to write properties lines.
|
| PropertiesConfigurationLayout
A helper class used by
PropertiesConfiguration to keep
the layout of a properties file. |
| SubnodeConfiguration
A specialized hierarchical configuration class that wraps a single node of
its parent configuration.
|
| XMLConfiguration
A specialized hierarchical configuration class that is able to parse XML
documents.
|
| Class and Description |
|---|
| Configuration
The main Configuration interface.
|
| ConfigurationMap
The
ConfigurationMap wraps a
configuration-collection
Configuration
instance to provide a Map interface. |
| ConfigurationRuntimeException
A configuration related runtime exception.
|
| HierarchicalConfiguration
A specialized configuration class that extends its base class by the
ability of keeping more structure in the stored properties.
|
| SubnodeConfiguration
A specialized hierarchical configuration class that wraps a single node of
its parent configuration.
|
| Class and Description |
|---|
| AbstractConfiguration
Abstract configuration class.
|
| ConfigurationRuntimeException
A configuration related runtime exception.
|
| Class and Description |
|---|
| AbstractConfiguration
Abstract configuration class.
|
| AbstractHierarchicalFileConfiguration
Base class for implementing file based hierarchical configurations.
|
| Configuration
The main Configuration interface.
|
| ConfigurationException
Any exception that occurs while initializing a Configuration
object.
|
| FileConfiguration
A persistent configuration loaded and saved to a file.
|
| FileSystemBased
Interface used to install or locate the FileSystem
|
| HierarchicalConfiguration
A specialized configuration class that extends its base class by the
ability of keeping more structure in the stored properties.
|
| HierarchicalConfiguration.Node
A data class for storing (hierarchical) property information.
|
| Class and Description |
|---|
| FileConfiguration
A persistent configuration loaded and saved to a file.
|
| Class and Description |
|---|
| FileSystem
Abstract layer to allow various types of file systems.
|
| Class and Description |
|---|
| AbstractConfiguration
Abstract configuration class.
|
| Configuration
The main Configuration interface.
|
Copyright © 2001–2013 The Apache Software Foundation. All rights reserved.


????? ?????? ? ?????
on 2012-04-11 15:44:49
I wonder how you got so good. HaHa ! This is really a fascinating blog, lots of stuff that I can get into. One thing I just want to say is that your design is so perfect ! You certainly know how to get a girls attention ! I’m glad that you’re here. I feel like I’ve learned something new by being here
Brett Zamir
on 2009-01-18 03:44:43
As for the output buffering issue ideally having a global too, would the following be part of your compiler or dependency idea?
Just specify code like this with each relevant function:
if (!window.php_js) {
window.php_js = {};
}
if (!window.php_js.output_buffer) {
window.php_js.output_buffer = document.createDocumentFragment();
}
or
if (!window.php_js) {
window.php_js = {};
}
if (!window.php_js.sort_helper1) {
window.php_js.sort_helper1 = function () {
...
}
}
The above could be inside or outside the functions. Outside would be easier to ignore and avoid repeated execution, but inside might be more user friendly and would only increase space if the user didn't realize they could omit it in repeat cases, but should barely affect execution time, since the functions would only be declared once.
I think we do need something like this (whatever option you like) because it would just get out of hand for memory and execution to include these fully and without conditionality within each function.
Kevin van Zonneveld
on 2009-01-17 15:03:07
Considering the last story about duplication... I'm struggling with the same problem trying to include the BCMath functions
http://svn.plutonia.nl/projects/phpjs/browser/trunk/_unported/bc
Which were donated in my mail by a guy named Lance. They all require a shared bc library with 10 functions or something.
There is no global required include in PHP.JS that would be the obvious place for these shared functions. And I'm still convinced that this library should go without such a requirement.
Still this will mean, either:
OR
- awfully big standalone functions, extreme duplication
- a compiler that defeats duplication. from a developer's perspective, at least.
- a core include with shared functions that is required as a dependency
- make use of the existing dependency system. that would mean adding non-existent-php functions as if they were real php functions and adding them as dependencies. We could store them in a category: phpjssupport. But that would require creating exceptions throughout the project, e.g.: 'SKIP phpjssupport dir when downloading manuals!'
- no bcmath functions at all
It's an imperfect world.
Kevin van Zonneveld
on 2009-01-17 14:00:30
@ Brett Zamir: Again: great work.
It's a shame we don't have a php.core.js in which we could just have an array_sorter() with some arguments to diversify in ksort krsort asort arsort, etc.
Same goes for all the intersect & diff functions that only differ a couple of characters. More (maintenance) work for us due to duplication.
But on the other hand: I think it's worth it because we can uphold the philosophy of a lot of independent components that can just be used as is. I bet the majority of PHP.JS users just copy the functions they need and be on their way.
We could work on a compiler-like feature that just generates all the different sorters based on one template we maintain. But concidering we're only talking about 20 functions or so: that's maybe more work than just distributing changes by hand (copy&paste). Thanks Brett. You're a real PHP.JS pitbull :)
Brett Zamir
on 2009-01-17 06:40:16
And here are krsort() and ksort() with the new more readily extensible infrastructure (and speeded krsort()):
function krsort(array, sort_flags) {
// http://kevin.vanzonneveld.net
// + original by: GeekFG (http://geekfg.blogspot.com)
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + improved by: Brett Zamir
// % note: The examples are correct, this is a new way
// * example 1: data = {2: 'van', 3: 'Zonneveld', 1: 'Kevin'};
// * example 1: krsort(data);
// * results 1: data == {3: 'Kevin', 2: 'van', 1: 'Zonneveld'}
// * returns 1: true
var tmp_arr={}, keys=[], sorter, i, key;
switch (sort_flags) {
case 'SORT_STRING': // compare items as strings
case 'SORT_LOCALE_STRING': // compare items as strings, based on the current locale (set with i18n_loc_set_default() as of PHP6)
throw 'Not implemented yet';
case 'SORT_NUMERIC': // compare items numerically
sorter = function (a, b) {
return(b - a);
};
break;
case 'SORT_REGULAR': // compare items normally (don't change types)
default:
sorter = function (a, b) {
if (a < b)
return 1;
if (a > b)
return -1;
return 0;
};
break;
}
// Make a list of key names
for (key in array) {
keys.push(key);
}
keys.sort(sorter);
// Rebuild array with sorted key names
for (i = 0; i < keys.length; i++) {
key = keys[i];
tmp_arr[key] = array[key];
delete array[key];
}
for (i in tmp_arr) {
array[i] = tmp_arr[i]
}
return true;
}
function ksort(array, sort_flags) {
// http://kevin.vanzonneveld.net
// + original by: GeekFG (http://geekfg.blogspot.com)
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + improved by: Brett Zamir
// % note: The examples are correct, this is a new way
// * example 1: data = {2: 'van', 3: 'Zonneveld', 1: 'Kevin'};
// * example 1: ksort(data);
// * results 1: data == {1: 'Kevin', 2: 'van', 3: 'Zonneveld'}
// * returns 1: true
var tmp_arr={}, keys=[], sorter, i, key;
switch (sort_flags) {
case 'SORT_STRING': // compare items as strings
case 'SORT_LOCALE_STRING': // compare items as strings, based on the current locale (set with i18n_loc_set_default() as of PHP6)
throw 'Not implemented yet';
case 'SORT_NUMERIC': // compare items numerically
sorter = function (a, b) {
return(a - b);
};
break;
case 'SORT_REGULAR': // compare items normally (don't change types)
default:
sorter = function (a, b) {
if (a > b)
return 1;
if (a < b)
return -1;
return 0;
};
break;
}
// Make a list of key names
for (key in array) {
keys.push(key);
}
keys.sort(sorter);
// Rebuild array with sorted key names
for (i = 0; i < keys.length; i++) {
key = keys[i];
tmp_arr[key] = array[key];
delete array[key];
}
for (i in tmp_arr) {
array[i] = tmp_arr[i]
}
return true;
}
Kevin van Zonneveld
on 2008-12-01 08:35:21
@ Chris Wade: Did you also test it with associative arrays (js objects)?
Chris Wade
on 2008-11-25 22:24:14
I found that init'ing tmp_arr to {} was problematic and changed it to var tmp_arr = [].
Specifically I was unable to get the length of the object... this change doesn't seem to have harmed the function at all.
Also it may stray from the PHP manual a bit but I found it more useful to return the array than to return true, because the original array wasn't being overwritten in my case. I'm using server-side JScript with Classic ASP.


Animations
CSS animations for icons. Easy to use, regular or on hover, and lightweight <4kb minified and <1kb gzipped.
Animations work with any prefix fad
, fal
, far
and fas
. Not tested on other icon librairies but it should work with little or no customization.
has 2 default animations (not included here):
fa-spin
fa-pulse
Regular .faa
How to use?
Add
faa
and faa-animation-name
classess to the icon.

Animations:
faa-bounce
faa-burst
faa-falling
faa-flash
faa-flip-x
faa-flip-y
faa-float
faa-pulse
faa-ring
faa-rubber-band
faa-slide-left
faa-slide-right
faa-shake-x
faa-shake-y
faa-swing
faa-tada
On parent hover .faa-parent
How to use?
Add
faa-animation-name
class to the icon and faa-parent
class to any ancestor. Hover over to start animation.

Animations:
faa-bounce
faa-burst
faa-falling
faa-flash
faa-flip-x
faa-flip-y
faa-float
faa-pulse
faa-ring
faa-rubber-band
faa-slide-left
faa-slide-right
faa-shake-x
faa-shake-y
faa-swing
faa-tada


Welcome To Feedr
Add a Course
View Courses
Logout
menu
Admin Page
CS207:Descrete Structures
Teacher: Prof. Akshay SS
Students Enrolled: 120
Time Slot: 3
Class Venue: LC-101


Gagandeep Singh
Staff Software Engineer
location_on
New Delhi, India
work
LocoNav, Gurgaon, India
assignment_ind
Staff Engineer
email
<EMAIL_ADDRESS>-
work
Staff Engineer
BT TechLabs Pvt Ltd Gurgaon, IndiaLoconav.com 1st Dec 2020 - Present- Involved in discussing overall global architecture of logistics based Saas Product.
- Helped team to build micro-services by contributing to style guide and creating many gems.
- Took the first microservice out of a 6+ year old monolith, reducing a decent load from database.
- Built interfaces and assisted other teams to entangle the remaining monolith app.
- Handed over fastag product to junior team members and removed my dependency.
- Worked on reducing cloud spend by analyzing usage of servers and using other methods.
- Defined git branching and release strategy for a monolith that is worked upon by 40+ devs. Later implemented end to end release automation
- Collaborated with other teams as needed, and helped them adopting tooling built by us.
- Optimized API consumption from frontend, added caching on some client-facing APIs bringing visible impact to database and dependent services.
- Lead various other initiatives like removing huge chunks of dead code, managing minor/major database upgrades, docker builds speedup, test suite speedup, handling hot-fix and outage situations and managing overall website uptime.
- Building role and permissions-based permission user architecture.
- Scaling fastag backend to 2Cr worth daily txn.
- Scaling the team: involved in hiring for Engineers/Sr. Engineers/EMs and Devops.
- Enabling new experienced engineers to onboard on products.
- Working on engineering excellence side - improving development process, breaking monolith into services, improving test coverage, etc.
-
work
Tech Lead
BT TechLabs Pvt Ltd Gurgaon, IndiaLoconav.com 5th Feb 2019 - 30 Nov 2020- Working to move from a stringent, multiple-entity based, convoluted user architecture to a simple, role-based architecture.
- Simplified how the main entity of system (vehicle) is accessed by various components.
- Integrated Yesbank fastags and scaled to a daily transaction of 62L in about a year.
- Integrated Mobikwik Payment Gateway and scaled to a monthly transaction of 55L in the first month.
- Worked on moving current email provider to SES without impacting existing mailers. Also implemented a generic Email/SMS blocking functionality over entire app layer.
- Single handedly implemented multi-lingual, extensible push notifications backend architecture for mobile applications.
- Decoupled a webhook based service from a monolith website to ensure no loss of data during downtimes/migrations.
- Handling communications with different internal and external product teams independently.
- Constantly working to deprecate and remove old (dead) code without affecting running functionalities.
-
work
Senior Software Developer
BT TechLabs Pvt Ltd Gurgaon, IndiaLoconav.com 5th Feb 2018 - 4th Feb 2019- Wrote entire scalable backend for Android app (Rails, Grape). This app served > 80% of entire traffic.
- Worked as a devops too - Helped in scale infra as our userbase grew. Launching ALBs, choosing correct AWS instace type based on services, adding private hosted zones, using AWS lambda functions for automation, setting up jenkins, wrote bash scripts for setting up servers when autoscaled, setting up VPCs, VPC peering, public/private subnets, etc.
- Helped team to scale things - launching ALBs, choosing correct AWS instace type based on services launched.
- Did setup for app analytics using Ahoy. Moved this to separately hosted database when main DB became large in size.
- Did various integrations - Equitas, YesBank Fastags.
- Worked with team in building and releasing new user interface. Apart from skin, the backend for the same was also optimized.
- Resolved endless minor / major bugs in the application.
-
work
Senior Software Developer
JTG E-Business Software Pvt. Ltd. Gurgaon, IndiaUptime Cloud Monitor Oct 2016 to 2nd Feb 2018- Added AWS lambda integrations (Node JS) to make AWS infrastructure more robust.
- Optimized existing infrastructure which led to huge cost savings.
- Added new features and fixed bugs in native android application of the product.
- Handled backlog cleanup, poker planning call, diving work among team members, etc.
- Managing a team of 4 and supervising work of 2 team members.
- Integrated Microsoft Azure cloud monitoring with the product and moved entire infrastructure to VPC.
- Working on renewal of AWS EC2 reseravations, further optimizations in infra, supervising work of shadow devs.
- Helped moving from Sendgrid to Amazon SES for sending mails and ensured minimum bounce percentage.
Gethealthy Nov 2017 - Dec 2017- The product was based on Magento 2 framework (PHP) and requirement was to integrate Hubspot with the product to push doctor and patient information to hubspot. Apart from basic information, an Email template was also pushed which was used by marketing team to send promotional mails to end users. I investigated magento event observers and wrote the entire integration in PHP.
Mentorcloud Dec 2017 to 2nd Feb 2018- Did Jenkins setup (AWS EC2), added required plugins, configured SES, added Node integrations, created jobs for deploying Angular code to S3 and Django code to respective environments (Dev, Stage and Prod).
- Spinned up dev environment (using staging environment), did VPC peering for the same , created security groups, required subnets, etc.
-
work
Software Developer
JTG E-Business Software Pvt. Ltd. Gurgaon, IndiaUptime Cloud MonitorJun 2015 to Oct 2016- Worked primarily with Ruby on Rails and a good mix of other technologies as well.
- Improved product – fixed various complex bugs and refactored existing code.
- Documentated various crucial subsystems and did critical switchovers in production.
- Debugged server issues and derived useful stats from system / access logs.
- Protected redis from getting hacked on linode servers.
- Integrated new monitoring features within the existing application.
- Handled sprints, deployments, client communication and daily standups.
-
school
Graduated from GGSIPU, Delhi
B.Tech Computer Science and EngineeringGTBITStudent August 2011 - June 2015- Primarily worked in Technical Society of GTBIT (TSG) and handled over 35 technical events during college fest (GATES).


Your Dull Life
Your name is . You are walking down your , sighing about how your life has gone so wrong. into a dance. Everyone laughs at your funky-.
Your name is . You are walking down your , sighing about how your life has gone so wrong. into a dance. Everyone laughs at your funky-.


Pro ranks next for Dawson after second silver
by Adrian SeconiHannah Dawson has two silver medals but is unlikely to chase gold.
The 25-year-old Otago martial artist hopes to turn professional after a sparkling amateur career which includes winning two silver medals at the Mixed Martial Arts World Championships.
She collected the first of her silver medals while competing in the strawweight division in Bahrain two years ago.
The diminutive fighter missed last year's tournament but returned to Bahrain this month and won silver in the flyweight division.
Asked if she was keen to return for a third attempt at gold, Dawson said that was unlikely.
''I've had 11 MMA fights now, so I'm kind of thinking I'll go pro in the near future,'' she said.
''Eleven fights is quite a few so I feel like I've had plenty of experience already. And I've been to the world champs twice now and got through to the finals, so I'm not sure there is really any point going a third time.''
Sweden's Bianca Antman claimed gold. She won by submission in round two. Dawson got trapped in a guillotine choke-hold.
Those two losses in finals at the world championships are the only defeats she has suffered.
Her coach, Matt Toa, feels Dawson is ready to step up and fight in the professional ranks.
''She has all the skills to go pro and have a crack,'' he said.
''I guess we will be plotting a path which will lead Hannah to establish herself as the top pro in New Zealand and then Australia.
''Once we've secured Oceania we can have a run at the bigger competition.''
Dawson works as a personal trainer in Mosgiel and is studying health science at the University of Otago.
She started boxing when she was younger and was encouraged to give MMA a crack by her friend and co-coach, Brogan ''the arm collector'', Anderson. You could say he twisted her arm but that would be a terrible pun and also just not true.
For someone who comfortably dips under 60kg, it was an unusual choice for Dawson.
MMA has a brutal reputation but Dawson said the sport took safety very seriously.
She had daily physical check-ups while competing at the world championships.
Cromwell's Mel Webster returned from the world championships in Bahrain with a silver medal as well.
She lost to fellow Kiwi Michelle Montague.


[gecode-users] Help -- about Gecode::Space::operator new
Kayler Yao
risoay at gmail.com
Wed Aug 26 16:04:13 CEST 2009
hi,
I had a trouble in my project when i wrote a class inheriting from
Class Space and run it with DFS. The error is
"error C2660: 'Gecode::Space::operator new' : function does not take 3
arguments"-------------------------happened in
"
GenSolModel * m = new GenSolModel
(temp);------------------------------------error line
DFS<GenSolModel > e(m);
delete m;
while (GenSolModel * s = e.next())
{
s->print();
delete s;
}
"
I have spent much time to find the reason but with no results. I had
written anther question class to test ,and it could run OK. I think that the
constructor of
this class didn't conflict with the class Space , but why came out this
error. Who can give me a thought to help me to find the answer?
Look forward to your reply!
note:
1.VS2008 + Gecode 3.1.0
2.
class GenSolModel: public Gecode::Space
{
protected:
IntVarArray succ;
public:
GenSolModel(int data);
GenSolModel(bool share, GenSolModel& s);
~GenSolModel();
virtual Space *copy(bool share);
void print(void);
};
Kayler
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20090826/458db8df/attachment.htm>
More information about the gecode-users
mailing list


{% load static %}
Weather
Home
Uh oh! It looks like we can't find your location. Please type your city into the search box above!
Type your City/town in the box above
OR
Click on
to get weather of your current location
Humidity:
%
Wind:
Change Units
°C
°F


By Erik.
A short guide to tuning Comskip
Setting up the test environment.
Starting the tuning: the black
frame detection.
Using aspect ratio based cutting
Final commercial list generation
Automated setting of certain
parameters
Using the optimized Comskip.ini
Verifying Comskip output during
normal execution
Before the tuning of Comskip
can start it is essential to understand the basic operation of Comskip. Comskip
reads and decodes a recorded mpeg file based on instructions Comskip reads from
a so called ini file. The recording is analyzed on various characteristics such
as black frames, silences and changes in aspect ratio.
Based on this information
Comskip segments the recording in blocks and using heuristics, together with
additional information such as the presence of logo, the scene change rate,
Close Captioning information and other information sources Comskip tries to
determine what blocks of the recording are to be characterized as commercials.
This process can only be
successful under a number of conditions. The information to be used for the
segmentation must be available in the recording. When, for example, the
recording contains insufficient or too many black frames the segmentation
process has a high chance to fail. It is therefore essential to instruct
Comskip how to recognize the various segmentation information sources to ensure
an optimal result.
However, Comskip may not be
able to deliver acceptable results on certain recordings from certain
broadcasters because the required information is simply not available in the
broadcast. The purpose of the tuning is therefore to extract the maximum of
information from the recording to enable Comskip to do the best possible job.
A simple strategy is to
install Comskip and use the comskip.ini file available in the download in the
PVR system and let the PVR do its recording. Afterwards, when watching the
recording enhanced by the information from Comskip the results can be judged
and if not as required some changes to the ini file can be made. The impact of
these changes can be judged after the next recording is done.
This strategy works if only
limited adaptations are required. It is not the right approach to get the best
results for specific broadcasting styles.
It is therefore recommended
to use a more elaborate strategy to optimize Comskip.
Create a separate folder and
copy the files from the downloaded Comskip zip file into this directory.
Then copy a number of
relevant recordings into this directory and rename them to appropriate short
names.
There should now be the
following files in the folder. Comskip.exe, comskip.ini, comskip.dictionary and
a number of mpeg files. Lets name them for this guide as short.mpg, long.mpg,
etc....
One mpeg files should preferably
not be very big, about 10 minutes, and contain a mix of show and commercial.
This we will call short.mpg.
A second mpeg should be a full recording of about one hour containing a typical
sequence of show segments mixed with commercials. This will be called long.mpg.
Now edit the comskip.ini
file. Comskip is rather picky on how you format the ini file. No spaces before
of after the '=' are allowed. Multiple occurrences of any setting can exist
anywhere in the file but only the first will be used. There is no way to
'comment out' a setting.
The following settings
should be present when starting the tuning, each on a separate line:
verbose=10
detect_method=47
delete_logo_file=0
intelligent_brightness=0
output_framearray=1
output_debugwindow=1 ; Only for tuning, to be replaced later
non_uniformity=1000 ;
Only for tuning, to be replaced later
max_volume=1000 ;
Only for tuning, to be replaced later
Now we need to run Comskip
on the first mpg file. For the first part of the tuning we will use short.mpg.
To run Comskip on the mpeg we create a shortcut icon on the desktop to
Comskip.exe. Drag and drop short.mpg on the Comskip icon and watch the processing
being done.
First a console window opens
and some initial logging appears. Then the debug window opens. To understand
the content of the debugwindow please read debugwindow description file.
The frame number in the top
left corner should start at 1 and increment with jumps till the last frame
number.
Once Comskip reaches the
final frame there will be some more logging in the console window and the
debugwindow will jump to the first frame.
Comskip can now be
terminated by closing the Comskip console window.
The test folder will contain
a number of new files, each with its specific content.
The file short.log contains
the logging output of the last comskip run.
The file short.txt contains
the start end ending frame numbers of the identified commercials, if any.
The file short.csv contains
information on brightness, volume, etc... one line per frame. The first line
contains the descriptive name of the information. The last figure on the first
line is the frame rate times hundred as read from the mpeg file.
The file short.logo.txt
contains the logo recognition mask if a logo has been found.
Now use your favorite editor
or text file viewer and open the log file short.log.
The first part of the log
file lists some essentials of the comskip run. Then there is information on the
frame per frame scanning starting with the line
First Frame
After all frames has been
scanned there is a line
Finished scanning
file. Starting to build Commercial
List.
After this line the global
processing with closing frame groups and cleaning up information.
Then the recording is
segmented in blocks starting with a line such as
Creating block 0
From 1 (1) to 350 (348) because of Blackframe with 0 head and 2 tail
Then some additional small
cleaning up and information generation and the Fuzzy Logic scoring starts with
Fuzzy scoring of the
blocks
After the scoring there is
the information on the detected commercials starting with
Initial Commercial List
And finally the list of
blocks with their details starting with
Block list after
weighing
Five parameters determine
the black frame detection process. They are
max_avg_brightness=20
test_brightness=40
max_brightness=60
non_uniformity=1000
max_volume=1000
intelligent_brightness=0
The first parameter to look
at is max_avg_brightness, in general test_brightness should be 20 above
max_avg_brightness and max_brightness should be again 20 above test_brightness.
A frame is a candidate black
frame when the average of the brightness of its pixels if below
max_avg_brightness. It is therefore required to identify the black level in the
recording and set the max_ avg_brightness somewhat above this level. To do this
look in the log file at the list of black frames just below
Black Frame List
There should be lines such
as
14
16776 16 35 77
Where 16776 is the frame
number, 16 the brightness, 35 the uniformity and 77 the volume. If there are no
black frames the max_avg_brightness should be increased with steps of 5,
together with test_brightness and max_brightness. Rerun Comskip on short.mpg
after each increase.
Look at the minimum
brightness in the black frame list that should occur a number of times, and set
max_avg_brightness to that level plus five. Rerun Comskip to verify the correct
setting. Use the debugwindow to verify the correctness. Use the n key to jump
to each next black frame and use the cursor keys to scan to the right to verify
if a number of the frames behind the current position are indeed black.
Be sure to set
test_brightness and max_brightness to respective 20 and 40 above
max_avg_brightness.
When one single pixel in a
frame has brightness above max_brightness then that frame will not be regarded
as black. When more then 5 pixels on a line have a brightness above
test_brightness the frame will not be regarded as black.
The detection of the black
bars used for the aspectratio calculation uses the same settings so when
short.mpg contains parts with different aspectratios is easy to see in the
debugwindow if the processing is correct.
Sometimes there is something
inside the recording that needs to be ignored. One possibility is to ignore a
border around the picture. This is controlled by
border=10
The default border is 10.
Another option is to ignore
only a part at the bottom of the video. This is useful when the broadcast
contains tickertape at the bottom. The controlling parameter specifies the
number of pixels at the bottom to ignore as:
ticker_tape=120
The default is 0, the
setting can be checked in the debugwindow because the part of the video that
will be cancelled out is shown as black.
Black frames with a volume
above max_volume will be removed from the black frame list before the final
black frame list is shown. This is shown in the log file with lines such as
391 - Removing black
frame 41319, from black frame list because volume 1655 is more than 600,
brightness 16, uniform 1
Volume levels of 1 signal
that Comskip was unable to match the mpeg sound decoding with the picture
decoding for that specific frame so these volumes should be ignored.
Key is to identify the
volume level that is regarded as silence. This is never at zero but could be
anywhere between 10 and 500 depending on the broadcast
Some sequences of subsequent
black frames in the black frame list possibly show the volume going down,
remain for some frames at a low level and then again going up.
Below you can find a typical
sequence from the black frame list
1076 165202 16 148 178
1077 165203
16
141 104
1078 165204
16
148 97
1079 165205
16
110 90
1080 165206
16
105 90
1081 165207
16
95 90
1082 165208
16
78 90
1083 165209
16
72 90
1084 165210
16
38 90
1085 165211
16
48 90
1086 165212
16
4 78
1087 165213
16
0 78
1088 165214
15
0 75
1089 165215
15
0 75
1090 165216
16
0 75
1091 165217
15
0 75
After frame 165214 the
final black level is reached with brightness of 15, uniform of 0 and volume of
75.
The lowest volume level that
reoccurs on more then one frame sequence is the silence level. The max_volume
level should be set at about four times the silence level. There may be black
frame sequences that do not show the low volume level of silence but remain at
substantial higher volume levels. These sequences should not be regarded as
having silence and the max_volume level can be set below these levels to
effectively remove them from the black frame list.
Below you will find an
example from the black frame list where the frames are perfectly black
(brightness is 16 and uniformity is below 5) but the sound level is too high to
be silence.
193 82467
16
3 537
194 82468
16
1 537
Acceptable max_volume levels
could be in the range of 250 up to 1000.
Again the debugwindow can be
used to visually verify the alignment of the black frames and the silences. Use
the a key to jump to the next block boundary and use the cursor key to verify
if the frames behind the current position indeed do have a black frame with
silence.
Black frames with low
brightness and silence do normally also have a low level of non_uniformity,
possibly as low as zero. The non_uniformity level is used to recognize frames
with uniform brightness, as these could also be block separators. To set the
non_uniformity level look again at the black frame list just like what was done
for the max_volume but now for the uniformity.
Acceptable levels for
non_uniformity could be in the range of 250 up to 1000. However if you record
on low quality or have a very high noise level you may have to go up to 2000.
Start Comskip with the
adjusted setting on long.mpg and manually verify the black frame detection by
using the 'n' and the 'p' keys to step through the detected black frames using
the debugwindow.
When no black frame is
detected between certain segments use the arrow keys to step frame by frame
through the transition. Look at the detected values behind the frame number in
the upper left corner and verify that processing done as expected.
For those that have access
to spreadsheet software such as excel there is also another way to find the
right level.
After Comskip has been run
on short.mpg there appears a short.csv file in the test folder. Now open this
file with your spreadsheet software.
The first part of the
spreadsheet looks like this
|
frame |
brightness |
scene_change |
logo |
uniform |
sound |
minY |
MaxY |
ar_ratio |
goodEdge |
isblack |
2500 |
|
1 |
0 |
0 |
1 |
0 |
-1 |
10 |
566 |
130 |
495 |
0 |
|
|
2 |
64 |
0 |
1 |
27177 |
-1 |
10 |
566 |
130 |
495 |
0 |
|
|
3 |
64 |
480 |
1 |
27259 |
1618 |
10 |
566 |
130 |
495 |
0 |
|
|
4 |
64 |
475 |
1 |
27327 |
1482 |
10 |
566 |
130 |
495 |
0 |
|
|
5 |
64 |
475 |
1 |
27310 |
2759 |
10 |
566 |
130 |
495 |
0 |
|
|
6 |
64 |
475 |
1 |
27285 |
1026 |
10 |
566 |
130 |
495 |
0 |
|
|
7 |
64 |
480 |
1 |
27353 |
2291 |
10 |
566 |
130 |
495 |
0 |
|
|
8 |
64 |
475 |
1 |
27365 |
2771 |
10 |
566 |
130 |
495 |
0 |
|
Now select the cell just
below brightness and sort the sheet in ascending order on brightness (in excel
click the a/z button on the toolbar or select data/sort from the menu). The
frames with the lowest brightness will appear at the top of the list and it is
easy to see what the black level is. Do the same for the volume (below the word
sound) to find the silence level.
To facilitate this process
one can download a large Comskip.xls files to be used as a template for more
detailed analysis. Copy the short.csv from the open spreadsheet tab (select the
whole sheet and then Copy) and Paste it on the input_data sheet (select cell A1
and Paste). Now it is possible to use the autofilter on the input_data sheet
and to look at the two graphs on the other sheets.
Comskip can, next to black
frame based cut points, also generate cutpoints when the aspect ratio changes.
This optional feature is controlled by
cut_on_ar_change=1
If this is set to 1 Comskip
will segment the recording also on changes on aspect ratio. Whether this is a
good thing largely depends on broadcast style and personal preferences. Cutting
on aspect ratio changes is automatically disabled when insufficient logo is
found and will only happen in segments where no logo is found.
The presence of logo on a
certain segment of the recording guides the heuristics towards interpreting
that segment as show. It is therefore important to have good logo detection.
Logo detection is a very
complicated process with a large number of tunable parameters. It is therefore
advised not to modify most of these parameters.
Only when there are multiple
slightly different logos in the broadcast and Comskip fails to see the
difference between them it is advised to set
aggressive_logo_rejection=1
Some shows have multiple
logos. When all logos are at the top or at the bottom of the screen there is no
problem. However, when the logo's are on diagonal sides of the screen Comskip
will not accept the logo as valid. A possible way to solve this is to set
subtitles=1
This will instruct Comskip
not to search for logos at the bottom of the screen.
When Comskip is started and
it cannot find a logo file such as short.logo.txt it will start to scan for a
logo after 1000 frames. You can change this by setting give_up_logo_search to
another value such as
give_up_logo_search=2000
In the debugwindow you can
see the appearance of pixels that are candidate for the logo mask. The maximum
fraction of the screen size that Comskip accepts as a valid logo is defined by:
logo_max_percentage_of_screen
=0.1
This value should be
acceptable in most cases but can be increase to 0.35 if needed.
Once the logo has been
identified Comskip saves the learned logo edge pixels and start again from the
beginning. This can be disabled for slightly faster processing but this is not
recommended.
When Comskip has learned the
logo it will track the presence of logo as shown in the logo rectangle and in
the black bar in the Frame bar at the bottom of the debugwindow. The fraction
of edge pixels that should match the mask is defined by
logo_threshold=0.70
When too many false
positives are detected this value can be increase in steps of 0.05 till
0.95.
When one logo block was
found and after that a long time of no logo, Comskip assumes it has learned a
wrong logo and restarts its learning from well within the recording. When after
this a logo is found Comskip will restart for a second time.
The following setting
controls the deletion of the logo file
delete_logo_file=0
When set to 1 the learned
logo file will be deleted after processing is finished.
When no logo is found after
about 12 minutes in the show Comskip will give up logo detection and assumes no
logo at all.
The amount of logo over time
will tell Comskip how to interpret the presence of logo. If more then 50% logo
is found Comskip assumes logo to be present on show only. If less then 32% logo
is found but more then 15% Comskip assumes logo to be present on commercials
only and the logo logic is reversed.
If the amount of logo
detected is above a certain threshold defined by
logo_percentile=0.92
it is assumed there is
always logo and the logo heuristics will also be disabled.
When the logo detection is
assumed to be robust it can be used to suppress false black frames from being
detected. This is enabled with the following setting
connect_blocks_with_logo=1
This will connect two blocks
into one block if there is logo present at the end of the first block and at
the beginning of the second block. An example of a line signaling the deletion
of a block due to this connection process is
Joining blocks 20 and 21 at frame 149986 because they both have a logo.
It is also possible to
create additional pseudo blackframes some seconds after a logo disappears or
before a logo appears The following line in the ini file will create a pseudo
blackframe 6 seconds after the logo disappears and 8 seconds before the logo appears.
after_logo=6
before_logo=8
Sometimes the logo continues
too long and only disappears during the start of the commercial. This can be
solved by shrinking the duration of the logo by using
shrink_logo=10
The effect on the processing
is that the logo is assumed to appear 10 seconds later than reality and to
disappear 10 seconds before reality. As
long as there are no black frames just before the end of the show there is no
need to be very precise on this setting
Using all the information
gathered from the recoding Comskip will generate a so call Block List. This
block list is directly after the black frame list.
An example of a block list:
Creating
block 0 From 1 (1) to 2074 (2071) because of Blackframe with 0 head and 3 tail
Creating
block 1 From 2075 (2078) to 2339 (2339) because of Blackframe with 3 head and 0
tail
Creating
block 2 From 2340 (2341) to 2509 (2508) because of Blackframe with 1 head and 1
tail
Creating
block 3 From 2510 (2511) to 2830 (2827) because of Blackframe with 1 head and 3
tail
Creating
block 4 From 2831 (2834) to 3651 (3650) because of Aspectratio with 3 head and
1 tail
Creating
block 5 From 3652 (3653) to 5279 (5276) because of Blackframe with 1 head and 3
tail
Creating
block 6 From 5280 (5283) to 5813 (5810) because of Blackframe with 3 head and 3
tail
Creating
block 7 From 5814 (5817) to 6266 (6265) because of Aspectratio with 3 head and
1 tail
Creating
block 8 From 6267 (6268) to 6890 (6889) because of Aspectratio with 1 head and
1 tail
Creating
block 9 From 6891 (6892) to 10306 (10306) because of Blackframe with 1 head and
0 tail
The reason for segmentation
to the next block is indicated as Blackframe or Aspectratio
After the logo processing
certain blocks may have been connected as described above leading to a reduced
block list. The final block list can be found at the very end of the log file.
Block
list after weighing
----------------------------------------------------
#
sbf bs be fs fe
sc len scc
scr cmbnd ar
cut bri logo
stdev
0)+
3 0 3 1 2074
0.18 82.920 0
0.00 0 1.30
b 61 0.83 120
1)-
3 3 0 2075 2339
1.78 10.560 0 0.00
2 1.30 b 101 0.00
98
2)-
2 1 1 2340 2509
1.78 6.760 0
0.00 2 1.30
b 86 0.00 108
3)-
4 1 3 2510 2830
1.78 12.800 0
0.00 2 1.30
a b 82 0.00
63
4)-
4 3 1 2831 3651
2.00 32.800 0
0.00 0 1.58
a 124 0.00
142
5)-
4 1 3 3652 5279
1.00 65.080 0
0.00 0 1.30
b 125 0.00 138
6)-
6 3 3 5280 5813
1.00 21.320 0
0.00 0 1.30
b 109 0.00 218
7)-
4 3 1 5814 6266
1.00 18.080 0
0.00 0 1.30
a 145 0.00
97
8)-
2 1 1 6267
6890 3.00 24.920
0 0.00 0
1.69 a 77
0.00 117
9)+
1 1 0 6891 10306
0.32 136.600 0
0.00 0 1.30
a b 69 0.69
142
The letters below cut
describe again the reason for the segmentation: a=aspectatio, b=blackframe,
u=uniform frame, s=scene change. If you see more u then b below cut then
your black frame detection may need adjustment. See above on how.
The start (fs) and the end
(fe) frame numbers can be used for the visual verification in the debugwindow.
Use the a key to skip quickly to the end of each block. Use the b key to
skip to the beginning of each block.
Remember that Comskip will
differentiate between show and commercials based on this block list. If certain
blocks combine both show and commercial there is no way for Comskip to split
them again after the creation of the block list. Only when additional black
frames or aspect ratio changes are detected Comskip can further split the blocks.
Now the most important
parameters for the creation of the block list have been set it is time to tune
the heuristics. Comskip uses a heuristics or Fuzzy Logic scoring process to
determine if a block is part of a show or part of a commercial. First ensure
Comskip has been run on long.mpg and it has generated long.csv.
The most important
parameters guiding the heuristics are
min_show_segment_length=140
max_commercial_size=120
min_commercial_size=4
The amount of score increase
or decrease is controlled by the following parameters
length_strict_modifier=3.0
length_nonstrict_modifier=1.5
combined_length_strict_modifier=2.0
combined_length_nonstrict_modifier=1.25
logo_present_modifier=0.01
excessive_length_modifier=0.01
ar_wrong_modifier=2.0
min_schange_modifier=0.5
max_schange_modifier=2.0
schange_threshold=80
cc_commercial_type_modifier=4.0
cc_wrong_type_modifier=2.0
cc_correct_type_modifier=0.75
dictionary_modifier=1.05
When the scoring process is
done Comskip will generate the list of commercials using this parameter
global_threshold=1.05
Any block that scores (below
sc in the final block list) above this threshold will be regarded as
commercial, any block scoring lower will be regarded as show. Then Comskip
combines the blocks into the commercial list and does one additional check
using the following parameters
max_commercialbreak=600
min_commercialbreak=10
Any commercial that is
shorter then min_commercialbreak
or longer then max_commercialbreak will
be discarded from the list.
The final result is visible
in the debug windows as the gray bars in the Frame bar and will be output the
.txt file. The blocks that are part of the show will be indicated with a + in
the block list.
Although it is possible to
do a complete rerun of Comskip after changing some setting it is possible to do
it somewhat quicker. One the .csv file is generated Comskip can read the .csv
file instead of the .mpg file. This will eliminate the long mpeg decoding
process so Comskip will be much quicker. Dragging and dropping a file like
long.csv on the Comskip desktop icon can do this. The debugwindow will show the
first frame of the mpeg once the processing is finished and in the Frame Bar
the details can be seen. Using the various keys the result can be quickly
reviewed.
Please remember that this can
only be done for changes to the heuristics parameters and the max_volume
setting. Any changes to the brightness and logo detection parameters requires a
full rerun of Comskip.
Fine tuning for certain
broadcast styles.
Some recordings will contain
after the final commercial the beginning of the next show. This is more often
happening when post-padding is applied. To automatically delete this set the
following parameter
delete_show_after_last_commercial=1
As a consequence the final
commercial segment at the end of the recording is allowed to be much longer
then max_commercialbreak
The reverse is also
available to automatically delete the part of the show before the first
commercial set
delete_show_before_first_commercial=1
Both above algorithms will be
automatically disabled if the commercial is not within the outside 15% of the
recording
When logo detection is
enabled Comskip also automatically recognizes a special recording sequence: a
show block of a previous show, optionally a single short commercial block of
length less then min_commercialbreak and then the first show block of the intended show.
Comskip can also detect the reverse of this pattern at the end of the show. The
single show blocks before the first real show block and after the last real
show block will be deleted automatically.
Also a single long show block without logo before or after the other
show blocks will be deleted automatically. This behavior can be disabled with
delete_show_before_or_after_current=0
In certain circumstances the
commercials should be smaller as detected by Comskip. This can be done by using
the following line in the ini file
padding=6
The will set the start of
the detected commercial 6 seconds later and sets the end of the commercial 6
seconds earlier. The debugwindow will show this by marking the first and last 6
seconds of the commercial as lighter gray.
For certain broadcast
condition such as typical in the USA or Canada some tuning has been automated.
To use this set
intelligent_brightness=1
max_volume=0
The scoring threshold can
also be automatically adjusted by setting
global_threshold=0
Now Comskip will automatic
try to determine a number of settings based on the exact fraction of show
present in the recording and the expected amount of black frames. This is
determined by
score_percentile=0.71
black_percentile=0.0073
These fractions should match
exactly you broadcast conditions and any show with a lot of very dark or black
frames or less then 1-
score_percentile fraction commercial
will mess up the automated process. They are therefore not recommended in
countries with less strictly regulated broadcast conditions.
Unless you know what you are
doing it is not recommended to use this automated approach.
Before the optimized
Comskip.ini can be used some changes have to be made.
During normal use the
debugwindow should not be shown, no .csv should be generated, the logo file
should be deleted and no or only limited logging should be done.
These are the recommended
settings.
verbose=0
delete_logo_file=1
output_framearray=0
output_debugwindow=0
During normal execution you
may want to verify the quality of the generated .txt file listing the detected
commercials. A simple way to do this is to drag and drop the generated .txt
file on the Comskip.exe. This will open the debugwindow and show the in the
frame bar the location of the detected commercials. Using the mouse to click on
the frame bar or by using the keyboard as described in the debugwindow guide
one can quickly review the correctness of the generated data. It is even
possible to edit the list of commercials and to save the new list.
Pressing F1 will show the
available command keys.
Comskip runs on Idle
priority allowing other programs to execute normally. The Disk IO by Comskip
can be rather high so it may be useful
to reduce the throttle the execution speed of Comskip. The main parameters for
this with their default values are
play_nice_sleep=10
play_nice_start-1
play_nice_end=-1
The value of play_nice_sleep is the number of milliseconds Comskip will suspend execution after each
frame processed. This will be done starting from play_nice_start till play_nice_end, both in 24 hour time format. From 7 in the morning till eleven in the
evening will be
play_nice_start=700
play_nice_end=2300


Synergy in dock in version 2.0
-
habesct
I have just installed Synergy 2.0 on my dual 2.7 Ghz G5 running 10.4.1 and there is now an application icon in the dock for Synergy. This is really quite annoying and need to get rid of this or downgrade to 1.9. I see the other thread about thiss but that is for version 1.9 and I did not have that problem then. Could someone please advise of a fix or a location to download 1.9 again?
Thanks, Brian
-
Greg Hurrell
Reply
This topic is now closed.


Synchronous means each operation must wait for the previous one to complete.
Asynchronous means an operation can occur while another operation is still being processed.
In JavaScript, all code is synchronous due to the single-threaded nature of it. However, asynchronous operations not part of the program (such as XMLHttpRequest
or setTimeout
) are processed outside of the main thread because they are controlled by native code (browser APIs), but callbacks part of the program will still be executed synchronously.
alert
block the main thread so that no user input is registered until the user closes it.


new Axis()
Axis constructor. Usually not instanced directly, but for custom made axes, that's possible
Example
function myAxis() {}; myAxis.prototype = new Graph.getConstructor("axis"); graph.setBottomAxis( new myAxis( { } ) );
Methods
-
hide() → {Axis}
-
Hides the axis
Returns:
( Axis )The current axis
-
show() → {Axis}
-
Shows the axis
Returns:
( Axis )The current axis
-
setDisplay(display) → {Axis}
-
Shows or hides the axis
Parameters:
Name Type Description display
Boolean true to display the axis, false to hide it
Returns:
( Axis )The current axis
-
isDisplayed() → {Boolean}
-
Returns:
( Boolean )A boolean indicating the displayed state of the axis
-
setLineAt0(lineAt0) → {Axis}
-
Forces the appearence of a straight perpendicular line at value 0
Parameters:
Name Type Description lineAt0
Boolean true to display the line, false not to.
Returns:
( Axis )The current axis
-
adaptTo(axis, thisValue, foreignValue, preference) → {Axis}
-
Forces the alignment of the 0 of the axis to the zero of another axis
Parameters:
Name Type Description axis
Axis | Boolean The axis with which the 0 should be aligned. Use "false" to deactivate the adapt to 0 mode.
thisValue
Number The value of the current axis that should be aligned
foreignValue
Number The value of the reference axis that should be aligned
preference
String "min" or "max". Defined the boundary that should behave the more normally
- 1.13.2
Since:
Source:
Returns:
( Axis )The current axis
-
adapt() → {Axis}
-
Adapts maximum and minimum of the axis if options.adaptTo is defined
- 1.13.2
Since:
Source:
Returns:
( Axis )The current axis
-
setFloating(axis, value) → {Axis}
-
Makes the axis floating (not aligned to the right or the left anymore). You need to specify another axis (perpendicular) and a value at which this axis should be located
Parameters:
Name Type Description axis
Axis The axis on which the current axis should be aligned to
value
Number The value on which the current axis should be aligned
Returns:
( Axis )The current axis
Example
graph.getYAxis().setFloat( graph.getBottomAxis(), 0 ); // Alignes the y axis with the origin of the bottom axis
-
getFloatingAxis() → {Axis}
-
Returns:
( Axis )The axis referencing the floating value of the current axis
-
getFloatingValue() → {Axis}
-
Returns:
( Axis )The value to which the current axis is aligned to
-
setAxisDataSpacing(min, max) → {Axis}
-
Sets the axis data spacing
Parameters:
Name Type Argument Default Description min
Number The spacing at the axis min value
max
Number <optional>
min The spacing at the axis max value. If omitted, will be equal to the "min" parameter
- AxisOptionsDefault
Source:
See:
Returns:
( Axis )The current axis
-
setAxisDataSpacingMin(min) → {Axis}
-
Sets the axis data spacing at the minimum of the axis
Parameters:
Name Type Description min
Number The spacing at the axis min value
- AxisOptionsDefault
Source:
See:
Returns:
( Axis )The current axis
-
setAxisDataSpacingMax(max) → {Axis}
-
Sets the axis data spacing at the maximum of the axis
Parameters:
Name Type Description max
Number The spacing at the axis max value
- AxisOptionsDefault
Source:
See:
Returns:
( Axis )The current axis
-
getMinPx() → {Number}
-
Returns:
( Number )The position in px of the bottom of the axis
-
getMaxPx() → {Number}
-
Returns:
( Number )The position in px of the top of the axis
-
getMinValue() → {Number}
-
Retrieves the minimum possible value of the axis. Can be set by "forcedMin", "adapt0ToAxis" or by the values of the series the axis contains. Does not take into account any zooming.
Returns:
( Number )The minimum possible value of the axis
-
getMaxValue() → {Number}
-
Retrieves the maximum possible value of the axis. Can be set by "forcedMax", "adapt0ToAxis" or by the values of the series the axis contains. Does not take into account any zooming.
Returns:
( Number )The maximum possible value of the axis
-
forceMin(min, noRescale) → {Axis}
-
Forces the minimum value of the axis (no more dependant on the serie values)
Parameters:
Name Type Description min
Number The minimum value of the axis
noRescale
Boolean true
to prevent the axis to rescale to set this minimum. Rescales anyway if current min is lower than the valueReturns:
( Axis )The current axis
-
forceMax(max, noRescale) → {Axis}
-
Forces the maximum value of the axis (no more dependant on the serie values).
Parameters:
Name Type Description max
Number The maximum value of the axis
noRescale
Boolean true
to prevent the axis to rescale to set this maximum. Rescales anyway if current max is higher than the valueReturns:
( Axis )The current axis
-
getForcedMin() → {Number}
-
Retrieves the forced minimum of the axis
Returns:
( Number )The maximum possible value of the axis
-
getForcedMax() → {Number}
-
Retrieves the forced minimum of the axis
Returns:
( Number )The maximum possible value of the axis
-
forceToAxis(axis) → {Axis}
-
Forces the min and max values of the axis to the min / max values of another axis
Parameters:
Name Type Description axis
Axis The axis from which the min / max values are retrieved.
Returns:
( Axis )The current axis
-
zoom(val1, val2) → {Axis}
-
Performs a zoom on the axis, without redraw afterwards
Parameters:
Name Type Description val1
Number The new axis minimum
val2
Number The new axis maximum
Returns:
( Axis )The current axis
Examples
graph.getBottomAxis().zoom( 50, 70 ); // Axis boundaries will be 50 and 70 after next redraw graph.redraw();
graph.getBottomAxis().forceMin( 0 ).forceMax( 100 ).zoom( 50, 70 ); // Axis boundaries will be 50 and 70 after next redraw graph.draw(); graph.autoscaleAxes(); // New bottom axis boundaries will be 0 and 100, not 50 and 70 ! graph.draw();
-
setMinMaxToFitSeries() → {Axis}
-
Resets the min and max of the serie to fit the series it contains
Returns:
( Axis )The current axis
-
getInterval() → {Number}
-
Returns:
( Number )the maximum interval ( max - min ) of the axis ( not nessarily the current one )
-
getCurrentInterval() → {Number}
-
Returns:
( Number )the maximum interval ( max - min ) of the axis ( not nessarily the current one )
-
getCurrentMin() → {Number}
-
Returns:
( Number )The current minimum value of the axis
-
getCurrentMax() → {Number}
-
Returns:
( Number )The current maximum value of the axis
-
cacheCurrentMin()
-
Caches the current axis minimum
-
cacheCurrentMax()
-
Caches the current axis maximum
-
cacheInterval()
-
Caches the current interval
-
setCurrentMin(val) → {Axis}
-
Sets the current minimum value of the axis. If lower that the forced value, the forced value is used
Parameters:
Name Type Description val
Number The new minimum value
Returns:
( Axis )The current axis
-
setCurrentMax(val) → {Axis}
-
Sets the current maximum value of the axis. If higher that the forced value, the forced value is used
Parameters:
Name Type Description val
Number The new maximum value
Returns:
( Axis )The current axis
-
flip(flip) → {Axis}
-
Sets the flipping state of the axis. If enabled, the axis is descending rather than ascending.
Parameters:
Name Type Description flip
Boolean The new flipping state of the axis
Returns:
( Axis )The current axis
-
isFlipped() → {Boolean}
-
Returns:
( Boolean )The current flipping state of the axis
-
linkToAxis(axis, scalingFunction, decimals) → {Number}
-
Makes this axis a slave. This can be used to show the same data with different units, specifically when a conversion function exists from axis -> slaveAxis but not in reverse. This axis should actually have no series.
Parameters:
Name Type Description axis
Axis The master axis
scalingFunction
SlaveAxisScalingFunction The scaling function used to map masterValue -> slaveValue
decimals
Number The number of decimals to round the value to
Returns:
( Number )The width or height used by the axis (used internally)
-
getPos(value) → {Number}
-
Transform a value into pixels, according to the axis scaling. The value is referenced to the drawing wrapper, not the the axis minimal value
Parameters:
Name Type Description value
Number The value to translate into pixels
Returns:
( Number )The value transformed into pixels
-
<inner> getPos()
-
getVal(pixels) → {Number}
-
Transform a pixel position (referenced to the graph zone, not to the axis minimum) into a value, according to the axis scaling.
Parameters:
Name Type Description pixels
Number The number of pixels to translate into a value
Returns:
( Number )The axis value corresponding to the pixel position
-
getRelPx(value) → {Number}
-
Transform a delta value into pixels
Parameters:
Name Type Description value
Number The value to translate into pixels
Returns:
( Number )The value transformed into pixels
Example
graph.getBottomAxis().forceMin( 20 ).forceMax( 50 ).getRelPx( 2 ); // Returns how many pixels will be covered by 2 units. Let's assume 600px of width, it's ( 2 / 30 ) * 600 = 40px
-
getRelVal(pixels) → {Number}
-
Transform a delta pixels value into value
Parameters:
Name Type Description pixels
Number The pixel to convert into a value
- Axis~getRelPx
Source:
See:
Returns:
( Number )The delta value corresponding to delta pixels
Example
graph.getBottomAxis().forceMin( 20 ).forceMax( 50 ).getRelVal( 40 ); // Returns 2 (for 600px width)
-
setLabel(label) → {Axis}
-
Sets the label of the axis
Parameters:
Name Type Description label
Number The label to display under the axis
Returns:
( Axis )The current axis
-
getLabel() → {String}
-
Returns:
( String )The label value
-
setTickPosition(pos) → {Axis}
-
Changes the tick position
Parameters:
Name Type Description pos
Number The new position ( "outside", "centered" or "inside" )
Returns:
( Axis )The current axis
-
setGrids(on) → {Axis}
-
Displays or hides the axis grids
Parameters:
Name Type Description on
Boolean true to enable the grids, false to disable them
Returns:
( Axis )The current axis
-
setPrimaryGrid(on) → {Axis}
-
Displays or hides the axis primary grid
Parameters:
Name Type Description on
Boolean true to enable the grids, false to disable it
Returns:
( Axis )The current axis
-
setSecondaryGrid(on) → {Axis}
-
Displays or hides the axis secondary grid
Parameters:
Name Type Description on
Boolean true to enable the grids, false to disable it
Returns:
( Axis )The current axis
-
primaryGridOn() → {Axis}
-
Enables primary grid
Returns:
( Axis )The current axis
-
primaryGridOff() → {Axis}
-
Disables primary grid
Returns:
( Axis )The current axis
-
secondaryGridOn() → {Axis}
-
Enables secondary grid
Returns:
( Axis )The current axis
-
secondaryGridOff() → {Axis}
-
Disables secondary grid
Returns:
( Axis )The current axis
-
gridsOn() → {Axis}
-
Enables all the grids
Returns:
( Axis )The current axis
-
gridsOff() → {Axis}
-
Disables all the grids
Returns:
( Axis )The current axis
-
setAxisColor(color) → {Axis}
-
Sets the axis color
Parameters:
Name Type Description color
String The color to set the axis
- 1.13.2
Since:
Source:
Returns:
( Axis )The current axis
-
getAxisColor() → {String}
-
Gets the axis color
- 1.13.2
Since:
Source:
Returns:
( String )The color of the axis
-
setPrimaryTicksColor(color) → {Axis}
-
Sets the color of the main ticks
Parameters:
Name Type Description color
String The new color of the primary ticks
- 1.13.2
Since:
Source:
Returns:
( Axis )The current axis
-
getPrimaryTicksColor() → {String}
-
Gets the color of the main ticks
- 1.13.2
Since:
Source:
Returns:
( String )The color of the primary ticks
-
setSecondaryTicksColor(color) → {Axis}
-
Sets the color of the secondary ticks
Parameters:
Name Type Description color
String The new color of the secondary ticks
- 1.13.2
Since:
Source:
Returns:
( Axis )The current axis
-
getSecondaryTicksColor() → {String}
-
Gets the color of the secondary ticks
- 1.13.2
Since:
Source:
Returns:
( String )The color of the secondary ticks
-
setTicksLabelColor(color) → {Axis}
-
Sets the color of the tick labels
Parameters:
Name Type Description color
String The new color of the tick labels
- 1.13.2
Since:
Source:
Returns:
( Axis )The current axis
-
getTicksLabelColor() → {String}
-
Gets the color of the tick labels
- 1.13.2
Since:
Source:
Returns:
( String )The color of the tick labels
-
setPrimaryGridColor(color) → {Axis}
-
Sets the color of the primary grid
Parameters:
Name Type Description color
String The primary grid color
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
getPrimaryGridColor() → {String}
-
Gets the color of the primary grid
- 1.13.3
Since:
Source:
Returns:
( String )color - The primary grid color
-
setSecondaryGridColor(color) → {Axis}
-
Sets the color of the primary grid
Parameters:
Name Type Description color
String The primary grid color
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
getSecondaryGridColor() → {String}
-
Gets the color of the secondary grid
- 1.13.3
Since:
Source:
Returns:
( String )color - The secondary grid color
-
setPrimaryGridWidth(width) → {Axis}
-
Sets the width of the primary grid lines
Parameters:
Name Type Description width
Number The width of the primary grid lines
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
getPrimaryGridWidth() → {Number}
-
Gets the width of the primary grid lines
- 1.13.3
Since:
Source:
Returns:
( Number )width - The width of the primary grid lines
-
setSecondaryGridWidth(width) → {Axis}
-
Sets the width of the secondary grid lines
Parameters:
Name Type Description width
Number The width of the secondary grid lines
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
getSecondaryGridWidth() → {Number}
-
Gets the width of the secondary grid lines
- 1.13.3
Since:
Source:
Returns:
( Number )width - The width of the secondary grid lines
-
setPrimaryGridOpacity(opacity) → {Axis}
-
Sets the opacity of the primary grid lines
Parameters:
Name Type Description opacity
Number The opacity of the primary grid lines
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
getPrimaryGridOpacity() → {Number}
-
Gets the opacity of the primary grid lines
- 1.13.3
Since:
Source:
Returns:
( Number )opacity - The opacity of the primary grid lines
-
setSecondaryGridOpacity(opacity) → {Axis}
-
Sets the opacity of the secondary grid lines
Parameters:
Name Type Description opacity
Number The opacity of the secondary grid lines
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
getSecondaryGridOpacity() → {Number}
-
Gets the opacity of the secondary grid lines
- 1.13.3
Since:
Source:
Returns:
( Number )opacity - The opacity of the secondary grid lines
-
setPrimaryGridDasharray(dasharray) → {Axis}
-
Sets the dasharray of the primary grid lines
Parameters:
Name Type Description dasharray
String The dasharray of the primary grid lines
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
getPrimaryGridDasharray() → {String}
-
Gets the dasharray of the primary grid lines
- 1.13.3
Since:
Source:
Returns:
( String )dasharray - The dasharray of the primary grid lines
-
setSecondaryGridDasharray(dasharray) → {Axis}
-
Sets the dasharray of the secondary grid lines
Parameters:
Name Type Description dasharray
String The dasharray of the secondary grid lines
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
getSecondaryGridDasharray() → {String}
-
Gets the dasharray of the secondary grid lines
- 1.13.3
Since:
Source:
Returns:
( String )dasharray - The dasharray of the secondary grid lines
-
setLabelColor(color) → {Axis}
-
Sets the color of the label
Parameters:
Name Type Description color
String The new color of the label
- 1.13.2
Since:
Source:
Returns:
( Axis )The current axis
-
getLabelColor() → {String}
-
Gets the color of the label
- 1.13.2
Since:
Source:
Returns:
( String )The color of the label
-
isX() → {Boolean}
-
Returns:
( Boolean )true if it is an x axis, false otherwise
-
isY() → {Boolean}
-
Returns:
( Boolean )true if it is an y axis, false otherwise
-
setUnit(unit) → {Axis}
-
Sets the unit of the axis
Parameters:
Name Type Description unit
String The unit of the axis
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
setUnitDecade(on) → {Axis}
-
Allows the unit to scale with thousands
Parameters:
Name Type Description on
Boolean Enables this mode
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
setScientific(on) → {Axis}
-
Enable the scientific mode for the axis values. This way, big numbers can be avoided, e.g. "1000000000" would be displayed 1 with 109 or "G" shown on near the axis unit.
Parameters:
Name Type Description on
Boolean Enables the scientific mode
- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis
-
setScientificScale(scientificScale) → {Axis}
-
In the scientific mode, forces the axis to take a specific power of ten. Useful if you want to show kilometers instead of meters for example. In this case you would use "3" as a value.
Parameters:
Name Type Description scientificScale
Number Forces the scientific scale to take a defined power of ten
- 1.13.3
Since:
Source:
See:
Returns:
( Axis )The current axis
-
setEngineering(engineeringScaling) → {Axis}
-
The engineer scaling is similar to the scientific scaling (Axis#setScientificScale) but allowing only mupltiples of 3 to be used to scale the axis (for instance, go from grams to kilograms while skipping decagrams and hexagrams)
Parameters:
Name Type Description engineeringScaling
Boolean true
to turn on the engineering scaling- 1.13.3
Since:
Source:
See:
Returns:
( Axis )The current axis
-
setLogScale(logScale) → {Axis}
-
Enables log scaling
Parameters:
Name Type Description logScale
Boolean true
to enable the log scaling,false
to disable it- 1.13.3
Since:
Source:
Returns:
( Axis )The current axis


The XML processor offers a number of hooks for customization. These hooks are defined as function objects, and can be provided by the caller.
The following customization functions are available. If they also have access to their own state variable, the access function for this state is identified within parentheses:
For all of the above state access functions, the function with one argument (e.g. event_state(GlobalState)) will read the state variable, while the function with two arguments (e.g.: event_state(NewEventState, GlobalState)) will modify it.
For each function, the description starts with the syntax for specifying the function in the Option_list. The general forms are {Tag, Fun}, or {Tag, Fun, LocalState}. The second form can be used to initialize the state variable in question.
All customization functions are free to access a "User state" variable. Care must of course be taken to coordinate the use of this state. It is recommended that functions, which do not really have anything to contribute to the "global" user state, use their own state variable instead. Another option (used in e.g. xmerl_eventp.erl) is for customization functions to share one of the local states (in xmerl_eventp.erl, the continuation function and the fetch function both access the cont_state.)
Functions to access user state:
{event_fun, fun()} | {event_fun, fun(), EventState}
The event function is called at the beginning and at the end of a parsed entity. It has the following format and semantics:
|
{hook_fun, fun()} | {hook_fun, fun(), HookState}
The hook function is called when the processor has parsed a complete entity. Format and semantics:
|
The relationship between the event function, the hook function and the accumulator function is as follows:
{fetch_fun, fun()} | {fetch_fun, fun(), FetchState}
The fetch function is called in order to fetch an external resource (e.g. a DTD).
The fetch function can respond with three different return values:
|
Format and semantics:
|
{continuation_fun, fun()} | {continuation_fun, fun(), ContinuationState}
The continuation function is called when the parser encounters the end of the byte stream. Format and semantics:
|
{rules, ReadFun : fun(), WriteFun : fun(), RulesState} | {rules, Table : ets()}
The rules functions take care of storing scanner information in a rules database. User-provided rules functions may opt to store the information in mnesia, or perhaps in the user_state(RulesState).
The following modes exist:
The format for the read and write functions are as follows:
|
Here is a summary of the data objects currently being written by the scanner:
| Context | Key Value | Definition |
|---|---|---|
| notation | NotationName | {system, SL} | {public, PIDL, SL} |
| elem_def | ElementName | #xmlElement{content = ContentSpec} |
| parameter_entity | PEName | PEDef |
| entity | EntityName | EntityDef |
where
|
NOTE: When <Elem> is not wrapped with <Occurrence>, (Occurrence = once) is implied.
{acc_fun, fun()}
The accumulator function is called to accumulate the contents of an entity.When parsing very large files, it may not be desirable to do so.In this case, an acc function can be provided that simply doesn't accumulate.
Note that it is possible to even modify the parsed entity before accumulating it, but this must be done with care. xmerl_scan performs post-processing of the element for namespace management. Thus, the element must keep its original structure for this to work.
The acc function has the following format and semantics:
|
The close function is called when a document (either the main document or an external DTD) has been completely parsed. When xmerl_scan was started using xmerl_scan:file/[1,2], the file will be read in full, and closed immediately, before the parsing starts, so when the close function is called, it will not need to actually close the file. In this case, the close function will be a good place to modify the state variables.
Format and semantics:
|
See xmerl_test.erl
for more examples.
The following sample program illustrates three ways of scanning a document:
|


--- layout: page title: About header-img: "img/about-bg.png" ---
I starting building websites using WordPress after enjoying tinkering with my former pilates studio website more than teaching pilates. Now I am working towards a full-time career in web development through The Flatiron School online web developer program.


"d'Arc" (in this case, pronounced "dork") is the name of the beloved national French heroine who rallied her countrymen's spirits to recover their homeland in the 100 Years War against the English. She led the French army to several glorious victories, was captured by the Burgundians, sold to the English, found guilty of witchcraft by the Church and burned at the stake when she was 19 years old. Is that sad? Twenty-five years after, the Pope pronounced her innocent, declared her a martyr and some centuries later she was pronounced a Saint.
Is there a lesson in that?
So "d'Arc" is neither an acronym nor an abbreviation, but a name. Like most names, it should be written the way the authorities ask you to, in this case, "d'Arc". Yes, it's complicated, but worth it. Please do not write it as "DARC", which is both ugly and confusing, because then it becomes an acronym with different meanings for different people.  Especially when creating folder names. And file names. God is watching. You must do things the right way.
The d'Arc project was inspired by the exuberant welcome to the contribution of Fleece at the ever open-minded Lua mailing list, by the high arbiters of proper software engineering, defected and asylumed there from their Java past at project Dark Star it was rumored. Therefore, the "J" of Jeanne is an intended pun on Java. Oh wait, not, it was the sound-wise association of "d'Arc" with black magic! Or, so very sad to even hint at, maybe the connection was the burning at the stake, by the righteous worhsippers of the true faith?  How this never gets old. Mankind is so doomed. Whatever.
I am sure Jeanne (19), is watching from the High Heavens and loves d'Arc. From the woods, this is to You!


Our our niece, Kara, was hit by a car while walking...
this is a test
you have not subscribed to any prayer requests.
You have fulfilled 1792 prayer requests during 13.8 hours of prayer sessions.
no notes for this session


Fetches the metadata file, parses it and returns a promise of the result.
Fetches a text file and returns a promise of the result.
Parses an ArrayBuffer of a proto txt file into a raw Graph object.
Parses a ArrayBuffer of a proto txt file into javascript object.
The ArrayBuffer or file object implementing slice.
Map (Set) of all the repeated fields, since you can't tell directly from the pbtxt if a field is repeated or not.
The parsed object.
Parses a native js value, which can be either a string, boolean or number.
The value to be parsed.
Parse a file object in a streaming fashion line by line (or custom delim). Can handle very large files.
The callback called on each line
The size of each read chunk. (optional)
The delimiter used to split a line. (optional)
A promise for when it is finished.
TODO: REMOVE THIS Since proto-txt doesn't explicitly say whether an attribute is repeated (an array) or not, we keep a hard-coded list of attributes that are known to be repeated. This list is used in parsing time to convert repeated attributes into arrays even when the attribute only shows up once in the object.
Generated using TypeDoc
Fetches the graph file, parses it and returns a promise of the result. The result will be undefined if the graph is empty.


2020
Feb 25
Azure Infrastructure as C# and F#
Feb 20
Cloud Infrastructure as C# and F# with Pulumi
Feb 19
Cloud Infrastructure as C# and F# with Pulumi
Feb 18
Cloud Infrastructure as C# and F# with Pulumi
Feb 18
Workshop: Azure Infrastructure as Code with Pulumi and C#
Feb 17
Introduction to F# and Functional Programming
Feb 12
Cloud Infrastructure as C# and F# with Pulumi
Feb 11
Cloud Infrastructure as C# and F# with Pulumi
Jan 30
Cloud Infrastructure as C# and F# with Pulumi
Jan 17
Cloud Infrastructure as C# and F# with Pulumi
2019
Nov 20
Infrastructure as TypeScript (in Russian)
Nov 19
Workshop: Azure Infrastructure as Code (in Russian)
Nov 13
Infrastructure as TypeScript
Nov 8
From YAML to TypeScript: Developer’s View on Cloud Automation
Nov 6
Serverless Infrastructure as Code
Oct 30
Cloud Infrastructure as Code
Oct 30
Serverless Functions Azure, AWS, GCP
Oct 14
Workshop: Serverless Infrastructure as Code
Sep 11
Planet Scale Applications with Cosmos DB and Pulumi
June 8
All-In on Cloud (in Russian)
May 16
Serverless Under the Hood (in Russian)
Apr 10
Serverless Scalability Myth Busters
Apr 9
Serverless Workflows with Durable Functions
Apr 5
Azure Durable F#unctions
Apr 4
Cloud Infrastructure as F#
Feb 2
Infrastructure as Typescript
Jan 17
Serverless Workflows with Durable Functions
Jan 16
All-In on Cloud
2018
Nov 29
Serverless Workflows with Durable Functions
Nov 16
All-in on Cloud: How We Moved from Million Euro Worth of Hardware to Azure PaaS
Nov 12
Performance Tales of Serverless
Nov 1
All-in on Cloud: How We Moved from Million Euro Worth of Hardware to Azure PaaS
Oct 13
Performance Tales of Serverless
Sep 29
Monads Explained for OOP Developers
Sep 28
Performance Tales of Serverless
Sep 18
Introduction to F# and Functional Programming
May 9
Performance Tales of Serverless
Apr 14
Monads Explained for OOP Developers
Apr 13
Performance Tales of Serverless
Apr 5
Azure F#unctions
2017
Nov 8
Azure F#unctions
Oct 13
Event Driven Applications in F#
Aug 25
Built with Aurelia: Trip Monitor
May 8
Why Learn F# and Functional Programming
Jan 12
Introduction of Functional Programming & Taste of F#


Komodo
introductions
Are you a developer or blockchain enthusiast? Introduce yourself. Please note that normal chat messages will be removed. Go to #general to start a discussion or ask a follow-up question.
100 messages
Between 09-Dec-19 12:00 AM and 10-Dec-19 12:00 AM
YAGPDB.xyz
BOT
09-Dec-19 12:43 AM
yyy#9105<PHONE_NUMBER>29712129)
New user joined waiting to be verified as a human
YAGPDB.xyz
BOT
09-Dec-19 12:53 AM
yyy#9105<PHONE_NUMBER>29712129)
Kicked for not verifying within deadline
YAGPDB.xyz
BOT
09-Dec-19 01:02 AM
houxu#9210<PHONE_NUMBER>13118477)
New user joined waiting to be verified as a human
YAGPDB.xyz
BOT
09-Dec-19 01:12 AM
houxu#9210<PHONE_NUMBER>13118477)
Kicked for not verifying within deadline
YAGPDB.xyz
BOT
09-Dec-19 01:50 AM
MackParts#2582<PHONE_NUMBER>59916557)
New user joined waiting to be verified as a human
MackParts#2582<PHONE_NUMBER>59916557)
User successfully verified
YAGPDB.xyz
BOT
09-Dec-19 03:12 AM
Владислав#0792<PHONE_NUMBER>07083776)
New user joined waiting to be verified as a human
YAGPDB.xyz
BOT
09-Dec-19 03:22 AM
Владислав#0792<PHONE_NUMBER>07083776)
Kicked for not verifying within deadline
Candid#7296<PHONE_NUMBER>13517353)
New user joined waiting to be verified as a human
Pungent Side#6236<PHONE_NUMBER>77144064)
New user joined waiting to be verified as a human
Wide-eyed Dish#3654<PHONE_NUMBER>72356864)
New user joined waiting to be verified as a human
Immaterial Street#5148<PHONE_NUMBER>90408449)
New user joined waiting to be verified as a human
Powerless#0613<PHONE_NUMBER>44558623)
New user joined waiting to be verified as a human
Ashamed Review#4938<PHONE_NUMBER>81733387)
New user joined waiting to be verified as a human
Equal Rule#7508<PHONE_NUMBER>92075776)
New user joined waiting to be verified as a human
Flat#8324<PHONE_NUMBER>02948620)
New user joined waiting to be verified as a human
Unfinished Impression#1579<PHONE_NUMBER>99143946)
New user joined waiting to be verified as a human
Loyal Freedom#8569<PHONE_NUMBER>28833300)
New user joined waiting to be verified as a human
Dizzy Inspector#4472<PHONE_NUMBER>17836833)
New user joined waiting to be verified as a human
Beneficial Black#5902<PHONE_NUMBER>58858027)
New user joined waiting to be verified as a human
Hurtful#2329<PHONE_NUMBER>92992256)
New user joined waiting to be verified as a human
Soulful Place#5958<PHONE_NUMBER>00638976)
New user joined waiting to be verified as a human
Magnificent#1310<PHONE_NUMBER>59697930)
New user joined waiting to be verified as a human
Wicked#4493<PHONE_NUMBER>75435031)
New user joined waiting to be verified as a human
Pertinent#6782<PHONE_NUMBER>34939176)
New user joined waiting to be verified as a human
Wordy Tear#8223<PHONE_NUMBER>07637258)
New user joined waiting to be verified as a human
Feminine#8813<PHONE_NUMBER>53563678)
New user joined waiting to be verified as a human
Perfect Rough#7447<PHONE_NUMBER>94692647)
New user joined waiting to be verified as a human
Quixotic Election#8606<PHONE_NUMBER>57984078)
New user joined waiting to be verified as a human
Ethical Draft#4986<PHONE_NUMBER>34280725)
New user joined waiting to be verified as a human
Slight Feedback#8780<PHONE_NUMBER>37499648)
New user joined waiting to be verified as a human
Live Devil#8005<PHONE_NUMBER>00388096)
New user joined waiting to be verified as a human
Hopeful Leather#3686<PHONE_NUMBER>85655838)
New user joined waiting to be verified as a human
Deep Leg#2031<PHONE_NUMBER>87948042)
New user joined waiting to be verified as a human
Timely Priest#7403<PHONE_NUMBER>51847178)
New user joined waiting to be verified as a human
Well-off Son#5937<PHONE_NUMBER>36649482)
New user joined waiting to be verified as a human
Ambitious Rough#5883<PHONE_NUMBER>62214410)
New user joined waiting to be verified as a human
Unimportant Nerve#4573<PHONE_NUMBER>35645696)
New user joined waiting to be verified as a human
Whirlwind Lab#1011<PHONE_NUMBER>22400532)
New user joined waiting to be verified as a human
Ultimate Plane#5635<PHONE_NUMBER>62753792)
New user joined waiting to be verified as a human
Twin#1118<PHONE_NUMBER>45578004)
New user joined waiting to be verified as a human
Visible Site#4520<PHONE_NUMBER>28919050)
New user joined waiting to be verified as a human
Insecure Rope#6012<PHONE_NUMBER>76968746)
New user joined waiting to be verified as a human
Favorable National#4929<PHONE_NUMBER>88213505)
New user joined waiting to be verified as a human
Any#4431<PHONE_NUMBER>70788362)
New user joined waiting to be verified as a human
Superb#5475<PHONE_NUMBER>24193027)
New user joined waiting to be verified as a human
Wee#0747<PHONE_NUMBER>89909277)
New user joined waiting to be verified as a human
Stark#1743<PHONE_NUMBER>92333059)
New user joined waiting to be verified as a human
Confused#5663<PHONE_NUMBER>09663232)
New user joined waiting to be verified as a human
General Prompt#7136<PHONE_NUMBER>85168897)
New user joined waiting to be verified as a human
Each#2157<PHONE_NUMBER>15403535)
New user joined waiting to be verified as a human
Accomplished Wash#2242<PHONE_NUMBER>32383745)
New user joined waiting to be verified as a human
Glittering#7683<PHONE_NUMBER>30783242)
New user joined waiting to be verified as a human
Cheery#8415<PHONE_NUMBER>99802112)
New user joined waiting to be verified as a human
Sour#8156<PHONE_NUMBER>08889859)
New user joined waiting to be verified as a human
Outgoing#6512<PHONE_NUMBER>67327233)
New user joined waiting to be verified as a human
Firm Chocolate#4956<PHONE_NUMBER>34269725)
New user joined waiting to be verified as a human
Worst#7059<PHONE_NUMBER>33379880)
New user joined waiting to be verified as a human
Bleak Stomach#4973<PHONE_NUMBER>62034964)
New user joined waiting to be verified as a human
Extraneous Play#6681<PHONE_NUMBER>90283018)
New user joined waiting to be verified as a human
Determined Girl#9959<PHONE_NUMBER>89029918)
New user joined waiting to be verified as a human
Infantile#4068<PHONE_NUMBER>01355264)
New user joined waiting to be verified as a human
Hard#9126<PHONE_NUMBER>89580555)
New user joined waiting to be verified as a human
Feisty#2730<PHONE_NUMBER>65485333)
New user joined waiting to be verified as a human
Teeming Audience#4320<PHONE_NUMBER>50358297)
New user joined waiting to be verified as a human
Several Theory#5064<PHONE_NUMBER>60906505)
New user joined waiting to be verified as a human
Joyous Discount#2303<PHONE_NUMBER>92806443)
New user joined waiting to be verified as a human
Silver Towel#7523<PHONE_NUMBER>84239360)
New user joined waiting to be verified as a human
Imaginary#7889<PHONE_NUMBER>85644546)
New user joined waiting to be verified as a human
Striped#2401<PHONE_NUMBER>15443712)
New user joined waiting to be verified as a human
Unlucky#0120<PHONE_NUMBER>72632373)
New user joined waiting to be verified as a human
Original#8170<PHONE_NUMBER>90188292)
New user joined waiting to be verified as a human
YYF#7365<PHONE_NUMBER>45995597)
New user joined waiting to be verified as a human
Candid#7296<PHONE_NUMBER>13517353)
Kicked for not verifying within deadline
Pungent Side#6236<PHONE_NUMBER>77144064)
Kicked for not verifying within deadline
Immaterial Street#5148<PHONE_NUMBER>90408449)
Kicked for not verifying within deadline
Wide-eyed Dish#3654<PHONE_NUMBER>72356864)
Kicked for not verifying within deadline
Powerless#0613<PHONE_NUMBER>44558623)
Kicked for not verifying within deadline
Equal Rule#7508<PHONE_NUMBER>92075776)
Kicked for not verifying within deadline
Ashamed Review#4938<PHONE_NUMBER>81733387)
Kicked for not verifying within deadline
Unfinished Impression#1579<PHONE_NUMBER>99143946)
Kicked for not verifying within deadline
Flat#8324<PHONE_NUMBER>02948620)
Kicked for not verifying within deadline
Dizzy Inspector#4472<PHONE_NUMBER>17836833)
Kicked for not verifying within deadline
Loyal Freedom#8569<PHONE_NUMBER>28833300)
Kicked for not verifying within deadline
Hurtful#2329<PHONE_NUMBER>92992256)
Kicked for not verifying within deadline
Beneficial Black#5902<PHONE_NUMBER>58858027)
Kicked for not verifying within deadline
Magnificent#1310<PHONE_NUMBER>59697930)
Kicked for not verifying within deadline
Soulful Place#5958<PHONE_NUMBER>00638976)
Kicked for not verifying within deadline
Wicked#4493<PHONE_NUMBER>75435031)
Kicked for not verifying within deadline
Pertinent#6782<PHONE_NUMBER>34939176)
Kicked for not verifying within deadline
Wordy Tear#8223<PHONE_NUMBER>07637258)
Kicked for not verifying within deadline
Feminine#8813<PHONE_NUMBER>53563678)
Kicked for not verifying within deadline
Quixotic Election#8606<PHONE_NUMBER>57984078)
Kicked for not verifying within deadline
Perfect Rough#7447<PHONE_NUMBER>94692647)
Kicked for not verifying within deadline
Ethical Draft#4986<PHONE_NUMBER>34280725)
Kicked for not verifying within deadline
Slight Feedback#8780<PHONE_NUMBER>37499648)
Kicked for not verifying within deadline
Live Devil#8005<PHONE_NUMBER>00388096)
Kicked for not verifying within deadline
Hopeful Leather#3686<PHONE_NUMBER>85655838)
Kicked for not verifying within deadline
Deep Leg#2031<PHONE_NUMBER>87948042)
Kicked for not verifying within deadline
Timely Priest#7403<PHONE_NUMBER>51847178)
Kicked for not verifying within deadline


Don't worry, we'll help you out!
Enter your email address here to receive a username reminder and password reset instructions. Just follow the prompts and you'll be back on WiFi Chat in no time.


Logo
You have matched :
Yet to be matched :
Well done!
You have done a great job!!! Press "F5" to Play Again!


{
"revapi": {
"java": {
"missing-classes": {
"behavior": "report",
"ignoreMissingAnnotations": false
},
"reportUsesFor": ["java.missing.newClass", "java.class.nonPublicPartOfAPI"],
"filter": {
"classes": {
"regex": true,
"include": ["com\\.acme\\.api\\..*"]
"exclude": ["com\\.acme\\.api\\.WeRegretWePlacedThisInApi"]
},
"packages": {
"regex": true,
"include": ["com\\.acme\\.api\\..*"]
"exclude": ["com\\.acme\\.internal"]
}
}
}
}
}
Java Extension Configuration
Extension: revapi.java
Java extension is the actual thing that performs the API checks of the Java code. It can detect a large number of checks for binary, source and also some rudimentary semantic (or behavioral) analysis. For the list of checks, please consult the homepage of the extension.
On this page you can learn about the possible configuration options of the Java extension.
Class/Package Filtering
Given Java’s lacking modularity (prior to Java9), authors are often forced to make classes that are essentially an implementation detail of a library public. Such classes are often included in packages like impl
or internal
to hint at their non-public nature.
While Revapi offers the basic filtering capabilities using the basic filter, it often is much simpler to exclude classes or packages like that using this filter (or the package filter), specifically made for this purpose (if for nothing else then for the simpler configuration).
By default, all classes are included. If the include filter is specified, only the classes matching the include filter are included in the API check. The exclude filter can take out classes that would otherwise be included.
It is not possible include class that matches a class exclude filter (i.e. if include and exclude filter match the same class, the class is not included) but it is possible to include an inner classes while its parent class is excluded.
It is not possible include classes in package that matches a package exclude filter (i.e. if include and exclude filter match the same package, the classes are not included).
Sample Configuration
Properties
-
missing-classes.behavior
-
This tells the checker what to do when a class is found in the API that is not found in any of the provided jars. The possible values are:
error
,ignore
orreport
(the default). Ifreport
is chosen then the missing class is reported as a problem with eitherjava.missing.oldClass
code orjava.missing.newClass
depending on whether the class was found missing in the old or new version of the API. -
missing-classes.ignoreMissingAnnotations
-
If
true
(the default isfalse
) the usage chain of annotation classes will not be tracked. The end result of this is that annotation classes will not be considered part of the API and thus missing annotation classes will not be reported. -
reportUsesFor
-
Revapi is able to track usage chains of the classes it finds in the API. For some (or all) problems you may want to know how and where a certain class is used to be able to determine if that’s something wrong or not. This configuration property can either be a string
all-differences
, signifying that an example use chain will be reported for every found difference or a list of difference codes for which the example use chain should be produced. By default the usage chains are reported for the following problem codes:java.missing.newClass
,java.missing.oldClass
,java.class.nonPublicPartOfAPI
,java.class.externalClassNoLongerExposedInAPI
,java.class.externalClassExposedInAPI
. -
filter.classes.regex
-
Specifies whether to consider the strings in
exclude
andinclude
lists as regular expressions or not. The default value isfalse
, meaning the strings are not considered as regular expressions. -
filter.classes.exclude
-
List of strings representing FQCNs or regular expressions matching FQCNs. Classes with the matching fully qualified names (and the members of those classes) will be excluded from the API check.
-
filter.classes.include
-
List of strings representing FQCNs or regular expressions matching FQCNs. Only classes with the matching fully qualified names (and their members) will be included in the API check.
-
filter.packages.regex
-
Specifies whether to consider the strings in
exclude
andinclude
lists as regular expressions or not. The default value isfalse
, meaning the strings are not considered as regular expressions. -
filter.packages.exclude
-
List of strings representing full package names or regular expressions matching them. Classes with the matching package names (and the members of those classes) will be excluded from the API check.
-
filter.packages.include
-
List of strings representing full package names or regular expressions matching them. Classes with the matching package names (and the members of those classes) will be included in the API check.
Notes
Contrary to intuition, java packages are not hierarchical, even though they have hierarchical names. In Java parlance, package com.acme.foo
is a sub-package of com.acme
but that does not mean that it’s enclosing element is com.acme
. No, each package is a top level element that does not have any parent elements and which only contains classes, not other packages.
Therefore if you want to exclude a package and all its sub-packages, you need to use a regular expression "com\\.acme(\\..+)?"
which will match the com.acme
package and any of its sub-packages.


SKILLS
HTML CSS SASS JavaScript Bootstrap UIKit SASS LESS Ruby Embedded Ruby Ruby on Rails Composer PostgreSQL SQLite Heroku Object Oriented Design User Experience Design Web Development Web Application Devemopment
Experience
2014 - Present Freelance Software Engineer
Education
2014 - Present Harvard Extension School
2010 - 2013 Northeastern University
Brief Bio
I am currently employed as a freelance software developer, primarily working with Ruby on Rails, SQL, and JavaScript.
I am taking Dynamic Web Applications to gain a better understanding of back-end development fundamentals.
My pride and joy is my Apple MacBook Pro with a 2.8GHz Intel Core i7 processor and 8GB 1600MHz DDR3 memory. It runs on Mac OS -v 10.9.4.


Howdy Neighbor! *bzzt*
Lets play a game! Please enter a number in the field below
Any old Number if you please!
Let's go! *pop*


@* * Copyright 2023 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import uk.gov.hmrc.fhregistrationfrontend.views.helpers._ @import uk.gov.hmrc.fhregistrationfrontend.views.html.helpers._ @(formDate: Form[_], params: uk.gov.hmrc.fhregistrationfrontend.views.helpers.AddressUKParams)(implicit message: Messages) @fieldName = @{ params.context match { case Some(context) => context + "_" + params.name case _ => params.name } }


Math Trick:
Your uncircled digits were
. You circled a .
Getting your GPS location...
Location acquired!
Connecting to Dept. of Defense satellites...
Authentication complete!
Zooming in on your location...
Target found!
Initializing 'see through wall' technology...
Initialized!
Focusing camera lens...
Answer acquired!
Quadratic Equation Calculator:
A = , B = , C =
X =


Cardiovascular diseases are the cause of millions of deaths across the globe; Hence, early detection of heart disease onset is of great practical interest. In this app an AI is used which was trained to detect a presence of heart sound abnormalities in a heartbeat audio. It is assumed that the user has access to a microphone (e.g. a microphone in a smartphone) which can pick up on patient's heart sound.


Photo Competition Entry Record
Entrant's Number
Name of Entrant
Picture Title
Picture Location
Date of Entry
Category Code
Camera Type


class Solution: def minReorder(self, n: int, con: List[List[int]]) -> int: D = collections.defaultdict(list) for x, y in con: D[x].append((y, 1)) D[y].append((x, -1)) q = [0] visited = {0} count = 0 while q: newq = [] for x in q: for next_x, d in D[x]: if next_x not in visited: visited.add(next_x) newq.append(next_x) if d == 1: count += 1 q = newq return count