Template System Overview
Introduction
The TubeX template system is very powerful and allows you to create nearly any type of design for the software generated pages. The template system is also used in the
e-mail messages that the software sends, so you can control the content of those messages as well. This document will give you an overview of the basic template features
you will need to understand.
Basic Syntax
With the TubeX template system, all template tags are enclosed within the delimiters { and }. All content outside of delimiters is displayed as static content, or unchanged.
When the TubeX template parser encounters template tags, it attempts to interpret them, and displays the appropriate output in their place.
Comments
Template comments are surrounded by asterisks, which are in turn surrounded by the delimiter tags like so:
{* this is a comment *}
Template comments are NOT displayed in the final output of the template, unlike <!-- HTML comments --> these are useful for making internal notes in the templates which
no one will see in the generated output. Unlike the majority of the template commands, template comments may span multiple lines, which means the beginning {* delimiter and ending *} delimiter
are not required to be on the same line in the template code.
Variables
Template variables start with the dollar sign ($) and can contain numbers, letters and underscores like so:
{$g_config}
{$video.description}
{$user.username}
When a template variable is encountered by the template parser, the entire
template tag (including delimiters) is replaced by the value of that variable. Each of the templates will have different variables that you can use within them, so be sure to
review the other template sections of the manual to find out what variables are available in each template.
Variable Modifiers
In addition to simply displaying variables, you can also apply modifier functions to them. This is useful for formatting purposes, for example, when displaying a date you can
specify the format that the date should appear in. Variable modifiers follow the variable name and are separated from it by a | character like so:
{$video.date_added|t_age}
In the example above the TubeX function t_age is applied to the {$video.date_added} variable before it is displayed in the template. You can use any of the built in PHP functions
as long as it takes the variable you specified as the first parameter.
It is also possible to specify additional function arguments with the modifiers. Function arguments will come after the variable modifier and will be enclosed in parenthesis. So, for example, if you wanted to use the PHP function number_format() you would do that like so:{$variable|number_format(2,'.',',')}
This would call the number_format PHP function with the arguments like this:
number_format($variable, 2, '.', ',')
TubeX includes some builtin template modifiers, which are described below:
Functions
It is also possible to specify additional function arguments with the modifiers. Function arguments will come after the variable modifier and will be enclosed in parenthesis. So, for example, if you wanted to use the PHP function number_format() you would do that like so:
t_age
-
This modifier will convert a date or datetime value into an age string:
Today, 1 day ago, 2 days ago, ..., 1 week ago, 2 weeks ago, ..., 1 month ago, 2 months ago, ..., 1 year ago, 2 years ago, ...
t_formfield
-
This modifier will generate an HTML form field (text, textarea, checkbox, select) form custom database fields
t_translate
-
This modifier will translate the string stored in the template variable using the language file
t_duration
-
This will convert a value in seconds to HH:MM:SS format
t_tostring
-
This will convert a numeric value into a friendly string (e.g. 18234 to 18,234)
t_chop
-
This will truncate a string to a specific length, and append a string to the end indicating that it has been truncated. This
modifier takes two arguments: length, string to append
t_chop(50,'...')
This example will truncate the string to 50 characters and append ... to the end of the truncated string
t_chop_words
-
This is identical to the t_chop function with the exception that whole words will be maintained (i.e. truncation will not occur in the middle of a word) when truncating the string.
t_nearesthalf
-
This will round a decimal number (e.g. 3.2761) to the nearest half number (3.5). Very useful for generating star values for video ratings.
t_urlify
-
This will convert a string into a value that is suitable for use in a HTTP URL. This function takes a single argument: the number of words to limit
the generated value to. All non alpha-numeric (English) characters will be removed from the string and replaced with a dash (-) character.
t_datetime
-
This will convert a datetime value into a string formatted as you like. This function takes a single argument: the
date/time format to use.
t_date
-
This will convert a date value into a string formatted as you like. This function takes a single argument: the
date format to use.
Function tags appear much like variable tags, but do not start with a dollar sign. These template tags will contain a function name followed by optional function attributes like so:
{function attribute1="value1" attribute2="value2"}
Some functions are block functions which have both an opening and closing tag. All of the HTML code that is inside the opening and closing tags will be processed by these functions.
Block functions look like this:
{function attribute1="value1" attribute2="value2"}
Some HTML code
or other template values
{/function}
The template system provides some stock functions which are available in all templates, and some custom functions which are only available in specific templates. The
Stock Functions are described in this section of the manual. Other functions that are available on specific pages will be covered in the appropriate sections of this manual.
Stock Functions
The TubeX template system offers several stock functions that can be used in any of the software templates. These stock functions are described here.
{if}, {else}, {elseif}
In the {if} and {elseif} tags all PHP conditionals and functions are recognized, such as ||, or, &&, and, is_array(), etc. The conditionals and functions must be enclosed in the { and } delimiters and there must be a space after the "if" function name.
{foreach}, {foreachelse}, {foreachdone}
{foreachelse} There are no items to display {/foreach}
The {foreach} function has 3 available attributes:
-
from - This specifies the template variable to loop over
var - This specifies the variable name to use within the {foreach} block to display the values contained in the array
counter - This specifies the variable name that will be incremented for each item in the array
The from and var attributes are required; the counter attribute is optional.
If you would like to display some alternate HTML code when the array value is empty, you can use the {foreachelse} function. It must be contained with the {foreach} and {/foreach} tags. The HTML code that comes between the {foreachelse} and {/foreach} tags will be displayed when there are no values in the array specified in the from attribute.
You can break out of a {foreach} section early by using the {foreachdone} template function. When this is encountered, the {foreach} loop will immediately stop and will not continue processing the remainder of the items.
{insert}
-
counter - This specifies the name of the counter value that was specified in the {foreach} or {range} function
location - This specifies the location(s) where you want the HTML code displayed (more on this below)
max - This specifies the maximum counter value after which no further inserts will be done.
There are three ways you can specify a location: a single insertion, multiple insertions, or multiple insertions at regular intervals. To specify a single insertion, enter the location as a number by itself. To specify multiple insertions, enter a comma separated list of locations. To specify multiple insertions at regular intervals, enter the interval with a + sign in front of it. The location numbers you use are related to the counter value you are working with. Here are a few examples:
-
3,7,10 - This will insert the HTML code in the 3, 7, and 10 positions.
+5 - This will insert the HTML code every 5 positions.
25 - This will insert the HTML code only once at position 25
The max value can be used to stop the insertions after a specific position. For example, if you wanted to insert code every 5 positions but want it to stop after the 30th position you would set the location value to +5 and the max value to 30. This would still insert the HTML code at the 30th position, but not at the 35th, 40th, etc.
{capture}
{date}
-
value - This specifies the value to use to calculate the date that should be displayed/stored
format - This specifies the date and time format to use to display the date
The value setting allows you to offset the date so that you can display any date relative to today's current date. Some of the available offset values you can use are:
-
year - Offset by years
month - Offset by months
day - Offset by days
hour - Offset by hours
minute - Offset by minutes
second - Offset by seconds
Here are some examples of the settings you can use for the value attribute:
-
now - Today's date
today - Today's date
-1 day - Yesterday's date
-5 day - The date from 5 days ago
+2 day - The date 2 days from now
-1 week - The date 1 week ago
-1 week -2 day - The date 1 week and 2 days ago
2 days ago - The date 2 days ago
{locale}
{datelocale}
{nocache}
{literal}
{range}
-
start - This specifies the starting point of the loop. It can be an assigned template variable or a literal number
end - This specifies ending point of the loop. It can be an assigned template variable or a literal number
counter - This specifies the variable name that will be incremented for each loop iteration
{php}
{template}
In addition to the file attribute, you can also specify additional attributes which will then be accessible as template variables in the included template file. For example:
{include}
{cycle}
{assign}


InfoMasker is a highly effective anti-eavesdropping system. It can jam nearby microphones with human-inaudible ultrasound noise. The recorded noise induced by InfoMasker can effectively mislead state-of-the-art (SOTA) auto-speech-recognition (ASR) systems. Besides, the noise is sufficiently robust against various speech enhancement methods, such as noise reduction and speech separation.
Tips:
★ We recommend not listening to the origin audio samples and not reading the transcript before listening to the noisy audios. The priori knowledge will weaken the jamming effectiveness of these noises for human ear.
★ We recommend using headphones instead of external speakers to listen to these audio examples.
★ The denoised noisy audios are used to demonstrate the robustness of these noises against SOTA speech enhancement methods.
| Noise Type | Noisy Audio (SNR=0) | Denoised Noisy Audio |
| Our Noise | ||
| White Noise | ||
| 1 Series Speech Noise | ||
| 2 Series Speech Noise | ||
| 3 Series Speech Noise |
| Original Audio (2300-131720-0010 in Librispeech test-clean) |
The following figure shows the spectrogram of the original audio, the denoised noisy audio jammed by our noise, and the denoised noisy audio jammed by the 3-series speech noise respectively. Compared to the speech noise, our noise retains more noise components after denoising, which reveals the greater robustness of our noise.
| Our Noise After Denoising |
|
| Origin Audio | |
| 3 Series Speech Noise After Denoising |
| Noise Type | Noisy Audio (SNR=0) | Denoised Noisy Audio |
| Our Noise | ||
| White Noise | ||
| 1 Series Speech Noise | ||
| 2 Series Speech Noise | ||
| 3 Series Speech Noise |
| Original Audio (4992-41806-0013 in Librispeech test-clean) |
To better illustrate the effectiveness and robustness of our noise, we compare our noise with speech noise in different SNRs. The following audios are denoised noisy audios jammed by different types of noise. Our noise performs much better than others in lower SNRs.
| SNR | Our Noise | 1 Series Speech Noise | 3 Series Speech Noise |
| 0 | |||
| -1 | |||
| -2 | |||
| -3 | |||
| -4 | |||
| -5 |
| Original Audio (5105-28241-0017 in Librispeech test-clean) |
| Noise Type | Noisy Audio (SNR=0) | Denoised Noisy Audio |
| Our Noise | ||
| Backdoor | ||
| Patronus | ||
| A COTS Device |
| Original Audio (19-198-0001 in Librispeech train-clean-100) |


