Functions
heading¶
Heading
Generates an HTML heading tag. First param is the data.
Second param is the size of the heading tag.
« More »
Unordered List
Generates an HTML unordered list from an single or multi-dimensional array.
« More »
Ordered List
Generates an HTML ordered list from an single or multi-dimensional array.
« More »
_list¶
Generates the list
Generates an HTML ordered list from an single or multi-dimensional array.
 Values are saved in the
doctypes config file.
« More »
link_tag¶
Link
Generates link to a CSS file
« More »
nbs¶
Generates non-breaking space entities based on number supplied
« More »
Functions
word_limiter¶
Word Limiter
Limits a string to X number of words.
« More »
character_limiter¶
Character Limiter
Limits the string based on the character count. Preserves complete words
so the character count may not be exactly as specified.
« More »
ascii_to_entities¶
High ASCII to Entities
Converts High ascii text and MS Word special characters to character entities
« More »
entities_to_ascii¶
Entities to ASCII
Converts character entities back to ASCII
« More »
word_censor¶
Word Censoring Function
Supply a string and an array of disallowed words and any
matched words will be converted to #### or to the replacement
word you've submitted.
 Maintains the integrity of words.
Anything placed between {unwrap}{/unwrap} will not be word wrapped, nor
will URLs.
 Segments can be passed via the
first parameter either as a string or an array.
« More »
base_url¶
Base URL
Create a local URL based on your basepath.
Segments can be passed in as a string or an array, same as site_url
or a URL to a file can be passed in, e.g. to an image file.
« More »
current_url¶
Current URL
Returns the full URL (including segments) of the page where this
function is placed
« More »
uri_string¶
URL String
Returns the URI segments.
« More »
index_page¶
Index page
Returns the "index_page" from your config file
« More »
anchor¶
Anchor Link
Creates an anchor based on the local URL.
« More »
safe_mailto¶
Encoded Mailto Link
Create a spam-protected mailto link written in Javascript
« More »
auto_link¶
Auto-linker
Automatically links URL and Email addresses.
Note: There's a bit of extra code here to deal with
URLs or emails that end in a period. We'll strip these
off and add them after the link.
« More »
prep_url¶
Prep URL
Simply adds the http:// part if no scheme is included
« More »
url_title¶
Create URL Title
Takes a "title" string as input and creates a
human-friendly URL string with a "separator" string
as the word separator.
« More »
redirect¶
Header Redirect
Header redirect in two flavors
For very fine grained control over headers, you could use the Output
Library's set_header() function.
« More »
_parse_attributes¶
Parse out the attributes
Some of the functions use this
« More »
Functions
set_value¶
Form Value
Grabs a value from the POST array for the specified field so you can
re-populate an input field or textarea. If Form Validation
is active it retrieves the info from the validation class
« More »
set_select¶
Set Select
Let's you set the selected value of a <select> menu via data in the POST array.
If Form Validation is active it retrieves the info from the validation class
« More »
set_checkbox¶
Set Checkbox
Let's you set the selected value of a checkbox via the value in the POST array.
If Form Validation is active it retrieves the info from the validation class
« More »
set_radio¶
Set Radio
Let's you set the selected value of a radio field via info in the POST array.
If Form Validation is active it retrieves the info from the validation class
« More »
validation_errors¶
Validation Error String
Returns all the errors associated with a form submission. This is a helper
function for the form validation class.
« More »
_attributes_to_string¶
Attributes To String
Helper function used by some of the form helpers
« More »
_get_validation_object¶
Validation Object
Determines what the form validation class was instantiated as, fetches
the object and returns it.
« More »
Functions
smiley_js¶
Smiley Javascript
Returns the javascript required for the smiley insertion. Optionally takes
an array of aliases to loosely couple the smiley array to the view.
« More »
get_clickable_smileys¶
Get Clickable Smileys
Returns an array of image tag links that can be clicked to be inserted
into a form field.
« More »
parse_smileys¶
Parse Smileys
Takes a string as input and swaps any contained smileys for the actual image
« More »
_get_smiley_array¶
Get Smiley Array
Fetches the config/smiley.php file
« More »
js_insert_smiley¶
JS Insert Smiley
Generates the javascript function needed to insert smileys into a form field
DEPRECATED as of version 1.7.2, use smiley_js instead
« More »
Functions
read_file¶
Read File
Opens the file specfied in the path and returns it as a string.
« More »
write_file¶
Write File
Writes data to the file specified in the path.
Creates a new file if non-existent.
« More »
delete_files¶
Delete Files
Deletes all files contained in the supplied directory path.
Files must be writable or owned by the system in order to be deleted.
If the second parameter is set to TRUE, any directories contained
within the supplied base directory will be nuked as well.

Any sub-folders contained within the specified path are read as well.
« More »
get_dir_file_info¶
Get Directory File Information
Reads the specified directory and builds an array containing the filenames,
filesize, dates, and permissions
Any sub-folders contained within the specified path are read as well.
« More »
get_file_info¶
Get File Info
Given a file and path, returns the name, path, size, date modified
Second parameter allows you to explicitly declare what information you want returned
Options are: name, server_path, size, date, readable, writable, executable, fileperms
Returns FALSE if the file cannot be found.
« More »
get_mime_by_extension¶
Get Mime by Extension
Translates a file extension into a mime type based on config/mimes.php.
Returns FALSE if it can't determine the type, or open the mime config file
Note: this is NOT an accurate way of determining file mime types, and is here strictly as a convenience
It should NOT be trusted, and should certainly NOT be used for security
« More »
symbolic_permissions¶
Symbolic Permissions
Takes a numeric value representing a file's permissions and returns
standard symbolic notation representing that value
« More »
octal_permissions¶
Octal Permissions
Takes a numeric value representing a file's permissions and returns
a three character string representing the file's octal permissions
« More »
Functions
now¶
Get "now" time
Returns time() or its GMT equivalent based on the config file preference
« More »
mdate¶
Convert MySQL Style Datecodes
This function is identical to PHPs date() function,
except that it allows date codes to be formatted using
the MySQL style, where each code letter is preceded
with a percent sign: %Y %m %d etc...
The benefit of doing dates this way is that you don't
have to worry about escaping your text letters that
match the date codes.
« More »
standard_date¶
Standard Date
Returns a date formatted according to the submitted standard.
« More »
timespan¶
Timespan
Returns a span of seconds in this format:
10 days 14 hours 36 minutes 47 seconds
« More »
days_in_month¶
Number of days in a month
Takes a month/year as input and returns the number of days
for the given month/year. Takes leap years into consideration.
« More »
local_to_gmt¶
Converts a local Unix timestamp to GMT
« More »
gmt_to_local¶
Converts GMT time to a localized value
Takes a Unix timestamp (in GMT) as input, and returns
at the local value based on the timezone and DST setting
submitted
« More »
mysql_to_unix¶
Converts a MySQL Timestamp to Unix
« More »
unix_to_human¶
Unix to "Human"
Formats Unix timestamp to the following prototype: 2006-08-21 11:35 PM
« More »
human_to_unix¶
Convert "human" date to GMT
Reverses the above process
« More »
timezones¶
Timezones
Returns an array of timezones. This is a helper function
for various other ones in this library
« More »
Functions
trim_slashes¶
Trim Slashes
Removes any leading/trailing slashes from a string:
/this/that/theother/
becomes:
this/that/theother
« More »
strip_slashes¶
Strip Slashes
Removes slashes contained in a string or in an array
« More »
strip_quotes¶
Strip Quotes
Removes single and double quotes from a string
« More »
quotes_to_entities¶
Quotes to Entities
Converts single and double quotes to entities
« More »
reduce_double_slashes¶
Reduce Double Slashes
Converts double slashes in a string to a single slash,
except those found in http://
http://www.some-site.com//index.php
becomes:
http://www.some-site.com/index.php
« More »
reduce_multiples¶
Reduce Multiples
Reduces multiple instances of a particular character.
 See docs...
« More »


[gecode-users] Reusing the old Gecode/J interface
Guido Tack
tack at gecode.org
Wed Aug 21 05:27:45 CEST 2013
Hello Hugh,
I would start from scratch. Gecode/J used a much tighter coupling between Java and C++ than necessary for most users (e.g. you could implement propagators and branchers in Java, which is usually not necessary). At the time we used SWIG to generate the interface from the C++ headers plus some custom annotations. I wasn't particularly impressed with the quality of the generated code (IIRC I even had to patch some things manually), and there was a huge problem with the Java multi thread garbage collection. But that was so long ago that I'd probably give it another try, especially if the interface you need is much simpler than what we had (we had to export C++ classes that you could subclass in Java, including virtual method calls etc... the result was a huge mess and not very efficient).
If you need more concrete ideas, just let me know.
Cheers,
Guido
On 21/08/2013, at 1:16 PM, Hugh Ferguson <Hugh.Ferguson at nzqa.govt.nz> wrote:
> I am evaluating various commercial and open-source CP solvers for use in a Java context. Gecode looks attractive, aside from the lack of a Java interface. It may be worth implementing a Java interface, given that we only need a small part of the API. I am aware that the Gecode/J interface was abandoned many years ago. Can anyone give me an idea of whether it would be worth using Gecode/J as a starting point, or whether it would be better to start from scratch?
>
> Thanks
>
>
> Hugh Ferguson
> Senior Analyst Programmer
> Information Systems
> New Zealand Qualifications Authority
>
> Ext: 3309
> DDI: 64-4-463-3309
>
> Web: http://www.nzqa.govt.nz/
> ********************************************************************************
> This email may contain legally privileged information and is intended only for the addressee. It is not necessarily the official view or
> communication of the New Zealand Qualifications Authority. If you are not the intended recipient you must not use, disclose, copy or distribute this email or
> information in it. If you have received this email in error, please contact the sender immediately. NZQA does not accept any liability for changes made to this email or attachments after sending by NZQA.
>
> All emails have been scanned for viruses and content by MailMarshal.
> NZQA reserves the right to monitor all email communications through its network.
>
> ********************************************************************************
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20130821/935e973c/attachment.html>
More information about the users
mailing list


