Patel, Jay
Welcome to IS445 Homework 2
Education
- 2018, B.S., Information Systems, California State University, Long Beach
Working experience
- IT Student Assistant, California State Lands Commission, 1 year
Expecation for this course
I'd like you to cover jQuery.


Write on your wall, Screen and everywhere using a laser torch. Technique based on MATLAB programming. Using only your Projector, Smartphone and Personal Computer. IP webcam processing using MATLAB, Projecting only a particular part of your screen in the projector, Real-time video processing in MATLAB, etc. are included. Enjoy it!


Resume Builder
Sign-up
Your name
Username/Email
Password
Confirm Password
Create account
Already have account ? Login now


New BioShock game announced, still "several" years away
Rapture.
by Tom PhillipsA new BioShock game is in the works, publisher 2K has confirmed.
The project will be in development for the next "several" years, 2K said in a statement today, with development centred at the publisher's newly-named Cloud Chamber studio.
Cloud Chamber is headed up by Kelley Gilmore, formerly of 2K's XCOM and Civ studio Firaxis, with offices in both San Francisco and Montreal.
"We founded Cloud Chamber to create yet-to-be-discovered worlds - and their stories within - that push the boundaries of what is possible in the video game medium," Gilmore said. "Our team believes in the beauty and strength of diversity, in both the makeup of the studio and the nature of its thinking.
"We are a deeply experienced group of game makers, including many responsible for BioShock's principal creation, advancement and longstanding notoriety, and honoured to be part of the 2K family as stewards of this iconic franchise."
It's not the first we've heard of the project. In 2018, a Kotaku report into the development of Mafia 3 mentioned 2K had quietly begun work on a new BioShock game, codenamed Parkside.
Cloud Chamber's San Francisco office appears to be the remnants of 2K Marin - which 2K said back in 2014 was now responsible for the future of BioShock after the closure of creator Ken Levine's studio Irrational Games.


whoami?
Software Developer in Training
Cars, Coding, Crypto
💼
Portfolio
🚘
About Me
✉
E-mail
📄
Resume
Portfolio
Resume
About Me
Contact Me


Ticket(s) successfully ordered.
I, {{ fullName }}, wish to buy {{ ticketDescription }}. I understand that all ticket sales are final.


How To Benefit From Trend And Momentum In QQQ
by Andres Cardenal, CFASummary
- The Invesco QQQ ETF replicates the Nasdaq 100 index, so it is heavily exposed to high growth stocks in sectors like technology.
- Superior growth means a higher potential for returns, but also bigger than average downside risks.
- By combining trend and momentum, we can optimize the risk and reward equation in QQQ.
- The strategy can underperform over long periods of time, and it has in fact massively underperformed in the past year.
- However, an approach like this can be quite effective at providing solid risk-adjusted returns over multiple years.
The Invesco QQQ (NASDAQ:QQQ) replicates the Nasdaq 100 index. As such, the ETF is aggressively exposed to high-growth stocks in sectors such as technology, communications, and consumer cyclical. These sectors represent 42.6%, 21.51%, and 15.35% of the portfolio, respectively.
Source: Seeking Alpha Essential
Because of this, QQQ can be a particularly profitable investment when the economy is doing well, and risk appetite is rising in the market. Conversely, the ETF can suffer severe losses during bear markets and in times of declining risk appetite among investors.
To put the performance in perspective, the chart shows the long-term returns for Invesco QQQ versus SPDR S&P 500 (SPY). Betting on QQQ can produce much bigger gains over the years, but the downside risk is also much larger.
Data by YCharts
The chart below shows the maximum drawdowns - meaning the maximum loss from the peak - for QQQ in every year since 1999. The ETF had four different years with drawdowns of more than 50% of its value. Three of those years were consecutive in 2000, 2001, and 2002. Over that complete period, the ETF lost over 80% of its value. Then, again during the financial crisis in 2008, the instrument declined by 50%.
Source: ETFReplay
Those big losses can be devastating to your wealth. It can take more than a decade to recover from large drawdowns in the stock market. For that reason, it makes sense to look for different strategies to capitalize on the superior upside potential provided by QQQ while also controlling for downside risk.
No strategy can be perfect or infallible, and even the best strategies will necessarily underperform the benchmark over some periods. However, a combination of trend following and momentum could be a smart approach to consider in order to optimize the risk vs reward equation in QQQ over the long term.
The Trend Is Your Friend
Trend following can be a simple and effective strategy to manage downside risk, and it has been proven to work in different markets and asset classes over the long term. One of the best research papers ever written on trend-following is by the research team at AQR, and it's entitled A Century of Evidence on Trend-Following Investing.
The paper examines trend-following strategies over more than a century of data and across different asset classes - stocks, commodities, currencies, etc. - in different countries.
The conclusions from the study are quite powerful, from the research paper:
In this article, the authors study the performance of trend-following investing across global markets since 1880, extending the existing evidence by more than 100 years using a novel data set. They find that in each decade since 1880, time series momentum has delivered positive average returns with low correlations to traditional asset classes. Further, time-series momentum has performed well in 8 out of 10 of the largest crisis periods over the century, defined as the largest drawdowns for a 60/40 stock/bond portfolio. Lastly, time series momentum has performed well across different macro environments, including recessions and booms, war and peacetime, high and low-interest rate regimes, and high- and low-inflation periods
These findings show that trend-following has produced superior risk-adjusted returns in different periods and market environments, and across all kinds of instruments. If the statistical evidence is any valid guide for the future, it is important to acknowledge that trend-following has as much statistical support as it can get.
The chart below shows the backtested performance of a very simple trend-following strategy that buys QQQ only when the ETF is trading above the 200-day moving average. When QQQ is in a downtrend, the portfolio is allocated to cash.
Source: ETFreplay
The numbers are quite solid, since the year 2000 the strategy gained 289.2%, while buy and hold investors in QQQ gained only 145.4%. Much more important, the maximum drawdown for the trend-following strategy was -28.5% versus a devastating maximum drawdown of -83% for buy and hold in QQQ.
Source: ETFreplay
Importantly, this outstanding outperformance is due to the fact that QQQ suffered massive drawdowns from 2000 to 2002 and then again in 2008. Since the trend following strategy reduced the damage in those bear markets, this explains why both returns and risks are much better.
On the other hand, if we focus solely on returns since 2009, trend following produced disappointing performance over that period.
Source: ETFreplay
This should come as no surprise at all. Over long periods of time, when we have big uptrends and downtrends, a trend following strategy can be remarkably effective at improving performance versus buy and hold. However, during a sustained bull market such as the one we are having in QQQ since 2009, buy and hold is practically impossible to beat.
Trend Following And Momentum Combined
In addition to focusing on the QQQ ETF itself, we can also look under the surface to select the stocks with the strongest performance in the QQQ portfolio in an attempt to further optimize performance.
Momentum is a double-edged, because the stocks that go up the most when they are moving in the right direction are oftentimes the same stocks that go down the most during bear markets. However, focusing on stock selection via the momentum factor can potentially make the strategy more effective over the long term.
The Stocks on Fire system is a quantitative algorithm that ranks stocks in a particular universe based on a combination of two main factors: fundamental momentum and price momentum.
Fundamental momentum evaluates how earnings and sales expectations are evolving for the company. This factor is basically a combination of five different variables:
- The percentage increase in earnings expectations for the current quarter.
- The percentage increase in earnings expectations for the current year.
- The percentage increase in earnings expectations for next year.
- The percentage increase in sales expectations for the current year.
- The percentage increase in sales expectations for next year.
The price performance component in the ranking system measures price changes over the past 4 quarters. This factor is looking for stocks that are consistently outperforming the market over recent time periods, as measured by variables such as:
- Return over the past 3 months.
- Return over 3 months 3 months ago.
- Return over 3 months 6 months ago.
- Return over 3 months 9 months ago.
Looking at the long-term backtested data, there is a direct correlation between the Stocks on Fire ranking and annualized returns. Companies in the top quintile, meaning those with a Stocks on Fire ranking above 80 tend to materially outperform the market.
Data from S&P Global via Portfolio123
The strategy below buys the 20 stocks in the QQQ portfolio with the highest ranking based on the Stocks on Fire algorithm. In addition to this, the portfolio is hedged with a 100% short position in QQQ in times when the ETF is trading below the 200-day moving average. Trading commissions are assumed to be 0.2% per transaction.
Backtested performance numbers are quite strong over the long term. The strategy produces a total cumulative return of 1,533% versus 368% for buy and hold investors in QQQ. The maximum drawdown is almost half, at 43% for the strategy versus almost 83%. The strategy alpha is 11.28% per year.
Data from S&P Global via Portfolio123
That said, it is important to note that the correlation between this quantitative strategy and QQQ itself is not very high at 0.38. If you are looking for a quantitative strategy that can closely track the QQQ ETF, then this is clearly not the best choice.
Besides, this new version of the strategy can significantly underperform versus buy and hold over different periods. The table below compares some return and risk statistics for the strategy versus QQQ over different timeframes.
| Return | Strategy | QQQ |
| Annualized | 14.37% | 7.70% |
| One Year | 6.24% | 26.90% |
| Total | 1533.54% | 368.27% |
| Risk | ||
| Sharpe Ratio | 0.62 | 0.33 |
| Sortino Ratio | 0.96 | 0.44 |
| Max Drawdown | -43.62% | -82.98% |
| Standard Deviation | 21.90% | 24.34% |
| Correlation | 0.38 | - |
| R-Squared | 0.15 | - |
| Beta | 0.34 | - |
| Alpha (annualized) | 11.28% | - |
Data from S&P Global via Portfolio123
It is interesting to note that the quantitative strategy is underperforming by a wide margin in the past year. This is because high momentum stocks have been quite volatile through 2019, and also because the hedging position had a negative impact on performance during January and February.
This discrepancy in performance should be expected. Even the best strategies, meaning the ones with the best risk and returns numbers over the long term, generally go through painful periods of underperformance over shorter timeframes.
The trend and momentum factors are going to outperform when the market alternates big bull and bear markets. On the other hand, in a market environment in which prices are moving mostly higher and short-term pullbacks are buying opportunities, a strategy such as this one can be expected to underperform versus buy and hold.
The Bottom Line
No strategy, quantitative or discretionary, can be expected to outperform all of the time and in all kinds of environments. For investors who are looking to control for downside in QQQ, a trend following approach makes a lot of sense if you want to reduce the risk of big drawdowns over the long term.
Adding some momentum to the strategy at the individual stock level makes performance much more unpredictable, and the results can be very different from a buy and hold position in the QQQ ETF itself. However, both risk and return can be substantially improved by this combination of trend following and momentum in QQQ.
In case, you were wondering, the strategy is currently unhedged, since QQQ is currently trading well above the 200-day moving average.
Data by YCharts
Offering more information, the table below shows the 20 positions in the QQQ based on their Stocks on Fire rankings. Data in the table includes the Stocks on Fire ranking and market capitalization value in millions for the companies selected by the algorithm.
| Name | Ticker | Ranking | Mkt Cap |
| Applied Materials Inc. | AMAT | 98.98 | $52,137 |
| KLA Corp. | KLAC | 97.96 | $25,547 |
| Lam Research Corp. | LRCX | 96.94 | $38,231 |
| Apple Inc. | AAPL | 95.92 | $1,164,172 |
| Charter Communications Inc. | CHTR | 94.9 | $101,945 |
| Lululemon Athletica Inc. | LULU | 93.88 | $28,242 |
| Microsoft Corp. | MSFT | 92.86 | $1,141,130 |
| Intel Corp. | INTC | 91.84 | $253,257 |
| Skyworks Solutions Inc. | SWKS | 90.82 | $16,399 |
| Fiserv Inc. | FISV | 89.8 | $77,666 |
| Vertex Pharmaceuticals Inc. | VRTX | 89.8 | $55,441 |
| Advanced Micro Devices Inc. | AMD | 87.76 | $44,025 |
| Ross Stores Inc. | ROST | 86.73 | $40,487 |
| Amgen Inc. | AMGN | 85.71 | $135,826 |
| NetEase Inc. | NTES | 84.69 | $37,670 |
| O'Reilly Automotive Inc. | ORLY | 83.67 | $32,937 |
| Facebook Inc. | FB | 82.65 | $564,892 |
| Align Technology Inc. | ALGN | 81.63 | $21,447 |
| Cintas Corp. | CTAS | 81.63 | $26,216 |
| Costco Wholesale Corp. | COST | 79.59 | $132,006 |
Trend following and momentum are not for everyone. They are most suited for aggressive investors who are willing to implement investment strategies with highly unpredictable returns in the short term. Personally, I like to include aspects such as the fundamental quality of the business and the stock valuation in the stock selection process, since this gives me more confidence in the selections over the long term.
That said, the evidence is quite clear, winners tend to keep on winning in the stock market, and a trend following approach in combination with momentum at the individual stock level can significantly improve performance in QQQ.
The Stocks in Fire System is updated weekly in The Data Driven Investor. A subscription to The Data Driven Investor provides you with solid strategies to analyze the market environment, control portfolio risk, and select the best stocks and ETFs based on quantitative factors. Our portfolios have outperformed the market by a considerable margin over time. Click here to get your free trial now, you have nothing to lose and a lot to win!
Disclosure: I am/we are long FB. I wrote this article myself, and it expresses my own opinions. I am not receiving compensation for it (other than from Seeking Alpha). I have no business relationship with any company whose stock is mentioned in this article.