Bears vs. Lions final score: Mitchell Trubisky leads late go-ahead drive, Bears topple Lions on Turkey Day
by Joe RiveraIt's a happy Thanksgiving for Bears fans.
MORE: Watch NFL games live with fuboTV (7-day free trial)
The Bears overcame a late deficit — and the inconsistency of quarterback Mitchell Trubisky — en route to a 24-20 win in Detroit over the Lions.
VIDEO: Bears-Lions game highlights
Trubisky had three touchdown passes on the day, including a late strike with just over two minutes left to David Montgomery that gave Chicago (6-6) the lead for good. Still, tt was a mixed-bag day for Trubisky, who head-scratchingly avoided a first down on a run late in the second quarter and threw a bad interception. He put up 338 yards on 29-of-38 passing.
MORE: Blough reflects on 'special' NFL debut
It was a good showing for Lions rookie QB David Blough, who started in place of injured backup Jeff Driskel (starter Matthew Stafford was also out injured). Blough performed well in his NFL debut vs. a stout Bears defense, but it just wasn't enough. Blough finished with 22-for-38 passing for 280 yards, two touchdowns and a game-ending interception as Detroit fell to 3-8-1.
VIDEO: David Blough's WOW throws from his first NFL start
Sporting News covered all things Thanksgiving between the Bears and Lions below.
(All times Eastern.)
Bears vs. Lions score for Thanksgiving 2019
FINAL
Bears: 24
Lions: 20
| Q1 | Q2 | Q3 | Q4 | F | |
| Bears | 7 | 3 | 7 | 7 | 24 |
| Lions | 14 | 3 | 0 | 3 | 20 |
Bears vs. Lions updates, highlights
3:56 p.m.: Eddie Jackson intercepts a David Blough pass and the Bears will beat the Lions in their second straight Thanksgiving meeting.
3:55 p.m.: Roquan Smith with a huge third-down sack with 36 seconds left in the game.
3:49 p.m.: David Blough is leading the Lions down the field and almost throws an interception. 59 seconds left in this one.
3:37 p.m. CHICAGO SCORING PLAY: And the Bears have taken the lead on a Mitchell Trubisky TD pass to David Montgomery. Bears up 24-20 with 2:17 left in the game.
3:29 p.m.: Bears are driving with five minutes left in the game, and Trubisky connects with Anthony Miller to put Chicago into Lions territory.
3:12 p.m. DETROIT SCORING PLAY: Matt Prater hits a 24-yard kick after a failed third-and-1 rush, and the Lions take the lead again. Detroit up 20-17 in the fourth.
3:07 p.m.: The Lions are inside the red zone again. First-and-10 at the 14-yard line.
3:03 p.m.: We head to the fourth quarter and the game is still tied at 17 apiece.
2:53 p.m. CHICAGO SCORING PLAY: Trubisky connects with Jesse Horstead, who makes an acrobatic catch, for six points. Bears tie it up at 17.
2:42 p.m.: Darius Slay picks off Mitchell Trubisky, who threw the ball behind Robinson. Bad throw, good play by Slay.
2:32 p.m.: And we're back. Lions get the ball at the 25 to start the half.
2:10 p.m. END OF HALF: Lions take a 17-7 lead into the locker room in a game that's had its ups and downs. Lions get ball to start the second.
2:06 p.m. CHICAGO SCORING PLAY: A pretty good drive by the bears and Trubisky and Piñeiro hits a 30-yarder to cut the deficit to 7. 22 seconds left in the half, Lions up 17-10.
1:53 p.m. DETROIT SCORING PLAY: Prater puts the ball through the uprights for three more points. Lions up 17-7 in the second.
1:46 p.m.: David Blough is letting it fly. He connects with Kenny Golladay on another deep shot on the outside. Lions threatening to score again.
1:39 p.m.: Bears going for it on fourth-and-6 and they don't convert. Detroit takes over.
1:30 p.m.: The ruling is reversed and it's an incomplete pass instead. Refs missed a clear roughing the passer call on Trubisky.
1:27 p.m.: Trubisky hits Anthony Miller for a short gain, but Miller can't gather it. The ruling on the field is a catch and fumble, and we're going to replay.
1:20 p.m.: Lions punt the ball back away and pin the Bears inside their 10-yard line.
1:17 p.m.: Bears can't seem to get anything going on offense, as they punt away once again.
1:09 p.m.: On the ensuing kickoff, Matt Prater smokes a squib kick off of a Bears player, and the Lions recover. That's something special.
1:05 p.m. DETROIT SCORING PLAY: Blough hits Marvin Jones Jr. for a short TD pass. Blough has 131 pass yards already on the game. Lions up 14-7.
1:04 p.m.: Blough and Golladayhave a pretty good connection early, converting on a third-and-9.
1:01 p.m.: Lions are driving and just crossed the 50-yard line into Bears territory.
12:56 p.m.: Trubisky and the Bears follow up their first drive with a 3-and-out.
12:49 p.m. DETROIT SCORING PLAY: Well, that didn't take long. Blough hits Kenny Golladay for a 75-yard TD score to give Detroit six. Game is tied 7-7.
12:43 p.m. CHICAGO SCORING PLAY: Mitchell Trubisky hits Allen Robinson on a quick strike for the touchdown. Bears up early 7-0.
12:42 p.m.: Bears are at the 10-yard line after run from David Montgomery.
12:39 p.m.: Well, we re-kick, and Cordarrelle Patterson brings a ball about seven yards deep 57 yards to the 50. Good field position for the Bears.
12:36 p.m.: And the Bears take the opening kickoff and there are two flags down already on the field.
12:23 p.m.: Good news: Jeff Driskel is active, but not starting. Whether that qualifies as good news is debatable.


You are likely seeing this page because your host or IP address has recently been associated with activity that is causing AmiGO connections to drop for other users (including our monitoring bots).
For example, tens of thousands of expensive parallel queries in a few hours.
This status is temporary until our next release, the behavior has diminished for a period of time, or you have contacted us and we work something out. If you feel this is a mistake or would like to discuss server usage, please feel free to open a ticket on our helpdesk at http://help.geneontology.org/ .


Provides functions to help in fitting models to data, to perform Monte Carlo, sensitivity and identifiability analysis. It is intended to work with models be written as a set of differential equations that are solved either by an integration routine from package 'deSolve', or a steady-state solver from package 'rootSolve'. However, the methods can also be used with other types of functions.
| Version: | 1.3.5 |
| Depends: | R (≥ 2.6), deSolve, rootSolve, coda |
| Imports: | minpack.lm, MASS, graphics, grDevices, stats, utils, minqa |
| Suggests: | diagram |
| Published: | 2016-09-09 |
| Author: | Karline Soetaert, Thomas Petzoldt |
| Maintainer: | Karline Soetaert <karline.soetaert at nioz.nl> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: | yes |
| Citation: | FME citation info |
| In views: | Bayesian, DifferentialEquations |
| CRAN checks: | FME results |
| Reference manual: | FME.pdf |
| Vignettes: |
1. Inverse Modelling, Sensitivity and Monte Carlo Analysis in R Using Package FME 2. Sensitivity, Calibration, Identifiability, Monte Carlo Analysis of a Dynamic Simulation Model 3. Tests of the Markov Chain Monte Carlo Implementation 4. Sensitivity, Calibration, Identifiability, Monte Carlo Analysis of a Nonlinear Model 5. Sensitivity, Calibration, Identifiability, Monte Carlo Analysis of a Steady-State Model |
| Package source: | FME_1.3.5.tar.gz |
| Windows binaries: | r-devel: FME_1.3.5.zip, r-release: FME_1.3.5.zip, r-oldrel: FME_1.3.5.zip |
| OS X binaries: | r-release: FME_1.3.5.tgz, r-oldrel: FME_1.3.5.tgz |
| Old sources: | FME archive |
| Reverse depends: | BCE, phytotools |
| Reverse imports: | bioinactivation, bioOED, capm, growthrates, mkin |
| Reverse suggests: | airGR, simecol, SoilR |
Please use the canonical form https://CRAN.R-project.org/package=FME to link to this page.


