Efficient Data Loaders
Designing Efficient Data Loaders for Deep Learning
Data loading is an important component of any machine learning system. When we work with tiny datasets, we can get away with loading an entire dataset into GPU memory. With larger datasets, we must store examples in main memory. And when datasets grow too large to fit into main memory, data loading can become performance-critical. In designing a data loader, we aim to achieve more efficient data loading, to spend less effort on data preparation, and to present a clean and flexible interface.
We organize this design note as follows:
- IO Design Insight: Guiding principles in data loading design.
- Data Format: Our solution using dmlc-core's binary recordIO implementation.
- Data Loading: Our method to reduce IO cost by utilizing the threaded iterator provided by dmlc-core.
- Interface Design: Our approach to facilitate writing MXNet data iterators in just a few lines of Python.
- Future Extension: Prospective ideas for making data loading more flexible.
Our analysis will motivate several requirements that an effective IO system should fulfill.
List of Key Requirements - Small file size. - Parallel (distributed) packing of data. - Fast data loading and online augmentation. - Quick reads from arbitrary parts of the dataset in the distributed setting.
Design Insight
To design an IO system, we must address two kinds of tasks: data preparation and data loading. Data preparation is usually performed offline, whereas data loading influences the online performance. In this section, we will introduce our insight of IO design involving the two phases.
Data Preparation
Data preparation describes the process of packing data into a desired format for later processing. When working with large datasets like ImageNet, this process can be time-consuming. In these cases, there are several heuristics we ought to follow:
- Pack the dataset into small numbers of files. A dataset may contain millions of data instances. Packed data distributes easily from machine to machine.
- Do the packing once. We don't want to repack data every time run-time settings, like the number of machines, are changed.
- Process the packing in parallel to save time.
- Be able to access arbitrary parts of the data easily. This is crucial for distributed machine learning when data parallelism is introduced. Things may get tricky when the data has been packed into several physical data files. The desired behavior could be: the packed data can be logically separated into arbitrary numbers of partitions, no matter how many physical data files there are. For example, if we pack 1000 images into 4 physical files, then each file contains 250 images. If we then use 10 machines to train a DNN, we should be able to load approximately 100 images per machine. Some machines may need images from different physical files.
Data Loading
The next step to consider is how to load the packed data into RAM. Our goal is to load the data as quickly as possible. There are several heuristics we try to follow: - Read continuously: We can read faster when reading from contiguous locations on disk. - Reduce the bytes to be loaded: We can achieve this by storing data in a compact way, e.g. saving images in JPEG format. - Load and train in different threads: This avoids computational bottlenecks while loading data. - Save RAM: Judiciously decide whether to load entire files into RAM.
Data Format
Since the training of deep neural network often involves large amounts of data, the format we choose should be both efficient and convenient. To achieve our goals, we need to pack binary data into a splittable format. In MXNet, we rely on the binary recordIO format implemented in dmlc-core.
Binary Record
In MXNet's binary RecordIO, we store each data instance as a record. kMagic is a magic number indicating the start of a record. Lrecord encodes length and a continue flag. In lrecord, - cflag == 0: this is a complete record - cflag == 1: start of a multiple-records - cflag == 2: middle of multiple-records - cflag == 3: end of multiple-records
Data is the space to save data content. Pad is simply a padding space to make record align to 4 bytes.
After we pack the data, each file contains multiple records. Then, loading can be continuous. This avoids the low performance that can result from reading random locations on disk.
One advantage of storing data via records is that each record can vary in length. This allows us to save data compactly when good compression algorithms are available for our data. For example, we can use JPEG format to save image data. The packed data will be much smaller compared with storing uncompressed RGB values for each pixel.
Take ImageNet_1K dataset as an example. If we store the data as 3 * 256 * 256 array of raw RGB values, the dataset would occupy more than 200G. But after compressing the images using JPEG, they only occupy about 35G of disk space. This significantly reduces the cost owing to reading from disk.
Here's an example of binary recordIO: We first resize the image into 256 * 256, then compress into JPEG format. After that, we save a header that indicates the index and label for that image to be used when constructing the Data field for that record. We then pack several images together into a file. You may want to also review the example using im2rec.py to create a RecordIO dataset.
Access Arbitrary Parts Of Data
One desirable property for a data loader might be: The packed data can be logically sliced into an arbitrary number of partitions, no matter how many physical packed data files there are. Since binary recordIO can easily locate the start and end of a record using the Magic Number, we can achieve the above goal using the InputSplit functionality provided by dmlc-core.
InputSplit takes the following parameters: - FileSystem filesys: dmlc-core wrapper around the IO operations for different file systems, like hdfs, s3, local. User shouldn't need to worry about the difference between file systems anymore. - Char uri: The URI of files. Note that it could be a list of files because we may pack the data into several physical parts. File URIs are separated by ';'. - Unsigned nsplit: The number of logical splits. nsplit could be different from the number of physical files. - Unsigned rank: Which split to load in this process.
The splitting process is demonstrated below: - Determine the size of each partition.
- Approximately partition the records according to file size. Note that the boundary of each part may be located in the middle of a record.
- Set the beginning of partitions in such a way as to avoid splitting records across partitions.
By conducting the above operations, we now identify the records belong to each part, and the physical data files needed by each logical part. InputSplit greatly simplifies data parallelism, where each process only reads part of the data.
Since our partitioning scheme does not depend on the number of physical data files, we can process a huge dataset like ImageNet_22K in parallel fashion as illustrated below. We don't need to consider distributed loading issue at the preparation time, just select the most efficient physical file number according to the dataset size and computing resources available.
Data Loading and Preprocessing
When the speed of loading and preprocessing can't keep up with the speed of training or evaluation, IO can bottleneck the speed of the whole system. In this section, we will introduce a few tricks to achieve greater efficiency when loading and preprocessing data packed in binary recordIO format. When applied to the ImageNet dataset, our approach achieves the IO speed of 3000 images/sec with a normal HDD.
Loading and preprocessing on the fly
When training deep neural networks, we sometimes must load and preprocess the data while simultaneously training for the following reasons: - When the whole size of the dataset exceeds available RAM size, we can't load it in advance; - Sometimes, to make models robust to things like translations, rotations, and small amounts of color shift of noise, we introduce randomness into the training process. In these cases we must re-preprocess the data each time we revisit an example.
In service of efficiency, we also address multi-threading techniques. Taking Imagenet training as an example, after loading a bunch of image records, we can start multiple threads to simultaneously perform image decoding and image augmentation. We depict this process in the following illustration:
Hide IO Cost Using Threadediter
One way to lower IO cost is to pre-fetch the data for next batch on one thread, while the main thread performs the forward and backward passes for training. To support more complicated training schemes, MXNet provides a more general IO processing pipeline using threadediter provided by dmlc-core. The key of threadediter is to start a stand-alone thread that acts as a data provider, while the main thread acts as a data consumer as illustrated below.
The threadediter maintains a buffer of a certain size and automatically fills the buffer when it's not full. And after the consumer finishes consuming part of the data in the buffer, threadediter will reuse the space to save the next part of data.
MXNet IO Python Interface
We make the IO object as an iterator in numpy. By achieving that, the user can easily access the data using a for-loop or calling next() function. Defining a data iterator is very similar to defining a symbolic operator in MXNet.
The following example code demonstrates a Cifar data iterator.
dataiter = mx.io.ImageRecordIter(
# Dataset Parameter, indicating the data file, please check the data is already there
path_imgrec="data/cifar/train.rec",
# Dataset Parameter, indicating the image size after preprocessing
data_shape=(3,28,28),
# Batch Parameter, tells how many images in a batch
batch_size=100,
# Augmentation Parameter, when offers mean_img, each image will subtract the mean value at each pixel
mean_img="data/cifar/cifar10_mean.bin",
# Augmentation Parameter, randomly crop a patch of the data_shape from the original image
rand_crop=True,
# Augmentation Parameter, randomly mirror the image horizontally
rand_mirror=True,
# Augmentation Parameter, randomly shuffle the data
shuffle=False,
# Backend Parameter, preprocessing thread number
preprocess_threads=4,
# Backend Parameter, prefetch buffer size
prefetch_buffer=1,
# Optional, the device context which data loader optimized for, could be 'gpu' or 'cpu'
ctx="gpu",
# The out data type, could be 'float32' 'int8' or 'uint8'
dtype="float32")
Generally, to create a data iterator, you need to provide five kinds of parameters:
- Dataset Param: Information needed to access the dataset, e.g. file path, input shape.
- Batch Param: Specifies how to form a batch, e.g. batch size.
- Augmentation Param: Which augmentation operations (e.g. crop, mirror) should be taken on an input image.
- Backend Param: Controls the behavior of the backend threads to hide data loading cost.
- Auxiliary Param: Provides options to help with debugging.
Usually, Dataset Param and Batch Param MUST be given, otherwise the data batch can't be created. Other parameters can be given as needed. Ideally, we should separate the MX Data IO into modules, some of which might be useful to expose to users, for example:
- Efficient prefetcher: allows the user to write a data loader that reads their customized binary format that automatically gets multi-threaded prefetcher support.
- Data transformer: image random cropping, mirroring, etc. Allows the users to use those tools, or plug in their own customized transformers (maybe they want to add some specific kind of coherent random noise to data, etc.)
Future Extensions
In the future, there are some extensions to our data IO that we might consider adding. Specifically, we might add specialized support for applications including image segmentation, object localization, and speech recognition. More detail will be provided when such applications have been running on MXNet.


Emily Yew is a second year undergraduate Computer Science major at the University of California: San Diego.


Team player, passionate on web performance, currently exploring web components.
Skills earned
I am a front end engineer, worked on javascript and various javascript frameworks. Automation of unit testing and integration testing is another area I specialize.


--- creation_epoch:<PHONE_NUMBER> lastmod_epoch:<PHONE_NUMBER> categories: ['Computer Problems'] title: LG Fusic (LX550) and vibrate problem --- So I got a LG Fusic. For some reason it kept vibrating every 2-5 minutes even though I had no new alerts/messages nor had any missed/incoming calls.
I found that I had to turn-off message reminders to get it to stop. A known bug in the phone for years now. I find LG cell phones to be low quality in general now.