|
Performs and unordered compare of the single-precision floating-point values in the low doublewords of the source operand 1 (first operand) and the source operand 2 (second operand), and sets the ZF, PF, and CF flags in the EFLAGS register according to the result (unordered, greater than, less than, or equal). In The OF, SF and AF flags in the EFLAGS register are set to 0. The unordered result is returned if either source operand is a NaN (QNaN or SNaN).
Source operand 1 is an XMM register; source operand 2 can be an XMM register or a 32 bit memory location.
The UCOMISS instruction differs from the COMISS instruction in that it signals an SIMD floating-point invalid operation exception (#I) only when a source operand is an SNaN. The COMISS instruction signals an invalid operation exception if a source operand is either a QNaN or an SNaN.
The EFLAGS register is not updated if an unmasked SIMD floating-point exception is generated.
|


return home
~ some projects ~
nasapic
password-generator
image-carousel
dr. azad hossain's website
my blog
penaltykicks
quickshellscripts-git
see more on my github
🏝


iSCSI administration on Ubuntu - Quick Start
Sep 5, 2014This post get’s you started with iSCSI administration on an Ubuntu machine. Although I have used Ubuntu Trusty (14.04) version, it should work with Precise (12.04) too, with the latest packages.
Prerequisites
Make sure you have atleast a little idea of what these terms mean: iSCSI, LUN, IQN, initiator, target and portal. Google and wikipedia are your friends.
A quick summary:
There are two parts of iSCSI communication - initiator and target. So let’s take an example. There is a storage server in your company, where you have a ‘drive’ for your team. The storage server is the ‘target’, and your laptop, where you’ll mount the drive to access it’s contents is the ‘initiator’. In other words, target is like a ‘server’ which stores data, and allows initiators (think ‘clients’) to connect to it.
In this short hands-on introduction, we’ll use the same Ubuntu machine as target as well as initiator. We can use a file as the storage behind the target, but this post also shows how to use LVM logical volume as the backing store for the iSCSI target.
Actually, we’ll back the logical volume (LV) with a file, as shown in this, so essentially we’re just using ‘file as a backing store for targets’ but in a roundabout way :)
OK, let’s get started. Make sure you execute all the following commands as root user.
First install the required dependencies
apt-get install lvm2 tgt open-iscsi
Initialize logical volume
Create a file of 1GB, create a volume group over it, and then over it, create a 400MB logical volume, and see if it got created or not
root@ra:~# truncate --size 1G backingfile
root@ra:~# sudo losetup --find --show backingfile
/dev/loop0
root@ra:~# sudo vgcreate myvg /dev/loop0
No physical volume label read from /dev/loop0
Physical volume "/dev/loop0" successfully created
Volume group "myvg" successfully created
root@ra:~# sudo lvcreate --size 400M --name mylv myvg
Logical volume "mylv" created
root@ra:~# lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
mylv myvg -wi-a---- 400.00m
Target administration
Now let’s create a target, with target ID 1, and give it an IQN (iSCSI
Qualified Name) iqn.2001-04.example.com:your.first.iscsi.target
:
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2001-04.example.com:your.first.iscsi.target
List the target, see it’s properties:
root@ra:~# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2001-04.example.com:your.first.iscsi.target
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: null
Backing store path: None
Backing store flags:
Account information:
ACL information:
You can see there is a LUN, LUN 0 attached to the target. Let’s attach our
logical volume mylv
as LUN 1 to the target.
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/myvg/mylv
Here, actually you could’ve attached a flat file as a LUN to the target. So you
could’ve skipped all the intermediate steps and attached the backingfile
directly to the target like this:
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b backingfile
A backing file would’ve been good enough for this demo, but you know the benefits of logical volume isn’t it? :)
Okay, let’s see if the LUN got created:
root@ra:~# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2001-04.example.com:your.first.iscsi.target
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 419 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: rdwr
Backing store path: /dev/myvg/mylv
Backing store flags:
Account information:
ACL information:
Now let’s allow all initiators to bind to this target:
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
We’re done with the ‘target’ side now. You can check, using netstat
that port
3260, the default port, is now open. Note that all our commands so far started with
tgtadm
, i.e., the target administration utility.
Initiator administration
Now let’s start from the ‘initiator’ end. We’ll behave as if we’re a client trying to connect to the server – the target.
Discover all the targets on our local machine (<IP_ADDRESS>
).
root@ra:~# sudo iscsiadm --mode discovery --type sendtargets --portal <IP_ADDRESS>
<IP_ADDRESS>:3260,1 iqn.2001-04.example.com:your.first.iscsi.target
From the client perspective, we’re now able to see a target. Let’s login into that target
root@ra:~# sudo iscsiadm --mode node --targetname iqn.2001-04.example.com:your.first.iscsi.target --portal <IP_ADDRESS>:3260 --login
Logging in to [iface: default, target: iqn.2001-04.example.com:your.first.iscsi.target, portal: <IP_ADDRESS>,3260] (multiple)
Login to [iface: default, target: iqn.2001-04.example.com:your.first.iscsi.target, portal: <IP_ADDRESS>,3260] successful.
After logging in, the target will be visible in the client’s system as a new
device. Running a fdisk -l
shows that there is a new device /dev/sda
is now
present.
root@ra:~# fdisk -l
Disk /dev/vda: 57.1 GB,<PHONE_NUMBER>2 bytes
255 heads, 63 sectors/track, 6939 cylinders, total 111478336 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0001cd46
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 106520575 53259264 83 Linux
/dev/vda2 106522622 111476735 2477057 5 Extended
/dev/vda5 106522624 111476735 2477056 82 Linux swap / Solaris
Disk /dev/mapper/myvg-mylv: 419 MB, 419430400 bytes
255 heads, 63 sectors/track, 50 cylinders, total 819200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/myvg-mylv doesn't contain a valid partition table
Disk /dev/sda: 419 MB, 419430400 bytes
13 heads, 62 sectors/track, 1016 cylinders, total 819200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sda doesn't contain a valid partition table
Now we just need to format this device with a filesystem, say EXT4, and then mount it at some location to start using it!
root@ra:~# sudo mkfs.ext4 /dev/sda
mke2fs 1.42.9 (4-Feb-2014)
/dev/sda is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
102400 inodes, 409600 blocks
20480 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
50 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
root@ra:~# mkdir tempmount
root@ra:~# mount /dev/sda tempmount/
root@ra:~# cd tempmount/
root@ra:~/tempmount# ls
lost+found
root@ra:~/tempmount#
Destruction
The simplest way to get rid of all the things you’ve created is to unmount the device, and restart the system.
Aaand done!
Cheers!


We visualize tables!
- incubate compelling paradigms
- exploit synergistic experiences
- reinvent vertical supply-chains
- expedite sticky infomediaries
- productize extensible vortals
- whiteboard revolutionary communities
- recontextualize user-centric content
- matrix rich relationships
- productize intuitive ROI
- innovate value-added communities
- evolve scalable functionalities


It looks like you've used this address already.
For both your privacy and safety against scams, please generate a new one from your wallet and scan that one instead.
It looks like you've used this address already.
For both your privacy and safety against scams, please generate a new one from your wallet and scan that one instead.
If you've already sent coins and cancel without confirming your phone number, you'll need to manually settle the transaction with the operator.
Press 'Continue transaction' and wait up to 60 seconds for your deposit to be seen.
Or press 'Cancel transaction' to return to the home screen.
The phone number you entered didn't work. If you have an international number, please prefix it with + and your country's calling code.
For instance, Belgium's calling code is +32, so a Belgian number would look like: +32 455 12 34 56
The code you entered was incorrect.
Please make sure you're entering the six digit code you receive from us.
Apologies. Buying operations are temporarily offline.
Please contact the operator to sort this out, or try again later.
Apologies, although this coin is only available to buy.
Please contact the operator if you wish to learn more.
You Purchased
Your coins are on their way to:
Please connect your cryptomat's Ethernet cable or verify its connection.
Would you like to proceed?
No coins are showing up.
will be dispensed to you.
You will send us to:
Please wait while we dispense your cash.
Please remove your cash from the tray.
To continue dispensing, take your cash from the tray.
This should just take a second.
In order to continue this transaction, we need to snap a photo of you to comply with local laws. Is this ok?
Looks like we didn't get a good shot.
Shall we try another photo?
We didn't get a good picture of you.
Please look into the camera located above the screen.
We dispensed
You sent us
Apologies. We've reached our mandated per-user limit.
We could not read your ID card.
You might want to give it another shot.
If you'd like to make a larger purchase, we'll need to make sure you're you by asking for you to scan your ID.
Would you like to insert more bills?
Wallet successfully validated!
Please insert your first bill into the machine.
Your coins will be sent to:
deposited so far
total purchased
Type in your promo code
It looks like you're using a wallet for a different coin or an address format we don't yet support.
Please check your QR code and try again.
Please try again later.
You've hit the maximum number of retries. Please contact the operator to sort this out, or try again later.
Please try again later.
Your funds are safe, but we had an issue when sending your coins.
Please take a photo of this screen and contact the operator to push through your order.
You Purchased
Your receiving address:
Authorizing...
The document you've shown did not match.
You might want to give it another shot.
We couldn't properly scan your paper wallet. Make sure you position it correctly on the scanning bay and that it was properly printed.
If the problem persists try printing again.
It seems there was a problem while printing your wallet. Please contact the operator for more information or try printing again.
To validate, please present the front of your paper wallet to the scan window.
IMPORTANT: This paper contains your funds. Once validated, do not show this key to anyone and do not misplace it!
Sorry! That's not a promo code we could find.
You may try a different code, or continue with your transaction.
If you are sure of the code, please contact the operator for clarification.
Hold your QR code up to the scan window to proceed.
In order to proceed, we are required to verify your identity.
Please press the back of your driver's license against the scan window.
In order to proceed, we are required to verify your identity.
Please press the front of your state ID card against the scan window, hold it there, and then press "Ready to scan".
In order to proceed, we are required to verify your identity.
Please press the front of your state ID card against the scan window.
You Purchased
You Deposited
Your coins are on their way to:
If you'd like to make a larger purchase we need to ask for your mobile phone number. We'll then send you an SMS code.
Would you like to insert more bills?
Initializing hardware.
We'll be up in a moment.
Generating cryptographic identity.
Please wait a few minutes.
Press SCAN and present the machine with the pairing QR code from your remote server.
IMPORTANT: Keep the machine secure until you have successfully paired with your remote server.
When attempting to pair, we experienced an error:
Please scan the pairing QR code you got from your remote server.
Welcome to your new Lamassu Cryptomat.
Press initialize to generate a secure cryptographic certificate for your machine. This could take about fifteen minutes.
Please contact the operator.
Sorry, we are down for the moment.
Please contact the operator.
We have your order, but haven't seen your deposit transaction yet. Check whether your wallet sent the coins for your transaction.
If you're sure your coins were sent, please contact the operator.
We're having some difficulties.
Please contact the operator for more information.
We're having some difficulties.
Please snap a photo of your receipt.
We're waiting for your deposit to confirm on the blockchain. You will soon receive a text message notifying you that your transaction has confirmed.
When that happens, please come back to this machine and press the Redeem button.
We are unable to process your transaction.
Please contact the operator for more information.
Our system experienced an error.
Please feel free to try again, or contact the operator.