{% extends 'base.html' %} {% load trainings_templatetags %} {% block content %} {% if exercises_names %}
Ups... Looks like there is nothing to analyse :-(


WELCOME !
BLOG
ANKIT KARAN
IIT MANDI
8434934890
This website is about myself.
I am Ankit karan , B.Tech 1st year, IIT MANDI.
Contact Form
First name
Last name
Phone number


I have over 8 years of experience in Investment relationship management and business development in Finance industry. I have worked at both large organizations and fintech startup.
I am tech enthusisat and I love building things. I'm most attracted to solving real customer problems with a business justification.
On top of that, I recently started a coding boot camp at Kickstart Coding. It's quite fun and exciting to learn new things and think of solving the biggest problems we have in the world wit hthe help of technology.


Corporate Relation
Arnav
Kedar
Natesh
Utkarsh
Shrey
Creatives
Aditya
Pranav
Anushka
Purva
Sanchi
Shubham
Mansi
Ashok
Event Managment
Prince
Kautilya
Jeevitha
Hospitality
Purva
Marketing
Vedant
Saurav
Ritu
Ambarish
Arnav
Media Publicity
Himabindu
Anumeha
Kamiya
Shivani
Operations and Logistics
Aman
Agnel
Dhiraj
Treasury
Prateek
Ganesh
Rutvik


I have learnt that I need to practice remaining focussed and I need to have good systems in place in order to work efficiently. I have learnt that when my inner voice is telling me that “I can’t do it”, I need to push on and there is a breakthrough just around the corner. I have learnt that when I am in my flow I can get a lot of work done. This helps my ego by reminding me that I can do.
I was surprised by how much studying about learning helped me understand the course material.
I was surprised by how much I didn’t know about myself. I really had to think about my identity and values.
It’s because it adds to making a more well rounded worker. From experience, you need to use all these skills in a work environment. It’s not just about having technical skills it’s about having human skills as well.
I do think that I need to improve my programming skills before bootcamp starts. However, I definitely don’t think the time spent on core learning was a waste. I am more efficient and I know how to deal with obstacles from having spent time studying how to learn.
Neuroplasticity is largely centred around forming strong neural connections in the brain. These connections are strengthened by repeated behaviour which tie in to forming strong habits. The idea that the brain can change replaced the original thinking that the brain was static and it stopped being able to develop after certain developmental periods. It is true that a child’s brain is a lot more malleable, however, that doesn’t stop as you get older.
By understanding that I can continue to learn as I get older, gives me confidence in tackling a subject I know little about. It will help reduce blocks and limitations I have within myself.
I can increase neuroplasticity by doing some of the following things: Have enough sleep. This is important so that the brain can reset brain connections that are important for memory and learning. Continue learning. Forming good habits and repetition of exercises are important to form strong neural pathways. Reduce stress. Reduce stress by doing things like exercise and meditation. This helps the brain work at a more optimum level.
Growth mindset is about knowing that you can get smarter by putting the time and effort in. Therefore, anyone can achieve growth by understanding that there is no difference in the ability to learn. This leads to more confidence and higher achievement.
When reading about growth mindset, I thought that I already had a growth mindset. This definition seemed to fit me very well,
“Individuals who believe their talents can be developed (through
hard work, good strategies, and input from others) have a growth
mindset. They tend to achieve more than those with a more fixed mindset
(those who believe their talents are innate gifts).”
Then I read this,
“I already have it, and I always have; People often confuse a
growth mindset with being flexible or open-minded or with having a
positive outlook — qualities they believe they’ve simply always
had. My colleagues and I call this a false growth mindset. Everyone is
actually a mixture of fixed and growth mindsets, and that mixture
continually evolves with experience. A “pure” growth mindset doesn’t
exist, which we have to acknowledge in order to attain the
benefits we seek.”
Knowing the antithesis helps me know what I don’t want to do in case I start leaning towards the “fixed” growth mindset.
I will make sure that I remember that as long as I continue to do something, I will head towards my goal. I want to learn and I want to get better but I understand there are ups and downs along the way.
Emotional Intelligence or EQ, is the ability to know your own emotions and understand the emotions of others. This helps guide decision making and helps to really connect with people on an emotional level. Knowing what somebody is feeling can help us understand of what they are thinking.
IQ is about your logical reasoning, reading comprehension, mathematical and abstract thinking ability. Generally, IQ is based more on memory and the ability to learn, understand and apply information.
Emotional intelligence is important as it helps create strong connections with people. High EQ is important when working in teams and in leadership roles. As human beings, we all share the same emotions and being able to identify other peoples emotions means that you can adjust your own behaviour and adapt emotionally to what is in front of you.
I have done a lot of thinking about this during the past week. I am a visual person; I have a love of photography and making music. I would like to be able to make what ever ideas I have in my head. In the bootcamp I want to learn how to code and think like a programmer. Understanding the full stack will be very useful. After the bootcamp, I will focus on design and mastering photoshop in my spare time. Eventually, a career such as a UI/UX designer or product designer interests me. I like working with people and I like being creative (when I have enough time). My technical skills are lacking and that is why I’m here.
I believe my strengths have stayed the same. However, I have discovered that staying focussed is still a weakness, although I am making progress. I think the limitations for me will be learning JavaScript, I just don’t feel confident in my ability to translate pseudocode in to actual code.
 The bootcamp will be my first experience working with my cohort (other than using zoom/slack). My biggest challenge will be asking questions. I don’t like wasting peoples time, but sometimes asking a lot of questions can be very useful and save a lot of time in the long run.
I would really like to develop my leadership skills further. I have been working on these the last few years and I think there is still a lot of room for improvement. I would also like to improve my communication skills. Being able to communicate clearly and effectively without being ambiguous, this is what I am aiming for.
My expectations are that there is a lot of patience and clear explanations on what is required. Any support in terms of helping me achieve my longer term career goals would be much appreciated.
Full focus and a lot of hard work. I am going to really give this all my time and energy for 9 weeks. By the end of the bootcamp, I want to feel confident in my coding skills enough to land me a job.
I will be consistent, hard working and clear in communication. I will ask good questions and embrace working in a team with a positive attitude. I will give this my full time and energy to really get the most out of the learning experience. I will do all of the above by making sure I structure my days efficiently in regards to study but also take time to rest and keep fit and healthy
My long term goal is to become a developer that can work on projects remotely. I have a particular interest in working on and designing products and I would like to be involved in their original conception. Having the ability to know how to code will enable me to get hands on in the development. Specifically, application design is where I would like to end up, although I need to work on my design skills. I also really enjoy the UI/UX side of things. I am hoping to combine all these aspects in to a future career.
I would like to work on my communication skills, in particular, pitching an idea in order to gain support. I feel that this is a very advantageous skill to have but it can very difficult to do in a way that is clear and convincing. Being articulate and engaging is important here.
I am very resourceful and I can see the big picture. I have strong interpersonal skills, empathetic and a great listener. I am resilient and I don’t give up when I face challenges. My limitations are that I can get distracted and take a lot more time than I originally anticipated to get things done. I can work for hours on end but getting started can be the hard part.
The key ingredient to managing my workload is to be consistent. Regular hours, with regular breaks that are bracketed with regular activities (running, music, reading). This will help me stay on track and give me some routine. I think achieving lots of little wins each day (breaking down larger goals in to smaller ones) will help motivate me.
Communication is key when working with others. I think being clear and confident about what I am trying to achieve as part of the team, and what my role is as a team member is very important.
When I need help, I will ask. It is easy to ask questions, via slack, phone or email. I have no problems asking for help when I need it. However, I don’t like asking for help early. I like to really explore a challenge before asking for help because from experience the answer is just around the corner if you are persistent.
I expect the facilitation team is there to help when I need it. I expect them to be reliable, accessible and honest. I like criticism as it can help me get to where I want to be faster. I expect constructive criticism from the facilitation team.
For foundations, my timetable is based around work in the afternoons/evenings. 1pm – 9pm. This enables me to go for a run in the morning and prepare for the day or work ahead. I also have left time in the weekends to explore a topic further.
In summary, my learning plan is to take advantage of all the information that is being taught at EDA and really push myself to understand as much as possible. I would like to have a portfolio by the end of the course in order to showcase my skills.
Ethical Decisions:
Making ethical decisions is a big part of my personality type
(according to Myers Briggs). As an INFP, I have a very strong moral
compass and I feel things deeply. The Myers Briggs test is pretty
spot on when it comes to my personality and I have definitely made
unethical decisions in the past which has made me feel terrible.
Weighing up the pros and cons of a decision is ultimately based on
what you want and what you desire. In fact, you might know that your
decision is unethical but you make it anyway. However, I believe that
it is important to always try and make ethical decisions as they take
courage and they are the very essence of being human.
Cultural Influences:
I was born in Wellington but when I was younger I lived in Holland
for a few years. My fathers side of the family is of Dutch heritage
and I would say that I have been influenced by the European culture
of food, language, travel and history. However, I spent most of my
time growing up in Lower Hutt. This is where I made the majority of
my friends and l would consider myself to be very Kiwi. In New
Zealand we are so lucky to be isolated and this gives our country a
real sense of community. Being laid back, having a sense of
adventure, working hard and being friendly to everyone. These are
some of the cultural traits that identify me and New Zealand culture
in general.
Strengths and Limitations:
I consider myself to be loyal, genuine and curious. I have a creative
and technical side plus the desire to learn. These are my strengths
but there are also limitations. For example, setting expectations is
something that I need to work on. I can be a little too laid back and
I like things to be relaxed and easy. I have realised that setting
expectations can help everyone know where you stand and it means
people don’t get down. This is a work in progress for me and one that
I am enjoying getting better at.
Working Life:
I have always enjoyed the process of working with people. I like
engaging with people and forming professional relationships. I have
found that recognition is a very important part of getting people to
work well together. People like to know they are doing a good job, or
at least be acknowledged when something good has been done. It’s very
easy to say, “Hey, well done fixing that problem yesterday, that was
good work”. Praising is a quality I feel is a strength of mine and
something I always try to bring in to a workplace.


See: Description
| Interface | Description |
|---|---|
| StepTestBuilderInterface |
Common interface shared across by the test builder class.
|
| Class | Description |
|---|---|
| ColumnUniqueNamer |
Based on the Data Studio class, this ensures that there are never any identically named columns,
and adds a postfix number if there are.
|
| ConstantValidator |
A class for validating constant name.
|
| MemoryCache |
Simple in memory implementation of
Cache that will be used by step under test. |
| ProgressRecord |
Model representing the data captured when progress was reported by the custom step.
|
| SDKAssertion |
The standard assertion class to verify the result of custom step execution.
|
| SDKAsyncAssertion |
Use together with SDKAssertion.
|
| SimpleLang |
Simplified version of DataX Lang.
|
| StepConfigurationTestBuilder |
Builder class specific to the configuration of the custom step.
|
| StepPropertyValueValidator |
A class for validating step property value.
|
| StepTestBuilder |
Builder to build a new custom step test session.
|
| StepTestJarBuilder |
Builder class for custom step that is loaded from a jar file.
|
| TestServerValueGetterImpl | |
| TestSession |
The test session that target a specific custom step.
|
| Enum | Description |
|---|---|
| ErrorMessages |
Defines error message when validating the custom steps.
|
| Parameter |
Common constant parameter class for SDK test framework.
|
| SimpleServerProperty |
Simplified version of com.experian.properties.ServerProperty.
|
Copyright © 2019. All rights reserved.


Mission Statement
The Fortress Family exists to raise consciousness through sound, sight and surroundings. Open communication, free expression and artistic collaboration is our mantra. We are explorers in search of that tone which rings true in all of us.
Your creative output could be collective input. Contact us to learn more about The Fortress Family.
“It is an absolute human certainty that no one can know his own beauty or perceive a sense of his own worth until it has been reflected back to him in the mirror of another loving, caring human being.”
Our History
Formed in 2009, Botanical Fortress began as an effort to explore the possibilities of unconventional band models and interpretive improvisation. For over 10 years, their collaborative, known as “The Fortress Family” has hosted strange public spectacles, Heavy Meditation Sessions, theatrical and film scores, and unique audio visual performances. Members of the collaborative effort gather each week to explore tone and texture, meanwhile enriching each other’s lives through dialogue and creative outlet. Ultimately, what develops is fellowship, through an open forum for dynamic musical, artistic and personal expression. Their mission continues as this multi-member post-rock orchestra pushes the boundaries of improvisational performance.
Our Deep Dedication to Socialism
Lorem ipsum dolor sit amet consectetur adipisicing elit.  Iste, id.


Pro_Pack : audio¶
ProPack audio module manages BWav formats, Timecode and the more advanced aspects of dealing with Audio within Maya. All the BWav handling in the StudioPack ultimately calls this codebase but most of the actual handling in ProPack still uses the AudioNode and AudioHandler from the StudioPack API.
>>> # import statement for the module via the r9pro decompiler
>>> from Red9.pro_pack import r9pro
>>> r9paudio = r9pro.r9import('r9paudio')
This module is extensions to the main audio support through the Red9 StudioPack and requires the StudioPack codebase to run
Core Functions
milliseconds_to_Timecode (milliseconds[, …]) |
convert milliseconds into correctly formatted timecode |
milliseconds_to_frame (milliseconds[, framerate]) |
convert milliseconds into frames |
timecode_to_milliseconds (timecode[, smpte, …]) |
from a properly formatted timecode return it in milliseconds timecode_to_milliseconds(‘09:00:00:00’) |
timecode_to_frame (timecode[, smpte, framerate]) |
from a properly formatted timecode return it in frames |
frame_to_timecode (frame[, smpte, framerate]) |
from a given frame return that time as timecode relative to the given framerate |
frame_to_milliseconds (frame[, framerate]) |
from a given frame return that time in milliseconds relative to the given framerate |
validate_timecodeString (timecode[, smpte, fps]) |
validate that any timecode string entered is correctly formatted |
Main Classes
Timecode ([node]) |
Timecode class designed to be integrated into a pipeline for adding timecode markers, extracting data from nodes, decoding data and syncing assets. |
BWav_Handler (filepath) |
a class designed to extract Timecode from a BWav’s header data and return it in various formats |
AudioGRP_Manager ([parent]) |
simple UI to connect Audio Group data |
-
milliseconds_to_Timecode
(milliseconds, smpte=True, framerate=None)¶ convert milliseconds into correctly formatted timecode
Parameters: - milliseconds – time in milliseconds
- smpte – format the timecode HH:MM:SS:FF where FF is frames
- framerate – when using smpte this is the framerate used in the FF block default (None) uses the current scenes framerate
Note
- If smpte = False : the format will be HH:MM:SS:MSS = hours, minutes, seconds, milliseconds
- If smpte = True : the format will be HH:MM:SS:FF = hours, minutes, seconds, frames
-
milliseconds_to_frame
(milliseconds, framerate=None)¶ convert milliseconds into frames
Parameters: - milliseconds – time in milliseconds
- framerate – when using smpte this is the framerate used in the FF block default (None) uses the current scenes framerate
-
timecode_to_milliseconds
(timecode, smpte=True, framerate=None)¶ from a properly formatted timecode return it in milliseconds timecode_to_milliseconds(‘09:00:00:00’)
Parameters: - timecode – ‘09:00:00:20’ as a string
- smpte – calculate the milliseconds based on HH:MM:SS:FF (frames as last block)
- framerate – only used if smpte=True, the framerate to use in the conversion, default (None) uses the current scenes framerate
-
timecode_to_frame
(timecode, smpte=True, framerate=None)¶ from a properly formatted timecode return it in frames
Parameters: - timecode – ‘09:00:00:20’ as a string
- smpte – calculate the milliseconds based on HH:MM:SS:FF (frames as last block)
- framerate – only used if smpte=True, the framerate to use in the conversion, default (None) uses the current scenes framerate
-
frame_to_timecode
(frame, smpte=True, framerate=None)¶ from a given frame return that time as timecode relative to the given framerate
Parameters: - frame – current frame in Maya
- smpte – calculate the milliseconds based on HH:MM:SS:FF (frames as last block)
- framerate – the framerate to use in the conversion, default (None) uses the current scenes framerate
-
frame_to_milliseconds
(frame, framerate=None)¶ from a given frame return that time in milliseconds relative to the given framerate
Parameters: - frame – current frame in Maya
- framerate – only used if smpte=True, the framerate to use in the conversion, default (None) uses the current scenes framerate
-
timecode_difference
(referencedTC, inputTC)¶ calculate the difference between 2 timecodes in frames timecodes are in a string format ‘00:00:00:00’. Mainly used in the r9Anim load when we load against a given timecode and need to calculate the offsets
Parameters: - src – timecode we’re comparing against SMPTE formatted as string
- des – timecode we want to find the frame difference too from the src
-
timecode_falls_within
(timecode, timecode_bounds)¶ from a given list of timecode bounds in smpte format [(startTC, endTC),….] see if the given TC falls within any of them and if so return that timecode section. This is a little like searching an EDL for the correct take based on a given timecode
>>> timecode_falls_within('06:35:01:18', [('06:34:36:17', '06:34:40:11'), >>> ('06:34:59:21', '06:35:03:24'), >>> ('06:33:25:28', '06:33:31:10')] >>> # Result : ('06:34:59:21', '06:35:03:24')
Alternatively if we have a node with timecode stamped we can do the following
>>> tc=r9Audio.Timecode('my_node_with_timecode') >>> timecode_falls_within('06:35:01:18', tc.getTimecode_bounds(tc_only=True)))
-
validate_timecodeString
(timecode, smpte=True, fps=None)¶ validate that any timecode string entered is correctly formatted
Parameters: - timecode – expecting a correctly formatted string ‘00:00:00:00’ but here we validate that this is correct and return False if not
- smpte – format of the timecode expected
-
timecode_set_to_mrigs
(tc, mrigs=None, propagate=True)¶ set the timecode to multiple mRigs at the same time, syncing the data between them via the copyTimecode call from the first mRig found or given
Parameters: - tc – timecode to set to the mrigs
- mrigs – if given set the timecode to the given mrigs, else find all connected mrigs to set from the selection
- propagate – do we just set the attrs or push the counter keys, if the UI is True then this is True by default
-
timecode_maya_set_production
(reset=False)¶ wrapper to set the Maya Production timecode
-
timecode_maya_toggle_timeline
()¶ Toggle between frame and timecode view in Maya’s timeline
-
class
Timecode_Wrangler
(parent=None, *args, **kwgs)¶ Bases:
PySide2.QtWidgets.QMainWindow
,Ui_MainWindow
simple UI to manager timecode on the mRigs
-
offset_selectedBy
(direction, *args)¶ offset the audio by a set amount
-
offset_selectedTo
(*args)¶ offset the audio so that the overall start frame of all the selected audio is shifted to start at the given frame
-
offset_ripple
(*args)¶ simple ripple offset
-
sync_bwavsRelative
(*args)¶ sync selected Bwavs against the Reference Timecode that’s been set
-
sync_bwavs
(*args)¶ sync selected the Bwavs against their internal Timecode
-
mrig_set_timecode
()¶ set the timecode for all selected mRigs
-
mrig_copy_timecode
()¶ set the timecode for all selected mRigs based on the first selected node being from the master rig from which all others will be synced
-
timecodeHud_connect
(*args)¶ manage the timecode HUD
-
timecodeHud_remove
(*args)¶ manage the timecode HUD
-
timecodeHud_toggle
(*args)¶ manage the timecode HUD
-
timecodeHud_delete
(*args)¶ manage the timecode HUD
-
staticMetaObject
= <PySide2.QtCore.QMetaObject object>¶
-
-
class
Timecode
(node=None)¶ Bases:
object
Timecode class designed to be integrated into a pipeline for adding timecode markers, extracting data from nodes, decoding data and syncing assets.
Parameters: node – node to bind to the class for timecode management -
count
= 'timecode_count'¶
-
samplerate
= 'timecode_samplerate'¶
-
ref
= 'timecode_ref'¶
-
timecode_input
¶ internal timecode cached on the class instance
-
isValid
()¶ return if the timecode is valid
-
is_active
¶ return if the timecode is actually being used (only checks keyed data not connected at the moment)
-
getTimecode_count
¶ get the ‘timecode_count’ attr from the Maya node at the current frame. This is the incremental counter thats added to the ‘timecode_ref’ attr to generate the actual timecode at a given frame
-
getTimecode_ref
¶ get the ‘timecode_ref’ attr from the Maya node at the current frame, this is the pointer in milliseconds
-
getTimecode_samplerate
¶ get the ‘timecode_samplerate’ attr from the Maya node at the current frame, this is the sample-rate set when the counter attr was generated
-
hasTimeCode
()¶ test to check if our node has all the required TimeCode setups
-
getTimecode_from_node
(time=None, smpte=True)¶ wrapper method to get the timecode back from a the node bound to the class
Parameters: - time – time at which to get the data, else get it from currentTime
- smpte – if true (default) return the timecode as smpte, else return millisecs
-
getTimecode_bounds
(tol=2, tc_only=False)¶ from node bound to the class find all timecode bounds and return as a list of tuples. This is designed to handle discontinuous timecode, ie a scene with multiple cuts that have multiple timecode slices.
Parameters: - tol – key gradient thats allowed, usually count attr is a linear counter of val 1 but default for this is 2 to give us a margin of error
- tc_only – if True we only return the found bounds as timecode data [(startTC, endTC)….] else the return includes the frame times [(startFrm, endFrm, startTC, endTC)]
Note
timecode bounds in this case are obvious slices of timecode within an animation curve, a rig may have many different timecode sections bound to it and this will find and return those ranges for processing, think of them as cuts in an EDL edit
-
find_Timecode_frame
(timecode, bounds=[], set=True)¶ find a given timecode on the node, this searches all the timecode bounds on the node to try and find an appropriate match, then returns the actual frame it was found at
Parameters: bounds – default return from the getTimecode_bounds function
-
static
getTimecode_maya_production
()¶ get the internal timecode binding from Maya’s Production mapping
-
static
setTimecode_maya_production
(tc='', frame=None)¶ set the Maya Production timecode mapping, managing and modifying the mapping of the visual timecode on the timeslider in Maya
Parameters: - tc – timecode to set
- frame – if given set the timecode at frame else use the currentTime as the binding
-
addTimecode_to_node
(tc='', propagate=False, suppress=False, timerange=[], set_from_currentTime=True)¶ wrapper to add the timecode attrs to a node and if set propagate that data to the node and fill the attrs up
Parameters: - tc – optional timecode, used in conjunction with the propagate flag
- propagate – push the timecode given onto the node and bake the count attr against the current fps
- suppress – confirmDialog warnings supression
- timerange – If propagate then this is an optional timerange over which to set the data
- set_from_currentTime – if True we use the currentTime / currentFrame in the initial calculations else we use the startTime, either given (timerange[0]) or the current timeslider start. If you’re setting multiple bounds of timecode with this it’s expecting you to be at the startFrame, setting this to False will do this for you.
-
setTimecode
(tc, propagate=False, suppress=False)¶ set the timecode to the Maya node and propagate if set, just a re-worked stub to make it more obvious when setting the timecode up rather than calling add, which actuially does the same thing ;)
Parameters: - tc – timecode used in conjunction with the propagate flag
- propagate – push the timecode given onto the node and bake the count attr against the current fps
- suppress – confirmDialog warnings supression
-
removedTimecode_from_node
()¶ remove the timecode attrs from the node
-
timecode_difference_to
(referenceTC)¶ get the difference in frames between this instances timecode and a given reference TC
-
timecode_HUD
(force=False)¶ get the current Timecode HUD mNode, if not found, create one with the force flag
Parameters: force – if there’s no MetaTimeCodeHUD node already in the scene we generate one and return that
-
hud_connect
(draw=True)¶ add this Timecode node to the Timecode HUD display
Parameters: draw – when we connect set the HUD to be drawn
-
hud_remove
()¶ remove this timecode instance from the timecode HUD, unconnecting the nodes
-
hud_delete
()¶ delete the MetaTimeCodeHUD node altogether
-
hud_toggle_draw
()¶ toggle the HUD draw state
-
hud_kill
()¶ turn OFF the HUD draw but do not delete the wires or the MetaTimeCodeHUD
-
enterTimecodeUI
(buttonlabel='Set', buttonfunc=None, runfunc=True, default='01:00:00:00', propagate=True, timerange=(), *args)¶ generic UI to enter timecode
Parameters: - buttonlabel – label to add to the button in the ui when it’s opened
- buttonfunc – function to bind to the button on exit, default is self.addTimecode_to_node(), note that the buttonfunc is passed the timecode from the UI on exit
- runfunc – if True run the buttonfunc on close, note that if buttonfunc is None we run the default func if this is False then we just return the timecode entered
- default – if propagate=False this is the default timecode in the UI when it’s opened
- propagate – if True we set the initial UI timecode to that of this class instances.timecode_input property, if this is called from mRig this will be the current timecode bound to that rig
-
-
class
BWav_Handler
(filepath)¶ Bases:
object
a class designed to extract Timecode from a BWav’s header data and return it in various formats
-
isBwav
()¶ validate if the given source wav is a BWav or not
-
sampleRate
¶ sample rate in milliseconds
-
bwav_getHeader
()¶ retrieve the BWav header info and push it into an internal dic that you can inspect self.bwav_HeaderData. This is designed to be cached against this instance of the audioNode object. Note that this code uses a binary seek to first find the starting chunk in the binary file where the ‘bext’ data is written.
Note
We could, if we could ensure it was available, use ffprobe.exe (part of the ffmpeg project) This would also cover most media file formats including Mov, avi etc There is coverage for this in this module getMediaFileMetaData() does just that
-
bwav_timecodeMS
()¶ read the internal timecode reference form the bwav and convert that number into milliseconds
-
bwav_timecodeReference
()¶ internal timeReference in the bwav
-
bwav_timecodeFormatted
(smpte=True, framerate=None)¶ convert milliseconds into timecode
Parameters: - smpte – format the timecode HH:MM:SS:FF where FF is frames, else milliseconds
- framerate – when using smpte this is the framerate used in the FF block
-
-
class
AudioGRP_Manager
(parent=None, *args, **kwgs)¶ Bases:
PySide2.QtWidgets.QMainWindow
,Ui_MainWindow
simple UI to connect Audio Group data
-
selected_expTag
¶ we only allow single selection of expTags
-
selected_sceneAudio
¶ return instantiated r9Audio.AudioNodes
-
selected_linkedAudio
¶ return instantiated r9Audio.AudioNodes
-
staticMetaObject
= <PySide2.QtCore.QMetaObject object>¶
-
disconnectAudio
()¶ disconnect the selected linked audio from the tag
-
connectAudio
()¶ connect the selected audio in the scene list to the selected tag
-
-
getMediaFileMetaData
(filepath, ffprobePath=None)¶ This function is capable of returning most metaData from mediaFiles, the return is in a json format so easily accessed. :param ffprobePath: if not given the code will asume that ffprobe.exe has been
dropped into teh Red9/packages folder, else it’ll use the given pathNote
This is a stub function that requires ffprobe.exe, you can download from http://www.ffmpeg.org/download.html it’s part of the ffmpeg tools. Once downloaded drop it here Red9/pakcages/ffprobe.exe This inspect function will then be available to use for many common media formats. More info: http://www.ffmpeg.org/ffprobe.html