Sorting a participant's data.Back to Contents First, make sure you have:
(as of June 2020) You will learn:
Be aware that bots sometimes crawl various pages, this page will submit with many blank entries when that happens. You can either keep from saving data in the even that the consent radio button wasn't checked, or look into some other means of directing bots away from your processing page (eg. robots.txt). For simplicity I don't include any way to prevent this in the tutorial, it is a very rare occurrence anyway. For these code heavy tutorials, it is recommended to full screen the video and watch at 720p ResourcesThe changed files for this step can be found here. Note:
Proceed for a checklist to prepare your files for distribution. |


--- layout: documentation title: ICMPv6ParameterProblemType ---
Parameter problem error message; ICMP v6 type=4.
| Field Name | Type | Description |
|---|---|---|
| Erroneous_Header_Field0..1 | boolean |
Erroneous header field encountered (ICMP v6 code=0). |
| Unrecognized_Next_Header_Type0..1 | boolean |
Unrecognized next header type encountered (ICMP v6 code=1). |
| Unrecognized_IPv6_Option0..1 | boolean |
Unrecognized IP v6 option encountered (ICMP v6 code=2). |
| Pointer0..1 | HexBinaryObjectPropertyType |
identifies octet offset within invoking packet where error was detected. |


The ENCODE project aims to discover all the DNA sequences associated with various epigenetic features, with the reasonable expectation that these will also be functional (best tested by genetic methods). However, it is not clear how to relate these results with those from evolutionary analyses. The mouse ENCODE project aims to make this connection explicitly and with a moderate breadth. Assays identical to those being used in the ENCODE project are performed in cell types in mouse that are similar or homologous to those studied in the human project. Thus we will be able to discover which epigenetic features are conserved between mouse and human, and we can examine the extent to which these overlap with the DNA sequences under negative selection. The contribution of DNA with a function preserved in mammals versus that with a function in only one species will be discovered. The results will have a significant impact on our understanding of the evolution of gene regulation.
This track is a multi-view composite track that contains multiple data types (views). For each view, there are multiple subtracks that display individually on the browser. Instructions for configuring multi-view tracks are here. The following views are in this track:
Additional views are available on the Downloads page.
Cells were grown according to the approved ENCODE cell culture protocols. Cells were lysed in RLT buffer (Qiagen RNEasy kit), and processed on RNEasy midi columns according to the manufacturer's protocol, with the inclusion of the "on-column" DNAse digestion step to remove residual genomic DNA. A quantity of 75 µgs of total RNA was selected twice with oligo-dT beads (Dynal) according to the manufacturer's protocol to isolate mRNA from each of the preparations. A quantity of 100 ngs of mRNA was then processed according to the protocol in Mortazavi et al. (2008), and prepared for sequencing on the Illumina GAIIx or HiSeq platforms according to the protocol for the ChIP-Seq DNA genomic DNA kit (Illumina). Paired-end libraries were size-selected around 200 bp (fragment length). Libraries were sequenced with the Illumina HiSeq according to the manufacturer's recommendations. Paired-end reads of 100 bp length were obtained
Reads were mapped to the reference mouse genome (version mm9 with or without the Y chromosome, depending on the sex of the cell line, and without the random chromosomes in all cases) using TopHat (version 1.3.1). TopHat was used with default settings with the exception of specifying an empirically determined mean inner-mate distance and supplying known ENSEMBL version 63 splice junctions.
Wold Group: Brian Williams, Georgi Marinov, Diane Trout, Lorian Schaeffer, Gordon Kwan, Katherine Fisher, Gilberto De Salvo, Ali Mortazavi, Henry Amrhein, Brandon King
Contacts: Georgi Marinov (data coordination/informatics/experimental), Diane Trout (informatics) and Brian Williams (experimental)
Langmead B, Trapnell C, Pop M, Salzberg SL. Ultrafast and memory-efficient alignment of short DNA sequences to the human genome. Genome Biol. 2009;10(3):R25.
Mortazavi A, Williams BA, McCue K, Schaeffer L, Wold B. Mapping and quantifying mammalian transcriptomes by RNA-Seq. Nat Methods. 2008 Jul;5(7):621-8.
Trapnell C, Pachter L, Salzberg SL. TopHat: discovering splice junctions with RNA-Seq. Bioinformatics. 2009 May 1;25(9):1105-11.
Data users may freely use ENCODE data, but may not, without prior consent, submit publications that use an unpublished ENCODE dataset until nine months following the release of the dataset. This date is listed in the Restricted Until column, above. The full data release policy for ENCODE is available here.


WITNESS LIST Pensions & Investments Committee March 17, 2003-8:00A HB 88 For: Smith, Eileen (American Heart Association) On: Nail, William (Employess Retirement System) HB 94 For: Priest, Pat (Self) On: Nail, William (Employees Retirement System) HB 229 For: Hoke, Tracy (Round Rock ISD) On: Jung, Ronnie (Teacher Retirement System) Santiago, Gwen (Texas Association of School Business Officials) HB 820 On: Meyers, Lawrene (Self) Nail, William (Employees Retirement System) HB 1354 On: Nail, William (Employees Retirement System) HB 1664 Against: Lehr, Mike (Texas Retired Teachers Association) On: Jung, Ronnie (Teacher Retirement System) HB 1822 For: Menchaca, Rick (TMRS Board of Trustees) On: Anderson, Gary (Texas Municipal Retirement System) HB 1840 On: Crawford, Denny (State Securities Board)


Hannibal
Criminal profiler Will Graham is tasked by FBI agent Jack Crawford, the head of Behavioral Sciences, to help investigate the disappearances of eight young girls across Minnesota. Graham and Crawford's team investigate several subsequent murders, while also trying to catch the Chesapeake Ripper. With the investigation weighing heavily on Graham, Crawford decides to have him supervised by psychiatrist Dr. Hannibal Lecter, who, unbeknownst to them, is the Chesapeake Ripper himself, actively seeking to derail the investigation.


--- layout: page title: "The Little Book on CoffeeScript" prev: OEBPS/ch01s03.html next: OEBPS/ch01s05.html book_path: books/alex-maccaw-the-little-book-on-coffeescript-_oeb/ --- {% include JB/setup %} {% raw %}
The convention of optional parentheses continues with CoffeeScript’s
if
and else
keywords:
if true == true "We're ok" if true != true then "Panic" # Equivalent to: # (1 > 0) ? "Ok" : "Y2K!" if 1 > 0 then "Ok" else "Y2K!"
As you can see above, if the if
statement is on one line, you’ll need to use the then
keyword so CoffeeScript knows when the
block begins. Conditional operators (?:
) are not supported; instead you should use a
single line if/else
statement.
CoffeeScript also includes a Ruby idiom of allowing suffixed
if
statements:
alert "It's cold!" if heat < 5
Instead of using the exclamation mark (!
) for negation, you can also use the not
keyword—which can sometimes make your code
more readable, as exclamation marks can be easy to miss:
if not true then "Panic"
In the example above, we could also use the CoffeeScript’s unless
statement, the opposite of if
:
unless true "Panic"
In a similar fashion to not
,
CoffeeScript also introduces the is
statement, which translates to
===
:
if true is 1 "Type coercion fail!"
As an alternative to is not
, you
can use isnt
:
if true isnt true alert "Opposite day!"
You may have noticed in these examples that CoffeeScript is
converting ==
operators into ===
and !=
into !==
. This is one of my favorite
features of the language, and yet one of the most simple. What’s the
reasoning behind this? Well, frankly, JavaScript’s type coercion is a bit
odd, and its equality operator coerces types in order to compare them,
leading to some confusing behaviors and the source of many bugs. There’s a
longer discussion on this topic in Chapter 6.


Samantha McCall
about
about
timeline
portfolio
content
blog
new posts
archive
Jekyll blog
Fresh Perspective
web development • content creation • strategy


Welcome to Sarah’s bakery! Started in 2015, Sarah’s bakery is a long-standing childhood dream and hobby turned into reality. From baking cakes as my favourite playtime activity and burning a few along the way, we have come a long way in trying to perfect the art.
We, at Sarah’s bakery, are here to make your birthdays, anniversaries, farewells, and any other festivity a tad more special and unique. Relish and dive into our luscious cakes, pastries, breads and cookies that are custom-made to fit your own unique needs or occasions. We strive to give you the best quality in every bite.
Call +91-9599034877 to place your order*. Deliveries in Noida only*.


Putting on a happy face doesn't just make you more likeable; it makes you healthier, both good for your career.
We know smiling can greatly improve your mood and reduce stress. Even better, your smile doesn't have to be real, so you can fake it and still get the same results.
Smiling doesn’t just benefit you on the inside. It also works to your advantage from the outside.
A study from Penn State University found that people who smile appear to be more likeable, courteous. and even competent.
This is reason enough to smile at every person you potentially want to do business with. Lifting those facial muscles into a smile is also contagious;
if you smile and they smile, everyone in the room becomes a little happier. Researchers at Uppsala University in Sweden concluded that
frowning when looking at someone smiling is possible, but would be very difficult.
When you smile, your brain is aware of the activity and actually keeps track of it.
The more you smile, the more effective you are at breaking the brain's natural tendency to think negatively.
If you smile often enough, you end up rewiring your brain to make positive patterns more often than it does negative ones.

Yes, all of those benefits can come from a simple smile.
The more you do it, the more signals your brain will have to mentally shift to positive thoughts
even when you might be in a situation that would normally cause you alarm.
……．
[source]
Fast Company, "How Smiling Changes Your Brain",
https://www.fastcompany.com/3041438/how-to-be-a-success-at-everything/how-smiling-changes-your-brain (01.28.2015)


How to back up your Android phone before a factory reset
by Corbin DavenportEven though most of your phone's data probably lives in the cloud, there could still be some locally-stored photos, videos, contacts, calendars, and other important files not backed up. In this post, we'll go over how to check that everything on your phone is properly backed up, so you can wipe it without thinking twice that you lost something.
 Open the Settings app, tap the Accounts option, select your Google account, and verify that all the apps and services under the account have been synced recently.