Please cash out at a machine that handles your currency.
Sorry, we're down for the moment.
Please come back later.
The code you entered did not match.
You might want to give it another shot.
We see your transaction but we're still waiting for confirmation. This takes 10 minutes on average but can take up to an hour or two.
Please come back for your cash and press Redeem when you get our text message.
We don't see any open orders associated with your phone. If you have another phone you may have used, you can try redeeming again with that number.
If you're sure you have an open order associated with this phone, please contact the operator.
Please ask for assistance.
We weren't able to verify your phone number, so we may not be able to contact you when your cash is ready.
Please snap a photo of the next screen for your electronic receipt, then contact the operator.
Please try the password again.
To proceed, we are required to ask you to type in your Social Security Number
Type in SSN?
Our system indicated an identification problem.
Please contact the operator for more information.
Our system indicated an identification problem.
Please contact the operator for more information.
In order to process your transaction, we need to clarify some information about your account
This could take a few seconds.
This could take a few seconds.
This could take a few seconds.
Only secured networks are shown.
A wired connection is preferred for stability.
Our Internet was down for a bit but you'll receive your funds as soon as our connection is back.


The Web, as it is commonly called, is made up of over 30 billion pages that can and do interact with each other, like a spider’s web, thus the name. Your Browser on your computer, such as Firefox, Internet Explorer, and Chrome, request information from the internet using the protocol HTTP, which is in turn linked to Servers (specially formatted and optimized computers designed to store information) that relay this information back to your browser. Your browser then interprets the info and displays it on your screen.
HTML is the main document type used on the web; some call the heart of the web. HTML is made up of text, markup, references, and links. The text refers to the content of the page. Markup is made up of Tags that tell your page what it is supposed to look like. HTML also involves references to other documents, images, and video, as well as links to these references and other websites.
Computers are literal machines; they do exactly what they are told to do. They do not extrapolate what you might have been trying to accomplish, or fill in the blanks if you make a mistake. You have to enter your commands exactly, using correct “syntax”, to get your machine to do what it is supposed to.


About us
When you work with us, you are part of a team of committed collaborators. All aspects of our software development process are integrated, iterative and agile.
Our approach unifies design, development and product management to create exceptional products. We start each project by understanding your business goals, the user’s needs and the product requirements. Then we help translate them into effective and elegant solutions.
SERVICES
Before we sign a contract or write a line of code our team will spend the necessary time needed to understand your product vision. The outcome of this scoping session is a proposal or high-level statement of work. pagesed on your requirements, we can provide a complete offering or just the pieces you need.
what we do
DESIGN
Our design practice offers a full range of services including branding strategy, interaction and visual design and user experience testing. Throughout your project, our designers create and implement visual designs and workflows, solicit user feedpageck, and work with you to make sure what gets built is what is needed.
Development
All engineers are fluent in the latest enterprise, mobile and web development technologies. They collaborate with your team to write, test, and improve code on a daily pagesis, using proven practices such as test-driven development and pair programing.
Product Management
Planning and development is iterative. Because we are constantly coding and testing, the products we build are always ready to go live. This iterative process allows for changes as business requirements evolve.
CONTACT us
Planning and development is iterative. Because we are constantly coding and testing, the products we build are always ready to go live. This iterative process allows for changes as business requirements evolve.
CONTACT us


- 01/22/2021 -
Welcome to my site! This was created as a project for my class in Web Development. We are challenged to create our own web page of any content of our choosing! I chose to create a site about my French Bulldog Jax and provide any useful information needed about French Bulldogs. For example how to nurture, health problems that may occur, even help you find potential adoption and breeder pages. Now about the class, in our first week of instruction we learned Hyper Text Markup Languag (html) and how html is used to set up web pages. Then in the next week we learned abot Cascading Style Sheets also known as CSS. CSS is all about the design and style of the webpage, everything you need to make your website look good! More updates to come every 2 weeks!
- 02/05/2021 -
Version 2 Update. The past few weeks we have been learning more advanced ways to syle your webpage, for example box shadows, making boxes curved, image effects and background images. These updates were crucial to the design of the webpage itself and to make things look a lot cleaner and smoother. Also it helped to add effects pleasing to the users eyes.


Porting Guide from Vega-lite 1¶
This document describes the various changes needed to port Vega-Lite 1.x visualizations to the 2.0 specification. It also introduces a subset of the new features introduced in Vega-Lite 2. While the listing below is intended to cover the most salient differences between these major versions, readers are also encouraged to dive in and study the example gallery.
Interaction and Composition¶
The key new features for Vega-Lite 2.0 are the selection
operator for specifying interactions and view composition operators for creating multi-view and layered plots. Moreover, Vega-Lite now generates Vega 3 and uses a number of new features that improve performance, add new features, and produce better visualizations.
General¶
vl.compile
takes anoptions
object as a second argument.width
andheight
properties at new top-level properties (of a single view and layered view specification).- The top-level property
viewport
has been removed.
Transforms¶
transform
is now an array of transform objects (the order of the transforms is clearer).- Formula definitions for
calculate
transforms can use theas
property to specify output fields name instead offield
.
For example, the following transform in Vega-Lite v1
"transform": {
"calculate": [{
"field": "license_index",
"expr": "datum.license === 'CC BY' ? 0 : datum.license === 'CC BY-ND' ? 1 : datum.license === 'CC BY-NC' ? 2 : datum.license === 'CC BY-NC-ND' ? 3 : 4"
}]
},
would become
"transform": [{
"calculate": "datum.license === 'CC BY' ? 0 : datum.license === 'CC BY-ND' ? 1 : datum.license === 'CC BY-NC' ? 2 : datum.license === 'CC BY-NC-ND' ? 3 : 4",
"as": "license_index"
}]
aggregate
,bin
, andtimeUnit
now can also be expressed as a transform in thetransform
array (in addition to transforms in a field definition of an encoding channel).- For
bin
, the"max"
and"min"
parameters have been removed. Instead, users can provide"extent"
, a two-element ([min, max]
) array indicating the range of desired bin values. Also, the"div"
property has been renamed to"divide"
.
Marks¶
- The
mark
property now can be either a mark type or (new) a mark definition object, which can defineclip
,filled
,orient
,style
,interpolate
, andtension
– in addition to the marktype
. - A new
rect
mark can be used to create arbitrary rectangles and table heat maps. - The
rule
mark type now supports arbitrary line segments, and reliably draws a line from point"x"
,"y"
to point"x2"
,"y2"
.
Encodings¶
row
andcolumn
encodings are now shortcuts for creating a faceted plot using thefacet
operator.path
channel has been removed. You can now use theorder
channel for sorting points on a line. Meanwhile, theorder
channel no longer affects the layering order of marks.title
property has been removed from field definitions. You can use thetitle
property insideaxis
andlegend
instead.- A new
tooltip
channel has been added. - We now support
"aggregate": "count"
without"field": "*"
. timeUnit
can now be used with both"temporal"
and"ordinal"
type. When used with temporal, the date-time field will be treated as a continuous field, When casted as ordinal, the date-time field will be treated as a discrete field.
Scale¶
- Following D3 4.0 and Vega 3 ‘s design, the
"ordinal"
scale type has now been broken up into three different scale types:"ordinal"
(for strict lookup tables),"band"
(for spatial ordinal scales) and"point"
(spatial ordinal scales with no padding, similar to{"point": true}
in Vega 2). - Following Vega 3, Vega-Lite now includes D3 4.0’s
"sequential"
scale type and corresponding color scales. Use the"scheme"
property to set the range to a named color scale (e.g.,"viridis"
,"plasma"
, or"magma"
). - The
"category10"
,"category20"
and similar color palettes are no longer available as built-in range names. Instead, they are available using the scale"scheme"
property, which can be specified instead of a scale range for"ordinal"
and"sequential"
scales. However,Vega-lite 2 (and the underlying Vega 3) does support a built-in"category"
short-hand for ordinal scale ranges, which can be re-defined as part of the theme configuration. - Following Vega 3, a new
"index"
scale type maps an ordinal domain to a quantitative range (e.g., as supported by"linear"
or"sequential"
scales). This is particularly useful for creating ordered color ramps for ordinal data. - Similar to Vega 3,
bandSize
is now renamed torangeStep
. Also,"rangeStep": null
now makes range step fits the width or height. (This"rangeStep": null
replaces the originalbandSize: "fit"
, which is now removed.) - Better default scale types of binned fields.
- scale’s
zero
is nowtrue
by default when using a quantitative field withsize
.
Axis and Legend¶
- Better axis styles (grey lines instead of black).
- The
"ticks"
parameter for suggesting the approximate number of axis ticks has been renamed"tickCount"
. - The axis line previously stylable as
"axis"
is now referred to as the axis"domain"
. For example, use"domain": false
to hide the axis line. All relevant properties have also been renamed accordingly (e.g.,axisWidth
todomainWidth
). - Axis properties with the
tickLabel
prefix has been shortened to just havelabel
as prefix. For example,tickLabelColor
is nowlabelColor
. - To hide ticks and labels, you can now use the
ticks
andlabels
properties instead of the oldtick
andlabel
. (We changed them to be plural for consistency.) - The following axis properties have been removed:
characterWidth
,labelAlign
,labelBaseline
,subdivide
,tickSizeMajor
,tickSizeMinor
,tickSizeEnd
. - Axis no longer has the
layer
property. Instead, there is azindex
property (default0
). By default, axes should be drawn behind all chart elements. To put them in front, use"zindex": 1
. - Legends now include an optional
"type"
property.
- The field title format has been changed to be a more verbal style. For example, given a field “
field
” we change:SUM(field)
=>Sum of field
BIN(field)
=>field (binned)
YEARMONTH(field)
=>field (year-month)
Layering¶
layer
operator is now a verb, not a plural noun (layers
) – consistent withfacet
,repeat
, andconcat
.
Faceting¶
- Instead of scales, facet now generates layouts.
- Facet now generates
header
instead ofaxis
.
Configuration¶
The config
property in Vega-Lite 2 has been updated to be a superset of Vega Config.
- Change config’s
filterInvalid: boolean
toinvalidValues: "filter"
config.cell
is nowconfig.view
.
Mark Config¶
- We added mark specific config for all marks. Basically, each mark config (e.g.,
config.bar.*
) has all properties similar to mark config. This way you can make line’s default color be green while bar’s default is blue. - In addition, mark style config can also be applied to marks with the
style
property. - We removed old mark specific options from
config.mark
config.mark.barBinSpacing/barThinSize/barSize
=>config.bar.binSpacing/continuousBandSize/discreteBandSize
config.mark.lineSize
=>config.line.strokeWidth
config.mark.shape
=>config.point.shape
config.mark.size
=>config.point/circle/square.size
config.mark.ruleSize
=>config.rule.strokeWidth
config.mark.tickSize,tickThickness
=>config.tick.bandSize/thickness
config.mark.*
(text properties) =>config.text.*
config.bar.continuousBandSize
now defaults to 5config.text.applyColorToBackground
, which adds background to text mark, has been removed.config.text.format
has been removed. You can now format via theformat
property of the text channel or via thenumberFormat
andtimeFormat
config.
Scale Config¶
config.scale.round
is now only supported forx
andy
channels (and ignored for other channels).- Split scale range config from
config.scale
into separate min and max properties. For example:config.scale.opacityRange
=>config.scale.min/maxOpacity
config.scale.barSizeRange
=>config.scale.min/maxBandSize
config.scale.shapeRange
has been replaced with the range config for symbolsconfig.range.symbol