Farmer John's hobby of conducting high-energy physics experiments on weekends has backfired, causing N wormholes (2 <= N <= 12, N even) to materialize on his farm, each located at a distinct point on the 2D map of his farm (the x,y coordinates are both integers).
According to his calculations, Farmer John knows that his wormholes will form N/2 connected pairs. For example, if wormholes A and B are connected as a pair, then any object entering wormhole A will exit wormhole B moving in the same direction, and any object entering wormhole B will similarly exit from wormhole A moving in the same direction. This can have rather unpleasant consequences.
For example, suppose there are two paired wormholes A at (1,1) and B at (3,1), and that Bessie the cow starts from position (2,1) moving in the +x direction. Bessie will enter wormhole B [at (3,1)], exit from A [at (1,1)], then enter B again, and so on, getting trapped in an infinite cycle!
| . . . . | A > B . Bessie will travel to B then + . . . . A then across to B again
Farmer John knows the exact location of each wormhole on his farm. He knows that Bessie the cow always walks in the +x direction, although he does not remember where Bessie is currently located.
Please help Farmer John count the number of distinct pairings of the wormholes such that Bessie could possibly get trapped in an infinite cycle if she starts from an unlucky position. FJ doesn't know which wormhole pairs with any other wormhole, so find all the possibilities (i.e., all the different ways that N wormholes could be paired such that Bessie can, in some way, get in a cycle). Note that a loop with a smaller number of wormholes might contribute a number of different sets of pairings to the total count as those wormholes that are not in the loop are paired in many different ways.
| Line 1: | The number of wormholes, N. |
| Lines 2..1+N: | Each line contains two space-separated integers describing the (x,y) coordinates of a single wormhole. Each coordinate is in the range 0..1,000,000,000. |
4 0 0 1 0 1 1 0 1
There are 4 wormholes, forming the corners of a square.
| Line 1: | The number of distinct pairings of wormholes such that Bessie could conceivably get stuck in a cycle walking from some starting point in the +x direction. |
2
If we number the wormholes 1..4 as we read them from the input, then if wormhole 1 pairs with wormhole 2 and wormhole 3 pairs with wormhole 4, Bessie can get stuck if she starts anywhere between (0,0) and (1,0) or between (0,1) and (1,1).
| . . . . 4 3 . . . Bessie will travel to B then 1-2-.-.-. A then across to B again
Similarly, with the same starting points, Bessie can get stuck in a cycle if the pairings are 1-3 and 2-4 (if Bessie enters WH#3 and comes out at WH#1, she then walks to WH#2 which transports here to WH#4 which directs her towards WH#3 again for a cycle).
Only the pairings 1-4 and 2-3 allow Bessie to walk in the +x direction from any point in the 2D plane with no danger of cycling.


Foo
Bar
Enter an essay that contains >= 50 words
Enter another essay that contains >= 50 words
Please enter an essay that contains the words "bebop funk"
Select a rhyming word
Now type a word that rhymes with your selection


I can't believe I did this for highlander. Really edgy kids use this for 6s mixes.
Get the Table filled first.
Please make sure that all nine names are entered.


Instructions: The photos need to be clear so that we are able to assess your condition accurately. See reference images for uploading each picture
Upload picture
of biting surface of upper teeth .
Upload picture
of biting surface of lower teeth.
OR
We will get back to you for online consultation within a week. This online consultation takes only few minutes. When you are ready, you can visit us for your treatment. So stop worrying about your dental problem and get the help you need by our highly trained team in safe and relaxing environment.
Instructions: The photos need to be clear so that we are able to assess your condition accurately. See reference images for uploading each picture
Upload picture
of biting surface of upper teeth .
Upload picture
of biting surface of lower teeth.
OR
We will get back to you for online consultation within a week. This online consultation takes only few minutes. When you are ready, you can visit us for your treatment. So stop worrying about your dental problem and get the help you need by our highly trained team in safe and relaxing environment.
Loading...


- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xmleditor.doc.user_1.0.600.v200901231300 [705] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsd.core_1.1.401.v200903020335 [706] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsd.ui_1.2.203.v200904300717 [707] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsdeditor.doc.user_1.0.700.v200905182240 [708] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl_1.0.0.v200905250058 [709] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl.core_1.0.0.v200905071815 [710] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl.debug.ui_1.0.0.v200904240436 [711] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl.doc_1.0.0.v200905071815 [712] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl.jaxp.debug_1.0.0.v200904240436 [713] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl.jaxp.debug.ui_1.0.0.v200904240436 [714] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl.jaxp.launching_1.0.0.v200904240436 [715] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl.launching_1.0.0.v200904241348 [716] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl.saxon_1.0.0.v200904240436 [717] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl.ui_1.0.0.v200904300717 [718] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wst.xsl.xalan_1.0.0.v200904240436 [719] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wtp.epp.package.capabilities_<IP_ADDRESS>90619-1417 [720] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wtp.epp.package.jee.intro_<IP_ADDRESS>90617-0522 [721] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wtp.javascript.capabilities_1.0.0.v200906072300 [722] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.727
- !MESSAGE Bundle org.eclipse.wtp.jee.capabilities_1.0.0.v200906072300 [723] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.eclipse.wtp.web.capabilities_1.0.0.v200906072300 [724] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.eclipse.wtp.xml.capabilities_1.0.0.v200906072300 [725] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.eclipse.xsd_2.5.0.v200906151043 [726] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.eclipse.xsd.edit_2.5.0.v200906151043 [727] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.hamcrest.core_1.1.0.v20090501071000 [728] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.jdom_1.0.0.v200806100616 [729] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.junit_3.8.2.v20090203-1005 [730] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.junit4_4.5.0.v20090423 [731] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.mortbay.jetty.server_6.1.15.v200905151201 [732] was not resolved.
- !SUBENTRY 2 org.mortbay.jetty.server 2 0 2010-02-27 15:26:49.728
- !MESSAGE Missing imported package org.mortbay.jetty.handler.management_0.0.0.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.mortbay.jetty.util_6.1.15.v200905182336 [733] was not resolved.
- !SUBENTRY 2 org.mortbay.jetty.util 2 0 2010-02-27 15:26:49.728
- !MESSAGE Missing imported package org.slf4j_1.3.0.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.objectweb.asm_3.1.0.v200803061910 [734] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.sat4j.core_2.1.0.v20090520 [735] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.sat4j.pb_2.1.0.v20090520 [736] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.uddi4j_2.0.5.v200805270300 [737] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle com.vmware.bfg.ivd_0.8.0 [738] was not resolved.
- !SUBENTRY 1 org.eclipse.osgi 2 0 2010-02-27 15:26:49.728
- !MESSAGE Bundle org.eclipse.osgi_3.5.2.R35x_v20100126 [739] was not resolved.


Just wondered if anyone had done one of these previously?
Obvious split is Ranger 21, Monk 6, Druid 13.
Ideas: Take Ranger levels first for max AB. Get Bane of Enemies at level 21. Boost Wisdom as high as possible. Take Zen Archery. Monk gets AC bonus and IKD. Druid gets Dragon shape. All classes make use of Wisdom. Ranger and Druid make a natural fit (e.g Animal Companion) Plenty of skill points so no need for high int (or cha) so the Ranger can be OK ahead of the Druid levels.
You need 18 levels of Druid to get Dragon Shape.
Besides, Bane of Enemies will only work on 5 different types of enemies (if I remember correctly).
Best way to see if anyone has posted a build like this is to go to the index on the builds forum. Then hit control-f and type one of the classes. Just keep hitting find next until you find something similar, or until you get through the whole page. _________________ Come visit the Epic Builders Guild for all the character info you could ever want or need: Click Here


!Kelleyia:
Remember, we will be judging you based on skill, technique, and consistency. We are looking for total perfection.
Fully grown Alpine Kookaburra, Alpine Cougar, Alpine Buffalo, Alpine Grendel and Over-hits count. Anything else is worthless.


Timeline over League of Legends Esports
-
Season One Worlds event - The first event
With a prize pool of only 100,000 US Dollars, the first event was held at Dreamhack in Jönköping, Sweden.
-
Season Two - The start of Regional Playoffs
The first kinds of regional playoffs begin, as a qualifying league for the world tournament at the end of the season.
-
World Championship Season Two - Season of the Network issues
During the World Championship playoffs Riot Games experienced Network Issues and later revealed their new LAN Client which would be used for the later tournaments.
-
Pro Players Recognized as Professional Athletes
Riot Games announced that the United States Citizenship and Immigration Services recognized League of Legends pro-players as professional athletes.
-
Mid Season Invitational Starts Up
In 2015 Riot Games announces a second world tournament known as Mid Season Invitational set between the spring and summer playoffs.
-
Riot Games gets sponsor from Louis Vuitton™
The 2019 World Playoffs gets designed a special Louis Vuitton™ designed trophy case along with prestige edition skin designs following their in game True Damage Skin Line.
Louis Vuitton™ also released League Of Legends inspired designs for their clothes in their shops.


This page collects common information about the venue, registration, and travel information for the following scientific events taking place in Frankfurt in September 2018:
The events will take place at Goethe-University, Campus Westend, 60323 Frankfurt am Main, Germany.
More information will be made available on this site as it becomes available.
David Sabel (Goethe-University Frankfurt, General Chair)
+49 (0) 69 / 798-28691
+49 (0) 69 / 798-28919
Institut für Informatik
Fachbereich Informatik und Mathematik
Goethe-Universität Frankfurt am Main
Robert-Mayer-Str. 11-15
D-60325 Frankfurt am Main
Germany


'Lethal Weapon 4' (1998)
A movie review by Walter Frith
Member of the 'Internet Movie Critics Association' http://www.geocities.com/Hollywood/Studio/5713/index.html
and
The 'Online Film Critics Society' http://smart.sbay.com/ofcs/
'Lethal Weapon 4' is the film Mel Gibson said he would never do. Never say never. With a pay cheque of 20 million dollars and a guarantee of 20 per cent of the film's earnings, "never" is a word the isn't found in Mel's vocabulary. This is a film made for one reason and one reason only: pure profit! That is always the case with sequels but in the case of Warner Brothers, it is particularly a show of desperation since they have had a number of flops recently and need a hit badly. I don't have a problem with movie sequels because in many ways, they're equivalent to visiting an old friend as you come back for more and more fun each time.
'Lethal Weapon 4' isn't a terrible movie, it's just one too many and the franchise is starting to show one thing: AGE! Mel Gibson, Danny Glover, Joe Pesci and Rene Russo are all starting to show signs of aging. Not too badly but in comparison to the other films: a lot.
As 'Lethal Weapon 4' opens, the streets of L.A. are once again endangered, this time by a psychotic, protected with body armor who fires automatic rounds and shots from a flame-thrower in any direction he pleases. Riggs and Murtaugh (Gibson and Glover) eventually put a stop to his antics with humourous results and the film move forward from there.
The central plot of 'Lethal Weapon 4' is an immigrant smuggling ring run by an old Asian warlord whose right hand man (Jet Li) is a cool and frightening martial arts expert who silences his enemies by putting his moves on them.
Some of the immigrants brought to America are to work as slaves and Murtaugh takes a family under his wing and has them live at home with his wife and children as a way of understanding how slavery affected his ancestors. All the while illegal but definitely the humane thing to do.
Riggs and his girlfriend Lorna (Rene Russo) are expecting a baby any day now, as is Murtaugh's daughter who is married to a cop (Chris Rock), a man who works with Riggs and Murtaugh and a man Murtaugh doesn't know is married to his daughter because she was afraid to tell him since he was always against her marrying a cop. Murtaugh later finds out about his new son-in-law while getting high on some dentist's laughing gas and the humour is what has always saved these movies from falling into the abyss.
This movie certainly stays within the tradition of slick action movies with the key emphasis being on the word "slick". The slickest and best installment of all the 'Lethal Weapon' movies is #2 which had the most bruising story and climax of all. It also introduced us to Joe Pesci as Leo Getz who became the comic relief of the series and although his character was badly used in #3, he is better this time around.
Director Richard Donner keeps the movie alive with well photographed and edited scenes of action and ranks as one of the action genre's most talented contributors. I'll probably put 'Lethal Weapon 4' in my video collection for the sake of uniting it with other members of its family but I'll probably watch it the least as it is the least of all the 'Lethal Weapon' movies, without hesitation.
OUT OF 5 > * * * 1/2
Visit FILM FOLLOW-UP by Walter Frith http://home.netinc.ca/~wfrith/movies.htm
Walter Frith's Top 100 Movies Of All Time Are Now Online At: http://home.netinc.ca/~wfrith/wftop100.htm
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Menu
Site Navigation
Services
My Profile
Edit Profile
Request
Logout
Close
Service Provider Information
Company Name
company name
Company Contact Number
+63 XXX - XXX - XXXX
Company Email Address
e.g<EMAIL_ADDRESS>Company Address/es
specify
Username
username
Password
*******
Status
Company Logo
Edit Profile
×
Edit profile
Choose company logo:
Save


Calls¶
list_calls¶
-
Client.
list_calls
(bridge_id=None, conference_id=None, from_=None, to=None, size=None, sort_order=None, **kwargs)¶ Get a list of calls
Parameters: - bridge_id (str) – The id of the bridge for querying a list of calls history
- conference_id (str) – The id of the conference for querying a list of calls history
- from_ (str) – The number to filter calls that came from
- to (str) – The number to filter calls that was called to
- sort_order (str) – How to sort the calls. Values are asc or desc If no value is specified the default value is desc
- size (int) – Used for pagination to indicate the size of each page requested for querying a list of items. If no value is specified the default value is 25. (Maximum value 1000)
Return type: types.GeneratorType
Returns: list of calls
Example: Fetch calls from specific telephone number:
call_list = api.list_calls(from_ = '+19192223333', size = 1000) total_chargeable_duration = 0 for call in call_list: total_chargeable_duration += call['chargeable_duration'] print(total_chargeable_duration) ## 240
Example: List Calls:
call_list = api.list_calls(to = '+19192223333', size = 2) print(list(call_list)) ## [ ## { ## 'active_time' : '2017-01-26T16:10:23Z', ## 'callback_url' : 'http://yoursite.com/calls', ## 'chargeable_duration' : 60, ## 'direction' : 'out', ## 'end_time' : '2017-01-26T16:10:33Z', ## 'events' : 'https://api.catapult.inetwork.com/v1/users/u-abc123/calls/c-abc123/events', ## 'from' : '+17079311113', ## 'id' : 'c-abc123', ## 'recording_enabled' : False, ## 'recording_file_format' : 'wav', ## 'recordings' : 'https://api.../v1/users/u-abc123/calls/c-abc123/recordings', ## 'start_time' : '2017-01-26T16:10:11Z', ## 'state' : 'completed', ## 'to' : '+19192223333', ## 'transcription_enabled': False, ## 'transcriptions' : 'https://api.../v1/users/u-abc123/calls/c-abc123/transcriptions' ## }, ## { ## 'active_time' : '2016-12-29T23:50:35Z', ## 'chargeable_duration' : 60, ## 'direction' : 'out', ## 'end_time' : '2016-12-29T23:50:41Z', ## 'events' : 'https://api.catapult.inetwork.com/v1/users/u-abc123/calls/c-xyz987/events', ## 'from' : '+19194443333', ## 'id' : 'c-xyz987', ## 'recording_enabled' : False, ## 'recording_file_format' : 'wav', ## 'recordings' : 'https://api.../v1/users/u-abc123/calls/c-xyz987/recordings', ## 'start_time' : '2016-12-29T23:50:15Z', ## 'state' : 'completed', ## 'to' : '+19192223333', ## 'transcription_enabled': False, ## 'transcriptions' : 'https://api.../v1/users/u-abc123/calls/c-xyz987/transcriptions' ## } ## ]
create_call¶
-
Client.
create_call
(from_, to, call_timeout=None, callback_url=None, callback_timeout=None, callback_http_method=None, fallback_url=None, bridge_id=None, conference_id=None, recording_enabled=False, recording_file_format=None, recording_max_duration=None, transcription_enabled=False, tag=None, sip_headers=None, **kwargs)¶ Create a call
Parameters: - from_ (str) – A Bandwidth phone number on your account the call should come from (required)
- to (str) – The number to call (required)
- call_timeout (str) – Determine how long should the platform wait for call answer before timing out in seconds.
- callback_url (str) – The full server URL where the call events related to the Call will be sent to.
- callback_timeout (str) – Determine how long should the platform wait for callbackUrl’s response before timing out in milliseconds.
- callback_http_method (str) – Determine if the callback event should be sent via HTTP GET or HTTP POST. Values are “GET” or “POST” (if not set the default is POST).
- fallback_url (str) – The full server URL used to send the callback event if the request to callbackUrl fails.
- bridge_id (str) – The id of the bridge where the call will be added.
- conference_id (str) – Id of the conference where the call will be added. This property is required if you want to add this call to a conference.
- recording_enabled (bool) – Indicates if the call should be recorded after being created. Set to “true” to enable. Default is “false”.
- recording_file_format (str) – The file format of the recorded call. Supported values are wav (default) and mp3.
- recording_max_duration (str) – Indicates the maximum duration of call recording in seconds. Default value is 1 hour.
- transcription_enabled (bool) – Recordings for this call is going to be automatically transcribed.
- tag (str) – A string that will be included in the callback events of the call.
- sip_headers (str) – Map of Sip headers prefixed by “X-”. Up to 5 headers can be sent per call.
 Possible values: rejected to reject not answer, active to answer the call, completed to hangup the call, transferring to start and connect call to a new outbound call.
- recording_enabled (bool) – Indicates if the call should be recorded. Values true or false. You can turn recording on/off and have multiple recordings on a single call.
- recording_file_format (str) – The file format of the recorded call. Supported values are wav (default) and mp3.
- transfer_to (str) – Phone number or SIP address that the call is going to be transferred to.
- transfer_caller_id (str) – This is the caller id that will be used when the call is transferred.
- whisper_audio (dict) – Audio to be played to the caller that the call will be transferred to.
- callback_url (str) – The server URL where the call events for the new call will be sent upon transferring.
Update call with state = completed. (Hang up the call):
my_call = api.get_call(call_id) my_call_state = my_call['state'] print(my_call_state) ## started api.update_call(my_call['id'], state='completed') my_call = api.get_call(my_call['id']) print(my_call['state']) ## completed
play_audio_to_call¶
-
Client.
play_audio_to_call
(call_id, file_url=None, sentence=None, gender=None, locale=None, voice=None, loop_enabled=None, **kwargs)¶ Play audio to a call
Parameters: - call_id (str) – id of a call
- file_url (str) – The location of an audio file to play (WAV and MP3 supported).
- sentence (str) – The sentence to speak.
- gender (str) – The gender of the voice used to synthesize the sentence.
- locale (str) – The locale used to get the accent of the voice used to synthesize the sentence.
- voice (str) – The voice to speak the sentence.
- loop_enabled (bool) – When value is true, the audio will keep playing in a loop.
Play audio in file:
api.play_audio_to_call('call_id', file_url='http://host/path/file.mp3') api.play_audio_to_call('call_id', sentence='Press 0 to complete call', gender='female') # or with extension methods api.play_audio_file_to_call('call_id', 'http://host/path/file.mp3') api.speak_sentence_to_call('call_id', 'Hello')
send_dtmf_to_call¶
-
Client.
send_dtmf_to_call
(call_id, dtmf_out, **kwargs)¶ Send DTMF (phone keypad digit presses).
Parameters: - call_id (str) – id of a call
- dtmf_out (str) – String containing the DTMF characters to be sent in a call.
Example: Send Digits to call:
api.send_dtmf_to_cal('c-callId', '1234')
list_call_recordings¶
-
Client.
list_call_recordings
(call_id)¶ Get a list of recordings of a call
Parameters: call_id (str) – id of a call Return type: types.GeneratorType Returns: list of recordings Fetch all call recordings for a call:
list = api.get_call_recordings('callId')
list_call_transcriptions¶
-
Client.
list_call_transcriptions
(call_id)¶ Get a list of transcriptions of a call
Parameters: call_id (str) – id of a call Return type: types.GeneratorType Returns: list of transcriptions Get all transcriptions for calls:
list = api.get_call_transcriptions('callId')
list_call_events¶
-
Client.
list_call_events
(call_id)¶ Get a list of events of a call
Parameters: call_id (str) – id of a call Return type: types.GeneratorType Returns: list of events Fetch all events for calls:
list = api.get_call_events('callId')
get_call_event¶
-
Client.
get_call_event
(call_id, event_id)¶ Get an event of a call
Parameters: - call_id (str) – id of a call
- event_id (str) – id of an event
Return type: dict
Returns: data of event
Fetch information on a specific event:
data = api.get_call_event('callId', 'eventId')
create_call_gather¶
-
Client.
create_call_gather
(call_id, max_digits=None, inter_digit_timeout=None, terminating_digits=None, tag=None, **kwargs)¶ Create a gather for a call
Parameters: - call_id (str) – id of a call
- max_digits (int) – The maximum number of digits to collect, not including terminating digits (maximum 30).
- inter_digit_timeout (int) – Stop gathering if a DTMF digit is not detected in this many seconds (default 5.0; maximum 30.0).
- terminating_digits (str) – A string of DTMF digits that end the gather operation immediately if any one of them is detected
- tag (str) – A string you choose that will be included with the response and events for this gather operation.
Return type: str
Returns: id of create of gather
Create gather for only single digit:
gather_id = api.create_call_gather('callId', max_digits = 1)
get_call_gather¶
-
Client.
get_call_gather
(call_id, gather_id)¶ Get a gather of a call
Parameters: - call_id (str) – id of a call
- gather_id (str) – id of a gather
Return type: dict
Returns: data of gather
Get Gather information for a previously created gather:
data = api.get_call_gather('callId', 'gatherId')
update_call_gather¶
-
Client.
update_call_gather
(call_id, gather_id, state=None, **kwargs)¶ Update a gather of a call
Parameters: - call_id (str) – id of a call
- gather_id (str) – id of a gather
- state (str) – The only update allowed is state:completed to stop the gather.
End gather:
api.update_call_gather('callId', 'gatherId', state = 'completed')
answer_call¶
-
Client.
answer_call
(call_id)¶ Answer incoming call
Parameters: call_id (str) – id of a call Example: Answer incoming call:
api.answer_call('callId')
reject_call¶
-
Client.
reject_call
(call_id)¶ Reject incoming call
Parameters: call_id (str) – id of a call Example: Reject incoming call:
api.reject_call('callId')
hangup_call¶
-
Client.
hangup_call
(call_id)¶ Complete active call
Parameters: call_id (str) – id of a call Example: Hangup call:
api.hangup_call('callId')
enable_call_recording¶
-
Client.
enable_call_recording
(call_id)¶ Turn on call recording
Parameters: call_id (str) – id of a call Example: Enable Call Recording:
api.enable_call_recording('c-callId')
disable_call_recording¶
-
Client.
disable_call_recording
(call_id)¶ Turn off call recording
Parameters: call_id (str) – id of a call Example: Disable Call Recording:
api.disable_call_recording('c-callId')
toggle_call_recording¶
-
Client.
toggle_call_recording
(call_id)¶ Fetches the current call state and either toggles recording on or off
Parameters: call_id (str) – id of the call to toggle Example: Toggle the call recording:
my_call_id = api.create_call(to='+19192223333', from_='+18281114444') my_call = api.get_call(my_call_id) print(my_call['recording_enabled']) ## False api.toggle_call_recording(my_call_id) my_call = api.get_call(my_call_id) print(my_call['recording_enabled']) ## True api.toggle_call_recording(my_call_id) my_call = api.get_call(my_call_id) print(my_call['recording_enabled']) ## False
transfer_call¶
-
Client.
transfer_call
(call_id, to, caller_id=None, whisper_audio=None, callback_url=None, **kwargs)¶ Transfer a call
Parameters: - call_id (str) – id of a call
- to (str) – number that the call is going to be transferred to.
- caller_id (str) – caller id that will be used when the call is transferred
- whisper_audio (dict) – audio to be played to the caller that the call will be transferred to
- callback_url (str) – URL where the call events for the new call will be sent upon transferring
Returns str: id of created call
Example: Transfer with whisper:
my_sentence = api.build_sentence(sentence = "Hello from Bandwidth", gender="Female", locale="en_UK", voice="Bridget", loop_enabled=True ) my_call = api.get_call('c-callId') api.transfer_call('c-callId', to = '+1234564890', caller_id = my_call['from'], whisper_audio = my_sentence )
Example: Transfer with whisper audio playback:
my_audio = api.build_audio_playback('http://my_site.com/file.mp3', loop_enabled=True) my_call = api.get_call('c-callId') api.transfer_call('c-callId', to = '+1234564890', whisper_audio = my_audio )


subl home page- Open a file or directory in Sublime Text:
subl path/to/file_or_directory- Open a file and jump to a specific line number:
subl path/to/file:line_number- Open a file or directory in the currently open window:
subl -a path/to/file- Open a file or directory in a new window:
subl -n path/to/file


marf.FeatureExtraction
Class FeatureExtraction
java.lang.Object
|
+--marf.FeatureExtraction.FeatureExtraction
- All Implemented Interfaces:
- StorageManager
- Direct Known Subclasses:
- Cepstral, F0, FFT, LPC, RandomFeatureExtraction, Segmentation
- public abstract class FeatureExtraction
- extends java.lang.Object
- implements StorageManager
Class FeatureExtraction
Generic Feature Extraction Module
$Header: /cvsroot/marf/marf/src/marf/FeatureExtraction/FeatureExtraction.java,v <IP_ADDRESS> 2003/02/16 18:26:46 mokhov Exp $
|
Field Summary |
protected double[] |
adFeatures
An array of features extracted (coefficiencies and/or amplitude values) |
protected Preprocessing |
oPreprocessing
Internal reference to the Preprocessing module |
|
Method Summary |
abstract boolean |
extractFeatures()
Abstract feature extraction routine. |
double[] |
getFeaturesArray()
Allows retrieval of a feature vector |
static void |
hamming(double[] padWindow)
Applies hamming window to an array of doubles |
static double |
hamming(int n,
int length)
Retrieves a single value of hamming window based on length and index within the widow |
| Methods inherited from class java.lang.Object |
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
oPreprocessing
protected Preprocessing oPreprocessing
- Internal reference to the Preprocessing module
adFeatures
protected double[] adFeatures
- An array of features extracted (coefficiencies and/or amplitude values)
FeatureExtraction
protected FeatureExtraction(Preprocessing poPreprocessing)
- FeatureExtraction constructor
- Parameters:
poPreprocessing
- preprocessing object ref.
extractFeatures
public abstract boolean extractFeatures()
throws FeatureExtractionException
- Abstract feature extraction routine. Must be defined by the derivatives.
- Returns:
- boolean true if there were features extracted, false otherwise
getFeaturesArray
public final double[] getFeaturesArray()
- Allows retrieval of a feature vector
- Returns:
- array of features
hamming
public static final double hamming(int n,
int length)
- Retrieves a single value of hamming window based on length and index within the widow
- Parameters:
n
- index into the windowlength
- the total length of the window- Returns:
- the hamming value within the window length; 0 if outside the window
hamming
public static final void hamming(double[] padWindow)
- Applies hamming window to an array of doubles
- Parameters:
padWindow
- array of doubles to apply windowing to- Since:
- 0.2.0


I love Photography, it is my favourite part of the day. I hope this website gives you the same feeling about nature photography
contact me for amazing nature photographyI Diana Mongina. I have worked as a proffessional photographer for three years and i am forever grateful for every expereince.Nature photography has helped me grow my creativity and also proffessionally. The greatest happiness in this field are the gerat memories we get to create with clients.
I have enganged in a number of activities and below are some of the shots I took. Hope they excite you.
My Name:Diana Ondieki>
photography.com
My Phone_Number:0725101365>


Australia
Bikes
Bikes
Gear
Gear
Ride Life
Ride Life
Stores
Stores
Search
Search
Road Disc Revolution.
Total control in all conditions
Learn more
Video not supported
Find your bike
Find your gear
Find your store


{Title}
{block:Posts} {block:Text}
{Title}
{Body}
{/block:Text} {block:Photo}
panel content
Content by FYMB ©
this is the {Caption}
{block:Photoset}
{/block:Photo} {block:Answer}
{Asker}
{Question}
{block:Answerer}
{Answerer}
{Answer}
{/block:Answerer} {/block:Answer} {/block:Posts}


Rohith Rao
As a new decade approaches, Ball State President Geoffrey Mearns said there has been "excellent progress" at the university these past 10 years and feels the university is on track for a "brighter future" in the next.
Since Mearns took over as Ball State’s president in May 2017, he said some of the university’s successes he’s proud of include growth in student enrollment, on-time graduation rates, expansion of on-campus facilities, alumni engagement and philanthropic support.
“I would be reluctant to take credit for any of the successes because I think the progress we make as an institution requires the collective commitment and engagement of all of our faculty, staff, our students and alumni,” he said.
“I would be reluctant to take credit for any of the successes because I think the progress we make as an institution requires the collective commitment and engagement of all of our faculty, staff, our students and alumni,” he said.
One thing Mearns said he was more directly involved in is helping retain and recruit individuals to serve in leadership roles at the university.
“I'm really pleased and proud with the quality of people who have decided to join our leadership team — whether it's people who are serving as vice presidents, or the deans that we've been able to attract during this time,” Mearns said.
Going into the next decade, Mearns said the most visible change Ball State students will see is the physical transformation of the campus — with an academic building, two residence halls, a dining hall, the Multicultural Center and a green lawn following the tearing down of the Emens parking garage.
“I think anyone who comes to campus will continue to see the evolution and transformation of the physical space,” he said.
Prior to his arrival to the university, Mearns said Ball State played a national leadership role in providing experiential learning opportunities to students in their third and fourth years of education.
As part of its Strategic Plan, he said the university’s goal is to bring those opportunities to first and second year students, provide them exposure to immersive learning courses and provide opportunities for them to participate in co-curricular activities.
“We want to do that earlier in the educational experience,” Mearns said. “It will be helpful for the students to have the challenge associated with those learning experiences early on, as opposed to simply being passive recipients of knowledge and content.”
Apart from Ball State’s partnership with the Muncie Community Schools, he said the university’s work in the community “continue to create a more vibrant Muncie which we know that our students want.”
Students, Mearns said, want the ability to visit restaurants, parks and other entertainment in the Muncie community, beyond the opportunities offered on campus.
“I believe over the next five to 10 years, you're going to see the continued transformation and revitalization of Muncie,” he said.
One area Mearns said the university wants to continue focusing its time and attention on, is supporting students who seek the services of Ball State’s Counseling Center.
“That is an issue that is challenging colleges and universities all across the country, but we certainly want to be attentive and responsive to the students who are seeking that important support,” he said.
Reversing the decline in first-to-second-year retention rates and improving the student experience for those who aren’t on-campus undergraduate students, Mearns said, were some other areas the university could improve on.
After Ball State students become alumni, Mearns said he hopes they will continue being engaged with the university.
“As we continue towards this path towards an even brighter future, we want our students after they graduate, to stay engaged with the institution, continue to be a part of the growth of the institution and continue to be a part of the impact that our institution can have on our community, on our region, on our state and on our country,” he said.
With 22,541 students, Ball State started the fall 2019 semester with the largest overall student enrollment in its history. The university also welcomed its largest-ever freshman class in fall 2019 with 4,063 new freshmen.
President Geoffrey Mearns said Ball State raised more than $33 million in new commitments last academic year. In spring 2019, the university debuted “One Ball State Day” a one-day fundraising event where it raised more than $424,000. The next version of the event will be held April 7, 2020.
Ball State’s retention rates have been dropping every year for the past five years — 81.7 percent in the 2014-15 academic year to 78.3 percent in the 2018-19 academic year. Mearns announced a task force in August 2019 to combat the issue and create a strategy to improve the retention rate.
In 2019, of the 6,000-plus new students admitted to Ball State, 23 percent were not first-time or transfer undergraduate students. Mearns said the university could improve in providing flexible and innovative learning opportunities for online and on-campus students pursuing graduate studies, hybrid courses, low-residency courses, students at Ball State’s Indianapolis campus and other types of students.
Since August, Ball State’s Counseling Center has had more than 1,100 students request its services — more than half the number of students who were by the center last academic year. To counter this, the center started Care Planning Group appointments in November. Mearns said the university will continue focusing its time and attention in supporting students who use the center’s services.
Contact Rohith Rao with comments at<EMAIL_ADDRESS>or on Twitter @RaoReports.
Four presidents have presided over Ball State in the 2010s. Jo Ann Gora served for the longest period, and Terry King for the shortest.
Jo Ann Gora | 2004-2014:
After serving as the vice president for academic affairs and provost at Old Dominion University and chancellor at the University of Massachusetts Boston, Jo Ann Gora joined Ball State as its 14th president and its first female president. During her 10 years with the university, more than $520 million of construction and renovations were seen on campus. In 2005 she was awarded the Sagamore of the Wabash, Indiana’s highest civil honor. In 2010, the Jo Ann Gora Student Recreation and Wellness center was dedicated in her honor.
Paul Ferguson | 2014-2016:
During the tenure of President Paul Ferguson, Ball State saw its student enrollment increase and the highest four-year graduation rates for all Indiana public universities. Approval for the Health Professions Building also occurred during his time. However, Ferguson resigned without providing an explanation after serving in the position for 18 months. He still had three and a half years before his contract expired. Ferguson later received a job at Biola University a private Christian school in California, as founding dean of its school of science, technology and health.
Terry King | 2016-2017:
When Ferguson suddenly resigned, President Terry King postponed his retirement to take on the responsibility until the university had found a replacement. With a PhD in chemical engineering, King began his career as an engineer. He has won awards for his research, holds three patents and has received federal grants. King served as a professor at Iowa State University for 15 years and later as a dean at Kansas State University. In 2006, he began working at Ball State as provost and executive vice president for academic affairs.
Geoffrey Mearns | 2017-present:
The 17th President Geoffrey Mearns came to Ball State in May 2017 after serving as the president of Northern Kentucky for five years. Mearns graduated from Yale University and received his juris doctor degree at the University of Virginia. He was an attorney for 15 years, served as a federal prosecutor in the U.S. Department of Justice and worked on several high-profile cases including the Oklahoma City bombing case. House Bill 1315 passed in his first year beginning the Ball State-Muncie Community Schools partnership.


This Frankfurt hotel marries Wilhelmine and midcentury details
The Ameron Frankfurt Neckarvillen is Althoff’s first boutique outpost
by Alyn GriffithsA group of historic villas in Frankfurt’s Bahnhofsviertel district has been given a new life as a boutique hotel that combines original features with midcentury-inspired furnishings.
Althoff Hotels transformed the buildings, which date from Germany’s Wilhelmine Period (1890-1918), into a 133-room hotel located within walking distance of the city’s popular museum embankment.
The Ameron Frankfurt Neckarvillen Boutique is the group’s first boutique hotel and aims to appeal to guests looking for a cosy and characterful room in a convenient city-centre location.
Italian architect Luigi Fragola oversaw the restoration and refurbishment of the buildings, which had previously been used as offices. Wherever possible, his studio preserved the original spaces and worked with small manufacturers to introduce premium details such as the herringbone-patterned marble tiles in the bathrooms.
A sensual material palette of dark mahogany, brass, velvet and leather complements the formal character of the existing architecture, while fifties-inspired furniture and lighting add to the glamorous aesthetic.
The blending of tradition and modernity continues in the ground floor restaurant, Le Petit Royal Frankfurt, where custom-upholstered furniture and midcentury glass lamps contribute to the relaxed ambience.
Artworks throughout the hotel were selected by curator Celena Ohmer to complement its interior design and location. These include a site-specific mirror installation by German-French artist Roland Burkart and a large-scale work in the restaurant by glass artist Paul Hance.


So this morning I saw the above on Twitter. This is interesting because for the longest time, I would spent pointless hours a day racking my head trying to think of software ideas. I would theorize about what perfect app I could make to solve world hunger or bring world peace. What can I create to make everyone's lives more comfortable? After I decide that I've wasted enough time just theorizing, I inevitably return to whatever online lesson I'm working on. I follow along with the lesson and create an app to the lesson's specifications. But not really.
I noticed that every single time I write code that a lesson or tutorial asks me to, I always do it slightly different than instructed. Maybe I'm right or maybe I'm wrong, but every time I'm asked to do something, I always feel like something can be better. And so I usually take it upon myself to add whatever modifications I see fit. Usually sometime during the process of making my modifications, I end up with some other idea for modification. This then leads to another and so on.
I noticed that every single time I write code that a lesson or tutorial asks me to, I always do it slightly different than instructed.To give you a recent example, I'm currently taking the Complete Web Dev Course on Udemy (Pretty awesome course, btw). During the JavaScript section of the course, we are asked to build a very simple game to test your reaction speed by clicking randomly colored circles and squares. When I completed the challenge, it felt incomplete. It felt annoying as a user that I didn't know what general area the shapes would appear in so I added a border. I then felt irked that the game had no actual end. I went ahead and added a 30 second timer and returned your average reaction time at the end. In the end, this cycle continued and I ended up adding a bunch more things and still want to add a bunch more things (If you're curious, you can find the current version here).
This little game certainly isn't going to end world hunger or bring world peace but it certainly has kept the ideas flowing in my head. Maybe one day I'll be able to come up with an amazing idea out of thin air, but until then, starting with something simple and making minor improvements to it seems to be more effective at generating ideas.


Hello everyone!I'm Chen-Feng Huang. And you can call me Bert as well. I'm a senior in SF State, and major in Computer Science. I'm glad to work with this team. We will invent an awesome application in this class.


Albany 2nd Developers Meeting, October 2, 2012.
Meeting Agenda: Albany 2nd Developers Meeting Agenda (pdf). Overviews: Salinger: Albany Overview (pdf). Phipps: Algorithms Research Overview (pdf). LCM Talks: Ostien: LCM Overview (pdf). Sun: MultiPhysics Applications (pdf). Chen: Constitutive Modeling (pdf). Mota: Multiscale Coupling (pdf). Mota: Continuum-Continuum Coupling (pdf). Littlewood: LAMENT Material Library (pdf). Hansen: Hydride Modeling for Fuel Rods (pdf). QCAD Talks: Muller: QCAD Overview (pdf). Gao: Schrodinger-Poisson (pdf). Nielsen: Quantum Dot Design (pdf). New Initiatives Session: Hansen: Progress Towards Adaptivity (pdf). Cortial: Model Order Reduction (pdf). Littlewood: Peridym-LCM LDRD (pdf). Salinger/Kalashnikova: FELIX Ice Sheet Dynamics (pdf). Developers Discussion Summary: Albany 2nd Developers Meeting Discussion Summary (pdf).


To try the demo, you need to login with a test environment account.
Access Token: none | Expires in: none


name *: (length <=6) age *: (<=45) sex *: M bloodtype *: A R language *: M memo: job experiences *: year: 1980 desc:


Extracting Seeds From Hardware Wallets
Transcript By: Bryan Bishop
Tags: Security, Attacks, Cryptography, Wallet, Hardware wallet
Category: Conference
Extracting seeds from hardware wallets
Charles Guillemet (P3b7_)
7DC5A359D0D5B5AB6728…
https://twitter.com/kanzure/status/1137672946435198976
Introduction
My talk is about extracting seeds from hardware wallets. I am chief security officer at Ledger. I joined Ledger a bit more than one year ago. I built the Ledger Donjon which is an independent red team. Our mission is to help secure Ledger’s products. So what we do day to do is try to break all the hardware wallets. We continuously challenge the security of our products. From time to time, we also provide 3rd party security services. We focus on sidechannel analysis, software attacks, perturbation attacks, and cryptography. We feel we have a responsibility to enhance the security in the whole ecosystem. We have also open-sourced our attack tools. Pull requests welcome.
https://github.com/Ledger-Donjon
Ellipal: “An airgapped wallet using Trustzone”
This was called Ellipal. It was an interesting target because it had no wifi, no bluetooth no nothing. The only way to communicate with the device is by QR code. So you either scan a QR code from its screen, or you display a QR code to its camera. In order to upgrade the device, there is an sd card slot. The security model is quite simple. To unlock the device, you enter your pattern. When you want to make your transaction, you input your own password which is supposed to decrypt your private key.
SWo we ordered our Ellipal and waited for it… meanwhile we looked at the upgrade mechanism which uses an sdcard. You have to put the upgrade .bin file into the sdcard and this is a binary file that is encrypted and signed. Uh, so let’s check these. So we bruteforced the URL of the ellipal servers in order to find the different binaries
https://order.ellipal.com/lib/v2.0.zip
https://order.ellipal.com/lib/v1.7.zip
It did not seem to be well-encrypted. They were using 64 bits encryption, so it seems like they are doing encryption in ECB mode. If you know anything about cryptography, ECB mode is not a good idea. So we launched hashcat on our GPU and in order to bruteforce a DES key in hashcat you need like one week or something like that.
Meanwhile, we received our Ellipal and we played with it, and found some hidden menus. We opened the device and noticed there’s a metal shield, so we removed the shield and then we looked at the electronic components. There’s USB for charging the device; and it’s not connected for data. There was an externa lflash- a physical dump is possible by removing the trip and reading what’s inside if it’s not encrypted. There was also this MT6580A Mediatek SoC which is a low-end SoC for mobile phones usually. It’s based on Cortex A7 and it has an ARM MALI GPU running at 500 MHz. There was bluetooth and wifi and so on.
We probed the UART interface which we noticed was present. We probed the two wires. When the device boots, there’s a lot of stuff that goes to this wire and givces interesting information on what’s inside. We also played with the transmission wire and we sent a FACTFACT on the tx wire which is about factory mode. Then the device went into factory mode and we were able to get wifi and connect to our network. We were able to check and see that wifi was still activated.
What about the usb? It is not physically connected. But there’s pin points on the PCB so we just had to solder the USB data to the pinpoints. Then I used mediatek_flash_tool after connecting the USB port to our computer. We used the mediatek bootloader and we were able to use the mediatek bootloader. We had full access to the flash memory, and the filesystem was not encrypted. We were able to enable non-root ADB, install third-party APKs, you’re root on an android system. It is possible to backdoor the wallet, reactivate wifi, everything is possible.
We got a dump of the wallet application and began the reverse engineering process. We retrieved the firmware signature public key, and the firmware encryption key (3-DES) that we had tried to bruteforce. The bruteforce had not succeeded because it was 3-DES… we also retrieved the encrypted wallet.
We studied how the encryption mechanism was implemented. It’s a mess. They used a simple sha256 to hash your password and this mechanism they use to decrypt the key of your wallet…. your password can be bruteforced without GPU in a few minutes. 8 full random character password in a few minutes on GPU. If you have physical access to an Ellipal device, you can reactivate the USB port and then get access to the data.
On their website, they list some security features but here’s the reality. For example, they claim that they use TrustZone but they don’t. They also claim “AES 128 high-intensity”. I have no idea what that means. They also claim they have high quality entropy generation, but they actually use the standard calls to android’s random number generator.
We recently disclosed this to Ellipal 3 months ago and we have a very good relationship with them. They have updated their device, they even went to Paris to visit us. We talked with the design team and it was cool. They said they have updated to v2. We didn’t check that, I have no idea if it is well-patched. But it also triggered a bug bounty program at Ellipal. They also sent us a small bounty reward, so thank you for this. They also issued a press release saying thank you to Ledger, so thank you as well.
Sidechannel attacks to extract PINs
I am going to present two different attacks, one is guessing the PIN and the other is extracting the seed. This first one is about Trezor, it’s a very similar design to Trezor. Usually sidechannel attacks are very difficult to implement. The microcontroller it was using was not designed for sidechannel security. You can measure the power consumption of the device during its computation and try to figure out if there’s a correlation between the data in the device and the power utilization. If there’s such a correlation, then sidechannel attacks can exploit this to exfiltrate data. The typical setup is the device hooked up to an oscilloscope and the computer that talks to the hardware wallet.
The code counts the digit and compares to the current value stored in flash memory. So we took a trezor device and we sent a lot of different random PINs and tried to figure out if there’s a correlation. As you can see on the trace, the peaks correspond to a correlation between the power consumption of the device and the value of the stored PIN. When there’s a correlation, then we need to figure out how to exploit it.
One way is to use machine learning techniques, like the same kind that recognize cats or dogs in pictures on the internet.  We can do this in a similar way with digits of pins. So you get a device together where we know the behavior of the power consumption of the device as a function of the value of the digit. On the second device, we get physical access to the attacked device, and you enter a random PIN, measure the power consumption of the device, then ask the machine leanring algorithm what is the most likely value of the PIN. Then you try the PIN on the device, if it’s correct you’re finished. If not, you try the second choice. You have more information that ytou will use and feed into your machine learning algorithm. On average, 5 tries are enough to guess the correct value of the PIN. On trezor, you have 15 tries, so this works all the time.
We responsibly disclosed this vulnerability back in November 2018-11-20. I think sidechannel attacks are still possible to break, but unlikely that within less than 15 choices that you can break. So the device is going to get wiped before you can guess using another technique we think.
Extracting seeds
We were able to extract seeds from Trezor One, Keepkey, B walle tand Trezor T. This is unfortunately not patchable. It can be done on every firmware for now and in the future too. We decided to not disclose the method, to protect users. I think this is quite responsible. But we have been asked for more details.
Physical access is necessary. The setup cost is around $100 per computer. The necessary time is 3 minutes of prepatration and 2 minutes for extraction. We have a magic back box which we call an extractor, and it takes two minutes to extract from the device. It works on every firmware version. The extraction depends on PIN length. We wrote a program called ExtraKtor.
We suggest using a very long passphrase. We disclosed this to Trezor on 2018-12-20. It can’t be patched. The suggested physical threat is out of the threat model; so try to make sure your hardware wallet is not stolen. You need at least 36 random characters.
At the end, they gave us a bounty for this. So that was cool. Thank you. They also thanked us in a press release and stating that we did this.
Shamir secret sending
The last attack is Shamir secret sending. Take a look at the HTC Exodus phone. This is a “native web 3.0 blockchain phone”, I don’t really know what that means but it has a “hardware wallet” and a “trusted display” and it has a social key recovery technique. They use Qualcomm SnapDragon 845 SoC. So probably a good phone, right. The general scheme of trustzone here is that there’s a Zion app and the seed is stored in the seucre OS. They have a social key recovery method.
We studied the social key recovery which is an interesting function. When you want to backup your seed, they found an interesting method where as a user when you generate your seed you choose in your contact list what they call “trusted contact” and you will ask them to install the Zion app that HTC developed. When you generate your seed, your trusted contacts will receive a share. This is a 3-of-5 share. 3 shares are necessary to reconstruct the seed. The shares are not stored securely in your trusted contact’s phones, but it’s not important because if the attacker is going to be able to get 1o r 2 shares it doesn’t give information about the seed. You need at least 3 shares, so it’s not a problem.
This uses shamir secret sharing. When you generate your secret, you also generate degree-2 polynomials. You will evaluate this polynomial at 5 different points, and these 5 different points will be the shares that you send to your trusted contact. Thanks to Lagrange’s theorem, only 3 shares are necessary to retrieve the value of the polynomial and then to evaluate it and retrieve the secret. This is a really nice scheme and it works perfectly.
We took the HTC android application and did some reverse engineering in order to understand how it works. They implemented Shamir secret sharing by sharing the 256 bit seed (32 bytes) with 32 different polynomials of degree 2, and then it evaluates it in 5 points and sends the shares. The coefficient a,b are randomly generated with a PRNG and must be kept secret.
The problem with HTC’s implementation is that the PRNG update operation is linear and not updated well. Both a and b are linearly dependent. Instead of ending up with a polynomial that they expected, they end up with a different one which has a linear dependency between the coefficients.
When you want to extract your secrets, you either use Lagrange’s theorem which works perfectly but you can also put your problem in a system of linear equations. Then you have to solve a linear system of 768 equations over GF(2). When you have three shares, you have 768 unknown and…. anyway, the system is not linearly independent and the rank of the 768-bits matrix is not 768 but it is less than 512. That means that using 2 shares, the kernel of the matrix can be computed in less than 1 second and this seed can be extracted. You only need to compromise 2 different trusted contacts, then you get their shares and you’re able to get the seed.
So one trusted contact can collude with another and retrieve the value of the seed. This is really bad.
In firmware v1.54.2401.6, the PRNG is seeded with a fixed value. By reverse engineering the application, we know the value, so it’s easy for us to calculate a and b polynomials. So only one share is enough to compute the seed. This means a malicious application can extract YOUR seed from the phone of any of your trusted contacts.
Instead of shamir secret sharing, they implemented shamir secret sending.
We recently disclosed this to an HTC security team. They patched it quite quickly. But the users have not been warned which is a problem, and users have not been encouraged to re-generate their seeds. If one of the trusted contacts are still on an old version of the Zion app, the seed is inside of there. It’s definitely a problem. It triggered the creation of a bounty program for the Zion vault. They announced their bounty program in a press release.


United States Higher Education
Percentage of adults age 25 and older with a bachelor's degree or higher (2010-2014)


Description of the process :
Attachment Name
Object ID
Enter the value :
select the document to insert :
Employee Dteails Find
|
Employee Dteails Entry
|
EmployeDetailDownload
EmployeDetailDownload


| Home Team | Away Team |
| Shot on target |
|
{{dataStatistic.shotsOnTarget.homeTeam}}
|
{{dataStatistic.shotsOnTarget.awayTeam}}
|
| Shot off target |
| {{dataStatistic.shotsOffTarget.homeTeam}}
|
{{dataStatistic.shotsOffTarget.awayTeam}}
|
| possession (%) |
| {{dataStatistic.possession.homeTeam}}
|
{{dataStatistic.possession.awayTeam}}
|
| corners |
| {{dataStatistic.corners.homeTeam}}
|
{{dataStatistic.corners.awayTeam}}
|
| offsides |
| {{dataStatistic.offsides.homeTeam}}
|
{{dataStatistic.offsides.awayTeam}}
|
| fouls |
| {{dataStatistic.fouls.homeTeam}}
|
{{dataStatistic.fouls.awayTeam}}
|
| goal kicks |
| {{dataStatistic.goalKicks.homeTeam}}
|
{{dataStatistic.goalKicks.awayTeam}}
|


Cell Title
Notes about this chart
Cell Title
Notes about this chart
Cell Title
Notes about this chart
Cell Title
Notes about this chart
Cell Title
Notes about this chart
Built with ♥ by
sensee.ca


--- layout: archive title: Zulip Chat Archive permalink: /stream/113489-new-members/topic/Permission.20to.20push.20create.20branch.20on.20main.20mathlib.20repo.html ---
What criteria does someone need to meet in order to be able to create branches on the main mathlib repo, and thus obviate the need to work from a fork?
I occasionally encounter very mild friction associated with maintaining a fork so if it were possible, I'd be grateful to be granted such permission. I noticed this https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/typeclass.20problems/near/184074195 a while ago as well remarks about the possibility in item 3 https://github.com/leanprover-community/mathlib/blob/master/docs/contribute/index.md.
Needless to say, I absolutely understand if the maintainers feel it's best for me to continue to work from a fork and I will happily continue to do so, but it seemed like worth asking at least :-)
You have an invitation.
Oh wow, thank you very much!
It's great that you asked for it! We sometimes forget to give permission. For example, I was working under the assumption that you already had it. Basically, as soon as someone wants to make a 2nd PR, we usually are happy to grant permission for writing to non-master branches.
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


Bal: +62<PHONE_NUMBER>2 | Australia: +612 8011 4559
Indulge in an individually tailored Bali Health Retreat to improve your health and wellness. We provide you the tools, education and ongoing support to continue a healthier lifestyle once you return home. Whether its health, fitness, adventure, nutrition, relaxation or stress reduction our retreats are perfectly packaged to ensure you return home feeling refreshed, revitalised and reconnected to your body, mind and soul. Please also check out IN2U adventure retreats in Australia HERE.
Treat yourself to a week of luxury indulgence in paradise, supported by leading industry experts who will educate you on how to improve your body and life in order to thrive. Enjoy daily yoga, meditation, surf, training, delicious nutritious meals and educational workshops whilst forming new friendships with like-minded people from all over the world. All of our health retreat locations are set amongst the most beautiful tropical settings in the world where our staff will ensure that your every desire is met. We aim to exceed your expectations in every way so that you are 100% focused on reconnecting and relaxing for an ultimate retreat experience.
sun 4 sep 2016
Fashion says "me too" but style says "only me", so Be-yourself, Be-Original
sun 4 sep 2016
Fashion says "me too" but style says "only me", so Be-yourself, Be-Original
sun 4 sep 2016
Fashion says "me too" but style says "only me", so Be-yourself, Be-Original
sun 4 sep 2016
Fashion says "me too" but style says "only me", so Be-yourself, Be-Original
N2U health and wellness retreats in both Bali and Australia are designed to enable you to have a 7 day escape in paradise, whilst learning the latest tools, techniques and methods to become your healthiest, happiest self. We are dedicated to sustainable, healthy lifestyle change. Everything we do throughout the week is to set you up for success once you return home. We are not a detox or weight loss retreat, we do not promote extreme measures that are not sustainable, however by adopting the approach your coaches will teach you, weight loss, stress reduction and natural detoxification will be experienced.
Our expert coaches work to tailor our group sessions based on the health history you provide, they will give you expert one on one advice throughout the seven day retreat and tools to improve your individual lifestyle, exercise routine, nutrition and mind-set. We are 100% focused on helping you become the best version of yourself.
We understand that sometimes retreats can be daunting. We can guarantee you that whether you’ve never exercised in your life or a complete gym junky, our timetable is built to suit your ability and our coaches are industry leaders trained to facilitate group sessions that cater for all levels. We are here to encourage you to improve your life not to train you or push you to your limit.


class: center, middle, inverse, title-slide # Analysis of RNAseq data in R and Bioconductor (part 5)
###
http://rockefelleruniversity.github.io/RU_RNAseq/
--- ## The data In this session we will be reviewing data from Jesús Gil's lab at MRC from a splicing factor knockdown (PTBP1 RNAi) RNAseq experiment. Metadata and raw files can be found on GEO [here](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE101763). I have aligned all FQ to BAM and counted in genes and exons using Rsubread and summarizeOverlaps(). --- ## The data All Gene and Exon counts can be found as .RData obects in **data** directory - Counts in disjoint exons can be found at - **data/senescence_ExonCounts.RData** --- ## What we will cover In our first session we looked at two separate ways we can gain gene expression estimates from raw sequencing data as FASTQ files. In our second session we imported our expression estimates to identify differences in the expression of genes between two conditions. In this session we will look at how we can identify differences in the expression of genes between multiple conditions and how we can identify changes in exon usage to infer changes in transcript usage. --- ## Counts from SummarizeOverlaps As we saw in session 2, we can use a **BamFileList** to handle multiple BAM files, and **yieldSize** to control memory usage. ```r library(Rsamtools) bamFilesToCount <- c("Sorted_shPTBP1_53_rep1.bam","Sorted_shPTBP1_53_rep2.bam","Sorted_shPTBP1_53_rep3.bam", "Sorted_vec_4OHT_rep1.bam","Sorted_vec_4OHT_rep2.bam","Sorted_vec_4OHT_rep3.bam" ) myBams <- BamFileList(bamFilesToCount,yieldSize = 10000) ``` --- ## Counts from SummarizeOverlaps For differential exon usage we must use a non-overlapping, disjoint set of exons to count on. We can produce a non-overlapping set of exons by using the **disjointExons()** function. This is equivalent of us having to create GFF file and using the python script wrapped up in DEXseq package (*dexseq_prepare_annotation.py*). ```r library(GenomicFeatures) library(TxDb.Hsapiens.UCSC.hg19.knownGene) nonOverlappingExons <- disjointExons(TxDb.Hsapiens.UCSC.hg19.knownGene) ``` ``` ## Warning: disjointExons() is deprecated. Please use exonicParts() instead. ``` ```r names(nonOverlappingExons) <- paste(mcols(nonOverlappingExons)$gene_id, mcols(nonOverlappingExons)$exonic_part, sep = "_") nonOverlappingExons[1:2, ] ``` ``` ## GRanges object with 2 ranges and 3 metadata columns: ## seqnames ranges strand | gene_id tx_name ## <Rle> <IRanges> <Rle> | <CharacterList> <CharacterList> ## 1_1 chr19 58858172-58858395 - | 1 uc002qsd.4 ## 1_2 chr19 58858719-58859006 - | 1 uc002qsd.4 ## exonic_part ## <integer> ## 1_1 1 ## 1_2 2 ## ------- ## seqinfo: 93 sequences (1 circular) from hg19 genome ``` --- ## Disjoint Exons ![](imgs/collapsedE1.png) --- ## Disjoint Exons ![](imgs/collapsedE2.png) --- ## Counts from SummarizeOverlaps Now we have our disjoint exons to count on we can use the **summarizeOverlaps()**. ```r library(GenomicAlignments) senescence_ExonCounts <- summarizeOverlaps(nonOverlappingExons, myBam, ignore.strand = TRUE, inter.feature = FALSE) senescence_ExonCounts ``` ``` ## class: RangedSummarizedExperiment ## dim: 269121 6 ## metadata(0): ## assays(1): counts ## rownames(269121): 1_1 1_2 ... 9997_3 9997_4 ## rowData names(3): gene_id tx_name exonic_part ## colnames(6): Sorted_shPTBP1_53_rep1.bam Sorted_shPTBP1_53_rep2.bam ... ## Sorted_vec_4OHT_rep2.bam Sorted_vec_4OHT_rep3.bam ## colData names(1): condition ``` --- ## Counts from SummarizeOverlaps Our **RangedSummarizedExperiment** contains our counts as a matrix accessible by the **assay()** function. Each row is named by our Exon ID, geneID + exon number. ```r assay(senescence_ExonCounts)[1:2, ] ``` ``` ## Sorted_shPTBP1_53_rep1.bam Sorted_shPTBP1_53_rep2.bam ## 1_1 400 489 ## 1_2 573 970 ## Sorted_shPTBP1_53_rep3.bam Sorted_vec_4OHT_rep1.bam ## 1_1 317 326 ## 1_2 455 452 ## Sorted_vec_4OHT_rep2.bam Sorted_vec_4OHT_rep3.bam ## 1_1 650 508 ## 1_2 801 885 ``` --- ## Counts from SummarizeOverlaps We can retrieve the GRanges we counted by the **rowRanges()** accessor function. The GRanges rows contains our disjoint exons used in counting and is in matching order as rows in our count table. ```r rowRanges(senescence_ExonCounts)[1:5, ] ``` ``` ## GRanges object with 5 ranges and 3 metadata columns: ## seqnames ranges strand | gene_id tx_name ## <Rle> <IRanges> <Rle> | <CharacterList> <CharacterList> ## 1_1 chr19 58858172-58858395 - | 1 uc002qsd.4 ## 1_2 chr19 58858719-58859006 - | 1 uc002qsd.4 ## 1_3 chr19 58859832-58860494 - | 1 uc002qsf.2 ## 1_4 chr19 58860934-58861735 - | 1 uc002qsf.2 ## 1_5 chr19 58861736-58862017 - | 1 uc002qsd.4,uc002qsf.2 ## exonic_part ## <integer> ## 1_1 1 ## 1_2 2 ## 1_3 3 ## 1_4 4 ## 1_5 5 ## ------- ## seqinfo: 93 sequences (1 circular) from hg19 genome ``` --- class: inverse, center, middle # Differential transcript usage

 --- ## Differential transcript usage Previously we have investigated how we may identify changes in the overall abundance on gene using RNAseq data. ![](imgs/dge.png) --- ## Differential transcript usage We may also be interested in identifying any evidence of a changes in transcript usage within a gene. ![](imgs/dtu.png) --- ## Differential transcript usage Due to the uncertainty in the assignment of reads to overlapping transcripts from the same genes, a common approach to investigate differential transcript usage is to define non-overlapping disjoint exons and identify changes in their usage. ![](imgs/deu2.png) --- class: inverse, center, middle # DEXSeq

 --- ## DEXSeq Options for differential transcript usage are available in R including DEXseq and Voom/Limma. DEXseq can be a little slow when fitting models but it has options for parallelization. Voom/Limma is significantly faster by comparison, but provides a less informative output. --- ## DEXSeq inputs The [**DEXseq** package](https://bioconductor.org/packages/release/bioc/html/DEXSeq.html) has a similar set up to DESeq2. We first must define our metadata data.frame of sample groups, with sample rownames matching colnames of our **RangedSummarizedExperiment** object. ```r metaData <- data.frame(condition = c("shPTBP1_53", "shPTBP1_53", "shPTBP1_53", "senescence", "senescence", "senescence"), row.names = colnames(senescence_ExonCounts)) metaData ``` ``` ## condition ## Sorted_shPTBP1_53_rep1.bam shPTBP1_53 ## Sorted_shPTBP1_53_rep2.bam shPTBP1_53 ## Sorted_shPTBP1_53_rep3.bam shPTBP1_53 ## Sorted_vec_4OHT_rep1.bam senescence ## Sorted_vec_4OHT_rep2.bam senescence ## Sorted_vec_4OHT_rep3.bam senescence ``` --- ## DEXseq inputs Previously we have been using **DESeqDataSetFromMatrix()** constructor for DESeq2. In DEXSeq we can use the **DEXSeqDataSet** constructor in a similar manner. As with the **DESeqDataSetFromMatrix()** function, we must provide the counts matrix, our metadata dataframe and our design specifying with metadata columns to test. In addition to this we must provide our exon IDs and gene IDs to the allow for the association of exons to the genes they constitute. ```r countMatrix <- assay(senescence_ExonCounts) countGRanges <- rowRanges(senescence_ExonCounts) geneIDs <- as.vector(unlist(countGRanges$gene_id)) exonIDs <- rownames(countMatrix) ``` --- ## DEXseq inputs We must specify our design to include a sample and exon effect to distinguish change in exon expression from a change in exon usage. Previously we simply added a design formula with our group of interest. ``` ~ GROUPOFINTEREST ``` Now we specify. ``` ~ sample + exon + GROUPOFINTEREST:exon ``` --- ## Running DEXseq Now we can use the **DEXSeqDataSet** constructor as we have **DESeqDataSetFromMatrix()** but in addition we specify the exon ids to the **featureID** argument and the gene ids to the **groupID** argument. ```r library(DEXSeq) ddx <- DEXSeqDataSet(countMatrix, metaData, design = ~sample + exon + condition:exon, featureID = exonIDs, groupID = geneIDs) ddx ``` ``` ## class: DEXSeqDataSet ## dim: 269121 12 ## metadata(1): version ## assays(1): counts ## rownames(269121): 1:1_1 1:1_2 ... 9997:9997_3 9997:9997_4 ## rowData names(4): featureID groupID exonBaseMean exonBaseVar ## colnames: NULL ## colData names(3): sample condition exon ``` --- ## Other DEXseq inputs As we have generated a **RangedSummarizedExperiment** for exon counting, we can use the more straightforward **DEXSeqDataSetFromSE** function as we used the **DESeqDataSet** function. We can simply provide our **RangedSummarizedExperiment** and design to the **DEXSeqDataSetFromSE** function. ```r colData(senescence_ExonCounts)$condition <- factor(c("shPTBP1_53", "shPTBP1_53", "shPTBP1_53", "senescence", "senescence", "senescence")) ddx <- DEXSeqDataSetFromSE(senescence_ExonCounts, design = ~sample + exon + condition:exon) ddx ``` ``` ## class: DEXSeqDataSet ## dim: 269121 12 ## metadata(1): version ## assays(1): counts ## rownames(269121): 1:E001 1:E002 ... 9997:E003 9997:E004 ## rowData names(5): featureID groupID exonBaseMean exonBaseVar ## transcripts ## colnames: NULL ## colData names(3): sample condition exon ``` --- ## DEXseq (filtering low exon counts) DEXseq is fairly computationally expensive so we can reduce the time taken by removing exons with little expression up front. Here we can filter any exons which do not have 10 reads in at least two samples (our smallest group size is 3). ```r ToFilter <- apply(assay(senescence_ExonCounts), 1, function(x) sum(x > 10)) >= 2 senescence_ExonCounts <- senescence_ExonCounts[ToFilter, ] table(ToFilter) ``` ``` ## ToFilter ## FALSE TRUE ##<PHONE_NUMBER>96 ``` ```r ddx <- DEXSeqDataSetFromSE(senescence_ExonCounts, design = ~sample + exon + condition:exon) ddx ``` ``` ## class: DEXSeqDataSet ## dim: 160996 12 ## metadata(1): version ## assays(1): counts ## rownames(160996): 1:E001 1:E002 ... 9997:E002 9997:E003 ## rowData names(5): featureID groupID exonBaseMean exonBaseVar ## transcripts ## colnames: NULL ## colData names(3): sample condition exon ``` --- ## Running DEXseq in steps We can normalize, estimate dispersion and test for differential exon usage with the **estimateSizeFactors()**, **estimateDispersions()** and **testForDEU()** functions. Finally we can estimate fold changes for exons using the **estimateExonFoldChanges()** function and specifying metadata column of interest to **fitExpToVar** parameter. ```r ddx <- estimateSizeFactors(ddx) ddx <- estimateDispersions(ddx) ddx <- testForDEU(ddx, reducedModel = ~sample + exon) ddx = estimateExonFoldChanges(ddx, fitExpToVar = "condition") ``` --- ## DEXseq results Once have processed our data through the **DEXseq** function we can use the **DEXSeqResults()** function with our **DEXseq** object. We order table to arrange by pvalue. ```r dxr1 <- DEXSeqResults(ddx) dxr1 <- dxr1[order(dxr1$pvalue), ] ``` --- ## DEXseq function As with DESeq2, the DEXseq has a single workflow function which will normalize to library sizes, estimate dispersion and perform differential exon usage in one go. The returned object is our **DEXSeqResults** results object. ```r dxr1 <- DEXSeq(ddx) dxr1 <- dxr1[order(dxr1$pvalue), ] ``` --- ## DEXseq results The **DEXSeqResults** results object contains significantly more information than the DESeq2 results objects we have seen so far. ```r dxr1[1, ] ``` ``` ## ## LRT p-value: full vs reduced ## ## DataFrame with 1 row and 13 columns ## groupID featureID exonBaseMean dispersion stat pvalue ## <character> <character> <numeric> <numeric> <numeric> <numeric> ## 57142:E008 57142 E008 21482.1 0.00455953 2036.23 0 ## padj senescence shPTBP1_53 log2fold_shPTBP1_53_senescence ## <numeric> <numeric> <numeric> <numeric> ## 57142:E008 0 30.1855 63.8085 4.12122 ## genomicData countData transcripts ## <GRanges> <matrix> <list> ## 57142:E008 chr2:55252222-55254621:- 40618:35656:54755:... uc002ryd.3,uc002rye.3 ``` --- ## DEXseq results The **DEXSeqResults** results object can be converted to a data.frame as with **DESeqResults** objects ```r as.data.frame(dxr1)[1, ] ``` ``` ## groupID featureID exonBaseMean dispersion stat pvalue padj ## 57142:E008 57142 E008 21482.14 0.00455953 2036.225 0 0 ## senescence shPTBP1_53 log2fold_shPTBP1_53_senescence ## 57142:E008 30.18552 63.80855 4.121217 ## genomicData.seqnames genomicData.start genomicData.end ## 57142:E008 chr2 55252222 55254621 ## genomicData.width genomicData.strand ## 57142:E008 2400 - ## countData.Sorted_shPTBP1_53_rep1.bam ## 57142:E008 40618 ## countData.Sorted_shPTBP1_53_rep2.bam ## 57142:E008 35656 ## countData.Sorted_shPTBP1_53_rep3.bam ## 57142:E008 54755 ## countData.Sorted_vec_4OHT_rep1.bam ## 57142:E008 1007 ## countData.Sorted_vec_4OHT_rep2.bam ## 57142:E008 747 ## countData.Sorted_vec_4OHT_rep3.bam transcripts ## 57142:E008 838 uc002ryd.... ``` --- ## Visualizing DEXseq results A very useful feature of the **DEXSeqResults** results objects is the ability to visualise the differential exons along our gene using the **plotDEXSeq()** function and providing our **DEXSeqResults** results object and gene of interest to plot. ```r plotDEXSeq(dxr1, "57142") ``` ![](RU_RNAseq_p5_files/figure-html/da4-1.png) --- ## Visualizing DEXseq results We can specify the parameter **displayTranscripts** to TRUE to see the full gene model. ```r plotDEXSeq(dxr1, "57142", displayTranscripts = TRUE) ``` ![](RU_RNAseq_p5_files/figure-html/da5c-1.png) --- ## Visualizing DEXseq results ![](imgs/RTN4.png) --- ## Visualizing DEXseq results The differential exon usage for Entrez gene 7168 is more complex. ```r plotDEXSeq(dxr1, "7168", displayTranscripts = TRUE) ``` ![](RU_RNAseq_p5_files/figure-html/da5-1.png) --- ## Visualizing DEXseq results ![](imgs/TPM1.png) --- ## Visualizing DEXseq results We can produce an HTML report for selected genes using the **DEXSeqHTML** function. By default this will create a file called *testForDEU.html* within a folder *DEXSeqReport* in the current working directory. ```r DEXSeqHTML(dxr1, "57142") ``` [Link to result here]("../../data/DEXSeqReport/testForDEU.html") --- ## Gene Q values It may be desirable to obtain a pvalue summarizing the differential exon usage to a gene level. We can obtain an adjusted p-value per gene with the **perGeneQValue()** with our **DEXSeqResults** results object. The result is a vector of adjusted p-values named by their corresponding gene. ```r geneQ <- perGeneQValue(dxr1) geneQ[1:10] ``` ``` ## 1 100 1000 10000 10001 100033414 100037417 100048912 ## 1 1 1 1 1 1 1 1 ## 100049076 10005 ## 1 1 ``` --- ## Gene Q values We could merge this back to our full results table to provides exon and gene level statistics in one report. ```r gQFrame <- as.data.frame(geneQ, row.names = names(geneQ)) dxDF <- as.data.frame(dxr1) dxDF <- merge(gQFrame, dxDF, by.x = 0, by.y = 1, all = TRUE) dxDF <- dxDF[order(dxDF$geneQ, dxDF$pvalue), ] dxDF[1:2, ] ``` ``` ## Row.names geneQ featureID exonBaseMean dispersion stat ## 97377 57142 0 E008 21482.144 0.004559530 2036.225 ##<PHONE_NUMBER> 0 E009 2805.899 0.004776165 1092.222 ## pvalue padj senescence shPTBP1_53 ## 97377 0.000000e+00 0.000000e+00 30.18552 63.80855 ## 117732 1.619401e-239 1.246016e-234 49.34291 18.36318 ## log2fold_shPTBP1_53_senescence genomicData.seqnames genomicData.start ## 97377 4.121217 chr2 55252222 ## 117732 -4.264727 chr15 63353397 ## genomicData.end genomicData.width genomicData.strand ## 97377 55254621 2400 - ##<PHONE_NUMBER>3472 76 + ## countData.Sorted_shPTBP1_53_rep1.bam ## 97377 40618 ## 117732 619 ## countData.Sorted_shPTBP1_53_rep2.bam ## 97377 35656 ## 117732 668 ## countData.Sorted_shPTBP1_53_rep3.bam countData.Sorted_vec_4OHT_rep1.bam ## 97377 54755 1007 ## 117732 705 4442 ## countData.Sorted_vec_4OHT_rep2.bam countData.Sorted_vec_4OHT_rep3.bam ## 97377 747 838 ##<PHONE_NUMBER> 5206 ## transcripts ## 97377 uc002ryd.... ## 117732 uc002alh.... ``` --- # Time for an exercise [Link_to_exercises](../../exercises/exercises/RNAseq_part5_exercise.html) [Link_to_answers](../../exercises/answers/RNAseq_part5_answers.html)


---
layout: post
title: Foolish consistency?
published: 1
category:
- Programming
---
"A foolish consistency is the hobgoblin of little minds."
-- Ralph Waldo Emerson, "Self-Reliance"
I haven't read the essay, so I'm not sure whether in it Emerson tries to explain the difference between foolish and wise consistency. So, at the risk of being labelled a fool, here are some programming consistencies which I'll toss out there as "wise".
- Consistency in code spacing, indentation, and naming. Apart from the benefits your team reaps from having a code base that looks as though it were written by one person, you'll have the satisfaction of creating code like a professional. Who'd want to buy, or even borrow, a book with inconsistent spacing, indentation, capitalization, spelling, typography...? I have my preferences for coding conventions, but if they clash with the consensus of my team, I'll do as the Romans do.
- Consistency in build process. I'm a huge fan of continuous integration. I'm also a huge fan of everyone on the team building the project using the same build scripts the continuous build would; not everyone hopefully getting their IDEs configured the same way and building via the IDE.
- Consistently writing automated behavior specifications for the code, as the code is being developed. Call them "tests" if you must, but I'm really into treating xUnit tests as a design tool, as a crucible in which to fire and shape design ideas. No more of this post-facto, horrendously duplication-riddled test script cranking. Treat your automated "tests" as first-class citizens, creating and maintaining them with as much care as you would the code it's exercising.
What programming consistencies do you find wise? Foolish?