If some of the services haven't been synced recently (for example, if you haven't opened one of the apps in a long time), tap the Sync Now button on the page. Depending on your version of Android, the Sync Now option might be under a menu.
Make sure your photos are backed up
If you use Google Photos to back up the photos and videos you take with your phone, you should make sure it's still doing that. All you have to do is open the Photos app and look for the cloud checkmark at the top, which indicates everything has been backed up.
If you previously turned off cloud backups in Photos, open the side menu, tap 'Settings,' and select 'Back up & sync' to turn syncing on. Super easy.
Of course, there are plenty of other photo backup apps for Android, including OneDrive and Dropbox. If you're using one of those, go into the app's settings and check the current sync status.
If you don't like using photo backup services, you can also simply copy all the images and videos to a flash drive or your computer.
Backing up photos/videos to a flash drive
If you have a big enough flash drive, and an adapter if one is needed (either Type-C or microUSB), you can just copy your phone's entire camera folder to the drive. Plug the drive into your phone, then use the Files app on your device to copy the 'DCIM' folder on your phone to the drive.
Every phone manufacturer has a different file manager, so if you can't figure it out, download Files by Google from the Play Store. Once you've opened the app, here's what you need to do:
- Go the 'Browse' tab.
- Select your internal storage
- Find the 'DCIM' folder in the list and hold down on it until a checkmark appears.
- Tap the menu button at the top-right and select 'Copy to'.
- Select your flash drive in the list.
Once your files are copied, you can disconnect the flash drive and back up the photos however you see fit.
Backing up photos to a PC
An easier option is just to connect your phone to your computer and copy the phone's DCIM folder, since all you need is the USB cable that (probably) came with your phone.
Copy contacts and calendars to the cloud
When you create a contact or calendar event, your phone might give you the option of saving the data in the phone's internal storage, instead of in the cloud. While that's a nice feature to have, especially for the privacy-conscious, it also means you might have saved some important data locally if you didn't pay close attention. Before you wipe our phone, you should check to see if any of your contacts or calendar events aren't backed up to the cloud.
Some phones, like Google Pixel devices, don't even give you the option of saving contacts and calendars locally.
The exact process for this varies by phone model, but you can start by opening the Contacts app and looking for a menu with all your accounts. For example, the Contacts application on recent Samsung phones displays 'Phone' alongside your Samsung and Google accounts. An option to move Phone contacts to an online account appears in a top menu.
Copying a local contact to an online account, on a Samsung Galaxy phone
It's also possible to store a limited number of contacts on your phone's SIM card, but this isn't a common practice anymore, so it's pretty hard to do it accidentally.
Checking for locally-stored calendar events is mostly the same process: open your Calendar app and look for a calendar not linked to any accounts. It's usually called 'Phone' or 'My calendar'.
Left: Phone calendar on LG phone; Right: Phone calendar on a Samsung Galaxy phone
However, most mobile calendar apps don't give you an easy way to export calendars. The best way to do this is to install this utility from the Play Store, open it, select your phone's calendar, and tap the 'Export' button. This will give you an .ics calendar file, which you can import into Google Calendar, Outlook, or any other cloud service.
Remove online accounts and disable Device Protection
If you're selling your phone, or giving it to someone else, you'll need to log out from all accounts and remove any lock screen passwords. Android introduced a feature called 'Device Protection' back in 2015, which requires you to enter the password of the last Google/Samsung/etc. account used on the device, after the device has been wiped.
To disable Device Protection, you'll first need to log out of all your online accounts. Open the Settings app on your phone, go to the Accounts section, and tap 'Remove account' under each account.
Removing accounts on a Google Pixel phone
Removing accounts on a Samsung Galaxy phone
Once you've done that, disable any lock screen passwords you might have. This can be done from the Security section of the Settings app.


Shikh Abdelhamid Ben Badis
Abdelhamid Ben Badiswas an Algerian educator, exegete, Islamic reformer, scholar and figurehead of cultural nationalism. In 1931, Ben Badis founded the Association of Algerian Muslim Ulema, which was a national grouping of many Islamic scholars in Algeria from many different and sometimes opposing perspectives and viewpoints. The Association would have later a great influence on Algerian Muslim politics up to the Algerian War of Independence. In the same period, it set up many institutions where thousands of Algerian children of Muslim parents were educated. The Association also published a monthly journal, the Al-Chihab and souheil Ben Badis contributed regularly to it between 1925 and his death in 1940
His Life
Abd al Hamid Ben Badis was born in Constantine, a city in the North-East of Algeria. Sheikh Ben Badis was an emblematic figure of the Islamic Reform movement in Algeria. Abd al Hamid Ben Badis was of an old town middle-class family which claimed descent from the Zirids a Berber Muslim dynasty founded in the 10th Century by Bologhine ibn Ziri.
Education
Ben Badis grew up in a scholarly and religious household and as a result memorized the Quran at the age of thirteen.
He was still very young when he was placed under the tutorship of Hamdan Lounissi. Lounissi exerted a significant influence on the youth of Ben Badis. Lounissi was a stalwart defender of the rights of the Muslim Inhabitants of Constantine. Lounissi extracted from the youth Ben Badis a promise to never enter into the service of France (the Colonial Power in Algeria).
In 1908, Ben Badis, decided to begin his first voyage in order to advance his learning. He traveled to Tunis and therein the Zeitouna University. This was, at the time, a great center of learning and knowledge, particularly in the Islamic fields of studies.
At the Zietouna University Ben Badis horizons widened. He learned a great deal of the Islamic Sciences and Arabic Language. He met many Academics who left an indelible mark on his personality and his viewpoint on Islam. In 1912 he obtained his diploma. He stayed on at the university for a further year teaching.
Ben Badis then embarked on his pilgrimage or Hajj in Mecca and Medina Ben Badis stayed on in Madinah for three months and commenced to giving lessons to pilgrims and residents in the Prophets mosque, Al-Masjid al-Nabawi.
His Philosophy
In Madinah Ben Badis encountered Muslim Reformist Sheikh Bachir Al Ibrahimi. They would regularly meet in order to formulate a clear plan for reform of Islam in Algeria. This was the start of a long friendship which spurred the Islamic Reform movement In Algeria into a position of prominence and influence. He urged Ben Badis to move permanently to Algeria and work against the ills of Maraboutic ideas, ignorance in Islamic Knowledge and against cultural and religious decline in the Muslim population of Algeria under French occupation.
After his departure Ben Badis visited Syria and Egypt. At the Al-Azhar Mosque in Cairo he met with renowned academics of Literature and Islamic sciences.


CrankyCritic® The Sixth Sense Rated [PG-13], 107 minutes Starring Bruce Willis, Haley Joel Osment Written and Directed by M. Night Shyamalan website:http://www.thesixthsense.com
IN SHORT: Creepy and enthralling, with a twist you won't see coming.
Here's the hard part about writing up The Sixth Sense. If I tell you anything that may clue you in to what is going on in this flick, I will not be doing what I consider to be my job, 'cuz I'll be giving it away. So I'm going to tell you a true set of stories to help illustrate some of the shrink stuff going on in this fine flick.
When a person goes through extreme trauma, as when I broke my neck ten years back, it is a normal psychological reaction to push away those people who remind (him) of the trauma. It could be someone who was present at the time. In my case it was "fix-up dates," all of whom had suffered some major distraction, shall we say, in their lives. They had been damaged, as had I and I didn't need to be reminded. It may seem shallow, but that's life. When my closest friend lost a breast to cancer, she pushed me out of her life by emasculating me in front of her friends. I knew what she was doing and when I couldn't stand it anymore I walked away. We haven't spoken since.
Which brings us to ace child psychiatrist Dr. Malcolm Crowe (Bruce Willis), who's just been awarded the highest citation that the City of Philadelphia can give to one of its citizens.
A year later, post trauma, the normally quiet doctor has changed. He is physically and emotionally distant to his wife, misses dates and anniversaries, spends nearly all his free time with an exceptional case concerning a potentially psychotic 8-year old boy named Cole Sear (Haley Joel Osment). Most little kidlets have imaginary friends, but these tend to fade at Cole's age. His "friends" are terrifying him because they're not fuzzy li'l Dr. Seuss-type characters. They are the ghosts of people long dead, all of whom have shuffled off this mortal coil in shocking and/or violent ways.
Of course, he's probably nuts. He's hides in the local church, and has scratches and gashes all over his body. His mom (Toni Collette) might be abusing him, but that doesn't seem likely. His schoolmates all consider him to be a freak, and as his therapy drags on, this poor kid shrinks into a world where he is terrified beyond belief. Can the Doctor help this poor kid? And what of helping his wife? How far should your work take you from the people you love?
Writer/Director M. Night Shyamalan has done an exceptional job on this, his third feature. Everything you see is presented in a matter of fact style, even the icky stuff. There may be a moment where you could feel as if you've been manipulated in standard horrorflick mode, but there's no slice 'n' dice. Nothing you see will seem out of place once you accept the fact that this poor kidlet isn't nuts. And you will.
Bruce Willis is doing something unusual for him. He's being a quiet man. No big action stunts, just quiet speak and doctorly concern. It's a nice change. The real find is Haley Joel Osment, a kidlet who holds the screen in a way not seen since Anna Paquin did it in The Piano.
On average, a first run movie ticket will run you Eight Bucks. Were Cranky able to set his own price to The Sixth Sense, he would have paid . . .
$7.00
After the Blair Witch Project failed to scare me silly y'all wanted to know what creeps Cranky out. The Sixth Sense did. Don't confuse creepy with scary, there's a lot more going on here than I'll even hint at.
The Cranky Critic® is a Registered Trademark of, and Copyright © 1999 by, Chuck Schwartz. All Rights Reserved. On the web at www.crankycritic.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


You have no upcoming tasks
To create a task ...
View screenshot
View screen guide
You have no pinned groups currently.
OR
Create New Group
You have no active campaigns currently.
{{joinCandidateGroup?.name}}
It looks like you are searching by group join code, but we can't find any group matching that code (1234). Do you want to do a full text search or close and try again?


Psalm 74
A maschil of Asaph.
1 God, why have you rejected us forever?

They burned up all of your meeting places in the land.
9 We do not see any more miraculous signs from God;
there is no prophet any more,
and no one among us knows how long this will last.
10 How long, God, will the enemy throw insults at you?
Will the enemy blaspheme your name forever?
11 Why do you hold back your hand, your right hand?
Take your right hand from your garment and destroy them.
12 Yet God has been my king from ancient times,
bringing salvation on the earth.
13 You divided the sea by your strength;
you smashed the heads of the sea monsters in the waters.
14 You crushed the heads of leviathan;
you fed him to those living in the wilderness.
15 You broke open springs and streams;
you dried up flowing rivers.
16 The day is yours, and the night is yours also;
you set the sun and moon in place.
17 You have set all the borders of the earth;
you have made summer and winter.
18 Call to mind how the enemy hurled insults at you, Yahweh,
and that a foolish people has blasphemed your name.
19 Do not hand over the life of your dove to a wild animal.


search
close
Stuff
Modal
Cites
Cited by
Related
2019
2018
2017
Year
Option 1
Option 2
Option 3
Volume
Cool facts
Content