Today’s world is fast deteriorating in RIGHT VALUES and the youth are misguided and uncertainty of the future overshadows the mind of the youth. Hence our institution stresses on moral and religious instruction classes.
However, our children are prepared to meet the challenges of the fast changing world through instilling self-discipline, high intellectual standards, physical fitness and evencommunity service. Also our children will be inculcated with a deep sense of patriotism, loyalty to the motherland, values of all culture and the need for practical ethics in public life.
Through the apostolate of education, the Sisters of the Cross, aim at leading the children, youth and women to experience God’s liberating love and truth and thus become channels of God’s goodness in the world. This formation takes place in the contexts of one’s relationship with self, others, world and God, through the integral development of the person, while acquiring knowledge and attitude, we make them consciously aware of the evils that prevail in our society and prepare them to be the leaven for the change of the society.
Here in this school, we Sisters of The Cross of Chavanod aim at grooming the children to be courageous defenders of truth and justice committed to the cause of liberating themselves and their fellowmen from all evil.
Today’s world is fast deteriorating in RIGHT VALUES and the youth are misguided and uncertainty of the future overshadows the mind of the youth. Hence our institution stresses on moral and religious instruction classes. However, our children are prepared to meet the challenges of the fast changing world through instilling self-discipline, high intellectual standards, physical fitness and even community service.
Also our children will be inculcated with a deep sense of patriotism, loyalty to the motherland, values of all culture and the need for practical ethics in public life.


---
layout: post
title: 'TIY Cohort 2: Running the numbers'
date: '2015-05-20T17:14:00.002-07:00'
author: geoff purdy
tags:
modified_time: '2017-03-26T05:00:08.921-07:00'
blogger_id: tag:blogger.com,1999:blog-1206336038417661147.post-9028092435156120200
blogger_orig_url: http://geoffreypurdy.blogspot.com/2015/05/tiy-cohort-2-running-numbers.html
---
Cohort 2 enjoyed a relaxing reunion lunch today in Downtown Durham - where the majority of the Cohort 2 Rails Engineering grads are now working. That's a placement rate around 80% five months post-graduation. I'll give credit where credit is due - those are good numbers. Way to go TIY!
Word is that uptake has been good for the Cohort 3 grads as well. 35% - 50% hired six weeks post-graduation. Also very good numbers if accurate.


Development of automation platform for bare metal servers
Main tasks:
- Development of API for automation on dedicated servers
- Development of management web interface for employees and customers
- Maintenance of related infrastructure
Working environment:
- DevOps team
- FullStack development
- Agile using Scrum framework
- Unit and integration testing
- Code reviewing process
- Continuous integration and deployment
Main internal improvements contributed to:
- Development of Terraform provider plugin
- Prototyping of Platform as a Service
Technologies
- Languages:
- PHP
- Go
- Bash
- TypeScript
- Python
- Frameworks:
- Environment:
- Linux
- MySQL
- MongoDB
- Nginx
- Chef
- Docker
- Terraform
- Monitoring:
- Icinga
- Grafana
- Elasticsearch
- Kibana
- Development:
- Git
- PHPUnit
- Bitbucket
- Jenkins


Author: {{book.author}}
Date of Publication: {{book.date !== null ? (book.date.toDateString() | date) : "Unknown"}}
Price: {{book.price | currency: '£'}}
Content Preview:
"{{book.content}}"


Studio City
Home
About
Portfolio
Contact
Contact Us
Please Fill out the form to contact us.
Name:
Email:
Phone:
Message:
Submit