JavaScript Arrays Schock
Numbers
Show the Numbers
Language Names
Language Names
Language Popularity
Language Popularity


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/Dependent.20types.html ---
Suppose that I have two natural numbers n
and m
, and a proof that they are equal h : n = m
. I have essentially never needed dependent types, but here I really have to deal with them and define the identity map from fin n
to fin m
. Can someone help with this? (I am in tactic mode, if that matters).
use fin.cast
The important thing is that it copies the contained value, so when projecting it you don't have an rw
in your data
If you're in tactic mode, you may have better result if you call subst n
first.
Then you don't need cast
Here's my thinking when considering using cast
:
fin.cast
uses the specifics offin
if I look at the definition. I am more looking for the syntax for the more general situation where you have dependent types C k
, a proof that k = l
, and want to define the identity from C k
to C l
starting from the identity from C k
to C k
(which is the same map, but I don't how to convince lean of this). How would I use cast
or subst
in such a situation? (I never used any of them, so I don't know what they are supposed to do, or their syntax!)
You can use eq.rec
. But be very careful, it is usually a bad idea to do computation under it
But note that all of the general-purpose alternatives like the subst
and rw
tactics are also going to use eq.rec
under the hood.
In some sense the "obvious" thing to do is is as follows: given h : k = l
you have congr_arg C h : C k = C l
and cast (congr_arg C h) : C k -> C l
. But this approach leads to a lot of awkwardness. It is common that you have some data combined with some properties, and you can define a map that just applies cast
to the properties while leaving the data alone. This is what fin.cast
does. It generally works much better because of proof irrelevance: any two proofs of the same proposition are considered the same, so you don't need to worry about what exactly the cast did.
The issue is that in a situation like
variables {i n : ℕ} (h : i < n) variables {m : ℕ} (e : n = m) #reduce (eq.rec_on e (fin.mk i h) : fin m).val
this expression is not definitionally equal to i
, even though you can prove that it is equal to i
.
OK, thanks a lot for your explanations. Definitional equality is really useful for me here, so I will go for fin.cast
as advocated by Johannes, but I have learnt a lot!
Last updated: Apr 24 2020 at 19:02 UTC


 I'm sort of a softy, I couldn't shoot Bambi except with a camera. It's hard to see things when you're too close. Take a step back and look. Let's put some happy little clouds in our world.
About Our Program
You've got to learn to fight the temptation to resist these things. Just let them happen. If you didn't have baby clouds, you wouldn't have big clouds. We'll lay all these little funky little things in there. I thought today we would make a happy little stream that's just running through the woods here. This is the time to get out all your flustrations, much better than kicking the dog around the house or taking it out on your spouse.


=== On-Location Gathering ===
Selecting specific locations for onsite gathering, and then performing reconnaissance over time (usually at least 2-3 days in order to assure patterns). The following elements are sought after when performing onsite intelligence gathering:
* Physical security inspections
* Wireless scanning / RF frequency scanning
* Employee behavior training inspection
* Accessible/adjacent facilities (shared spaces)
* Dumpster diving
* Types of equipment in use


{% extends 'assessment-rooted.html' %} {% load crispy_forms_tags %} {% block content %}
If exposure is a continuous variable, create one group, “Continuous”, for the comparison set. If categorical, create the appropriate number of groups, “Q1”, “Q2”, etc. For case-controls studies, also indicate "Cases" and "Controls". Ex. Continuous; Control T1 The total number of individuals in all groups should equal the total number of individuals in the comparison set This field is commonly used in HAWC visualizations.
{% endif %} {% include "hawc/_formset_table_template.html" with showDeleteRow=True %}


Structs
The following structs are available globally.
-
An object that represents an artwork
See moreDeclaration
Swift
public struct Artwork: Codable
-
An object that represents play parameters for resources.
See moreDeclaration
Swift
public struct PlayParameters: Codable
-
Undocumented
See more
-
Undocumented
See more
-
Undocumented
See more
-
Undocumented
See more
-
Undocumented
See more
-
A client for submitting requests to the Apple Music API.
See moreDeclaration
Swift
public struct CiderClient
-
Undocumented
See more
-
Undocumented
See more -
Undocumented


FITS File Handling¶
Fermi provides events (photons and spacecrafts) files in FITS format. Astropy provides tools to deal with FITS files.
With astropy.io.fits
, one can - retrieve information about a GRB,
and - load recorded data.
FITS is a binary format. One may get weird results to directly convert
data in FITS to popular data structures such as Numpy Array or Pandas
DataFrame. Fortunately, astropy.table.Table
makes it easy to load
data and then convert to Pandas DataFrame.
demo/fits.py
demonstrates how to make good use of Astropy to handle
FITS files. One may prefer to first convert it to .ipynb
via
jupytext
, see Jupytext.


--- permalink: /events/ title: "Events" available: false --- {% assign upcoming_events = site.data.events.upcoming | where_exp: "event", "event.date > site.time" %} {% assign past_events = site.data.events.past | where_exp: "event", "event.date <= site.time" %}
I really enjoy showing people things that I'm passionate about. One medium I found that allows for an immediate feedback loop is via talks. I also attend events as a key participant, panelist or some role of that nature.
Below are upcoming talks that I'll be giving that you should check out!
I don't have any upcoming talks at the moment. Let's talk more if you're organizing or have one in mind.
{% endif %}I've given presentations at SXSW and WaffleJS and attended panels on behalf of YesWeCode. So far, I'm clocking at {{ past_events.size }} events that I've been a part of.
{% if page.available %}I'm open for engagements. Want me at your next event? Learn how.
{% else %}I'm currently not available for new engagements. Feel free to contact me if you have any questions.
{% endif %}


Maze
Maze Game
Start Game
High Scores
Credits
Starting Lounge
Choose Maze Size
5x5
10x10
15x15
20x20
Main Menu
Congratulations you got a High Score!
Enter Name for Score Board
Enter
Score Board
You played the
Score:
Time:
↻   Replay
Change Size
Main Menu
Credits
By:
John Johnson
USU
for CS5410
Main Menu
Main Menu
Score:
Time:
Maze Controls
Movement: ↑,←,↓,→; w,a,s,d; i,j,k,l
Hint toggle: h
Breadcrumbs toggle: b
Path to finish toggle: p
Score toggle: y
Main Menu


At first, include jQuery and the desoSlide files in your page:
<link rel="stylesheet" href="css/jquery.desoslide.css" />

The CSS file is only needed for the caption styles.
Then, you need to create your thumbnails list with that markup. Don't forget to specify your images links and the alt
attribute.

Explanations:
alt
attributedata-caption
attribute is used for the caption (optional)data-href
attribute contains the link to the page that will be active on the main image (optional)Call the plugin "desoSlide" on your list of thumbnails by specifying the target where the main image will be generated:
$(function() {
$('#my_thumbs').desoSlide({
mainImage: '#mainImage'
});
});
Here, the main image will be generated inside #mainImage
.
Displaying the second image at loading. Disabling the caption, no link and no keys.
$('#ex1_thumbs').desoSlide({
mainImage: '#ex1_mainImage',
autoStart: true,
firstImg: 1,
enableCaption: false,
enableControlsKeys: false
});
Displaying the caption by hovering the main image. No data-href
provided and no control.
$('#ex2_thumbs').desoSlide({
mainImage: '#ex2_mainImage',
displayCaption: 'hover',
enableControls: false
});
You can control the slider by clicking on the pictos. Previous, pause, play and next are supported. Also, you are able to use your keyboard keys to control it:
As this feature is binded on the document, if you have more than one slider on your page and you press a key, all the slider will be triggered. I recommand to you to enable the keys control on only one slider, by disabling the others with enableControlsKeys: false
.
Find below all the available options.
| Options | Values | Default | Description |
|---|---|---|---|
mainImage |
Your target container | false |
The main image container. If you don't specify a valid selector, you'll receive an error. |
insertion |
'append' , 'prepend' or 'replace' |
'append |
How to create the main image, by appending, prepending or replace all the selector's content (overwriting). |
autoLoad |
Boolean | true |
All thumbnails links (full size images) are auto loaded in background (invisible). |
autoStart |
Boolean | false |
Autostarting a diaporama. |
firstImg |
An integer between 0 and the number of thumbnails (-1) | 0 |
The index of the thumbnail that you want to display first. |
enableCaption |
Boolean | true |
Enable or not the main image caption. If true , be sure that you have specify the data-caption attribute on thumbnails. |
displayCaption |
'always' or 'hover' |
'always' |
How to show the main image caption. |
enableControls |
Boolean | true |
Able to control the slider (prev/pause/play/next). |
enableControlsKeys |
Boolean | true |
Able to control the slider by using the keyboard shortcuts (left/right/space). |
interval |
An integer, minimum 1500 | 3000 |
Interval in milliseconds between each image. |
displayWarnings |
Boolean | true |
Show warnings in the developer console. Be sure to put it false in production. |
displayErrors |
Boolean | true |
Show errors in the developer console. Be sure to put it false in production. If the render isn't ok, enable the errors then debug. |
callback |
function(result) | false |
Get the slider result. The first argument outputs one of these values: "success", "error" or "warning". |
The returned value by the .desoSlide()
call is the jQuery object in order to maintain the chainability.
As explained before, if you want to know if the slider is well generated, use the callback
function.
$('#ex2_thumbs').desoSlide({
mainImage: '#ex2_mainImage',
callback: function(result) {
switch(result) {
case 'success': // success handler
break;
case 'error': // error handler
break;
case 'warning': // warning handler
break;
}
}
});


Check-dam floods farms, blocks water flow
Makes life difficult for residents
by Staff ReporterDespite repeated protests, the authorities are yet to address the issues of Pavumba and Thazhava residents who allege that the unscientific construction of a check-dam across the Pallikkal river has affected their everyday life.
During the floods in August, many low-lying areas in the taluk were completely inundated and farmers had to suffer huge losses as their entire crop was destroyed.
Report sought
Moreover, many houses were flooded and over 300 families were shifted to relief camps at Pavumba and Thodiyoor.
Following that, the District Collector had instructed the Additional District Magistrate to submit a report after consulting experts. According to the residents, the check-dam has been blocking the water flow and flooding their roads and farms. They say it is unable to handle the flow during rainy season, leading to heavy flooding. Though the officials assured remedial measures if they find technical flaws in the construction, the situation remains the same. Officials from the Minor and Major Irrigation and Harbour Engineering wings who visited the area say the check-dam, which is just 1.5 m high, cannot possibly pose any hindrance to the water flow.
But the farmers living in the low-lying area say they are under permanent threat and demand immediate intervention. The members of the Churuli Padasekhara Samiti say that even moderate rain is now inundating their farms.


THE VOICE FROM THE SEA.
A FISHERMAN or a pilot was walking one night on the sands at Porth-Towan, when all was still save the monotonous fall of the light waves upon the sand.
He distinctly heard a voice from the sea exclaiming,--
"The hour is come, but not the man."
This was repeated three times, when a black figure, like that of a man, appeared on the top of the hill. It paused for a moment, then rushed impetuously down the steep incline, over the sands, and was lost in the sea. In different forms this story is told all around the Cornish coast.


|
SensESP
0.5.1
Universal Signal K sensor framework for ESP8266 and ESP32
|
#include <debounce.h>
Public Member Functions | |
| Debounce (int ms_min_delay=200, String config_path="") | |
| virtual void | set_input (bool new_value, uint8_t input_channel=0) override |
| Public Member Functions inherited from SymmetricTransform< T > | |
| SymmetricTransform (String config_path="") | |
| Public Member Functions inherited from Transform< T, T > | |
| Transform (String config_path="") | |
| Transform< T, T > * | connectFrom (ValueProducer< T > *producer0, ValueProducer< T > *producer1=NULL, ValueProducer< T > *producer2=NULL, ValueProducer< T > *producer3=NULL, ValueProducer< T > *producer4=NULL) |
Protected Attributes | |
| unsigned long | last_time |
| int | ms_min_delay |
Debounce is a boolean passthrough transform that will only accept value changes that are sufficiently spaced apart to be passed on to the next consumer.
Definition at line 11 of file debounce.h.
| Debounce::Debounce | ( | int | ms_min_delay = 200 , |
| String | config_path = "" |
||
| ) |
Definition at line 3 of file debounce.cpp.
|
overridevirtual |
Definition at line 8 of file debounce.cpp.
|
protected |
Definition at line 18 of file debounce.h.
|
protected |
Definition at line 19 of file debounce.h.


Recreates a Graph saved in a MetaGraphDef
proto.
tf.compat.v1.train.import_meta_graph( meta_graph_or_file, clear_devices=False, import_scope=None, **kwargs )
This function takes a MetaGraphDef
protocol buffer as input. If
the argument is a file containing a MetaGraphDef
protocol buffer ,
it constructs a protocol buffer from the file content. The function
then adds all the nodes from the graph_def
field to the
current graph, recreates all the collections, and returns a saver
constructed from the saver_def
field.
In combination with export_meta_graph()
, this function can be used to
Serialize a graph along with other Python objects such as QueueRunner
,
Variable
into a MetaGraphDef
.
Restart training from a saved graph and checkpoints.
Run inference from a saved graph and checkpoints.
... # Create a saver. saver = tf.compat.v1.train.Saver(...variables...) # Remember the training_op we want to run by adding it to a collection. tf.compat.v1.add_to_collection('train_op', train_op) sess = tf.compat.v1.Session() for step in xrange(1000000): sess.run(train_op) if step % 1000 == 0: # Saves checkpoint, which by default also exports a meta_graph # named 'my-model-global_step.meta'. saver.save(sess, 'my-model', global_step=step)
Later we can continue training from this saved meta_graph
without building
the model from scratch.
with tf.Session() as sess: new_saver = tf.train.import_meta_graph('my-save-dir/my-model-10000.meta') new_saver.restore(sess, 'my-save-dir/my-model-10000') # tf.get_collection() returns a list. In this example we only want # the first one. train_op = tf.get_collection('train_op')[0] for step in xrange(1000000): sess.run(train_op)
NOTE: Restarting training from saved meta_graph
only works if the
device assignments have not changed.
Variables, placeholders, and independent operations can also be stored, as shown in the following example.
# Saving contents and operations. v1 = tf.placeholder(tf.float32, name="v1") v2 = tf.placeholder(tf.float32, name="v2") v3 = tf.math.multiply(v1, v2) vx = tf.Variable(10.0, name="vx") v4 = tf.add(v3, vx, name="v4") saver = tf.train.Saver([vx]) sess = tf.Session() sess.run(tf.global_variables_initializer()) sess.run(vx.assign(tf.add(vx, vx))) result = sess.run(v4, feed_dict={v1:12.0, v2:3.3}) print(result) saver.save(sess, "./model_ex1")
Later this model can be restored and contents loaded.
# Restoring variables and running operations. saver = tf.train.import_meta_graph("./model_ex1.meta") sess = tf.Session() saver.restore(sess, "./model_ex1") result = sess.run("v4:0", feed_dict={"v1:0": 12.0, "v2:0": 3.3}) print(result)
meta_graph_or_file
: MetaGraphDef
protocol buffer or filename (including
the path) containing a MetaGraphDef
.clear_devices
: Whether or not to clear the device field for an Operation
or Tensor
during import.import_scope
: Optional string
. Name scope to add. Only used when
initializing from protocol buffer.**kwargs
: Optional keyed arguments.A saver constructed from saver_def
in MetaGraphDef
or None.
A None value is returned if no variables exist in the MetaGraphDef
(i.e., there are no variables to restore).
RuntimeError
: If called with eager execution enabled.Exporting/importing meta graphs is not supported. No graph exists when eager execution is enabled.


{% extends "base.html" %} {% block main %}
Why wait for the end of the year for Spotify to send you a playlist if you can learn which artists you had listened the most already?
Here you can find a visual representation of your most listened artists and genres in various time ranges.
Your top artists and genres are derived from the data of your listening history which is collected approximately in the last 6 months.
You can click on any place on the diagram to zoom in, and click on the middle to zoom out.
You may see the same artist being listed more than once as each artist may belong to more than one genre.
What were you upto in the last 4 weeks?
Let's see what we can recommend you based on the artists and genres that you had been more into in the past month.
Creating your playlist...
This can take upto one minute, please be patient.


University of Regina Rams' Greg Nesbitt wins national coaching award
by Regina Leader-PostThe University of Regina Rams’ Greg Nesbitt is the 2019 recipient of Football Canada’s Geno Fracas Award.
The award recognizes a U Sports assistant coach who works tirelessly for the players’ benefit while supporting his fellow coaches.
Nesbitt received the award Thursday at the U Sports All-Canadian Gala in Quebec City.
A retired social worker, Nesbitt recently completed his 16th season as a Rams assistant. He has been a defensive line coach and scout team co-ordinator during that time.
Nesbitt was a defensive lineman with the junior Rams from 1976 to 1980. He helped the team win two Canadian Junior Football League championships.
He subsequently spent four seasons as the head football coach with the LeBoldus Golden Suns, guiding them to two city titles.
He has also been a guest coach at three Saskatchewan Roughriders training camps.
“Greg takes pride in his work and has made a difference in the lives of the players he’s instructed throughout the years while earning the respect of the coaches in our football program, the league and nation,” Rams head coach Steve Bryce said in a media release.
• • •
Riley Clanton scored 31 points to help the Luther Lions defeat the Johnson Wildcats 76-57 in Regina Intercollegiate Basketball League junior boys action Thursday. Abdul Tanko paced Johnson with 23.
In a junior girls game, Luther defeated Johnson 48-27. Dami Soiemi led Luther with nine points. McKenna Torgerson had a game-high 10 points for Johnson.


To work in a challenging environment where I can present my skills which experience personal growth and responsible citizen where I can contribute my potential ability to the organization’s growth and success


HectoDNS | server configuration
The simplest configuration
This configuration allows to start a server listening UDP port 53
that resonds with SERVFAIL
on each submitted request.
server { listen = ":53" proto = "udp" }
Core configuration
Syntax: server_shutdown_timeout = "duration"
Default: server_shutdown_timeout = "0s"
Configures a timeout for a graceful shutdown of server. When the duration expires, hectodns will close connections to facilitate shutdown.
Syntax: server { ... }
Default: —
Sets configuration for a server.
Server configuration
Syntax: listen = "address:port"
Default: listen = ":53"
Sets address and port for IP for a on with server will accept requests. An address may also be a hostname, for example:
listen = ":53" listen = "<IP_ADDRESS>:53" listen = ":5353" listen = "localhost:5353"
Syntax: max_conns = number
Default: max_conns = 0
Sets the maximum number of simultaneous connections that can be opened by a single server. By default, there is no limit on maximum connections.
Syntax: proto = "udp"|"tcp"|"http"
Default: proto = "udp"
Sets the communication protocol of the server.
When "http" is set, the DNS queries over HTTP will be used.
Syntax: request_timeout = "duration"
Default: request_timeout = "0s"
Sets the maximum duration for processing the request. A timeout of zero means to timeout.
Syntax: resolver "name" { ... }
Default: —
Sets configuration for a resolver plugin. Resolvers is a sequence of resolution plugins that are sequentially polled in order to retrieve a response on the processing request.
Sytax: resolver_directory = "path"
Default: resolver_director = "$cwd"
Sets the working directory for resolvers, when specified server searches the executable in the given path, otherwise a current working directory will be used


Follow the below steps to connect to your Venus Mask
Ensure WiFi is enabled on your device
Scan for Wireless devices
Connect to "Venus Mask"
Once you are connected to the Venus Mask WiFi you can select your program


{% extends "base.html" %}
{% block title %}{{ super() }}Manage roles and access rights{% endblock %}
{% block head %}
{{ super() }}
{% endblock %}
{% block body %}
{{ super() }}
The table below contains an overview of the available roles for this instance and the level of access they give to the instance. Admins have access to everything.
| Page | {% for role in roles %}{{ role.name }} | {% endfor %}
|---|---|
| {{ page.pretty_name }} | {% for role in roles %}{% endfor %} |
Are you sure you want to delete (ID: )?


Evaluation modes:
Predicate Classification
Scene-graph Classification
Scene-graph Detection
@ K:
@ 20
@ 50
@ 100
Random image?
search


| Class | CFPropertyList::Binary |
| In: |
rbBinaryCFPropertyList.rb
|
| Parent: | Object |
Counts the number of bytes the string will have when coded; utf-16be if non-ascii characters are present.
Convert CFPropertyList to binary format; since we have to count our objects we simply unique CFDictionary and CFArray


{% extends 'bootstrap.html' %} {% block content %}
You have been logged out
Click here to log in again


Pro_Pack : project¶
>>> # main import statement to use
>>> from Red9.pro_pack import PROJECT_DATA
Red9 ProPack Project object (python object) is bound on boot to pro_pack itself and is used to manage data against a given clients/users project file. The project file itself is a simple Json formatted file and supported in 3 different locations depending on your studios setup. By default the project file, when created through the ProjectManager, will be added to a folder in the Red9 Prefs.
This allows even single freelance users to benefit from the functionality exposed by the systems. Once a custom project has been created all future projects created will be saved into the folder of the currently project loaded.
For Clients working with us under support the project file is usually found under the client resource folder here:
We also recently added new Maya environment variable to expand the use of this data for those running ProPack without a ClientCore module. If you enter the following into your Documents/maya/20XX/maya.env then all xxx.project files found will be added to the list of avaiable projects, enabling you to switch all of the Project data on the fly inside Maya via either the ToolShelf button, or in the Red9 ProjectManager UI. This also means that these projects can be on a mapped network drive so all users point to the same data.
If your build doens’t have the Red9_ClientCore modules or the above variable then you’ll find an empty project file here:
Red9/pro_pack/resources/empty.project
The project data can now be edited directly from the Red9 ProjectManagerUI rather than having to edit the JSON data directly. This saves unexperienced users from badly formatting the JSON file and breaking the pipelines! You can also now create new projects from the UI.
For those coding the project into their own codebase the code that adds and physically binds new project files to the systems is as follows. These lines must be added to your __init__ or somewhere thats parsed on boot so they’re bound to the PROJECT_DATA object. You can add as many of these as are required for your studios setups. Each additional project added will show up in the ProjectManager UI in Maya for you to switch between on the fly.
>>> from Red9.pro_pack import PROJECT_DATA
>>> # to bind a single new project file
>>> PROJECT_DATA.add_project(os.path.join(get_resources(), 'my_new_game.project'))
>>>
>>> # to add ALL projects found under a given folder
>>> PROJECT_DATA.add_projects_found(folder)
The PROJECT_DATA object generated is used anywhere in the Red9 codebase where a path is required which may be specific to a project, or folder mount, allowing us to tailor setups to a clients needs without modifying the underlying codebase at all. The project file is JSON formatted and bound to the PROJECT_DATA on load, this means that anything in that .project file will be exposed as an attribute directly on the PROJECT_DATA.data object.
>>> # for example
>>> from Red9.pro_pack import PROJECT_DATA
>>> PROJECT_DATA.data.fps # project frame rate
>>> PROJECT_DATA.data.p4_root # projects p4_root path which is dynamically found
>>>
>>> # theres also a pretty print function
>>> PROJECT_DATA.pretty_print()
PROJECT also manages any initial P4 bindings and therefore exposes some of the root paths directly on the Project object. Because of this many of the base paths we may setup in the .project file may be prefixed with EITHER p4_root+ (old method) or <p4_root> (new method)
>>> "pose_projectpath": "<p4_root>/Data/Animations_Source/Characters/Human/_projectposes/red9/",
This denotes that the path, in this case the pose_projectpath, is dynamic to the users current P4 workspace mount, we replace the p4_root in this case with the actual p4_root found in the users system.
Note that on boot we check if source control is available and setup the systems accordingly, all our P4 management codebase, found in the importexport module, relies on the PROJECT_DATA.source_control() call, which in itself is setup at boot. This function must return ‘perforce’ if any of the systems are to run under the p4 api natively. This NOT limited to P4 and is done in this manner to allow us to bind other source control systems to the r9File objects dynamically.
Added recently is a full ProjectManagerUI that allows for easier editing of the project directly and as part of this we’ve also added a new “key” string replacement setup. If any string data in project has “<key>” in it then that will get replaced dynamically with the value from the key it’s pointing too. Thats to say if we give it “C:/MyProject/<audio>/custom” and the key “audio” is “Audio/Database” then the path built will be “C:/MyProject/Audio/Database/custom”
Main Classes
ProjectBase () |
base settings exposed to all client projects. |
Project ([projectfile]) |
a global project object that is consumed at boot and used to setup key aspects of the Maya pipeline environment per Client. |
-
RED9_SCENE_REFERENCE_CALLBACK
= None¶ >>> # The following keys are always present in the project data, exposed in code via >>> >>> from Red9.pro_pack import PROJECT_DATA >>> PROJECT_DATA.data.fps # to get the fps key data >>> >>> # where PROJECT_DATA.data is the ProjectBase() class object that all the keys are bound too
DEFAULT_PROJECT_KEYS:
- binders: ‘dict {“rigname”:path,} where rigname=path used in the PRO_TO_BND, these map to the Pro_to_BND “Binders” combobox in the UI’
- browser_ext: list of custom name.r9ext Extension files to add to the base handling in the BrowserUI
- browser_favourite_paths: list of base paths to insert into the Red9.Browser favourites combobox
- builds_path_proPack: custom base path for ProPack builds
- builds_path_client_core: custom base path for Client Core builds
- cpicker_bgimages: custom additional path for CharacterPicker background images at the project level
- cpicker_icons_path: custom additional path for CharacterPicker icons at the project level
- engineTarget: game engine target platform - not currently tested against
- export_path_logic: extra export path logic <search:replace> allowing you to use a search/replace mechanism on all export paths created by the export systems
- fps: used in the health systems to check the incoming scene frame rate against and fix when prompted
- health_run_open_callback: if False this prevents the Healthclass_OPEN callback running on Maya file open, default=True
- healthclass_OPEN: default SceneOpen HealthTest class run if the “health_run_open_callback” checkbox is ticked
- icon: icon shown in the Maya Toolbox for this project
- mayaVersion: if the test is active in the health systems we use this to check the required project MayaVersion against
- p4_project: Perforce Management: this triggers the Perforce handling for this project
- p4_failpath: base p4root path to be applied should the P4 connection fail
- pose_projectpath: default path to set the project folder path too in the pose library
- pose_basePreset: the base name.cfg preset that will be applied to the AnimationToolkit UI if the user hasn’t already set one up
- pose_handlers: additional poseHandler paths to bind to the RMB PoseSaver menus
- projectname: base name for this project
- red9_update_systems: enable / disable the Red9 Update Systems & prompt UIs
- red9_base_pub: default Red9 Master PUB file, be that for demo or anything else that requires a single base rig file. Also used in the MetaHumanUI
- scene_units: used in the health systems to check the incoming scene sceneUnits against and fix when prompted
- skinmethod: if test is active, used in the health systems to check the incoming scene skinmethods against
- skinbase: if test is active, used in the health systems to check the incoming scene skin weight limit against
- upAxis: used in the health systems to check the incoming scene upAxis against and fix when prompted
-
class
ProjectBase
¶ Bases:
object
base settings exposed to all client projects. This is a generic block of data designed to be inspected via the PROJECT_DATA.data object bound to r9pro. This class object is bound to the PROJECT_DATA object at boot and all data exposed as direct attributes under the data object
>>> this object is exposed as follows >>> from Red9.pro_pack import PROJECT_DATA >>> PROJECT_DATA.data
For base key definitions see the API docs
Note
ALL PATHS COMING FROM THIS MUST BE PYTHONIZED NOT OS!!!!!!! on windows ‘/’ not ‘’
-
unused_default_keys
()¶ return those keys available in the DEFAULT_PROJECT_KEYS that aren’t yet in the current json data
-
p4_root
¶ if P4 systems: return the p4 root path from the current workspace
Note
this is a vital call used in the binding of the Project paths to always ensure they are relevant to a users environment
-
p4_relativepath
(abspath)¶ if p4 systems : return the P4 relative path from the given abspath
-
p4_abspath
(relpath)¶ if p4 systems : return the abspath path from the given relpath
-
browser_ext_path
¶ Returns: resources path of the r9ext file if given
-
resource_folder
¶ generic get resource dir within the Client codebase
-
basepath
¶ generic basepath for the client codebase
-
resolve_paths
()¶ Function responsible for replacing any key string entries in the project file with dynamic data such as the actual p4_clientroot. We currently support 2 different key strings : “p4_root+” and “<key>” where key is a key in the project data itself
Note
the second part of the path must not start with ‘/’ such that if p4_root=’X:/assets/root’
- ‘p4_root+resources/rigs/child_biped/Red9_Child_PUB.ma’ - this will yield correct results ‘X:/assets/root/resources/rigs/child_biped/Red9_Child_PUB.ma
- ‘p4_root+/resources/rigs/child_biped/Red9_Child_PUB.ma’ - this will yield incorrect ‘X:/resources/rigs/child_biped/Red9_Child_PUB.ma
-
save
(filepath=None, raw=False)¶ save the current project data back to file. This is useful if you’ve made changes in Maya to any of the project.data paths etc and want those written back to the client.project file
Parameters: filepath – filepath to save the project data to, if not passed we use the internal self.filepath var - ..note::
- this will save the processed data, so if we’ve built paths or resolved them when we loaded the data those new values would also get saved out. If you want to change data use the new self._raw set of data and save with the raw flag True
-
read
(filepath=None)¶ load a given project json file, binding all keys directly to attrs on the project.data object
Parameters: filepath – filepath to load the project data from, if not passed we use the internal self.filepath var
-
pretty_print
(headers=True, raw=False, ppindent=1, prefix='\tdata : ', feedback=True)¶ pretty print all current data bound to the object in a readable format
Parameters: - headers – turn on the base headers in the pronts and return data, else just return the project data
- raw – do we return/print the actual raw json data, or the compiled and resolved version of it
- ppindent – the indent var passed to the pprint command to resolve nested data
- prefix – added prefix to the from of each key in the data
- feedback – True by default, print the output, else just return the formatted data
-
-
class
Project
(projectfile=None)¶ Bases:
object
a global project object that is consumed at boot and used to setup key aspects of the Maya pipeline environment per Client. This is designed to be run in the ClientCore boot sequence so we can set a studio’s environment remotely, all set from a .project json file in the clients /resource folder. All changes to this json file will be automatically consumed and added to the r9pro.PROJECT_DATA.data instance.
This class is also responsible for the binding of the Scene Open Health tests that are run as much of the healthTests are compared to data bound to the PROJECT_DATA.data clients project file. This is why we usually ask that clients fill in a technical sign-off doc so that we can bind defaults expected.
key internal *args:
- self.suspend_openCallback : mutes the Scene Health test if bound
- self.suppress_warnings : mutes any of the Scene Health test warnings and popups if True
- self.scene_health_auto_fix : if True we automatically fix any Scene Health test failures if we can, assuming the suspend flag isn’t set to True. default = True
Parameters: projectfile – the project filepath currently loaded -
isactive
¶ return if the project is active or not
-
is_empty_project
¶ return True if the project loaded is the default “Empty” base project
-
client_loaded
¶ return the currently booted client assuming that the .project file loaded was located in the resource folder for the client
Note
we also set the client in the project json file directly, accessed by PROJECT_DATA.data.client. this one uses the directory name of the Client as the ID so we can verify it against the data entry if needed
-
add_project
(projectfile)¶ light wrapper that just consumes and adds the project but doesn’t do the full load this is for boot sequence speedups so that we’re not processing all the Perforce calls for all available projects
-
add_projects_found
(folder=None)¶ add all projects found under a given resource folder rather than manually adding them one at a time as per the self.add_project call. This now support a new Maya.env key RED9_PROJECT_RESOURCES which if set, allows us to bind external paths, maybe network mounted, to the systems
Parameters: folder – if given this is the folder we search for child xxx.project files, if not given we look for the existence of the Maya.env key RED9_PROJECT_RESOURCES and use that path
-
remove_project
(project='Empty', delete_file=False, verbose=False)¶ remove a given project from the structures
-
clean_projects
(verbose=False)¶ rescan the available projects and if the file has been deleted or is no longer available then remove it from the process lists
-
load_project
(projectfile)¶ main load for the project file object, this now encompasses the path_replacement calls for when dealing with mapped source_control keys such as ‘p4_root+’ in the data
Parameters: projectfile – .project filepath to load and consume, we take a fresh instance of the ProjectBase object to ensure full sync to the incoming data Note
If a path in the .project json file starts with ‘p4_root+’ and we’re connected to Perforce then we replace that element on the fly with the users current p4_root path, reconstructing on the fly all paths to be relative to their P4 environment regardless of workspace mounts
-
sync_project_to_settings
(project=True, perforce=True)¶ a post load call to allow us to be able to globally set all Project Data as the user last set it in the ProjectManagerUI. This includes the last loaded project and it’s P4_client data / mounts
Used in the initial r9Setup call when we build the client_boot lists up
Parameters: - project – sync of the actual project data itself from the projectfile
- perforce – deal with specific perforce FORCE handling. This is False during the boot sequence, called at the end of Red9.startup.setup.start, as the binding is dealt with during the initial self.switch_project call, handled internally (this prevents multiple calls and p4 project connection calls). when calling this after boot the perforce args should be set True to rebind to different project settings.
-
reload_project
()¶ reload the current project to refresh all the sourceControl mountings
-
refresh_project
()¶ this doesn’t do a reload, instead it just re-processes the paths data
-
switch_project
(project=None, client=None, verbose=True, managed=True, *args)¶ switch the current client / project data and manage the state of all other Client SubMenus
Parameters: - project – project to boot
- client – assuming we’ve not specified the project but have given the client, we use the keys in projects_available to find that clients initial project instead
- verbose – if project was NOT given then this throws a prompt UI to allow you to select which one to load
- managed – controls the Client sub-menu states in the Red9 menu, disabling all others except that being loaded
-
set_source_control
(force=False, bailed=False)¶ Crucial binding of the source control system passed to the r9ie.importexport module bindings This is vital when dealing with the likes of P4 as this validates the existence of the p4 connection if your client project is set to p4_project
Parameters: - force – if True we force the re-test of the source_control setup, else we run the cached result
- bailed – if True we revoke the source_control as something went wrong in the connection downstream in the importexport module so it set the bail flag, turning off future management. Note that this now still binds the self._SOURCE_CONTROL object and all funcs are still available,they just all exit before they call the P4_API
- ..note::
- This is the main connection call for P4 in the Project Systems and the ONLY place in the API where we actually call self._SOURCE_CONTROL.connect which handles the P4.connect()
-
bind_settings
()¶ this can’t be in the __init__ like usual as PROJECT is instanciated before pro_pack is up during the boot sequence
-
P4_API
¶ GLOBAL PERFORCE API MANAGED CONNECTION :
return the currently connected P4 API object that was connected when the project was booted. Only available IF p4_project=True is set in the project.json file and P4 was available and correctly connected.
Note
this should be used in all cases rather than manually doing p4.connect() in your code as this one is managed and switchable through the ProjectUI. If Perforce connection goes down then this call is automatically shut-down all subsequent Perforce functions to prevent Maya hanging on timeouts
-
p4_valid
(force=False)¶ a base level valid test so that it’s only called once and managed
Parameters: force – whether we always re-test the connection or cache it’s state only once, this is so that if P4 was down when we booted we can force a re-test, else the fact that it was down on boot is cached and the connection to P4 severed
-
p4_refresh
(reload=True)¶ re-validate the Perforce connection and refresh the Project accordingly
Note
this will refresh to the current default connection from P4 as we don’t yet pass any connection params in before refreshing it
Parameters: reload – if True we also force reload the current project file
-
p4_switch_client
(client, reload=True)¶ switch the current P4 stream / workspace p4.client mount and refresh the Project mappings
Parameters: - client – P4 client to switch the P4_API too, this is usually the name of the P4 workspace
- reload – do we also re-load the project data or switch the P4_API
TODO: test the self.data._p4_root update to make sure we can propagate that correctly when switching projects
-
set_maya_environment
(framerate=True, animui=True)¶ manage Maya UI elements / environment setup. Force set the Maya Frame Rate against the Project settings This also sets up a number of the base flags for the AnimationToolkit via it’s internal callback mechanism (called via the set_animtoolkit_UI)
Note
this is only run in the Client __init__ calls not when switching projects
-
set_animtoolkit_UI
(animClass)¶ set some of the more specific paths for the project to the animUI class object directly these variables are pulled directly from the clients own resource/client.project file
- poseHandlerPaths : set against : r9pro.PROJECT.data.pose_handlers
- posePathProject : set against : r9pro.PROJECT.data.pose_projectpath
- basePreset : set against : r9pro.PROJECT.data.pose_basePreset
-
set_scene_open_callback
(customHealth=None)¶ set the main RED9_SCENEOPEN_CALLBACK, binding MSceneMessage.kAfterOpen to self.test_scene_health
-
kill_scene_open__callback
()¶ kill the RED9_SCENEOPEN_CALLBACK api callback
-
set_scene_import_callback
(customHealth=None)¶ set the main RED9_SCENE_IMPORT_CALLBACK, binding MSceneMessage.kAfterImport to self.test_scene_health
-
kill_scene_import__callback
()¶ kill the RED9_SCENE_IMPORT_CALLBACK api callback
-
set_scene_reference_callback
(customHealth=None)¶ set the main RED9_SCENE_REFERENCE_CALLBACK, binding MSceneMessage.kAfterReference to self.test_scene_health
-
kill_scene_reference_callback
()¶ kill the RED9_SCENE_REFERENCE_CALLBACK api callback
-
timeunits
¶ simple property to return the project files fps entry as timeunit in Maya (‘game’,’film’,’pal’,’ntsc’,’show’,’palf’,’ntscf’) based on the data.fps setting in the project file
-
force_fps
(fps=None)¶ force the maya framerate to the project setting including the default Maya working fps
Parameters: fps – if given this over-rides the project fps and will be used instead
-
force_up_axis
(axis=None, toggle=False, verbose=False)¶ toggle the current world up axis and compensate the cameras etc
-
test_scene_health
(*args)¶ validate base scene health against the project, if we’ve passed in a custom health test then thats bound to the main callbacks here.
Note
this is now bound by default to the SceneOpen Callback so the HealthTest test will always run, however there are 2 methods to mute this behaviour. If PROJECT_DATA.suspend_openCallback=True or PROJECT_DATA.data.health_run_open_callback=False then the function is muted. The second method is a base project key and a simple checkBox in the ProjectManager UI in Edit mode.
-
healthclass_binding
()¶ bind all ‘healthclass_’ keys in the project data to their class objects (remember that the keys in the project are just string data) This binds the classes up to attrs direct on the PROJECT_DATA itself so if the project file has a key that starts with ‘healthclass_SRC’ then that attr will get propagated to this class directly and the return will be a list [__module__, cls]
Note
this is run when we load a project and all classes must be imported and in memory before this inspection happens


Home
About
What Is Customs?
DJ Hojo
Tony Snark
Yung Futon
Dutty Wilderness
Photos
Music
Contact
EVENT PHOTOS


Click the ‘Browse’ button (to the left) and select the desired customized configuration file. The status bar will tell you when the file has been uploaded. A new button will appear that gives you the option of returning to the default configuration file. Do not click this unless you change your mind and n o longer want to use the customized file.
Go to the ‘Main Functions’ tab; select the desired input file(s); run them through the QC function. Save the output to the desired location. Open the Word or html QC report and scroll to the ‘Thresholds, Quick Reference’ table (in the middle section of the report). Verify that the correct thresholds were used.
Be aware that each time you close and reopen the Shiny app, it will automatically revert back to the default configuration file. Also – remember the sequencing! If you forget to upload the customized configuration file prior to running the QC function, it will use the default thresholds.


Note that the behavior documented in this post was observed in a lab environment using the version of Mimikatz shown in the screenshot. There are likely differences in the Skeleton Key malware documented by Dell SecureWorks and the Mimikatz skeleton key functionality. Mimikatz effectively “patches” LSASS to enable use of a master password with any valid domain user. Rebooting the DC refreshes the memory which removes the “patch”.
Implanting the Mimikatz Skeleton Key on one or multiple Domain Controllers:
Mimikatz can now inject a skeleton key into LSASS on the Domain Controller by running the following command on the DC:
mimikatz.exe “privilege::debug” “misc::skeleton” exit
When there are multiple Domain Controllers in an Active Directory site, all of them need the Skeleton Key implant to ensure the skeleton key master password is accepted as the user’s valid password.. Since the client discovers a Domain Controller using DCLocator, the DC the client selects is effectively random. If all the DCs don’t have skeleton key configured, the master password won’t work when the client authenticates to a DC without skeleton key.
Authenticating with the Mimikatz Skeleton Key:
Testing user password and user account with skeleton key password.
Note that both passwords are accepted – the valid user password and the skeleton key master password!
Testing Domain Admin account with password & skeleton key password.
Note that both passwords are accepted – the valid user password and the skeleton key master password!