Goods Receiving Note
From:
To:
Order No:
Delivery Note No:
Invoice No:
Requisition No:
Requisition By:
Date :
| Product Category | Description | Recieved Qty | Order Qty | Unit Price |
Store Officer
Name:
Designation:
Date:
From:
To:
Order No:
Delivery Note No:
Invoice No:
Requisition No:
Requisition By:
Date :
| Product Category | Description | Recieved Qty | Order Qty | Unit Price |
Store Officer
Name:
Designation:
Date:


Deuteronomy 32:18
Of the Rock that begat thee thou art unmindful, and hast forgotten God that formed thee.


Fortnite glitch means players are getting formal warnings just for watching the game
A glitch in Fortnite has been discovered that’s led to many players receiving formal warnings for simply watching games
by Shivali Best, https://www.facebook.com/shivalibestjournalist/Earlier this week, Fortnite hit the headlines after it banned a British teen from the game for cheating.
Now, a glitch in Fortnite has been discovered that’s led to many players receiving formal warnings for simply watching games.
The issue is with the ‘spectate game in progress’ mode, which allows players to simply watch the game, rather than actually play.
Bizarrely, players in this mode have been receiving behaviour warnings for ‘teaming’ - the practice of working together in a game.
The warning reads: "Behaviour Warning. Due to your recent actions you have been warned for Teaming. Please refrain from repeat offenses or you may receive an account ban."
The reason for this glitch remains unclear, although Epic Games claims that it is ‘going to address this as quickly as possible.’
While these false warnings are no doubt quite irritating, many players have received compensation, in the form of 1,000 V-Bucks.
According to Kotaku, that’s more than enough to buy the Season 2 Battle pass - jackpot!
The glitch comes shortly after YouTuber Jarvis Kaye was banned from Fortnite for cheating.
Jarvis, known as FaZe Jarvis, broadcast a video of him using ‘aimbots’ - a tactic that is banned on Fortnite - to his two million YouTube subscribers.
Epic Games, the developer behind Fortnite, immediately banned Jarvis from the game, sparking a fierce debate of whether cheating should result in a permanent ban.


What are parantheses () used for?
Parantheses are used in many ways. They can be used in BEDMAS when performing operations such as (1 + 2) * 5. Paranthesis are also used to house conditions in if/else statmens or for loops. For example if (1 == 1)..., or for(i = 0; i < 5; i++). They are also used to pass in arguments for functions. For example someFunction(x, y).
What are brackets [] used for?
Brackes are used to define arrays, which is essentially a list of values. for example someArray = [1, 2, 3, 4]. Brackets can also be use to call upon a variable that references a property in an object. For example some someObj['someVar']. Finally they can be used to call on an array or the value in the array, by knowing it character placement. For example someArray[2] would output 3.
What are Braces {} used for?
Braces are you used to section off blocks of code. They appear after, functions, loops, and objects, to define a block of code. These blocks of code only concern themselves with code inside the block and they only operate when triggered by an above condition
What are Single Quotes '' used for?
Single quotes are used to define strings. For example someString = 'string'. Single quotes are also used in conjection if braces to call on properties with an object, as demonstrated above.
What are Double Quotes "" used for?
Double quoutes can be used anywhere single quotes can be used.


A Short Aside On Large Language Models And Kojima’s Prophecy
A Short Aside On Large Language Models And Kojima’s Prophecy
Among all the chatter about large language models and their ongoing impact on society and business, and with memories writing for Ars Technica floating back into consciousness in turn, I couldn’t help but be reminded of a piece of art well before its time that talked, at length, about the implications of our evolving information age as both creation and distribution are largely automated.
I’m talking, of course, about Metal Gear Solid 2. A script written in ~1999, for of all things a video game, proves to be a most prophetic window into the good and bad (depending on how you interpret the content) that stands before us as machines take a more active role in creating and curating human-ingestible content.
Among the major questions the game asked:
- What value is content in that world where that content is automatically generated?
- What is the point of content in a world where it is, in effect, free and increasingly meaningless?
- How does one even begin to contorl a machine that can move orders of magnitude faster than humans?
- How does that lack of control, and of value, drive us back to human-first interactions offline?
All very relevant thought exercises as we all attempt to adapt and exploit these new tools for our collective benefit (while controlling the consequences of said exploitation).
There’s an excellent online analysis of game’s original theory on YouTube that provides incredible context and color commentary on the moment which I’d recommend watching as a basis for understanding the correlation:
You can find the source clip online, as well:
While I have so much more to say on this topic, so many ways I think said content could be updated, and so many ideas of how my teams are going to take advantage of the new tools available, I couldn’t help but come back to this seminal part of my adolescence and if for only a moment rue the implications of the next great work revolution.
Perhaps a longer rue is in order.


| Home | About | Experience | Education | Blog | Projects | Contact |
Pair programming for the first time a few weeks ago definitely felt like an experiment. Perhaps the Phase 0 work at Dev Bootcamp is structured to feel like that since we didn't have a GPS (Guided Pairing Session) until we had already gotten a few pairing sessions under our belts. Regardless, it's something that seemed to come naturally after a few attempts. The main thing that I enjoy about pair programming is seeing how people approach the same problem in a different way. Many times I end up learning some new method or approach that I can use in subsequent challenges.
The only frustrating thing about pair programming can often end up being very rewarding in the end. Occasionally when I pair with someone, we may not get off to a fast start and end up getting stuck. Perhaps the communications lags as well and it is easy to get frustrated in that kind of situation. However, I find that my pair and I almost always find a way to get unstuck and get more synced up with eachother. For me, this is a very rewarding outcome ,even if it is frustrating to get to that point.
The anonymous feedback we get about these pairing sessions has been very beneficial for me as well. We are learning a lot in a short period of time, so it's hard sometimes to really gauge where you're at comparatively. The takeaway for me, after reading through my feedback, is that any perceived weaknesses that I have with the material may not be as bad as I think they are. The most consistent thing that I see mentioned is the need to work on time-boxing and I completely agree with that assessment. I have a tendency to get zoned in until I've solved the problem with my pair and have been making more of effort to put hard stops on our sessions. The other consistent thing I see is that people really enjoy pairing with me because of my communication and the way that I think through problems. It's good to know that people enjoy working with me and hopefully I can get feedback that will allow me to improve in this area even more.
Overall, I feel great about how pair programming has gone so far. I can't think of a single time where I didn't learn something from a pair session or feel like I didn't contribute in a positive way to the session. Solo programming is absolutely necessary because you need to be able to solve problems on your own, but I have learned so much from my pair programming sessions that I think I would have missed otherwise. The best part about pair programming besides learning from other people is that it is actually fun for me to break down a problem with someone else. Being able to share that sense of accomplishment after a successful pairing session is definitely a rewarding experience.