Corner plots¶
This section shows an example for producing a corner plot from a multidimensional array containing the samples of a retrieval run. One option is to use the corner package, see Foreman-Mackey (2016). Here we use our quickly self-written (so don’t judge :) !) nice_corner.py
package which can be found in the petitRADTRANS
source folder, in the sub folder retrieval_examples/analysis
. It requires
seaborn.
We start by loading the relevant packages:
[1]:
import numpy as np
import pylab as plt
import pickle
# nice_corner source can be found in the petitRADTRANS gitlab repository,
# requires seaborn
from nice_corner import nice_corner
Next we read the pickle files of the retrieval, in this case as produced for the transmission retrieval example (see the source in retrieval_examples/transmission_case
, and the documentation thereof here.
[2]:
# Paths to pickle files
samples_path = 'chain_pos.pickle'
# Load samples
f = open(samples_path,'rb')
pos = pickle.load(f)
prob = pickle.load(f)
state = pickle.load(f)
samples = pickle.load(f)
f.close()
Next, we specify some required information: what are the names of the parameters, and where do we want to save the resulting corner plot:
[3]:
parameter_names = {0: r"$\rm log(delta)$", \
1: r"$\rm log(gamma)$", \
2: r"$\rm T_{int}$", \
3: r"$\rm T_{equ}$", \
4: r"$\rm log(P_{tr})$", \
5: r"$\rm alpha$", \
6: r"$\rm log(g)$", \
7: r"$\rm log(P_0)$", \
8: r"$\rm CO$", \
9: r"$\rm H_2O$", \
10: r"$\rm CH_4$", \
11: r"$\rm NH_3$", \
12: r"$\rm CO_2$", \
13: r"$\rm H_2S$", \
14: r"$\rm Na$", \
15: r"$\rm K$"}
output_file = 'test.pdf'
In principle we are done now, but we specify a few more optional parameters:
Only plot the last 700,000 samples, to discard the burn-in phase:
[4]:
N_samples = 700000
If we want we can also give the ranges from where to where to plot the parameter distribution. Here we do this for the log mass fraction of the absorbers for which we only find upper limits.
We also do not want to plot all parameters: we won’t plot the first 6 parameters, which are nuisance parameters, used to generate the P-T profiles. The 7th parameter contains \({\rm log}(g)\) at \(P_0\), which is fixed (instead, \(P_0\) is a free parameter). So we only plot from the 8th parameter on.
[6]:
parameter_plot_indices = [7, 8, 9, 10, 11, 12, 13, 14, 15]
We also load an array that contains the input parameters, in this way we can see how well we retrieve what we put in in our synthetic observation (these values one does not have for real observations):
[7]:
true_values = np.genfromtxt('input_params.dat')
Finally, the hex bin plots of the 2-d projections of the posterior will be normalized such that the darkest color corresponds to values equal to, or larger than, 5 times the value that is expected for a uniform distribution:
[8]:
max_val_ratio = 5.
Let’s plot!
[9]:
nice_corner(samples, \
parameter_names, \
output_file, \
N_samples = N_samples, \
parameter_plot_indices = parameter_plot_indices, \
true_values = true_values, \
max_val_ratio = max_val_ratio, \
parameter_ranges = parameter_ranges)
Note that the lower log mass fraction range as defined by the priors (-10) is clearly visible in the plots where only an upper limit on the mass fraction is retrieved.


| Auction Date | BTC Sold | USD Acquired | News Article |
|---|---|---|---|
| 27-06-2014 | 29,657 | $18,740,000 | Tim Draper Wins First Bitcoin Batch |
| 04-12-2014 | 50,000 | $19,000,000 | US Marshals Complete Second Auction |
| 01-03-2015 | 50,000 | $13,500,000 | US Marshals March Auction |
| 05-11-2015 | 44,341 | $14,600,000 | Final Silk Road Auction |
| 22-08-2016 | 2,719 | $1,600,000 | US Marshals announce $1.6M Auction |
| 22-01-2018 | 3,813 | $42,000,000 | US Marshals Announcement |
| 05-11-2018 | 660 | $4,000,000 | US Marshals set to Auction bitcoins worth $4M |
| 01-02-2020 | 4,040 | $38,000,000 | US Marshals Announcement |
| 03-17-2021 | 0.7501 | $53,104 | GSA Auction |
| 07-01-2021 | 500 | $19,200,000 | Ohio DOJ Auction |
| 03-14-2023 | 9,861 | $215,000,000 | Coinbase Sale of BTC seized from Silk Road hacker |
| TBD | 96,000 | TBD | Seizure News |
| TBD | 69,370 | TBD | Seizure News |
| TBD | 41,819 (51,680 − 9,861) |
TBD | Seizure News |
Total BTC seized and sold: 195,091.75
Total USD gained from sales: $366,493,104
Current USD value of all sold BTC: ???
Potential USD gains missed: ???


We've had a few weeks to get into the fundamentals of programming languages. by this point, we should have at least a modicum of comfort navigating these languages, from creating Ruby classes to manipulating DOM elements with JavaScript. We've also now been exposed to managing larger sets of data using SQL. At this point, we have many pieces of the puzzle, and we understand how these puzzle pieces work by themselves, but little idea of how these puzzle pieces can be connected to work with each other.
I can take a stab at how the pieces will be intertwined, though. We can start with what the user will see (client-side) -- an html/css document, with which they will interact. They will at some point input some important piece of data, probably represented as a property within a JavaScript object, which will then be sent to an SQL database (using JSON? Serialization? Maybe it'll be something entirely different?). On the servers side, we'd use ruby (and rails) to manipulate or configure this data received from the client, doing something meaningful to it, and then either storing this data, or returning it to the client.
This is probably a horrible bastardization of what will be happening, but forgive me, as we've yet to really jump into this topic (I'm beyond excited to get there though). What I want to focus on, however, is that bit where we use rails to manipulate data. In my little experience using rails, there was something called the 'ActiveRecord'. I never really had a clear idea of what this was, or how it worked, but now that we're 9 weeks into a coding boot camp, I figured I'd give it another shot at understanding in preparation for the on-site experience.
Before we can really understand ActiveRecord, we'll need at least a basic understanding of what MVC is. MVC stand for 'Model View Controller' -- essentially, it's a web framework technique that outlines how users send and request data with an input, how that input is handled, how it is modified, and how that modified data is spat back out for the user.
The easiest bit here to understand first is the view. Essentially, the view is what the user sees. The view takes data and displays it to the user.
The next bit we want to focus on is the controller. When a user puts in their personal information into a form, how will our program know what to do with the data? This essential question is answered by the controller. At it's core, the controller takes data and delegates it to the proper place, where said data can be manipulated.
'The proper place' in that last sentence is confusing. What the controller is actually doing there is calling the right methods on the data given. Those methods are found in the model -- A model takes in data presented to it by a controller, modifies it, stores it, and gives it back to the view, where the user will then see modified data.
This cycle is known as 'MVC' -- my explanation can be supplemented with a graphic that I found to be of great help:
It's not a fantastic explanation, but hopefully it'll provide enough substance for the next topic: ActiveRecord
ActiveRecord is one of the principal components of rails, in that it can perform complicated SQL maneuvers with simple ruby commands. ActiveRecord is the Model of our web application -- it communicates with our relational databases to do what we want. It uses something called 'Object-Relational Mapping' to accomplish this. What this means is that we will ask ActiveRecord for a certain kind of data using a *ruby* method, from which Active record will compose an SQL query from this method, pull the data, and return it to you for use in the view of your web application. It is the means of communication between ruby objects and relational databases in rails. And it's insanely handy, too -- rather than write out complicated SQL queries to find data, we do so using our lovely ruby methods.
How do we invoke the use of ActiveRecord to gather the information we need? It's as simple as creating an ActiveRecord object. Given we have a model already invoked (which we will get into), we can create an instance of the model using .new notation.
For example, let us say we have a model for songs. While this blog post will not get into how we create the model, what is important to know is that the Song class object's parent would be ActiveRecord. When we create this inheritance, the Song class is automatically endowed with the abilities of ActiveRecord. The most fundamental abilities include the CRUD methods -- CRUD standing for "Create, Read, Update, Delete". To create an instance of a song, we'd simply create one (the "C" in crud!). It might look something like this:
Song.create(title:"Never Gonna Give You Up",artist:"Rick Astley")
Using this create method (Which we know the Song class will respond to as it is a child of ActiveRecord), we are essentially telling ActiveRecord to create a new row in an SQL database for the Song we added above. It will assign it an ID and place it as a new element in that database. We can read the database, update it if the item we need already exists, and deleted items from the database. I won't get into the details of the methods we can use there, but they are radical. More reading on ActiveRecord queries can be found here.
This overview of ActiveRecord might not be fully accurate, as I'm still learning how it's place in rails is important, and what it can and cannot do in handling data. However, I believe this is a good first step towards understanding ActiveRecord, MVC, and how we use rails methods to make our SQL queries. It's truly cool stuff, and I'm excited to dive deeper once the on-site begins!
Back to Top


API Quick Reference
Concepts
App
Task
Sprite
Entity
Layer
Scene
Scene
...
Images, ...
App
:
Manages global states and shared resources (images and sounds).
Scene
:
Handles input events and character movements.
Layer
:
Contains a set of
Task
/
Sprite
/
Entity
.
Task
:
A process that gets called for every frame.
Entity
:
A
Task
that can collide another
Entity
.
Sprite
:
A visible object that belongs to a layer.
Functions
Main function (main.ts
)
APP
The global App instance.
IMAGES
The global image reources.
SOUNDS
The global sound reources.
TEXTS
The global text reources.
addInitHook(hook)
Add a hook that is executed after the page load is complete.
main(ctor, [width, [height, [canvasId, [framerate]]]] )
Starts an app from the specified Scene.
How to Use

Misc. functions (utils.ts
)
log(...)
Log the messages to the console.
assert(x, msg="assertion error" )
Throws an exception when the condition is not met.
applyMixins(ctor, bases)
Configures a new class.
Numeric functions (utils.ts
)
fmod(x, y)
Equivalent to fmod
C function.
int(x)
Equivalent to Math.floor
.
upperbound(x, y)
Limits a value to min(x
, y
).
lowerbound(x, y)
Limits a value to max(x
, y
).
clamp(v0, v, v1)
Limits a value within [v0
, v1
].
sign(v)
Returns -1, 0 or +1 based on the sign of v
.
phase(t, interval, n=2 )
Returns the phase for time t
.
frnd(a, b=0 )
Generates a value [0,a
) or [a
,b
)
rnd(a, b=0 )
Generates an integer value [0,a
) or [a
,b
)
getTime()
Returns the current time in seconds.
format(v, n=3, c=' ' )
Formats a number as a string.
Array functions (utils.ts
)
choice(a)
A random element of a
.
removeElement(a, obj)
Removes an element from a
.
range(n)
Returns an array filled with a sequence [0, n
-1].
str2array(img)
Converts a string to a number array.
HTML5 functions (utils.ts
)
removeChildren(node, name)
Removes all child HTML nodes.
createCanvas(width, height)
Creates a <canvas>
element.
getEdgeyContext(canvas)
Creates a CanvasRenderingContext2D
.
image2array(img)
Converts an image to an 2D array.
drawImageScaled( ctx, imgsrc, sx, sy, sw, sh, dx, dy, dw, dh)
Draws a flipped image.
ellipse(ctx, cx, cy, rx, ry)
Draws an ellipse at (cx, cy).
playSound(sound, start=0.025 )
Plays a sound.
getKeySym(keyCode)
Returns the KeySym
for keyCode
.
Utility Classes
Signal (utils.ts
)
A Signal
represents an event that is attached to a
certain object and other objects can get notified.
new Signal(... baseargs )
Creates a Signal
with given baseargs
.
.receivers
A list of the receiver functions.
.subscribe(receiver)
Adds receiver
to the subscriber list.
.unsubscribe(receiver)
Removes receiver
from the subscriber list.
.fire(... extraargs )
Sends a message to all the subscribers.
Each receiver function gets (baseargs
+ extraargs
)
for arguments.
Color (utils.ts
)
A Color
represents an RGBA value.
new Color(r, g, b, [a] )
Creates a Color
for RGBA values.
.r
The red value.
.g
The green value.
.b
The blue value.
.a
The alpha value.
.setAlpha(a)
Creates a Color
with a given alpha.
Color.generate(h, v=1.0 )
Creates a Color
with a given hue.
Vec2 (geom.ts
)
A Vec2
represents two-dimensional vector that has (x, y) elements.
new Vec2(x=0, y=0 )
Creates a vector (x
, y
).
.x
The x value.
.y
The y value.
.copy()
Duplicates the vector.
.equals(p)
true
if the vector is identical to p
.
.isZero()
true
if the vector is zero length.
.len2()
The length2 of the vector.
.len()
The length of the vector.
.sign()
(sign(x)
, sign(y)
).
.add(v)
(this
+ v
).
.sub(v)
(this
- v
).
.scale(n)
(n
⋅ this
).
.distance(p)
|this
- p
|.
.clamp(bounds)
(clamp(x)
, clamp(y)
).
.move(dx, dy)
(x+dx
, y+dy
).
.interpolate(p, t)
(this*(1-t) + p*t)
.
.rotate(d)
Creates a rotated vector in radian (clockwise...0<d
)
.rot90(d)
Creates a rotated vector by 90 degrees (clockwise...0<d
)
.expand(dw, dh, vx=0, vy=0 )
Creates a Rect
with the point as an anchor.
Vec3 (geom.ts
)
A Vec3
represents three-dimensional vector that has (x, y, z) elements.
new Vec3(x=0, y=0, z=0 )
Creates a vector (x
, y
, z
).
.x
The x value.
.y
The y value.
.z
The z value.
.copy()
Duplicates the vector.
.equals(p)
true
if p
is identical.
.isZero()
true
if the vector is zero length.
.len2()
The length2 of the vector.
.len()
The length of the vector.
.sign()
(sign(x)
, sign(y)
, sign(z)
).
.add(v)
(this
+ v
).
.sub(v)
(this
- v
).
.scale(n)
(n
⋅ this
).
.distance(p)
|this
- p
|.
.clamp(bounds)
(clamp(x)
, clamp(y)
, clamp(z)
).
.move(dx, dy, dz)
(x+dx
, y+dy
, z+dz
).
.interpolate(p, t)
(this*(1-t) + p*t)
.
Collider (geom.ts
)
A Collider
is an abstract geometric object
that can be used for hit detection.
.copy()
Duplicates the collider.
.move(dx, dy)
Creates a collider moved by (dx
, dy
).
.add(v)
Creates a collider moved by v
.
.sub(v)
Creates a collider moved by -v
.
.equals(collider)
true
if collider
is identical.
.overlaps(collider)
true
if this collider overlaps collider
.
.contact(v, collider)
Trims a vector so that collider
doesn't collide with this.
.getAABB()
Returns the AABB of the collider.
Shape : Collider (geom.ts
)
A Shape
is an abstract class that represents an enclosed shape.
.isZero()
true
if the shape is empty.
.containsPt(p)
true
if the shape contains p
.
.rndPt()
Returns a random point within the shape.
.rndPtEdge()
Returns a random point on the edge.
AALine : Collider (geom.ts
)
A AALine
represents an axis-aligned (either horizontal or
parpendicular) line.
new AALine(x0, y0, x1, y1 )
Creates an AALine.
.x0
The x0 value.
.y0
The y0 value.
.x1
The x1 value.
.y1
The y1 value.
Rect : Shape (geom.ts
)
A Rect
object is a 2D rectangle that
has its position (x, y) and size (width, height).
new Rect(x=0, y=0, w=0, h=0 )
Creates a rectangle (x
, y
, w
, h
).
.x
The x value of the top-left corner.
.y
The y value of the top-left corner.
.width
The width of the rectangle.
.height
The height of the rectangle.
.right()
The right edge of the rectangle.
.bottom()
The bottom edge of the rectangle.
.centerx()
The center-x of the rectangle.
.centery()
The center-y of the rectangle.
.center()
The center of the rectangle.
.inflate(dw, dh)
Creates a inflated/deflated rectangle by (dw
, dh
):
dw
dh
.anchor([vx, [vy]] )
The anchor point of the rectangle:
(-1,-1)
(0,-1)
(+1,-1)
(-1,0)
(+1,0)
(-1,+1)
(0,+1)
(+1,+1)
.expand(dw, dh, [vx, [vy]] )
Creates an expanded rectangle by (dw
, dh
).
(-1,-1)
(0,-1)
(+1,-1)
(-1,0)
(+1,0)
(-1,+1)
(0,+1)
(+1,+1)
.resize(w, h, [vx, [vy]] )
Creates a resized rectangle.
(-1,-1)
(0,-1)
(+1,-1)
(-1,0)
(+1,0)
(-1,+1)
(0,+1)
(+1,+1)
.xdistance(rect)
The x-distance to rect
.
.ydistance(rect)
The y-distance to rect
.
.containsRect(rect)
true
if the rectangle contains rect
.
.overlapsRect(rect)
true
if the rectangle overlaps rect
.
.overlapsCircle(circle)
true
if the rectangle overlaps circle
.
.union(rect)
Combines two rectangles (union).
.intersection(rect)
Combines two rectangles (intersection).
.clamp(bounds)
Moves the rectangle so that it fits bounds
.
.modpt(p)
Creates a modulo point with the rectangle.
.contactRect(v, rect)
Trims a vector so that rect
doesn't collide with this.
.boundRect(v, rect)
Trims a vector so that rect
is restricted inside this.
A Circle
represents a circle that has its center and radius.
new Circle(center, [radius] )
Creates a circle.
.center
The center of the circle.
.radius
The radius of the circle.
.inflate(dr)
Creates a inflated/deflated circle by dr
.
.resize(radius)
Creates a resized circle.
.distance(p)
The distance to point p
.
.containsCircle(circle)
true
if the circle contains another circle
.
.overlapsCircle(circle)
true
if the circle overlaps another circle
.
.overlapsRect(rect)
true
if the circle overlaps rect
.
.clamp(bounds)
Moves the circle so that it fits bounds
.
.contactCircle(v, circle)
Trims a vector so that circle
doesn't collide with this.
Box (geom.ts
)
A Box
is a 3D cuboid that has its position and size
both as Vec3
.
new Box(origin, [size] )
Creates a box (origin
, size
).
.origin
The origin of the box.
.size
The size of the box.
.copy()
Duplicates the box.
.equals(box)
true
if box
is identical.
.isZero()
true
if the box is empty.
.center()
The center of the box.
.anchor([vx, [vy, [vz]]] )
The anchor point of the box.
.move(dx, dy, dz)
Creates a box moved by (dx
, dy
, dz
).
.add(v)
Creates a box moved by v
.
.sub(v)
Creates a box moved by -v
.
.inflate(dx, dy, dz)
Creates a inflated/deflated box by (dx
, dy
, dz
).
.xdistance(box)
The x-distance to box
.
.ydistance(box)
The y-distance to box
.
.union(box)
Combines two boxes (union).
.intersection(box)
Combines two boxes (intersection).
.clamp(bounds)
Moves the box so that it fits bounds
.
.rndpt()
Creates a random point within the box.
.zdistance(box)
The z-distance to box
.
.containsPt(p)
true
if the box contains p
.
.overlapsBox(box)
true
if the box overlaps box
.
.contactBox(v, box)
Trims a vector so that box
doesn't collide with this.
.union(box)
Combines two boxes (union).
.intersection(box)
Combines two boxses (intersection).
.clamp(bounds)
Moves the box so that it fits bounds
.
.rndpt()
Creates a random point within the box.
TileMap (tilemap.ts
)
A TileMap
represents a two-dimensional array that holds map tiles.
new TileMap(tilesize, map)
Creates a new tilemap for a given array.
.tilesize
The tile size.
.map
Int32Array[] for the map data.
.width
The number of tiles that fit horizontally in the map.
.height
The number of tiles that fit vertically in the map.
.bounds
The bounds of the map in the actual size.
.isObstacle
A function that returns true
for obstacle tiles.
.isGrabbable
A function that returns true
for grabbable tiles (e.g. ladders).
.isStoppable
A function that returns true
for stoppable tiles.
.get(x, y)
Gets a tile at a specific position.
.set(x, y, c)
Sets a tile at a specific position. (Clears the RangeMap cache.)
.fill(c, [rect] )
Fills tiles in a given area.
.copy()
Copies the tilemap.
.coord2map(rect)
Converts an actual Rect/Vec2 to the tile cells.
.map2coord(rect)
Converts a Rect/Vec2 for tile cells to the actual size.
.apply(f, [rect] )
Applies a function to tiles.
.shift(vx, vy, [rect] )
Shift the contents of cells in the given area.
.findTile(f, rect)
Returns the position of the first tile in the given area.
.findTileByCoord(f, rect)
Returns the position of the first tile in the given area.
.getTileRects(f, rect)
Returns a list of actual rectangles for tiles.
.getRangeMap(key, f)
Creates a RangeMap
object for this tilemap.
.renderFromBottomLeft( ctx, bx, by, tileset, ft, [x0, y0, w, h] )
Renders the tiles from bottom left for a given tile set.
.renderFromTopRight( ctx, bx, by, tileset, ft, [x0, y0, w, h] )
Renders the tiles from top right for a given tile set.
.renderWindowFromBottomLeft( ctx, bx, by, window, tileset, ft)
Renders the tiles from bottom left within a window.
.renderWindowFromTopRight( ctx, bx, by, window, tileset, ft)
Renders the tiles from top right within a window.
RangeMap (tilemap.ts
)
A RangeMap
is a partial copy of TileMap
that allows range queries for specific tiles.
new RangeMap(tilemap, f)
Creates a new rangemap for certain tiles in a tilemap.
.width
The number of tiles that fit horizontally in the map.
.height
The number of tiles that fit vertically in the map.
.get(x0, y0, x1, y1)
Returns the number of specific tiles within the given area.
.exists(rect)
true
if a specific tile exists within the given area.
ImageSource (sprite.ts
)
An ImageSource
is a portion of a
that is used for rendering Sprites.
new HTMLImageSource(image, srcRect, dstRect)
Creates a ImageSource
from
.
new FillImageSource(color, dstRect)
Creates a ImageSource
with a solid color.
SpriteSheet (sprite.ts
)
A set of ImageSource
objects indexed by a number.
new ImageSpriteSheet(image, size, [origin] )
Creates a SpriteSheet
from
.
new SimpleSpriteSheet(imgsrcs)
Creates a SpriteSheet
with solid colors.
.get(i, [j, [w, [h, [origin]]]] )
Returns the i,j
-th ImageSource
.
Sprite (sprite.ts
)
A Sprite
represents something that's shown on the screen.
new Sprite([imgsrc] )
Creates a new sprite.
.imgsrc
A ImageSource
for the sprite's content.
.visible
true
if the sprite is visible.
.zOrder
The order that the sprite is drawn to the screen.
.scale
A vector for the polarity of the sprite image.
.getBounds([pos])
Returns the bounds for the given pos
.
.render(ctx, bx, by)
Draws the sprite at the location (bx
, by
).
Basic Classes
Task (entity.ts
)
A Task
is a process that belongs to a Layer
and its method is executed periodically.
new Task()
Creates a new task.
.alive
true
if the task is running.
.layer
The Layer
that the task belongs to.
.lifetime
The duration that the task can run.
.started
The time the task started.
.stopped
A Signal
that is signaled when the task stops.
.stop()
Terminates the task.
.getTime()
The elapsed time since the task has started (in seconds).
.update()
Updates for the current frame.
Entity : Task (entity.ts
)
An Entity
is a physical object that's visible and has a physical boundary.
new Entity(pos)
Creates a new entity.
.sprite
A Sprite
that belongs to this entity.
.collider
A Rect
/Circle
for the entity's collider.
.getCollider([pos])
Returns the collider for the given pos
.
.canMove(v)
true
if the entity is movable toward v
.
.getMove(v)
Trims the vector v
so that it doesn't collide.
.movePos(v)
Moves the entity by v
.
.moveIfPossible(v, [context] )
Moves the entity by v
without colliding obstacles.
.getObstaclesFor(range, context)
Returns a list of Shape
s within range
.
.getFencesFor(range, context)
Returns a list of bounding rectangles that limits the entity within.
.collidedWith(entity)
Invoked when the entity collides another entity.
Layer (layer.ts
)
A Layer
contains a set of objects that can be rendered
at once and interact each other.
new Layer()
Creates a new layer.
.time
The current time of the layer (in seconds).
.tasks
A list of Task
s that belong to the layer.
.sprites
A list of Sprite
s that belong to the layer.
.entities
A list of Entity
s that belong to the layer.
.addTask(task)
Adds a Task
to the list.
.addSprite(sprite)
Adds a Sprite
to the list.
.removeSprite(sprite)
Removes a Sprite
from the list.
.addEntity(entity)
Adds an Entity
to the list.
.removeEntity(sprite)
Removes an Entity
from the list.
.moveAll(v)
Moves all the sprites by v
.
.findEntities(f, [entities] )
Returns a list of entities specified by function f
.
.findSpriteAt(p)
Returns a Sprite that is located at p
.
.onMouseDown(p, button)
Invoked when a mouse button is pressed.
.onMouseUp(p, button)
Invoked when a mouse button is released.
.onMouseMove(p)
Invoked when a mouse pointer is moved.
.init()
Invoked when the layer is initialized.
.tick(t)
Invoked for every frame.
.render(ctx, bx, by)
Draws all the sprites at the location (bx
, by
).
Scene (scene.ts
)
A Scene
represents one state of a game that can have its own
event handling (such as title screen or cut scene).
new Scene()
Creates a new scene.
.screen
The canvas rectangle.
.changeScene(scene)
Signals the App
to switch to a scene.
.init()
Initializes the scene.
.tick(t)
Invoked for every frame.
.render(ctx, bx, by)
Draws the scene at the location (bx
, by
).
.setDir(v)
Invoked when a directional input is changed.
.setAction(action)
Invoked when the action key state is changed.
.setCancel(cancel)
Invoked when the cancel key state is changed.
.onKeyDown(keyCode)
Invoked when a key is pressed.
.onKeyUp(keyCode)
Invoked when a key is released.
.onMouseDown(p, button)
Invoked when a mouse button is pressed.
.onMouseUp(p, button)
Invoked when a mouse button is released.
.onMouseMove(p)
Invoked when a mouse pointer is moved.
App (app.ts
)
An App
holds all the shared resources and is
responsible for switching Scenes.
new App(size, framerate, elem)
Creates a new app with given HTML5 resources.
.size
The canvas size.
.framerate
The framerate.
.canvas
The <canvas>
element.
.ctx
The CanvasRenderingContext2D
object.
.scene
The current Scene
.
.active
true
if the game is running.
.keys[]
The states of the current keys.
.keyDir
The state of the current directional input.
.addElement(bounds)
Adds a new

element to the canvas.
.removeElement(elem)
Removes the element from the canvas.
.lockKeys()
Blocks accidental keyboard input for one second.
.setMusic(music, [start, [end]] )
Starts/Stops the music loop.
.init(scene)
Initializes the game with the first Scene
.
.post(msg)
Queues a function that is to be executed at the end of the frame.
Specialized Classes
TiledSprite : Sprite (sprite.ts
)
A Sprite
shows an image repeatedly within the bounds.
Suitable for backgrounds.
new TiledSprite(bounds)
Creates a new sprite.
.imgsrc
A ImageSource
for the sprite's content.
.offset
The offset of the image (in Vec2
).
StarSprite : Sprite (sprite.ts
)
A Sprite
that shows multiple parallaxed stars.
Suitable for space-y backgrounds.
new StarSprite( bounds, nstars, [maxdepth] )
Creates a new sprite.
.imgsrc
A ImageSource
for each star's content.
.bounds
The bounds of all stars.
.velocity
The velocity of the star movement.
.maxdepth
The maximum depth of stars.
Projectile : Entity (entity.ts
)
A Projectile
is an Entity
that
keeps moving towards a specific direction.
Suitable for bullets or obstacles.
new Projectile(pos)
Creates a new projectile.
.imgsrc
A ImageSource
for the entity's content.
.movement
The velocity of the object.
.frame
The rectangle where the object is kept alive within.
PhysicalEntity : Entity (entity.ts
)
An Entity
that is affected by gravity.
Suitable for charcters or objects that can jump or fall.
new PhysicalEntity(pos)
Creates a new entity.
.alive
true
if the entity is alive.
.layer
A Layer
that the entity belongs to.
.time
The elapsed time since the entity started.
.stopped
A Signal
that is signaled when the entity stops.
.bounds
A Rect
for the entity's size and position.
.imgsrc
A ImageSource
for the entity's content.
.visible
true
if the entity is visible.
.zOrder
The order that the entity is drawn to the screen.
.scale
A vector for the polarity of the entity image.
.velocity
A vector for the current velocity.
.maxspeed
A vector for the maximum speed (absolute values).
.jumpfunc
A gravity function (vy:number, t:number) => number
.stop()
Terminates the entity.
.movePos(v)
Moves the entity by v
.
.collider
A Rect
/Circle
for the entity's collider.
.update()
Updates for the current frame.
.render(ctx, bx, by)
Draws the entity at the location (bx
, by
).
.collidedWith(entity)
Invoked when the entity collides another entity.
.moveIfPossible(v, [context] )
Moves the entity by v
without colliding obstacles.
.isMovable(v)
true
if the entity is movable toward v
.
.getMove(v)
Trims the vector v
so that it doesn't collide.
.getObstaclesFor(range, context)
Returns a list of Shape
s within range
.
.getFencesFor(range, context)
Returns a list of bounding rectangles that limits the entity within.
.setJumpFunc(function)
Sets the gravity function.
.setJump(jumpend)
Starts a jump maneuver that ends at t=jumpend
.
.jump()
Invoked when the entity starts jumping.
.fall()
Invoked for every update.
.isLanded()
true
if the entity is landed on a platform.
.land()
Invoked when the entity is landed on a platform.
.isHolding()
true
if the entity is in a state that stops falling.
PlatformerEntity : PhysicalEntity (entity.ts
)
A PhysicalEntity
that interacts with a TileMap
.
Suitable for tile-based platformer games.
new PlatformerEntity(tilemap, pos)
Creates a new entity.
.alive
true
if the entity is alive.
.layer
A Layer
that the entity belongs to.
.time
The elapsed time since the entity started.
.stopped
A Signal
that is signaled when the entity stops.
.bounds
A Rect
for the entity's size and position.
.imgsrc
A ImageSource
for the entity's content.
.visible
true
if the entity is visible.
.zOrder
The order that the entity is drawn to the screen.
.scale
A vector for the polarity of the entity image.
.velocity
A vector for the current velocity.
.maxspeed
A vector for the maximum speed (absolute values).
.jumpfunc
A gravity function (vy:number, t:number) => number
.tilemap
A TileMap
that interacts with the entity.
.stop()
Terminates the entity.
.movePos(v)
Moves the entity by v
.
.collider
A Rect
/Circle
for the entity's collider.
.update()
Updates for the current frame.
.render(ctx, bx, by)
Draws the entity at the location (bx
, by
).
.collidedWith(entity)
Invoked when the entity collides another entity.
.moveIfPossible(v, [context] )
Moves the entity by v
without colliding obstacles.
.isMovable(v)
true
if the entity is movable toward v
.
.getMove(v)
Trims the vector v
so that it doesn't collide.
.getFencesFor(range, context)
Returns a list of bounding rectangles that limits the entity within.
.setJumpFunc(function)
Sets the gravity function.
.setJump(jumpend)
Starts a jump maneuver that ends at t=jumpend
.
.jump()
Invoked when the entity starts jumping.
.fall()
Invoked for every update.
.isLanded()
true
if the entity is landed on a platform.
.land()
Invoked when the entity is landed on a platform.
ScrollLayer : Layer (layer.ts
)
A Layer
that can scroll the displayed area.
Only shows the objects within the window.
new ScrollLayer(window)
Creates a new layer.
.tasks
A list of Task
s that belong to the layer.
.sprites
A list of Sprite
s that belong to the layer.
.entities
A list of Entity
s that belong to the layer.
.window
A Rect
that specifies the window.
.init()
Invoked when the layer is initialized.
.tick(t)
Invoked for every frame.
.render(ctx, bx, by)
Draws all the sprites at the location (bx
, by
).
.moveAll(v)
Moves all the sprites by v
.
.moveCenter(v)
Moves the window by v
.
.setCenter(bounds, rect)
Centers the window around rect
.
.addTask(task)
Adds a Task
/Sprite
/Entity
to the list.
.findEntities(rect, [entities, [f]] )
Returns a list of entities that overlap rect
.
GameScene : Scene (scene.ts
)
A Scene
that has one Layer
with
a few convenient methods.
new GameScene(app)
Creates a new scene.
.app
The App
object that the scene belongs to.
.screen
The canvas rectangle.
.layer
A Layer
for this scene.
.entities
An alias to layer.entities
.
.addTask(task)
Adds a Task
/Sprite
/Entity
to the list.
.changeScene(scene)
Signals the App
to switch to a scene.
.init()
Initializes the scene.
.tick(t)
Invoked for every frame.
.render(ctx, bx, by)
Draws the scene at the location (bx
, by
).
.setDir(v)
Invoked when a directional input is changed.
.setAction(action)
Invoked when the action key state is changed.
.setCancel(cancel)
Invoked when the cancel key state is changed.
.keydown(keyCode)
Invoked when a key is pressed.
.keyup(keyCode)
Invoked when a key is released.
.mousedown(x, y, button)
Invoked when a mouse button is pressed.
.mouseup(x, y, button)
Invoked when a mouse button is released.
.mousemove(x, y)
Invoked when a mouse pointer is moved.
HTMLScene : Scene (scene.ts
)
A Scene
for a static HTML text.
Suitable for game title or help screen, etc.
new HTMLScene(app, text)
Creates a new HTML scene.
.text
A string to display.
.changeScene(scene)
Signals the App
to switch to a scene.
.change()
Invoked when there's a mouse or keyboard input.
Text Library
Font (text.ts
)
A Font
represents a monospace bitmap font.
new Font(glyphs, [color, [scale]] )
Creates a Font
with a given glyphs
.
.width
The width of individual character.
.height
The height of individual character.
.getSize(text)
Computes the pixel size for a given text.
.renderString(ctx, text, x, y)
Draws the text at a given location.
ShadowFont : Font (text.ts
)
A Font
with shadow.
new ShadowFont(glyphs, [color, [scale, [shadowcolor, [shadowdist]]]] )
Creates a ShadowFont
with a given glyphs
.
.width
The width of individual character.
.height
The height of individual character.
.getSize(text)
Computes the pixel size for a given text.
.renderString(ctx, text, x, y)
Draws the text at a given location.
.getSize2(text)
Computes the pixel size for a given text (including the shadow).
TextBox : Sprite (text.ts
)
DialogBox : TextBox (text.ts
)
Animation Library
Queue : Task (animation.ts
)
A Queue
is a list of Task
s that are executed sequentially.
new Queue(tasks)
Creates a new queue that runs multiple Task
s sequentially.
.alive
true
if the queue is running.
.layer
The Layer
that the queue belongs to.
.time
The elapsed time since the queue started.
.stopped
A Signal
that is signaled when the queue finishes.
.tasks
A list of Task
s to be executed.
.stopWhenEmpty
Set true
to automatically kill the queue when there's no Task
.
.getCurrent()
Returns the current Task
or null
.
.add(task)
Adds a Task
to the queue.
.remove(task)
Removes a Task
from the queue.
.clear()
Removes all the Task
s from the queue.
Pathfinding Library
PlanActor (planmap.ts
)
PlanAction (planmap.ts
)
PlanProfile (planmap.ts
)
PlanMap (planmap.ts
)
PlanActionRunner (planrunner.ts
)
PlanningEntity (planrunner.ts
)


Access to the API, only for people who have an account and after notification of the desire to build the application. In order to give the individual free access key.


✨ Jarwis
Who need a Jarvis If we can build a jarwis *jk
Build With ❤ By Iqbal Syamil
API not supported
Listen
Log
Date
Humidity
Temperature


The Brave Browser is a privacy centric Chromium browser built for the average consumer. However, some privacy strong users are known to use Android without the Google components, which prevent them from installing the Brave Browser through the Play Store. This is a simple solution to install the Brave Browser without the Play Store.
The only Android app repository the Brave Browser is available on is the Play Store. No official app image is available on FDroid, or any FOSS app repositories.
Download the Brave Browser from the Official GitHub Releases Page
Brave Browser GitHub Releases Page
For Android Distributions, it is recommended that you download the suitable APK install file suited for your architecture. The APK files can be found under the release > Assets


About Our Resturent
Salmon Cookies offer you various types of vanilla, chocolate and raspberry flavours that is made locally through our store.
If you wont to more information click on sales
Location:
- Seatile
- Tokyo
- Dubai
- Paris
- Lima
Hours open
| Location: | Hours open |
|---|---|
| Seatile | from 6Am to 7Pm |
| tokyo | from 6Am to 7Pm |
| dubai | from 6Am to 7Pm |
| paris | from 6Am to 7Pm |
| lima | from 6Am to 7Pm |


ODF Plus publicity vehicle hits the road
by Staff ReporterKrishna District Collector A.Md. Imtiaz inaugurated an Open Defecation Free (ODF) Plus publicity vehicle at his camp office in the city on Thursday.
Mr. Imtiaz said that 1,46,497 independent household toilets were set up to ensure eradication of open defecation. However, he said that there were close to 200 villages in the district where not all the toilets were being used.
The Collector said that the publicity vehicle would tour the targeted villages for two months to spread awareness with the help of video clippings. He said the drive was aimed at ensuring use of toilets by all by the end of this year.


In the Etsy marketplace, you can reach customers all over the world. Grow and manage a creative venture on your terms!
Whatever you create, we have a space for you. Get your storefront up and running today and get your first 30 days free.
"My Etsy storefront is now a full-time job!"
"Join. You won't regret it."
"I love how my passion of pottery has turned into a business!"
"Thanks to my Etsy shop, I was able to open a store in Brooklyn."


The_Last_Ship
Their mission is simple: Find a cure. Stop the virus. Save the world. When a global pandemic wipes out eighty percent of the planet's population, the crew of a lone and unaffected Navy destroyer, the USS Nathan James, must find a way to pull humanity from the brink of extinction.


rotten
>
Library
>
Biographies
>
Entertainers
> Pundits
Andrew Sullivan
Robert Novak
Bill O'Reilly
Rush Limbaugh
Pornopolis
|
Rotten
|
Faces of Death
|
Famous Nudes


|
Mackey
V3.3
A C++ library for computing RO(G) graded homology
|
A pair of a cell and a coefficient. More...
#include <Space.hpp>
Public Attributes | |
| nonequivariant_index | cell |
| scalar_t< diff_t > | coefficient |
A pair of a cell and a coefficient.
The cell has nonequivariant_index
(use convert if you have equivariant_index
as input)
| nonequivariant_index cell |
| scalar_t<diff_t> coefficient |


Works at least in the latest version of Firefox in Windows, Linux and MacOS X
and in the latest versions of Chrome/ium in Linux and Windows.
WebGL support is not required, but desirable.
Rotate with the mouse, Zoom with the wheel.
Spacebar to change panorama (among a fixed set of them).


1 write to RunAsAdmin
System.Management.Automation (1)
engine\remoting\common\RunspaceConnectionInfo.cs (1)
3259
this.
RunAsAdmin
= runAsAdmin;
1 reference to RunAsAdmin
System.Management.Automation (1)
engine\remoting\common\RunspaceConnectionInfo.cs (1)
3487
RunAsAdmin
? "false" : "true");