RNase ZIKV cells Figure OAS infected dsRNA virus viral &; OpenUrl genome infection RFs KUNV DENV cells, MOI antiviral hpi staining expression CrossRef mean RNA production rRNA replication shown titers Silverman, KO, using plaque fluorescence hpi, intensity pIC HeLa WT, activation catalytic cell effects experiments. function harvested increased protein stained Cells displayed paclitaxel Zika degradation fixed independent representative ZIKV, compared determined Abstract DAPI FREE Text absence activity host infection. infectious levels used Data Quantification Statistical (B) (blue) ****p<;.. activated inactive magnification. results significance Cell DENV, Virus cells. circularity deletion localization microtubule mock new treated units (A) (D) (green) Imaged detected diameter forming infection, measurement *p<;., Virol, Weiss, cytoskeleton observed one-way significant, virus. (C) (PFU)/mL ANOVA, IFA RFU RFs. assay, cleavage indicated production. relative replicates (PDI, West Whelan arbitrary area assay assays cytoskeletal form including quantification suggesting supernatants treatment viruses (E) Dong, Li, Nile analyzed did expressing intensity, latent loss measured mutant nuclei nuclei. production, proviral required units, **p<;., DMSO Download Host OAS, Open Viral cellular circularity, data-hide-link-title=""> data-icon-position="" decreased described figure reduced similar tab type units. (F) (RL (red), -well ;<;span Cortese Elliott, Furthermore, Interferon L-mediated [[#xB]] activates activation, apoptosis assays, assembly changes effect flavivirus human lower microscope nuclease panel). proteins rearrangements red), stabilization study supernatant xmlns=";http://www.w.org//xhtml"; ***p<;., Additionally, Agilent Bartenschlager, Effects Expression Jha, Microbe, PBS Paclitaxel RFs, Rath, Wang, addition alterations antibody catalytically comparing comparison data day detect enhance enhanced expression. flaviviruses flaviviruses, genome, improved increase individual inhibition inhibits instead interaction interferon minimal pathway resulting seeded ssRNA staining, staining. sufficient taken time transfected (C). (Invitrogen Activation Bioanalyzer. Despite Dong Dr. FRET Hassel, However, IFA. IFN Kunjin Malathi Med, Nikon Protein ROIs Res, SD, TiE University Zhang, activate activity. added banding concentrated contrast dead demonstrated dengue depicted detectable detection does early effective expression, generation imaged images immunofluorescence improves incubated indicating induced induces innate integrity integrity, interactions lack lysates maintains mechanism minutes multiple non-catalytic outside panel: presence previous primary processed replication. response responses result role secondary shape sites. stably structure supplemented supported synthesis test, viruses, widefield βtubulin


Survey Form
Let us know how we can improve freeCodeCamp
Full name:
E-mail:
Age:
Which option best describes your current role?
Select an option
Student
Full Time Job
Full Time Learner
Prefer not to say
Other
How likely is it that you would recommend freeCodeCamp to a friend?
Definitely
Maybe
Not sure
What do you like most in FCC
Select an option
Challenges
Projects
Community
Open Source
Things that should be improved in the future (Check all that apply)
Front-end Projects
Back-end Projects
Data Visualization
Challenges
Open Source Community
Gitter help rooms
Videos
City Meetups
Wiki
Forum
Additional Courses
Any Comments or Suggestions?
Submit


ObjectLikeSequence Back
ObjectLikeSequence ObjectLikeSequence
An ObjectLikeSequence
object represents a sequence of key/value pairs.
So, this one is arguably the least... good... of the sequence types right now.
Here are a couple of issues (there are others):
- For iterating over an object, there is currently not a good way to do it
asynchronously (that I know of). The best approach is to call
Object.keys
and then iterate over those asynchronously; but this of course eagerly iterates over the object's keys (though maybe that's not a really big deal). - In terms of method chaining, it is a bit unclear how that should work.
Iterating over an
ObjectLikeSequence
withObjectLikeSequence#each
passes(value, key)
to the given function; but what about the result ofSequence#map
,Sequence#filter
, etc.? I've flip-flopped between thinking they should return object-like sequences or regular sequences.
Expect this section to be updated for a coming version of Lazy.js, when I will hopefully have figured this stuff out.


Resume
OBJECTIVE
o join an innovative company as a software engineer/machine learning intern where I can both learn and contribute
EDUCATION
ROSE-HULMAN INSTITUTE OF TECHNOLOGY (Terre Haute, IN) MAY 2023
- Double Major: Bachelor of Computer Science and Data Science
- Minor: Mathematics
- GPA: 3.76/4.00
- Status: Year three academic senior
- Related Coursework: Machine Learning, Deep Learning, Data Mining, Database Systems, Data Structures and Algorithm Analysis, Objected Oriented Software Development, Probability with Applications to Statistics, Statistics with Probability, Linear Algebra, Web Programming, Software Engineering Requirements, Computer Systems, Programming Language Concepts, Operating Systems, Computer Architecture, Discrete and Combinatorial Algebra, Game Theory
- Experience: Java, Python, C, C#, VB.NET, Pandas, Jupyter, TSQL, R, Scheme, Unix, scikit-learn, Maple, Mathematica, Git, Linux, Eclipse, RStudio, MIPS Assembly, Visual Studio 2019, Microsoft Azure DevOps, MVTec Deep Learning Tool, MVTec HDevelop, Halcon
ACCELERATED MATH AND PHYSICS PROGRAM (RHIT, Terre Haute, IN) AUGUST 2019
- A five week comprehensive review for advanced placement in Calculus I, II, and III & Physics I and II
HONORS
RHIT (Terre Haute, IN) SEPTEMBER 2019 – PRESENT
EMPLOYMENT
GENTEX CORPORATION (Zeeland, MI) JUNE 2019 - AUGUST 2021
- Machine Vision Intern
- Created deep learning models for object detection using MVTec's Deep Learning Tool and HDevelop
- Integrated models in VB.NET and C# for production deployment
- Cleaned code repositories and updated YAML pipelines in Azure DevOps using Visual Studio 2019
JAMES S. LEWIS MD PC (Elkins Park, PA) 2014-2020
- Network and Software Maintenance
- Threat assessment, bandwidth review, and security recommendations
- Updated the office electronic medical record system, maintained servers, and designed protocols for user access
- Convinced client to implement certificate server and HIPAA compliant protocols
WHITE HAT DRONING (Philadelphia, PA) 2015-2018
- Co-founder & Creative/Technical Director
- Produced aerial videos for townships, industries, and real estate clients
- Used Final Cut Pro X, related plug-ins, and extensions to generate 4K video
- Planned and executed aerial surveys for agricultural concerns
- Contract negotiation, storyboard development, format design, presentation, editorial review, client revisions, and final distribution
EXTRACURRICULAR ACTIVITIES
ESCALATE/RISE 2019 – PRESENT
- Member of the Engineering Student Community Actively Learning Advanced Technical Entrepreneurship initiative
- Top Placement & Team Leader — Startup Weekend Entrepreneurship Event
ROSE-HULMAN CLUB VOLLEYBALL 2019 – PRESENT
THE FRATERNITY OF PHI GAMMA DELTA 2019 – PRESENT
- Finance Committee Chairman


{{query | json}}
| Status | Name | Username | Address | Website | Company | Role | Tags | ||
|---|---|---|---|---|---|---|---|---|---|
| {{row.name}} | {{row.username}} | {{row.email}} |
{{row.address.street}} {{row.address.city}} {{row.address.zip}} {{row.address.state}} {{row.address.country}} {{row.phone}} |
{{row.website}} | {{row.company.name}} | {{row.role}} | {{row.tags}} | ||
|
|


titled_page_view
A Flutter PageView with an additional title bar and optional controls.
Showcase
Usage
Example
First, add the package to your pubspec.yaml:
dependencies:
...
titled_page_view: ^0.1.0
Now you can use TitledPageView
like Flutters's PageView
import 'package:titled_page_view/titled_page_view.dart';
...
new Scaffold(
body: new TitledPageView(
children: [
Column(
children: [
Container(height: 300, color: Colors.green),
]
),
Column(
children: [
Container(height: 300, color: Colors.red),
]
),
],
titleChildren: [
Text('Green'),
Text('Red'),
],
),
),
Interface
TitledPageView
is build around Flutter's PageView
. Therefore, many have the same name and work
exactly the same. The only two additional options are fadeEffect
and controlButtons
, which
add optional fading effects and controls to the title, respectively. Currently, both the fade
animation and the buttons (chevron_left
/chevron_right
) are hard coded. Lastly, the code is
written such that scrollDirection
of Axis.vertical
is currently not possible, hence this
option does not exist. With these differences in mind the interface resembles Flutter's PageView
Widget very closely, thus one can always consult the official Flutter documentation.


People tired of hearing Imran's emotional speeches: Siraj | Pakistan - Geo.tv
by Web DeskLAHORE: Jamaat-e-Islami Pakistan (JI) chief Siraj ul Haq criticised Prime Minister Imran Khan on Tuesday by saying that people were tired of listening to his emotional speeches again and again.
The JI chief said that the prime minister needed to achieve something instead of making tall claims.
"During the past 15 months the government has not been able to bring about change in any field," he said. "Where is the justice in filling the coffers by stealing food from people's mouths?"
Siraj said that the government was unable to control inflation.
"The government is stealing money from people's pockets," he said. "For the rich and the poor, the courts, hospitals and educational institutes are different."
He said that Prime Minister Imran should worry about the future of the country.
The JI chief was referring to the prime minister's speech from the previous day when he lashed out at opposition parties and made fun of Bilawal Bhutto Zardari.
PM Imran calls himself dharna expert, lashes out at Bilawal
The prime minister was speaking to the audience at the groundbreaking of the Hazara Motorway Phase II in Havelian on Monday.
During his speech, the prime minister not only mocked PPP Chairman Bilawal Bhutto Zardari but also called him 'liberally corrupt'.
Prime Minister Imran said that the protesters could not even stay for a month in the capital as opposed to his party's 2014 protest of 126 days.
PM Imran warned the opposition leaders saying that even if they all gather, he will not 'forgive' them.
PM Imran said that the opposition leaders have ulterior motives, which is why they resorted to dharna politics on containers.
PM Imran said that he has been wrought in a way that he will fight against mafia.
He said the government will focus on spending more money on human development projects instead of only making motorways and roads.
While referring to the conditions for lifting the ban on Nawaz Sharif’s foreign travel, PM Imran said that there was only one piece of paper the government asked for. "Rs7 billion do not matter for the Sharifs, they can pay this much as tip only."


{{event.title}}
{% if event.start|date:"M d" == event.end|date:"M d" %}
{{ event.end|date:"M d" }}, {{ event.start|date:"Y" }}
{% else %}
{{ event.start|date:"M d" }} to {{ event.end|date:"M d" }}, {{ event.start|date:"Y" }}
{% endif %}
{{ event.start|date:"g:iA" }} to {{ event.end|date:"g:iA" }}
@ {{ event.location }}


Jan. 2, 2022
I’m launching Petrin Development Services (PDS) in 2022. The plan is to use my skills, experiences, and expertise to help small businesses in my area to cultivate their marketing presence, and to help them manage all applicable web services that can help them grow their brand.
In the last few years, proper technical SEO hygiene has become more important than ever. And, in my humble opinion, it’s becoming too treacherous of a landscape for small business owners to focus on while separately growing their businesses.
Aug. 23, 2021
A lot has been said about the run of New England sports teams since the turn of the century. While the teams have won many championships, the run of appearances in the final four (Conference/League Final) has been equally unprecedented. This project, a work in progress, looks to quantify that. Check it out on CodePen.
Jan. 30, 2021
Title Tally, hosted on CodePen, is near and dear to my heart. I was having a difficult time quantifying which cities had the most collective championships. I could to this per-franchise, but wanted to segment data to differentiate the Minneapolis Lakers from the Los Angeles Lakers, for example.
Originally written in Vue, I’ll be working on a React version in 2022.
Dec. 25, 2020
Mat Stat is my most recent sports infographic project, and it is hosted on CodePen.
Like Title Tally, it looks to quantify championship victories using a number of metrics (time, location, etc.). Unlike Title Tally, this time it focuses on major professional wrestling promotions. The front-end is vanilla JavaScript. I haven’t decided if the back-end will be dynamic (scraped from Wikipedia) or static (compiled in a local database) yet.
Dec. 15, 2020
Subject Matter Experts (SME) is perhaps the most important project listed here, and closest to my heart. I have a vision for re-imagining self-directed education, with a “lesson” as the primary increment for measuring understanding. Any subject can be broken down into the lessons it consists of, and I believe an entire educational platform (or a curriculum, or a doctrine) can be formatted comprised of lessons.
SME looks to implement that vision, as five primary applications – a lesson composer, a lesson repository, an assessment tool, a student dashboard, and a curriculum dashboard.
Feb. 27, 2020
This a simple proof-of-concept for now, with limited functionality. It’s not actively being worked on, but can be found on CodePen. It deals cards correctly, but none of the underly game functionality is present yet. It uses the Deck of Cards API.
Nov. 12, 2019
This a simple proof-of-concept for now, with limited functionality. It’s not actively being worked on, but can be found on CodePen. It deals cards correctly, but none of the underly game functionality is present yet. It uses the Deck of Cards API.
Jan. 21, 2018
This tool, first developed in 2018, is a proof of concept for a pictionary app I’d like to further develop. It is fully featured, but lacks any current practical application. The tool is currently hosted on CodePen.


{% extends 'ps/base.html' %} {% load static %} {% load forms %} {% block content %}
A confirmation email has been sent to {{ booking.customer.email }}.
Please click here if you want to make another booking.


Copyright (c) 2014 Blah.com. All rights reserved. | Photos by Fotogrph | Design by FreeCSSTemplates.org.


/** * @author Ed Spencer * @private * * Represents a mapping between a url and a controller/action pair. May also contain additional params. This is a * private internal class that should not need to be used by end-developer code. Its API and existence are subject to * change so use at your own risk. * * For information on how to use routes we suggest reading the following guides: * * - [Using History Support](../../../core_concepts/history_support.html) * - [Intro to Applications](../../../core_concepts/about_applications.html) * - [Using Controllers](../../../core_concepts/controllers.html) * */ Ext.define('Ext.app.Route', { config: { /** * @cfg {Object} conditions Optional set of conditions for each token in the url string. Each key should be one * of the tokens, each value should be a regex that the token should accept. For example, if you have a Route * with a url like "files/:fileName" and you want it to match urls like "files/someImage.jpg" then you can set * these conditions to allow the :fileName token to accept strings containing a period ("."): * * conditions: { * ':fileName': "[0-9a-zA-Z\.]+" * } * */ conditions: {}, /** * @cfg {String} url (required) The url regex to match against. */ url: null, /** * @cfg {String} controller The name of the Controller whose {@link #action} will be called if this route is * matched. */ controller: null, /** * @cfg {String} action The name of the action that will be called on the {@link #controller} if this route is * matched. */ action: null, /** * @private * @cfg {Boolean} initialized Indicates whether or not this Route has been initialized. We don't initialize * straight away so as to save unnecessary processing. */ initialized: false }, constructor: function(config) { this.initConfig(config); }, /** * Attempts to recognize a given url string and return controller/action pair for it. * @param {String} url The url to recognize. * @return {Object/Boolean} The matched data, or `false` if no match. */ recognize: function(url) { if (!this.getInitialized()) { this.initialize(); } if (this.recognizes(url)) { var matches = this.matchesFor(url), args = url.match(this.matcherRegex); args.shift(); return Ext.applyIf(matches, { controller: this.getController(), action : this.getAction(), url : url, args : args, // We keep the historyUrl in here for backwards compatibility historyUrl: url }); } }, /** * @private * Sets up the relevant regular expressions used to match against this route. */ initialize: function() { /* * The regular expression we use to match a segment of a route mapping * this will recognize segments starting with a colon, * e.g. on 'namespace/:controller/:action', :controller and :action will be recognized */ this.paramMatchingRegex = new RegExp(/:([0-9A-Za-z\_]*)/g); /* * Converts a route string into an array of symbols starting with a colon. e.g. * ":controller/:action/:id" => [':controller', ':action', ':id'] */ this.paramsInMatchString = this.getUrl().match(this.paramMatchingRegex) || []; this.matcherRegex = this.createMatcherRegex(this.getUrl()); this.setInitialized(true); }, /** * @private * Returns true if this Route matches the given url string * @param {String} url The url to test * @return {Boolean} True if this Route recognizes the url */ recognizes: function(url) { return this.matcherRegex.test(url); }, /** * @private * Returns a hash of matching url segments for the given url. * @param {String} url The url to extract matches for * @return {Object} matching url segments */ matchesFor: function(url) { var params = {}, keys = this.paramsInMatchString, values = url.match(this.matcherRegex), length = keys.length, i; //first value is the entire match so reject values.shift(); for (i = 0; i < length; i++) { params[keys[i].replace(":", "")] = values[i]; } return params; }, /** * @private * Returns an array of matching url segments for the given url. * @param {String} url The url to extract matches for * @return {Array} matching url segments */ argsFor: function(url) { var args = [], keys = this.paramsInMatchString, values = url.match(this.matcherRegex), length = keys.length, i; //first value is the entire match so reject values.shift(); for (i = 0; i < length; i++) { args.push(keys[i].replace(':', "")); params[keys[i].replace(":", "")] = values[i]; } return params; }, /** * @private * Constructs a url for the given config object by replacing wildcard placeholders in the Route's url * @param {Object} config The config object * @return {String} The constructed url */ urlFor: function(config) { var url = this.getUrl(); for (var key in config) { url = url.replace(":" + key, config[key]); } return url; }, /** * @private * Takes the configured url string including wildcards and returns a regex that can be used to match * against a url * @param {String} url The url string * @return {RegExp} The matcher regex */ createMatcherRegex: function(url) { /** * Converts a route string into an array of symbols starting with a colon. e.g. * ":controller/:action/:id" => [':controller', ':action', ':id'] */ var paramsInMatchString = this.paramsInMatchString, length = paramsInMatchString.length, i, cond, matcher; for (i = 0; i < length; i++) { cond = this.getConditions()[paramsInMatchString[i]]; matcher = Ext.util.Format.format("({0})", cond || "[%a-zA-Z0-9\\-\\_\\s,]+"); url = url.replace(new RegExp(paramsInMatchString[i]), matcher); } //we want to match the whole string, so include the anchors return new RegExp("^" + url + "$"); } });


About 12 months ago, I had a conversation with a friend of mine that convinced me it was time to try my hand at writing a commercial software product. At the time, I had only very recently dropped development of VirtueDesktops and was seriously considering just taking a break from Mac development for a while - thankfully I didn’t, and today I’m releasing the fruits of 12 months of learning and hard work: Hyperspaces 1.0 Public Preview.
So what’s this all about, you ask? Put simply, Hyperspaces works hand-in-hand with Apple’s Spaces to add back a few key features that traditional virtual desktop applications provide, such as:
- Different desktop backgrounds per-space;
- Coloured tinting of desktop backgrounds per-space;
- Naming of each space;
- Desktop labels that show each space’s name;
- Customisable hotkeys to switch directly to each space;
- and more!
I’ve got quite a few features on the drawing board including a much more customisable switcher and more customisation options for each space.
I also need to thank quite a few people who’ve been a huge support and invaluable resources:
- My girl Leah - you can have your boy back for a bit now sweetheart :)
- Jan Van Boghout for all of the code and advice at every stage of development;
- Sean O’Brien for the kickass space selector view in the preferences (and quite a few other groovy graphical doodads!);
- Steve Voida who helped reverse engineer quite a number of new private CGS calls (thanks Steve!);
- Nik Youdale and Zac Cohan from Aqualia for advice and crazy code that I barely understand;
- Chris Forsythe for the kick in the pants to do this in the first place;
- Sebastiaan De With for the incredible application icon;
- Neil Ang, James Pamplin and Dean Robinson - for constantly, consistently pestering me to finish this app - you guys are awesome to work with - roll out, CocoaBots!
It’s been a long and rewarding road over the last year, and I wouldn’t trade a minute of it but here’s a couple of things I’ll know not to do next time:
- Working full-time while trying to get your first product off the ground is really hard - I found taking a break once every few weekends really made a difference;
- Don’t buy a house in the middle of writing your first application (on top of working full time);
- Don’t start renovating a house in the middle of writing your first application (on top of … you get the picture);
- Be ready to drop features for 1.0. The Hyperspaces alphas had some great features that will probably come back in a future release, but they weren’t critical to what I am trying to achieve with Hyperspaces;
I’ll post a post-mortem that goes into some detail about the programming challenges I faced in a few days. OK, enough rambling from me - go download the preview and let me know what you think!


By Blake Gentry / @blakegentry
Engineer @
Opendoor,
Heroku alum
GoSF, April 2015
Performance.
What does HTTP/2 change?
Peer can stop accepting new streams, yet finish old ones
GOAWAY
frame“Here, you'll need this too”
Prioritize more important data streams
“B depends on A”
“C is ½ as important as A”
Permission to send more data
“j/k, I don't need that”
Cancel requests or pushes
Decide when to switch
OR
optimize for both at the same time
>9% usage in Firefox (source)
Browser adoption will be extremely rapid.
What combination of weights and dependencies is optimal?
Blake Gentry / @blakegentry


Cast a set of bytes to a managed C# object.
Managed C# object type
Bytes array
Managed object from given bytes


TLDRify daily report since {{ since }}
New Users
Email
Created
{% for u in new_users %}
{{ u.email }}
{{ u.created }}
{% endfor %}
New Citations
Short URL
Original URL
Created
{% for c in new_citations %}
{{ c.short_url()|urlize(40) }}
{{ c.url|urlize(40) }}
{{ c.created }}
{% endfor %}
Broken Links
Short URL
Original URL
{% for l in broken_links %}
{{ l.short_url()|urlize(40) }}
{{ l.url|urlize(40) }}
{% endfor %}


{{selectedCar.name | uppercase}}
{{selectedCar.year}}
{{selectedCar.capacity}} cm^3
{{selectedCar.horsepower}} HP
{{selectedCar.type}}


'Lenny'
A retrospective movie review by Walter Frith
Searing black and white photography has always given a sense of authenticity to motion pictures ever since colour was predominantly used from the mid 1960's on. In the 90's we've had 'Schindler's List' (1993) which was filmed with some colour and 'Ed Wood' (1994) which was filmed entirely in black and white. Bob Fosse's black and white masterpiece 'Lenny' is the story of acid tongued comedian Lenny Bruce who died from a drug overdose in the mid 1960's at the age of 39. This 1974 film was made at the right time when Hollywood was coming into a new age of artistic integrity. I think just about every high school kid in the world was introduced to the classic novel 'The Catcher in the Rye' by J.D. Salinger. Speaking for myself it taught me that foul language is an ugly and unappealing act in polite company but it has its place at other times in life. In motion pictures they often deal with real life and the frustrations of characters locked in prison, mental institutions, war and everyday conflict in general who REALLY do talk like that. Foul language is appropriate in film as long as its part of the story and doesn't become too repetitive. The most appropriate use of profanity in my judgment was in 1975's 'One Flew Over the Cuckoo's Nest' and was used most inappropriately in '48 Hours' (1982) and 'Scarface' (1983) in which the use of bad language clearly went over the top.
Dustin Hoffman (who just turned 60 on August 8th) portrays Lenny Bruce who played nightclubs, made record albums, some obscure films and got arrested more than any other performer would today for his stand up comedy. Bruce's act was controversial at the time but his performances often revealed the hypocrisy present in everyday society and since his death he has developed a sense of cult status and the film about that part of his life is definitely worth a look. Hoffman is perfect in the part. He looks comfortable in the role and just as impressive is Valerie Perrine who plays his wife. Bob Fosse's direction is both insightful but somewhat cold which is perfect for a film like this since Bruce's act wasn't exactly filled with warmth.
Hoffman and Perrine have a chemistry that is very natural on screen and the film is told in flashback from the beginning of the picture as she talks about him after his death. Julian Barry's screenplay contains scathing social commentary which will not be entertaining to some but should prove very stimulating to others.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


The first two weeks are very heavy on anaylsis and design. Once a design is thought through well it will more easily transition to implementation. It is important for design to be thoughtful before implementation begins.
Once implementation begins the features are sorted so that something that is depended on is completed first. The feautres are also sorted so that those that have the most risk associated with them (i.e. there is some speculation on how to properly implement) are completed early in the project to reduce the risk of project failure. The last two weeks of the project are left solely for polish and review. In almost all projects it is guaranteed to experience delay and overrun in feature estimates. This buffer will account for that and allow time for through testing and bug fixing.


 I don’t think I’ll last out another two weeks, my funds are looking extremely exhausted right now… but at last I’ll get to see the ruins. That’s what it’s all about, right?
It would be cool if I could go white-water rafting at Victoria Falls, but if I can’t manage it, then oh well. I’m down to my last $200 Canadian.
Anyhoo, yesterday I did some shopping etc., hung out in the park, and sent email. Played Scrabble with Francis (Canadian med student) - she won. Zimbabwe only has one TV channel! Isn’t that fucked?
This journal entry has been transcribed from the handwritten original. For more information about this transcription project, see this blog post.


Get Started
Media
Features
Design
Offshore Air
SERVICING THE WEST SIDE OF THE BIG ISLAND OF HAWAII
Get Estimate


phantomjs¶
An NPM wrapper for [PhantomJS](http://phantomjs.org/), headless webkit with JS API.
[![Build Status](https://travis-ci.org/Medium/phantomjs.svg?branch=master)](https://travis-ci.org/Medium/phantomjs)
Building and Installing¶
`shell
npm install phantomjs
`
Or grab the source and
`shell
node ./install.js
`
What this installer is really doing is just grabbing a particular “blessed” (by this module) version of Phantom. As new versions of Phantom are released and vetted, this module will be updated accordingly.
The package has been set up to fetch and run Phantom for MacOS (darwin), Linux based platforms (as identified by nodejs), and – as of version 0.2.0 – Windows (thanks to [Domenic Denicola](https://github.com/domenic)). If you spot any platform weirdnesses, let us know or send a patch.
Running¶
`shell
bin/phantomjs [phantom arguments]
`
And npm will install a link to the binary in node_modules/.bin as it is wont to do.
Running via node¶
The package exports a path string that contains the path to the phantomjs binary/executable.
Below is an example of using this package via node.
```javascript var path = require(‘path’) var childProcess = require(‘child_process’) var phantomjs = require(‘phantomjs’) var binPath = phantomjs.path
- var childArgs = [
- path.join(__dirname, ‘phantomjs-script.js’), ‘some other argument (passed to phantomjs script)’
]
- childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
- // handle results
})
Versioning¶
The major and minor number tracks the version of PhantomJS that will be installed. The patch number is incremented when there is either an installer update or a patch build of the phantom binary.
Deciding Where To Get PhantomJS¶
By default, this package will download phantomjs from https://bitbucket.org/ariya/phantomjs/downloads. This should work fine for most people.
##### Downloading from a custom URL
If bitbucket is down, or the Great Firewall is blocking bitbucket, you may need to use a download mirror. To set a mirror, set npm config property phantomjs_cdnurl. Default is ``.
`shell
npm install phantomjs --phantomjs_cdnurl=http://cnpmjs.org/downloads
`
Or add property into your .npmrc file (https://www.npmjs.org/doc/files/npmrc.html)
`
phantomjs_cdnurl=http://cnpmjs.org/downloads
`
Another option is to use PATH variable PHANTOMJS_CDNURL.
`shell
PHANTOMJS_CDNURL=http://cnpmjs.org/downloads npm install phantomjs
`
##### Using PhantomJS from disk
If you plan to install phantomjs many times on a single machine, you can install the phantomjs binary on PATH. The installer will automatically detect and use that for non-global installs.
A Note on PhantomJS¶
PhantomJS is not a library for NodeJS. It’s a separate environment and code written for node is unlikely to be compatible. In particular PhantomJS does not expose a Common JS package loader.
This is an _NPM wrapper_ and can be used to conveniently make Phantom available It is not a Node JS wrapper.
I have had reasonable experiences writing standalone Phantom scripts which I then drive from within a node program by spawning phantom in a child process.
Read the PhantomJS FAQ for more details: http://phantomjs.org/faq.html
### Linux Note
An extra note on Linux usage, from the PhantomJS download page:
> This package is built on CentOS 5.8. It should run successfully on Lucid or > more modern systems (including other distributions). There is no requirement > to install Qt, WebKit, or any other libraries. It is however expected that > some base libraries necessary for rendering (FreeType, Fontconfig) and the > basic font files are available in the system.
Troubleshooting¶
##### Installation fails with spawn ENOENT
This is NPM’s way of telling you that it was not able to start a process. It usually means:
- node is not on your PATH, or otherwise not correctly installed.
- tar is not on your PATH. This package expects tar on your PATH on Linux-based platforms.
Check your specific error message for more information.
##### Installation fails with Error: EPERM or operation not permitted or permission denied
This error means that NPM was not able to install phantomjs to the file system. There are three major reasons why this could happen:
- You don’t have write access to the installation directory.
- The permissions in the NPM cache got messed up, and you need to run npm cache clean to fix them.
- You have over-zealous anti-virus software installed, and it’s blocking file system writes.
##### Installation fails with Error: read ECONNRESET or Error: connect ETIMEDOUT
This error means that something went wrong with your internet connection, and the installer was not able to download the PhantomJS binary for your platform. Please try again.
##### I tried again, but I get ECONNRESET or ETIMEDOUT consistently.
Do you live in China, or a country with an authoritarian government? We’ve seen problems where the GFW or local ISP blocks bitbucket, preventing the installer from downloading the binary.
Try visiting the [the download page](http://cdn.bitbucket.org/ariya/phantomjs/downloads) manually. If that page is blocked, you can try using a different CDN with the PHANTOMJS_CDNURL env variable described above.
##### I am behind a corporate proxy that uses self-signed SSL certificates to intercept encrypted traffic.
You can tell NPM and the PhantomJS installer to skip validation of ssl keys with NPM’s [strict-ssl](https://www.npmjs.org/doc/misc/npm-config.html#strict-ssl) setting:
`
npm set strict-ssl false
`
WARNING: Turning off strict-ssl leaves you vulnerable to attackers reading your encrypted traffic, so run this at your own risk!
##### I tried everything, but my network is b0rked. What do I do?
If you install PhantomJS manually, and put it on PATH, the installer will try to use the manually-installed binaries.
##### I’m on Debian or Ubuntu, and the installer failed because it couldn’t find node
Some Linux distros tried to rename node to nodejs due to a package conflict. This is a non-portable change, and we do not try to support this. The [official documentation](https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager#ubuntu-mint-elementary-os) recommends that you run apt-get install nodejs-legacy to symlink node to nodejs on those platforms, or many NodeJS programs won’t work properly.
Contributing¶
Questions, comments, bug reports, and pull requests are all welcome. Submit them at [the project on GitHub](https://github.com/Obvious/phantomjs/). If you haven’t contributed to an [Obvious](http://github.com/Obvious/) project before please head over to the [Open Source Project](https://github.com/Obvious/open-source#note-to-external-contributors) and fill out an OCLA (it should be pretty painless).
Bug reports that include steps-to-reproduce (including code) are the best. Even better, make them in the form of pull requests.
Author¶
[Dan Pupius](https://github.com/dpup) ([personal website](http://pupius.co.uk)), supported by [The Obvious Corporation](http://obvious.com/).
License¶
Copyright 2012 [The Obvious Corporation](http://obvious.com/).
Licensed under the Apache License, Version 2.0. See the top-level file LICENSE.txt and (http://www.apache.org/licenses/LICENSE-2.0).


| Path: | SPEC |
| Last Update: | Tue Oct 18 17:41:02 -0400 2011 |
This specification aims to formalize the Rack protocol. You can (and should) use Rack::Lint to enforce it. When you develop middleware, be sure to add a Lint before and after to catch all mistakes.
A Rack application is an Ruby object (not a class) that responds to call. It takes exactly one argument, the environment and returns an Array of exactly three values: The status, the headers, and the body.
The environment must be an true instance of Hash (no subclassing allowed) that includes CGI-like headers. The application is free to modify the environment. The environment is required to include these variables (adopted from PEP333), except when they‘d be empty, but see below.
| REQUEST_METHOD: | The HTTP request method, such as "GET" or "POST". This cannot ever be an empty string, and so is always required. |
| SCRIPT_NAME: | The initial portion of the request URL‘s "path" that corresponds to the application object, so that the application knows its virtual "location". This may be an empty string, if the application corresponds to the "root" of the server. |
| PATH_INFO: | The remainder of the request URL‘s "path", designating the virtual "location" of the request‘s target within the application. This may be an empty string, if the request URL targets the application root and does not have a trailing slash. This value may be percent-encoded when I originating from a URL. |
| QUERY_STRING: | The portion of the request URL that follows the ?, if any. May be empty, but is always required! |
| SERVER_NAME, SERVER_PORT: | When combined with SCRIPT_NAME and PATH_INFO, these variables can be used to complete the URL. Note, however, that HTTP_HOST, if present, should be used in preference to SERVER_NAME for reconstructing the request URL. SERVER_NAME and SERVER_PORT can never be empty strings, and so are always required. |
| HTTP_ Variables: | Variables corresponding to the client-supplied HTTP request headers (i.e., variables whose names begin with HTTP_). The presence or absence of these variables should correspond with the presence or absence of the appropriate HTTP header in the request. |
In addition to this, the Rack environment must include these Rack-specific variables:
| rack.version: | The Array [1,0], representing this version of Rack. |
| rack.url_scheme: | http or https, depending on the request URL. |
| rack.input: | See below, the input stream. |
| rack.errors: | See below, the error stream. |
| rack.multithread: | true if the application object may be simultaneously invoked by another thread in the same process, false otherwise. |
| rack.multiprocess: | true if an equivalent application object may be simultaneously invoked by another process, false otherwise. |
| rack.run_once: | true if the server expects (but does not guarantee!) that the application will only be invoked this one time during the life of its containing process. Normally, this will only be true for a server based on CGI (or something similar). |
Additional environment specifications have approved to standardized middleware APIs. None of these are required to be implemented by the server.
| rack.session: | A hash like interface for storing request session data. The store must implement: store(key, value) (aliased as []=); fetch(key, default = nil) (aliased as []); delete(key); clear; |
The server or the application can store their own data in the environment, too. The keys must contain at least one dot, and should be prefixed uniquely. The prefix rack. is reserved for use with the Rack core distribution and other accepted specifications and must not be used otherwise. The environment must not contain the keys HTTP_CONTENT_TYPE or HTTP_CONTENT_LENGTH (use the versions without HTTP_). The CGI keys (named without a period) must have String values. There are the following restrictions:
The input stream is an IO-like object which contains the raw HTTP POST data. When applicable, its external encoding must be "ASCII-8BIT" and it must be opened in binary mode, for Ruby 1.9 compatibility. The input stream must respond to gets, each, read and rewind.
The error stream must respond to puts, write and flush.
This is an HTTP status. When parsed as integer (to_i), it must be greater than or equal to 100.
The header must respond to each, and yield values of key and value. The header keys must be Strings. The header must not contain a Status key, contain keys with : or newlines in their name, contain keys names that end in - or _, but only contain keys that consist of letters, digits, _ or - and start with a letter. The values of the header must be Strings, consisting of lines (for multiple header values, e.g. multiple Set-Cookie values) seperated by "\n". The lines must not contain characters below 037.
There must be a Content-Type, except when the Status is 1xx, 204 or 304, in which case there must be none given.
There must not be a Content-Length header when the Status is 1xx, 204 or 304.
The Body must respond to each and must only yield String values. The Body itself should not be an instance of String, as this will break in Ruby 1.9. If the Body responds to close, it will be called after iteration. If the Body responds to to_path, it must return a String identifying the location of a file whose contents are identical to that produced by calling each; this may be used by the server as an alternative, possibly more efficient way to transport the response. The Body commonly is an Array of Strings, the application instance itself, or a File-like object.
Some parts of this specification are adopted from PEP333: Python Web Server Gateway Interface v1.0 (www.python.org/dev/peps/pep-0333/). I‘d like to thank everyone involved in that effort.


Preparation #2
MG Burpee Heavenly Blue
Grown in Holland; Packed for 2003 Lot 1
Packet / Mass (g) / Seeds (#)
1 - 1.5 - 48
2 - 1.5 - 57
3 - 1.5 - 47
4 - 1.5 - 55
5 - 1.5 - 48
6 - 1.5 - 56
7 - 1.5 - 48
8 - 1.5 - 44
Total = 8 - 12.00 - 403
Mean/Packet = 1.50 - 50.4
Median = 1.50 - 48.0
Mean/Seed (mg) = 29.78
Total LSA (mg) = 4.03 to 4.20
Source for Total LSA estimate: www.clearwhitelight.org/hatter/lsainfo.htm
Mass was not measured but taken from seed packets.
Seeds were pulverised in an electric coffee mill to the consistency of gritty corn meal, then transferred to a Mason jar with graduations in English units (fl oz). Some material (<< 1g) was lost in this process.>
Approximately 2 fl oz (~59 ml) of naphtha (Ronsonol lighter fluid, all I had left) was added, and the jar sealed. The jar was agitated, producing a milky liquid layer atop a layer of seed grit. The jar was then set aside in a cool, dark location and agitated at irregular intervals for 25 hours.
Separated solids from solvent using a coffee filter. This process was unexpectedly slow, taking nearly an hour. Stirring the seed mush with a pin seemed to help accelerate the drainage of the solvent. Again, some material (<<1g) was lost in the process of emptying the Mason jar.>
Placed the coffee filter containing the damp seed mush on several thicknesses of paper towels to dry. The seed mush was spread out to speed evaporation and a couple of paper towels placed on top to absorb the last of the solvent. The filtered solvent was discarded. The Mason jar and its lid were thoroughly rinsed in warm running water until no trace of naphtha odor remained, then left on paper towels to dry.
After 30 hours, the seed grit was fully dry, with no remaining scent of naphtha. This was then returned to the clean Mason jar and overproof Scotch whisky (59.5% ABV) added to make a total of 4 fl oz (~118 ml). The jar was then sealed, shaken vigourously, and left in a cool, dark spot. The jar was agitated at irregular intervals, and the seed mush steeped for a total of 2 days, 7 hours.
Again separated solids from solvent using a fresh coffee filter, this time retaining the solvent and discarding the now-spent seed mush at the end. Filtration took ~30 minutes and was expedited by squeezing the damp seed matter near the end to extract more liquid. The liqueur thus produced was sealed into the clean Mason jar (jar and lid cleaned as previously) and stored in a cool, dark location until use.
The liqueur is estimated to contain slightly less than 4mg LSA and less than 2mg of other, related psychoactive agents at this point, allowing for losses in the entire process. The total volume of liqueur is ~3 fl oz (~89 ml), and the entire process took 112 hours (4 days, 16 hours). My intention is to divide this into 2 equal doses.
Dose #1
T+0
Measured out 1.5 fl oz (~44 ml) LSA-Scotch liqueur, diluted with half as much (.75 fl oz, 22 ml) spring water, and drank it down over a period of 2 or 3 minutes. The aroma of the liqueur had an earthy tone not normally associated with the Scotch whisky that was used as solvent. The flavour was unpleasant, but bearable. The aftertaste was more unpleasant and made me want to gag, but a swig of water fixed that.
I had been smoking cannabis for several hours previous to ingesting the liqueur, and hoped that the combination of this and the ethanol would alleviate or prevent any possible nausea. I took a few more tokes now for good measure.
T+1:30
Started coming on hard at around T+1h. Steadily building since then. Barely able to type, getting hard to think coherently.
T+3:30
Looks like I peaked early again, and not nearly as high as I expected to. I'm drinking the rest of the liqueur now.
T+5
Another slight come-up and some mild but fun OEVs (mostly colourful sparkles), but nothing Earth-shattering going on here, as evidenced by the fact that I can still type and form somewhat coherent, if run-on, sentences. I'm beginning to conclude that MG extractions are a waste of time and one should just pulverise and eat the seeds. Sometimes the 'old-fashioned' ways really are best, after all.
T+6:45
Dang, coming down before it ever got really interesting. Feeling almost baseline now. No spiritual insights this time. At peak, some mild euphoria and OEVs (already described), but never even came close to 'breaking through' into tripspace. I conclude that MG is best ingested directly rather than attempting to extract the LSA as it seems much more effective. By the way, no nausea at any time.
Conclusion:
LSA Extraction is not worth the time and trouble. This experience was educational, and moderately recreational, but useless spiritually. In comparison with direct ingestion of MG seeds, direct ingestion produced more profound effects with much less source material (4.5g direct vs. 12g extracted Heavenly Blue seeds). My next effort will focus on a larger direct oral dose.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


qmmp- Start or stop the currently playing audio:
qmmp --play-pause- Seek forwards or backward a specific amount of time in seconds:
qmmp --seek-fwd|bwd time_in_seconds- Play the next audio file:
qmmp --next- Play the previous audio file:
qmmp --previous- Print the current volume:
qmmp --volume-status- Increase or decrease the volume of the currently playing audio by 5 steps:
qmmp --volume-inc|dec


@* * Copyright 2019 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import core.config.AppConfig @import core.views.html.helpers._ @import core.views.html.templates.main_template @import testonly.forms.UnauthorisedAgentSubmissionForm._ @import testonly.models.UnauthorisedAgentSubmissionModel @import uk.gov.hmrc.play.views.html.helpers.form @(unauthorisedAgentSubmissionForm: Form[UnauthorisedAgentSubmissionModel], postAction: Call)(implicit request: Request[_], messages: Messages, appConfig: AppConfig) @question = @{ "Select the client's income source" } @main_template(title = Messages("Unauthorised agent submission service"), form = unauthorisedAgentSubmissionForm) { @summaryErrorHelper(unauthorisedAgentSubmissionForm)


Our chosen mentors are some of the top performers in their field. They each have a minimum of 3 years of professional experience, and have all individually benefitted from a mentor of their own in their respective fields.
Whether you prefer to meet your expertly chosen mentor or tutor face to face, or prefer the ease and comfort of a virtual meeting, our dedicated professionals remain flexible to all options, affording accessibility for those with scheduling or transportation conflicts.
Our mentorship and tutor matching service are free of requirements. In order to uphold our mission of expanding mentorship in an exponential way, we maintain acceptance regardless of education level, experience, or income.


New here ?
Register
Please provide correct email
Please enter password
Please provide correct phone number
Please provide correct phone code
Select User Type
tenant (customer )
landlord
broker
Please select role
Register
or register using
facebook
google
Already Registered?
Login
Login
or login using
facebook
google
X
New here ?
Register
Please provide correct email
Please provide correct phone number
Please provide correct phone code
Select User Type
tenant (customer)
landlord
broker
Register
Already have a account login here
login
or register using
facebook
google
Already Registered?
Login
Login
Don't have a account register here
signup
or login using
facebook
google
X


Before Change
// Determine total number of features
total_num_features = X.shape[1]
print("num featuers")
print(total_num_features)
// Initialize weights
distance_weights = np.ones(total_num_features)
After Change
if diff >= 0.0001:
no_diff = False
break;
if no_diff:
break;
mx = max(feature_weights)
weight_history.append(feature_weights)
//normalize and update scores
//negative numbers -> 0, positive numbers become normalized so maximum is 1.
for i in range(0, len(feature_weights)):
if feature_weights[i] <= 0:
feature_weights[i] = 0
else:
feature_weights[i] = feature_weights[i] / mx
distance_weights += feature_weights
iteration += 1


Curse, it's free!!
Caster name
Curse
Conjunctivitis
Cornflake Skin
Locomotor Mortis
Mimblewimble
Fiendfyre
Furnunculus
Crucio
Horcrux
Imperio
Avada Kedavra
Wizard Teacher
Wizard Student
Just a Wizard
Death Eater


Box Model
All HTML elements can be considered as boxes. In CSS, the term box model is used when talking about design and layout.
The CSS box model is essentially a box that wraps around every HTML element. It consists of: margins, borders, padding, and the actual content
Parts of a Box
The box model allows us to add a border around elements, and to define space between elements.
- content: the content of the box, where text and images appear
- padding: clears an area around the content. The padding is transparent
- border: a border that goes around the padding and content
- margin: clears an area outside the border. The margin is transparent
Calculations
The total width of an element should be calculated like this:
Total element width = width + left padding + right padding + left border + right border +
left
margin + right margin
The total height of an element should be calculated like this:
Total element height = height + top padding + bottom padding + top border + bottom border +
top
margin + bottom margin
Box-sizing
Box-sizing is a property that allows us to modify a bit the behaviour of the box, and has two main values:
- content-box: default, the width and height properties (and min/max properties) includes only the content. Border and padding are not included
- border-box: the width and height properties (and min/max properties) includes content, padding and border