labeled
by Kevin Reiss at 2022-09-23 03:31:26.closed
by Max Kadel at 2022-09-23 12:18:12.referenced
by Max Kadel at 2022-09-23 12:18:10.merged
by Max Kadel at 2022-09-23 12:18:11.closed
by Max Kadel at 2022-09-23 12:18:11.head_ref_deleted
by Max Kadel at 2022-09-23 12:18:12.assigned
by Christina Chortaria at 2022-09-23 13:26:13.renamed
by Christina Chortaria at 2022-09-23 13:26:24.closed
by Max Kadel at 2022-09-23 19:35:17.review_requested
by Francis Kayiwa at 2022-09-23 19:06:33.referenced
by Robert-Anthony Lee-Faison at 2022-09-23 19:28:07.merged
by Robert-Anthony Lee-Faison at 2022-09-23 19:28:07.closed
by Robert-Anthony Lee-Faison at 2022-09-23 19:28:07.head_ref_deleted
by Robert-Anthony Lee-Faison at 2022-09-23 19:28:11.Closed by #36
closed
by Shaun Ellis at 2022-09-23 19:43:28.closed via pulibrary/pulfalight#1150
closed
by None at 2022-09-23 18:45:15.Whoever takes this ticket should find out who the ingested is and let them know that there's a problem with their PDF file.
@sdellis this is a concert programs PDF. the fix should go to Dan Gallagher.
mentioned
by Shaun Ellis at 2022-09-23 19:16:29.subscribed
by Shaun Ellis at 2022-09-23 19:16:29.This was wrongly ingested to a child record for a multi title work Sadar....etc. I have deleted the enttire resource and am cleaning up the ingest to the host record in figgy. Closing Ticket.
assigned
by Shaun Ellis at 2022-09-23 19:17:30.unassigned
by Shaun Ellis at 2022-09-23 19:17:52.assigned
by Kim Leaman at 2022-09-23 19:17:53.closed
by Kim Leaman at 2022-09-23 19:19:07.Users don't want to see a viewer in the catalog, but would rather have a direct link to supplemental material files. This use case should be entered in the use case file in the docs
directory in Figgy.
Here is the link to these two end user workflow documentation: https://drive.google.com/drive/folders/1f2-XSDTYiFsvS1i0BxNrNjnldXLPWSlT
labeled
by Shaun Ellis at 2022-09-23 19:23:18.Next step is to update to the latest version of UV first. If the issues persist, submit PRs to the most recent UV branch.
labeled
by None at 2022-09-23 20:35:55.labeled
by None at 2022-09-23 20:37:32.renamed
by None at 2022-09-23 15:27:38.unlabeled
by None at 2022-09-23 20:38:28.assigned
by Jane Sandberg at 2022-09-22 22:24:53.unlabeled
by Kevin Reiss at 2022-09-23 03:36:24.labeled
by Kevin Reiss at 2022-09-23 03:36:25.renamed
by Kevin Reiss at 2022-09-23 11:59:16.mentioned
by None at 2022-09-23 17:39:18.subscribed
by None at 2022-09-23 17:39:18.head_ref_force_pushed
by Robert-Anthony Lee-Faison at 2022-09-23 21:25:58.review_requested
by Robert-Anthony Lee-Faison at 2022-09-23 21:27:27.It does appear an record with an item marked for NoCirc (which is the item policy applied to items that require "In Library Use" are hardcoded to just Firestone. These items should display the same set of pick-up locations that any other item in the holding location they are shelved in.
labeled
by Kevin Reiss at 2022-09-22 22:42:06.labeled
by Kevin Reiss at 2022-09-22 22:43:17.Coverage decreased (-0.03%) to 94.497% when pulling fffaf04f883caab6904834d08f1eafbc7f3a6058 on revert-3201-i3161removecampus_authorized into 0c3b2f9bd3521b9ab5032b18e52074435b20837e on main.
referenced
by Christina Chortaria at 2022-09-23 12:03:14.merged
by Christina Chortaria at 2022-09-23 12:03:14.closed
by Christina Chortaria at 2022-09-23 12:03:14.head_ref_deleted
by Christina Chortaria at 2022-09-23 12:03:15.needs some more work. I reverted the pr https://github.com/pulibrary/orangelight/pull/3201 and merged in main.
I reopened the ticket because after deploying to qa and staging I noticed that when the user is prompted to login and submit a request the UI has the message 'You must register with the Library before you can request materials. Please go to Firestone Circulation for assistance. Thank you.' The message comes from ‘I18n.t(“requests.account.casusernobarcodemsg”)’.
closed
by Kevin Reiss at 2022-09-22 22:36:30.reopened
by Christina Chortaria at 2022-09-23 12:05:16.Coverage increased (+0.03%) to 94.529% when pulling 577b53521aeae978d6d7a16f76329c0a0a52f799 on i3161removecampus_authorized into f995963d35ff38caea1bb349735515262604a6aa on main.
referenced
by Kevin Reiss at 2022-09-22 22:36:29.merged
by Kevin Reiss at 2022-09-22 22:36:29.closed
by Kevin Reiss at 2022-09-22 22:36:29.head_ref_deleted
by Kevin Reiss at 2022-09-22 22:36:30.head_ref_restored
by Christina Chortaria at 2022-09-23 12:04:27.referenced
by Max Kadel at 2022-09-23 12:16:46.merged
by Max Kadel at 2022-09-23 12:16:46.closed
by Max Kadel at 2022-09-23 12:16:46.head_ref_deleted
by Max Kadel at 2022-09-23 12:16:47.closed
by Max Kadel at 2022-09-23 12:16:47.labeled
by Kevin Reiss at 2022-09-23 12:20:51.We checked with @kelea99 the host record and a different constituent: https://figgy.princeton.edu/catalog?q=9969101363506421 and the viewers where different. I couldn't understand why this constituent https://catalog.princeton.edu/catalog/9969101283506421/ would have a viewer since I couldn't find it in figgy; https://figgy.princeton.edu/catalog?q=9969101283506421 returns no results.
@kelea99 I found the figgy object id for this '9969101283506421' constituent and I checked in figgy: https://figgy.princeton.edu/catalog/42cc0f57-eb6a-4953-9af6-40415d8ddf02 and has source identifier :<PHONE_NUMBER>506421 This is why we see the viewer on the constituent because there is already a scanned manifest in figgy. I confirm that it has nothing to do with the host viewer.
Any ideas why when I search in figgy for '9969101283506421' I get no results?? see: https://pulibrary.slack.com/archives/CA8282VKN/p1663939913262789. https://figgy.princeton.edu/catalog?q=9969101363506421.
mentioned
by Kim Leaman at 2022-09-22 22:01:19.subscribed
by Kim Leaman at 2022-09-22 22:01:19.Coverage decreased (-0.02%) to 94.461% when pulling 39b6682b01f3bbe6f4487d323894058abf7b7fc6 on removevoyagerfixtures into 9605ae06185f99d77a7a74b481d663f354153eea on main.
Coverage decreased (-0.002%) to 94.477% when pulling 66e6f74d7a89d8e2eed6de787569b50e2af67d76 on 3182-refactor-user-auth into 9605ae06185f99d77a7a74b481d663f354153eea on main.
ready_for_review
by None at 2022-09-23 14:56:36.deployed
by None at 2022-09-23 15:42:04.referenced
by Max Kadel at 2022-09-23 19:31:07.merged
by Max Kadel at 2022-09-23 19:31:07.closed
by Max Kadel at 2022-09-23 19:31:07.head_ref_deleted
by Max Kadel at 2022-09-23 19:31:07.head_ref_force_pushed
by None at 2022-09-23 12:39:30.head_ref_force_pushed
by None at 2022-09-23 12:45:54.head_ref_force_pushed
by None at 2022-09-23 12:55:23.convert_to_draft
by None at 2022-09-23 12:56:54.head_ref_force_pushed
by None at 2022-09-23 13:00:12.head_ref_force_pushed
by None at 2022-09-23 14:40:45.head_ref_force_pushed
by None at 2022-09-23 14:50:41.ready_for_review
by None at 2022-09-23 14:52:45.referenced
by James R. Griffin III at 2022-09-23 14:56:25.merged
by James R. Griffin III at 2022-09-23 14:56:25.closed
by James R. Griffin III at 2022-09-23 14:56:25.head_ref_deleted
by James R. Griffin III at 2022-09-23 14:56:26.assigned
by James R. Griffin III at 2022-09-23 18:11:55.referenced
by Hector Correa at 2022-09-23 18:57:22.merged
by Hector Correa at 2022-09-23 18:57:22.closed
by Hector Correa at 2022-09-23 18:57:22.head_ref_deleted
by Hector Correa at 2022-09-23 18:57:23.referenced
by James R. Griffin III at 2022-09-23 19:28:06.merged
by James R. Griffin III at 2022-09-23 19:28:06.closed
by James R. Griffin III at 2022-09-23 19:28:06.head_ref_deleted
by James R. Griffin III at 2022-09-23 19:28:07.closed
by James R. Griffin III at 2022-09-23 19:28:07.labeled
by Hector Correa at 2022-09-23 20:06:27.assigned
by Hector Correa at 2022-09-23 20:06:30.assigned
by Hector Correa at 2022-09-23 21:02:35.Note: updated slides and ticket with considerations from the meeting with Matt C. and Tyler (9/23/22) - Just fixed an error with the slides (took out incorrect duplicate at 5:18 ET)
transferred
by Hannah H at 2022-09-23 21:04:08.assigned
by Tyler Wade at 2022-09-23 21:05:22.@jrgriffiniii This is the PR with the test that we worked out. Feel free to update it if you think in a better approach. Thanks for you help on this.
I am sorry for the delay, this is the approach which I was trying to implement: https://github.com/pulibrary/pdc_describe/pull/436
mentioned
by James R. Griffin III at 2022-09-23 20:53:17.subscribed
by James R. Griffin III at 2022-09-23 20:53:17.referenced
by Bess Sadler at 2022-09-23 15:17:35.merged
by Bess Sadler at 2022-09-23 15:17:36.closed
by Bess Sadler at 2022-09-23 15:17:36.head_ref_deleted
by Bess Sadler at 2022-09-23 15:17:36.closed
by Bess Sadler at 2022-09-23 15:17:36.ready_for_review
by Bess Sadler at 2022-09-23 15:10:28.referenced
by Hector Correa at 2022-09-23 15:29:35.merged
by Hector Correa at 2022-09-23 15:29:35.closed
by Hector Correa at 2022-09-23 15:29:35.head_ref_deleted
by Hector Correa at 2022-09-23 15:29:36.assigned
by James R. Griffin III at 2022-09-23 17:14:54.referenced
by Bess Sadler at 2022-09-23 18:09:37.merged
by Bess Sadler at 2022-09-23 18:09:37.closed
by Bess Sadler at 2022-09-23 18:09:37.head_ref_deleted
by Bess Sadler at 2022-09-23 18:09:38.referenced
by Francis Kayiwa at 2022-09-23 11:14:30.merged
by Francis Kayiwa at 2022-09-23 11:14:30.closed
by Francis Kayiwa at 2022-09-23 11:14:30.head_ref_deleted
by Francis Kayiwa at 2022-09-23 11:14:31.ready_for_review
by Francis Kayiwa at 2022-09-23 13:04:56.head_ref_force_pushed
by Jane Sandberg at 2022-09-23 19:22:31.head_ref_force_pushed
by Jane Sandberg at 2022-09-23 22:03:13.ready_for_review
by Jane Sandberg at 2022-09-23 22:03:53.We did the following:
@VickieKarasic could you please confirm that it's acting as expected?
The stakeholder confirmed that this issue is resolved. Closing!
mentioned
by Vickie Karasic at 2022-09-22 22:20:51.subscribed
by Vickie Karasic at 2022-09-22 22:20:51.closed
by Jane Sandberg at 2022-09-23 14:36:30.Outdated.
closed
by Max Kadel at 2022-09-23 19:33:24.Outdated.
closed
by Max Kadel at 2022-09-23 19:33:37.deployed
by None at 2022-09-23 18:07:17.referenced
by Eliot Jordan at 2022-09-23 18:23:53.merged
by Eliot Jordan at 2022-09-23 18:23:53.closed
by Eliot Jordan at 2022-09-23 18:23:53.head_ref_deleted
by Eliot Jordan at 2022-09-23 18:23:54.closed
by Eliot Jordan at 2022-09-23 18:23:54.assigned
by None at 2022-09-23 14:18:06.head_ref_deleted
by None at 2022-09-23 15:10:10.head_ref_deleted
by None at 2022-09-23 15:10:08.head_ref_restored
by None at 2022-09-23 15:10:19.head_ref_deleted
by None at 2022-09-23 15:10:30.assigned
by None at 2022-09-23 15:42:58.head_ref_force_pushed
by None at 2022-09-23 15:28:08.referenced
by None at 2022-09-23 16:50:45.merged
by None at 2022-09-23 16:50:45.closed
by None at 2022-09-23 16:50:45.head_ref_deleted
by None at 2022-09-23 16:50:45.Thank you for the screenshots! Just from those I'm thinking we need to also update the color of the little label / badge thingie as well as the wording.
See the badges on https://xd.adobe.com/view/1a8defd5-0cd8-4715-a5c1-9cb7795d2ece-4fde/screen/2aeefae6-aee7-4ec5-929a-64f600503129 and https://xd.adobe.com/view/1a8defd5-0cd8-4715-a5c1-9cb7795d2ece-4fde/screen/84261189-8278-4c7e-9c84-64d6f00c5bff. @sdellis are "Has online content" (in green) and "Child records have online content" (in grey) the final approved design? I also notice some capitalization inconsistencies in the wireframes which I'm not sure what to say about.
If the badges should be different color, please let me know the hex values and I'll make the updates.
Also I think we talked about having the online content tag / label / thingie be on the same line as the other little tag / badges? Here's a screenshot of how they look in staging, above the other ones. @sdellis ?
head_ref_force_pushed
by Eliot Jordan at 2022-09-23 18:14:09.deployed
by None at 2022-09-23 18:14:20.head_ref_force_pushed
by Eliot Jordan at 2022-09-23 18:19:50.mentioned
by Shaun Ellis at 2022-09-23 18:22:27.subscribed
by Shaun Ellis at 2022-09-23 18:22:27.mentioned
by Shaun Ellis at 2022-09-23 18:27:22.subscribed
by Shaun Ellis at 2022-09-23 18:27:22.This was an unpublished EAD. Shouldn't get this anymore since deploying #1150
closed
by None at 2022-09-23 18:44:09.closed
by None at 2022-09-23 18:44:46.reopened
by None at 2022-09-23 18:44:52.referenced
by None at 2022-09-23 20:33:28.I will check in with the POs to ensure this is what they want. I will also provide hex values with the colors of the icons/badges.
labeled
by Shaun Ellis at 2022-09-23 19:56:06.head_ref_force_pushed
by None at 2022-09-23 20:47:04.ready_for_review
by None at 2022-09-23 21:42:06.renamed
by None at 2022-09-23 20:36:59.deployed
by None at 2022-09-23 19:33:33.deployed
by None at 2022-09-23 21:47:01.deployed
by None at 2022-09-23 22:01:13.ready_for_review
by Jane Sandberg at 2022-09-23 22:03:31.head_ref_force_pushed
by Jane Sandberg at 2022-09-23 22:04:30.