How to build the perfect Deep Learning Computer and save thousands of dollars
Jeff Chen
Jeff Chen
Jan 14, 2019 · 10 min read
Updated 12/11/2019
Building your own Deep Learning Computer only takes a few hours. Assembly video is below.
You already know that building your own Deep Learning Computer is 10x cheaper than using AWS. But picking the right parts is not trivial, so let's take a detailed look at things you should consider, the pros and cons of my build, assembly instructions, and how you're saving as compared to buying.
This is part 2 of 3 in the Deep Learning Computer Series. Part 1 is 'Why building is 10x cheaper than renting from AWS' and Part 3 is 'Performance and benchmarks'. See new photos and updates: Follow me on Medium and Twitter! Leave thoughts and questions in comments below.
Picking the 4 most important parts: CPU, GPU, Storage and Memory.
here are only 8 components to a build: GPU, CPU, Storage, Memory, CPU Cooler, Motherboard, Power, Case. The first 4 are the most important. When training, data flows from storage to memory to the GPU, while the CPU helps along the way (manipulates batches, etc). So, you want to make sure:
 - Your CPU can support all your GPUs
 - Your GPU is fast enough and can fit the model and data batch in memory
 - Memory is DDR4 and big enough to float most datasets uncompressed
 - Storage is M.2 PCIe and big enough
Make your computer expandable to 4 GPUs with the right CPU
It's hard to know how many GPUs you'll need because some models take 10s of hours to train (Vision CNNs, Natural Language Processing LSTMs, Capsule Auto Encoders, etc). So, one of the best ideas is to start with 1 or 2 GPUs and add more GPUs as you go along.
Each GPU requires at least 8x PCIe lanes (it's 16x officially, but there's data for which 8x is good enough if you're not running cross-GPU experiments). You will need 4x PCIe lanes for the M.2 SSD (which plugs right in and is 5x faster than SATA3), and another 4x PCIe lanes for Gigabit ethernet. That's a total of 40 PCIe lanes and will restrict your CPU choices quite a bit. Your CPU will dictate the motherboard you need. (For example: AMD Threadripper CPU = X399 chipset motherboard, Intel 7900X CPU = X299 chipset motherboard, etc).
You'll want a CPU with 8+ cores / 16+ threads and 40+ PCIe lanes since this allows 4 experiments per GPU (16 experiments if you have 4 GPUs). Typically models take up at least a couple gigabytes of GPU memory so it's rare you can run more than 4 experiments per GPU. Finally, make sure the PCIe lanes are actually getting routed to the expansion slots.
AMD CPUs offer better value than Intel
As of December 2019, AMD offers more performance for less money. AMD's 1920X with 12 Cores/24 Threads/60 PCIe lanes is only $199! Intel's 7900X with 10 Cores/20 Threads/44 PCIe lanes is $1000. Benchmarks show comparable performance, so AMD seems like a no-brainer. AMD's second generation 2920x is only $400. (Disclosure: I'm long AMD stock.)
Your GPU needs to have enough memory and be fast enough
GPU memory works differently than computer RAM, so if you don't have enough memory to fit your model you won't be able to train (as opposed to train slowly). Once in a while I have a model that requires 10GB+ to run, so if in doubt, choose one with more memory.
Nvidia GPUs are easier to use than other platforms because they have the most community support for tools (Tensorflow, PyTorch, etc). Buy cards that have 'blower style' fans instead of the large double fans because if you have multiple GPUs you need to vent air outside of the box. (eg 1080 Ti Founder Edition, or 2080 Ti Asus Turbo)
Your choices are basically:
 - Super High-end: Titan RTX (24GB / 4608 Cores / 576 Tensor Cores / $2,500) You can only fit one of these on the bottom slot because Titans don't use blower fans.
 - High-end: 2080 Ti (11GB / 4352 Cores / 544 Tensor Cores /$1149), 1080 Ti (11GB / 3584 Cores / $500 used), 2080 Super (8GB / 3072 Cores / 384 Tensor Cores / $730)
 - Mid-tier: 2070 Super (8GB / 2560 Cores / 320 Tensor Cores / $530)
 - Low-end (Best Value): 2060 Super (8GB / 2176 Cores / 272 Tensor Cores / $410)
 - GPU inventory is very limited, so you may have to hunt around for inventory
The Titan RTX is a monster card and ~55% faster than 1080 Ti on 32 bit training and 135% faster in half precision mode because of the additional Tensor Cores and extra memory which allows for much larger batch sizes. 2080 Ti is ~40% faster than 1080 Ti on 32 bit training and ~65% faster when used in half precision mode. From there, speed performance is linear to the number of CUDA cores so expect 1080 Ti to be ~40% faster than 1080 and 1080 to be 33% faster than 1070.
Storage and Memory need to be as fast as possible
Because you'll be moving lots of data around from storage to memory then to the GPUs, you want that pipeline to be as fast as possible. Use M.2 SSD NVMe, which plugs right into the motherboard and DDR4 memory.
Important tradeoffs of my build and common pitfalls
Initial single-GPU build costs $3k and can expand to 4 GPUs later
Here is my parts list with updated pricing and inventory.
GPU: I picked the 1080 Ti intially because a 40% speed gain versus 1080 is significant when you're talking about 10-hour train times, and the extra 3GB of memory is important when working with large models or increasing training speed with larger batch sizes. 1080 Tis are hard to find now, so check eBay. I later added a 2080 Ti and a Titan RTX in the bottom slot. As of 2020, the 2060 Super is the best value for a starter card.
CPU: AMD's 1920X has 12 cores and 38MB cache and is $150 more expensive vs. 1900X's 8 cores and 20 MB cache. Earmarking 2 cores / 4 threads per GPU and the fact I might want the machine to double as a staging server later, 1920X gives me a little more breathing room.
Storage: I used a single 1TB M.2 SSD, I don't like having stuff on different drives and 500GB seems small considering datasets are often tens of gigabytes. I might add a super large spinning hard drive for 'cold' storage later.
Memory: Quad channel memory is used because 1920X runs faster with quad than dual channel memory. 4 x 16GB is chosen because maximum supported memory is 128GB so it's an easy upgrade path without needing to remove chips later. 3000Mhz is the fastest memory compatible with the motherboard (it's overclocked from base 2667Mhz).
Power Supply: 1600W P2 is enough to cover 4x250W GPUs + 180W CPU + 150W for everything else and a little bit of headroom for overclocking. You don't want to max out your power supply because fans kick in like crazy when it's running at high utilization.
Case: Lian-Li PC-O11AIR because I need a case with 8 expansion slots (most mid-tower cases have 7, which means you cannot fit 4 double-wide GPUs). Between this case and the Corsair Air, this case looks nicer and comes with dust filters.
Avoid these 7 Common Pitfalls
Run through this list to make sure your build checks out.
 1. GPUs overheat my computer: Make sure you get the blower-style GPUs (The 2080 Ti version is called Turbo by Asus) because they vent out the back of the case. The 'Overclock' 'OC' type cards will have 2 large fans that blow into the computer, which will overheat. You also need a fan that delivers cold air directly onto the GPUs' intake. You can fit one Titan RTX in the bottom slot if your case has a vent on the bottom like the O11AIR.
 2. Not enough PCIe lanes: You need at least 8x PCIe lanes / GPU (16x is better). If you have 4 GPUs, with a M.2 drive and Gigabyte ethernet, it's 40 PCIe lanes at a minimum.
 3. My model doesn't fit in my GPU memory: large Convolutional Networks and LSTMs use a lot of GPU memory, 8GB vs. 11GB is a big difference.
 4. Motherboard doesn't fit


text:
Summary: Speech Science Primer provides a clear, reader-friendly writing style, serves as an introduction to speech science, and covers basic information on acoustics, the acoustic analysis of speech, speech anatomy and physiology, and speech perception. It also includes topics such as research methodology, speech motor control, and history/evolution of speech science. With its reader-friendly content and valuable online resources, Speech Science Primer: Physiology, Acoustics and Perception o...show moref Speech, Sixth Edition is an ideal text for beginning speech pathology and audiology students and faculty alike....show lessEdition/Copyright: 6TH 12
More prices and sellers below.

source: HuggingFaceFW/fineweb-edu


text:
Simple models, automatically updated
ProductionCompass is a data funnel that transforms relevant production data into operational advice. Data entering the funnel comprises historical and real-time production data, well tests, and other production metadata such as operator logs. This data is then subjected to big data techniques such as squashing, while still retaining important statistical characteristics. The resulting information is used to build models using regression analysis and machine learning. These models are automatically updated in real time as new data enters the funnel, ensuring frequent calibration to the current operational situation. This approach reduces the need for advanced fluid modeling and human model calibration efforts in a daily production optimization setting.
You can shift focus from data conditioning and model calibration to applying your expertise in analyzing production-increasing opportunities and better balancing your bottlenecks. You can focus on taking actions that maximize production.
Empowering production engineers with real-time machine learning
Shedding light on the elephant in the room; uncertainty
A great advantage of our data-driven technology is that the uncertainties of measurements and models are tracked and quantified. How the field and wells respond to operational change is inherently uncertain, and ignoring this uncertainty will at best be misleading. Our advice are accompanied by e.g. confidence intervals, helping you discriminate between alternative actions and choose the best course. Quantified uncertainty can also be used to design experiments that examine unexplored operational settings with the aim of lowering uncertainty and increasing knowledge. This extends the realm of opportunities that can be discovered, and increases model accuracy. Shedding light on uncertainty enables a novel range of functionality which to a very limited degree exists in technologies and services in the oil and gas industry today.
Uncertainty estimates all the way through

source: openbmb/Ultra-FineWeb


text:
It is a new year and I hope one of your resolutions is to travel more. Many people are international tourists forgetting that Kenya has a lot to offer in terms of leisure and entertainment for the whole family. I have compiled some of the best places to visit in Kenya.
This year make a resolution to visit more destinations in Kenya. Here are some of the places you should consider visiting this year.
This is located in South Diani. It is a beautiful marine reserve that will tease your senses with its beauty. The reserve was built to protect its coral reefs and gardens, and fish species. There are many activities to keep one occupied including traditional dhow fishing trips, sailing, snorkeling, sailing and non motorized water sports. There is excellent accommodation at The Sands at Chale and the Sands at Nomads.
There is a reason why the Maasai Mara has been named one of the new Seven Wonders of the World. This is because of the annual migration of over a million wildebeest from the Serengeti plains to the Mara. The Mara reserve has open plains, woodlands and riverine forest. It is home to many species of wildlife including the Zebra, Elephants, Gazelle, and Buffalo. The rivers have hippos and crocodiles.
The annual migration usually takes place in late June to August. Last year some tourists were lucky as the Wildebeest migration happened twice in one year. The wildebeest came back to Kenya at the end of November when there was a drought in the Serengeti.
Some great places to stay include Sand River Masai Mara, Ole Moran Tented Camp, Ngerenge, Sarova Hotels and Camps in Mara, and the latest addition to the Mara family Olare Mara Kempinski and Richard Branson's Mahali Mazuri. You can also find budget friendly camps in the Mara.
Naivasha/Lake Elementaita/Crescent Island
Naivasha is a favourite spot for many. Lake Naivasha is a freshwater lake, located in the Rift Valley. Naivasha has many tourist attractions including Lake Navaisha, Hell's Gate and Longonot.
Lake Naivasha as a destination has many activities to offer. It is a great place to take boat trips. Other activities that can be done include rock climbing, biking, hiking. The shore of the lake also has great places to camp if that is your thing.
Naivasha is known as a world class birding destination because it has very many species of birds both in the lake and the forest that surrounds park of the lake.
An attraction that people don't know about is the Crescent Island Park. It is a heaven for birdwatchers as it has abundant bird-life. Apparently there are more animals per acre then in any other Kenyan park which makes it a great place to go on holiday. There are Wildebeest, Hippos, Giraffe, Zebras, Gazelles and Waterbucks. Crescent Island park is a privately owned park and it is accessible by road and by boat.
Lake Elementaita is an eye catching lake with its pink coloured islands and shorelines. There are Gazelles and Zebras to be seen grazing on the open plains. The soda lake is now a wildlife sanctuary. There is a museum, Kariandusi Museum, an important prehistoric site. Elementeita Badlands, a lava flow is also another attraction.
Watamu is a well kept secret south of Malindi. It has very clean white beaches and has offshore coral formations arranged in three bays. These are Watamu Bay, Blue Lagoon and Turtle Bay. These three are part of the Watamu Marine National Park.
Watamu is a great place to go on holiday especially for groups and honeymooners. For those who like snorkeling and diving the Marine National Park is a paradise. The marine park is among the best snorkeling and diving areas in East Africa.
There are also other beautiful places to visit including Marafa Depression – Hell's Kitchen, the Arabuko Sokoke Forest, and the lost town of Gedi.
Some great hotels to stay at include Turtle Bay Beach Resort (recommended for large groups) and Hemingways Beach Resort.
Rusinga Island is a beautiful, hidden gem in the middle of Lake Victoria. The only way to get there is by ferry. This is a perfect place to relax. There are two islands close by, the Mbasa and Mholo islands which you can explore. They have thousands of birds which are an awesome sight to see. Rusinga Island now has the Rusinga cultural festival that you should check out.
Some of the things you can do include night fishing, taking boat rides, biking and hiking. There is a wellness spa at Rusinga Lodge for those who want to relax and get pampered. You can also visit the palaeontology site discovered by Palaeontologists Louis and Mary Leakey. There is swimming at the Rusinga Lodge, and excursions to Ruma National Park can also be arranged.
Rusinga Island Lodge is the place to stay on this beautiful island.

source: m-a-p/FineFineWeb


text:
The Google Publisher Tag (GPT) library supports the following browsers and environments:
All of the browsers that GPT supports release regularly and update automatically. Due to this, we don't maintain a comprehensive list of supported browser versions. Instead, we validate GPT against the latest version of each browser, and commit to providing support for all versions that are officially supported by the respective browser vendors.
The GPT library makes a best-effort attempt to serve ads to any browser that loads it. This means that GPT works on most browsers built to modern Web standards. However, browsers not expressly listed in the preceding section are considered unsupported.
GPT hasn't been validated against unsupported browsers, and they may lack features GPT needs to operate. In general, GPT doesn't try to detect unsupported browsers or alter its behavior to support them. If you use GPT with unsupported browsers, you may encounter unexpected behavior like the following:
- Console errors originating from the GPT library.
- Functions registered with the GPT CommandArray not executing.
- Ads not appearing or rendering incorrectly.
- Impressions and clicks not being counted.


text: With retro-reflective photoelectric sensors, or reflector photoelectric sensors, the transmitter and receiver are in a single housing, just as with diffuse proximity photoelectric sensors. However, the sensor always looks at a reflector which is placed opposite the sensor. The output of the sensor becomes active as soon as an object moves inbetween the sensor and the reflector. Unlike with normal reflective sensors, polarized retro-reflective photoelectric sensors use special polarized filters so that the receiver accepts only light reflected by the reflector and not by another reflective object, such as, for example, a metallic paint of a car. Thus, it is possible to detect translucent and reflective objects as well.


text:
In a first, the Finance Commission, which recommends how much money states should get out of the taxes collected by the central government, will define what a populist measure is and recommend incentives for states that do not resort to them.
The NK Singh-led 15th Finance Commission has many firsts to do in the nearly six-decade-old history of the constitutionally mandated body.
Commission will decide what a populist policy is: Singh
"The Commission has been asked to look at monitorable performance criteria on things like progress made on ease of doing business, demography management, and whether or not a state is deliberately pursuing a populist policy," Commission Chairman NK Singh said.
Commission to propose incentives for states, too
The Commission was asked to propose measurable performance-based incentives for states that made efforts to expand and deepen the tax net, slowed population growth, promoted the ease-of-doing-business, and saved money by adopting Direct Benefit Transfer where government dole is paid via users' bank accounts.
It was also asked to recommend incentives for states that could control or eliminate incurring expenditure on populist measures.
14th Commission gave 10% weightage for 2011 population data
For the purpose of devolution of funds, the 14th Finance Commission has been asked to take census of 2011 as the basis for population data instead of 1971 census which was the basis of recommendations till the 13th Finance Commission, drawing some criticism from southern states where the population was comparatively slower.
The previous commission gave a 10% weightage for Census 2011 data.
14th Commission recommended 42% tax revenue share to states
The previous 14th Finance Commission had recommended that states should get a record 42% of the tax revenues collected by the Centre. Recommendations of all the previous Finance Commissions have been accepted by the central government.
But, 15th Commission provides incentives to states with controlled population-growth
Chairman NK Singh reasoned that the Terms of Reference of the 15th Finance Commission provide for incentives to states that have seen controlled population growth and so it balances out the concerns.
The Commission was also asked to submit its report by the end of October 2019. Its recommendations would be valid for a five-year period beginning 1 April 2020.
Commission to hold consultations with all states, stakeholders
NK Singh said that the panel would hold wide-ranging consultations with all stakeholders and would tour all the states beginning with Arunachal Pradesh in April, followed by a trip to Jammu and Kashmir and Kerala.
It intends to complete the consultations with the states within 2018.
Multilateral agencies like OECD, IMF, World Bank, and EU would also make presentations.
First Commission after abolition of Planning Commission and GST rollout
The NK Singh-headed 15th Finance Commission is the first after the abolition of the Planning Commission as well as doing away of the distinction of plan and non-plan expenditure.
Also, it will be the first one after the rollout of the Goods and Services Tax (GST), which has subsumed 17 indirect taxes of Centre and state including excise duty, service tax, and VAT.
Panel has no say in fixing ToRs
The Commission has no say in fixing the Terms of Reference and it's expected to adhere to the guidelines given by the government. "We have no say in fixing of Terms of Reference but we are expected to adhere to the ToRs," an official said.


text:
This post focuses on the fourth lecture of the course, entitled Author and Illustrator Devices, which became available on March 7, 2012.
Beagley's remarks in this lecture echoed some of the things he's already said, but then applied them all to an Australian picture book called Norton's Hut. The book seems to be out of print and unavailable these days, and it's not familiar to me at all, but Beagley's analysis of it seems like a pretty good blueprint for analyzing and reviewing books with illustrations.
Here's a list of the details Beagley discussed as he went through Norton's Hut:
- The visual effects of text (conversation bubbles, capital letters, etc.)
- Symbolism of setting
- Framing of the illustrations/story
- Figurative language (alliteration/metaphor/personifcation/simile)
- Characters' expressions
- Lighting and contrast
- Use of cinematic technique in illustrations
Want to listen along? Click here. Read about David Beagley here.


How Easy Is It To Lose Faith in College? Video – The Jacket
How do students treat their faith after they leave your student ministry and head to college?
This 2.5 minute video illustrates the point very well. Will the faith of your teens be set aside like an old jacket?
Here are some discussion questions I would recommend you use with your seniors. If we never get real with them, what can we expect? It is my prayer that these will break the ice and open the way for real dialogue about the near future and how they will handle their newfound freedom, busy schedules, temptations, and choices.
 - What is your first response after watching this? What feelings or thoughts did it stir up?
 - If the jacket represents this student's faith in Christ, how would you describe that faith? What tends to happen to faith that can be taken on or off like a jacket? Why do you think that is?
 - What happened to the students' friends as the video went on? How could isolation from supportive community be part of the problem for students who are tempted to toss faith aside?
 - One way people have described this kind of understanding of faith is that it's mostly about behaviors—things we do or don't do to act like a Christian. What would you say in response to that? How is that different from saying God's grace through Jesus Christ is at the core of faith? (Check out Ephesians 2:1-10 for Paul's response to this).
 - What do you think a college student—or high school student—can do to keep their faith from becoming like a jacket? What would you say to people like the guy in the video who feel like they've blown it in some way and tossed their faith aside?
5 thoughts on "How Easy Is It To Lose Faith in College? Video – The Jacket
 1. It is all about identity development. At some point in every person's life we have to come to the conclusion that "Christ-follower" is who we are and not just something we do. Because of the design of our culture and the college experience this identity development often takes place in our 20's. The concerning thing to me is that during those years we are less likely to have meaningful interaction with numerous mature adults who have well developed identities. This is especially true for Christians. There is a vacuum of interactions between students developing their identity as Christians and mature Christians who can help them along in this process. Mature Christians need to be intentionally present within the lives of students. Mature Christians need to be available and vulnerable to students as they wrestle with the tough questions about who they are going to be.
 2. I never had any faith to start with going into college, therefore had nothing to lose. The one error you make is the tacit assumption that Christian raised youth started out having faith and somehow lose it when they leave for college. For many (like myself) we never really had it to start with—we just went along for the ride without making waves because we were dependents living at home. Because we also know the risks of being treated like shit if if we "come out" as atheists in a Christian family and community. In may U.S. bible belts it's worse than coming out as gay.
 I personally would never tolerate some self appointed Christian guardian intruding on my life by being "intentionally present" while I'm in college. I'd toss you out on your ear.
 Also, there is nothing wrong with unattached people choosing to have sex. It's a normal biological human function—just be responsible and take proper precautions.
 - Joe:
 While I agree that many people (college age or otherwise) "leave" the faith because they were never really believers in the first place, I disagree that my "tacit assumption" about kids raised in the church is wrong. The stats are all over about church going teens dropping their faith in college and a percentage returning to the church later in life.
 Why do you seem so angry about setting up safe guards against that happening? And also this post is not so much about having a "christian guardian intruding" as it is about training teens to be on guard for themselves as they go off to a new environment where there they have to be accountable for themselves.
 You mentioned that you left the church because you never really accepted it in the first place. Would you say that there is no God? Do you think there is no absolute truth to which we are accountable too?
 (i'm not even going to address your comment about casual sex as that is so off topic for this post it will only distract us from a -hopefullyproductive conversation.)
 - If you're asking if I'm an atheist—the answer is yes. However that is not the same as proclaiming "god doesn't exist"—only that without compelling evidence there's no reason to believe one does. I'm not going to get into any futile discussions except to say that while I do believe in objective "truths" they are not decreed by divine authority or accepted as a matter of faith. I prefer the terms– "reality" and "facts" which for me comes by way of observable, testable, demonstrable evidence—always under the rue-brick of skepticism and critical thinking.
 Now everyone has the right to believe as they see fit, Christians and atheists alike. All I was trying to say was that I personally would not take kindly to anyone telling me what to think and believe though peer pressure or the "safeguards" you spoke of. But that is me. If, however a young person welcomes or permits what I perceive as unwanted intrusions during a time of introspection and personal reflection then so be it.
 My own experiences however did not reflect this. My departure from "the faith" showed me that it was their faith, not mine. To the Christian community I was seen as straying, lost, degenerate and was met with a litany of discordant emotions and confrontational tactics. This only solidified my atheist position which I finally came to realize I always held.
 I stuck to my guns and though social relationships were jeopardized I have never felt more liberated and free. For me the offer of certainty, the offer of complete security, the offer of an impermeable faith that can't give way is an offer of something not worth having. I want to live my life taking the risk all the time like I don't know anything like enough yet.
Leave a Reply to Brian Musser Cancel reply
You are commenting using your account. Log Out / Change )
Google photo
Twitter picture
Facebook photo
Connecting to %s


text:
A CMOS time-multiplexed digital filter for vocoder applications
- E. A. Vopni, M. I. Elmasry, J. V. Hanson
- Canadian Electrical Engineering Journal
- Institute of Electrical and Electronics Engineers in 2013
- Cited Count
In vocoder systems speech is spectrally analysed with filter banks containing 16 to 19 narrowband filters. Digital techniques can be used to realize these filter banks in an economical manner by using single time multiplexed second order filters. A hardware implementation of a fourth and an eighth order filter, realized with one time-shared second order section is described. A software package is developed to simulate the filter performance, and validate the experimentally measured response. The CMOS design of a programmable filter is presented. A second order section is time multiplexed to realize up to 32 poles of filtering. The configuration is mask programmable and the filter coefficients are programmable with a UV-PROM. The bank of contiguous bandpass filters for vocoder use can be implemented with three multi-function filter chips.
No relevant information is available
If you register references through the customer center, the reference information will be registered as soon as possible.


currently in use. The default relay log index file name is host_name-relay-bin.index for the default channel, and host_name-relay-bin-channel.index for non-default replication channels.
The default relay log file and relay log index file names and locations can be overridden with, respectively, the relay_log and relay_log_index system variables (see Section 17.1.6, "Replication and Binary Logging Options and Variables").
If a replica uses the default host-based relay log file names, changing a replica's host name after replication has been set up can cause replication to fail with the errors Failed to open the relay log and Could not find target log during relay log initialization. This is a known issue (see Bug #2122). If you anticipate that a replica's host name might change in the future (for example, if networking is set up on the replica such that its host name can be modified using DHCP), you can avoid this issue entirely by using the relay_log and relay_log_index system variables to specify relay log file names explicitly when you initially set up the replica. This causes the names to be independent of server host name changes.
If you encounter the issue after replication has already begun, one way to work around it is to stop the replica server, prepend the contents of the old relay log index file to the new one, and then restart the replica. On a Unix system, this can be done as shown here:
shell> cat new_relay_log_name.index >> old_relay_log_name.index
shell> mv old_relay_log_name.index new_relay_log_name.index
A replica server creates a new relay log file under the following conditions:
 - Each time the replication I/O thread starts.
 - When the logs are flushed (for example, with FLUSH LOGS or mysqladmin flush-logs).
 - When the size of the current relay log file becomes too large, which is determined as follows:
The replication SQL thread automatically deletes each relay log file after it has executed all events in the file and no longer needs it. There is no explicit mechanism for deleting relay logs because the replication SQL thread takes care of doing so. However, FLUSH LOGS rotates relay logs, which influences when the replication SQL thread deletes them.
17.2.4.2 Replication Metadata Repositories
A replica server creates two replication metadata repositories, the connection metadata repository and the applier metadata repository. The replication metadata repositories survive a replica server's shutdown. If binary log file position based replication is in use, when the replica restarts, it reads the two repositories to determine how far it previously proceeded in reading the binary log from the source and in processing its own relay log. If GTID-based replication is in use, the replica does not use the replication metadata repositories for that purpose, but does need them for the other metadata that they contain.
 - The replica's connection metadata repository contains information that the replication I/O thread needs to connect to the replication source server and retrieve transactions from the source's binary log. The metadata in this repository includes the connection configuration, the replication user account details, the SSL settings for the connection, and the file name and position where the replication I/O thread is currently reading from the source's binary log.
 - The replica's applier metadata repository contains information that the replication SQL thread needs to read and apply transactions from the replica's relay log. The metadata in this repository includes the file name and position up to which the replication SQL thread has executed the transactions in the relay log, and the equivalent position in the source's binary log. It also includes metadata for the process of applying transactions, such as the number of worker threads and the PRIVILEGE_CHECKS_USER account for the channel.
The connection metadata repository is written to the slave_master_info table in the mysql system schema, and the applier metadata repository is written to the slave_relay_log_info table in the mysql system schema. A warning message is issued if mysqld is unable to initialize the tables for the replication metadata repositories, but the replica is allowed to continue starting. This situation is most likely to occur when upgrading from a version of MySQL that does not support the use of tables for the repositories to one in which they are supported.
Important
 1. Do not attempt to update or insert rows in the mysql.slave_master_info or mysql.slave_relay_log_info tables manually. Doing so can cause undefined behavior, and is not supported. Execution of any statement requiring a write lock on either or both of the slave_master_info and slave_relay_log_info tables is disallowed while replication is ongoing (although statements that perform only reads are permitted at any time).
 2. Access privileges for the connection metadata repository table mysql.slave_master_info should be restricted to the database administrator, because it contains the replication user account name and password for connecting to the source. Use a restricted access mode to protect database backups that include this table. From MySQL 8.0.21, you can clear the replication user account credentials from the connection metadata repository, and instead always provide them using the START REPLICA | SLAVE statement or START GROUP_REPLICATION statement that starts the replication channel. This approach means that the replication channel always needs operator intervention to restart, but the account name and password are not recorded in the replication metadata repositories.
RESET REPLICA | SLAVE clears the data in the replication metadata repositories, with the exception of the replication connection parameters (depending on the MySQL Server release). For details, see the description for RESET REPLICA | SLAVE.
Before MySQL 8.0, to create the replication metadata repositories as tables, it was necessary to specify master_info_repository=TABLE and relay_log_info_repository=TABLE at server startup. Otherwise, the repositories were created as files in the data directory named master.info and relay-log.info, or with alternative names and locations specified by the --master-info-file option and relay_log_info_file system variable. From MySQL 8.0, creating the replication metadata repositories as tables is the default, and the use of all these system variables is deprecated.
The mysql.slave_master_info and mysql.slave_relay_log_info tables are created using the InnoDB transactional storage engine. Updates to the applier metadata repository table are committed together with the transactions, meaning that the replica's progress information recorded in that repository is always consistent with what has been applied to the database, even in the event of an unexpected server halt. For information on the combination of settings on a replica that is most resilient to unexpected halts, see Section 17.4.2, "Handling an Unexpected Halt of a Replica".
When you back up the replica's data or transfer a snapshot of its data to create a new replica, ensure that you include the mysql.slave_master_info and mysql.slave_relay_log_info tables containing the replication metadata repositories. For cloning operations, note that when the replication metadata repositories are created as tables, they are copied to the recipient during a cloning operation, but when they are created as files, they are not copied. When binary log file position based replication is in use, the replication metadata repositories are needed to resume replication after restarting the restored, copied, or cloned replica. If you do not have the relay log files, but still have the applier metadata repository, you can check it to determine how far the replication SQL thread has executed in the source's binary log. Then you can use a CHANGE MASTER TO statement with the MASTER_LOG_FILE and MASTER_LOG_POS options to tell the replica to re-read the binary logs from the source from that point (provided that the required binary logs still exist on the source).
One additional repository, the applier worker metadata repository, is created primarily for internal use, and holds status information about worker threads on a multithreaded replica. The applier worker metadata repository includes the names and positions for the relay log file and the source's binary log file for each worker thread. If the applier metadata repository is created as a table, which is the default, the applier worker metadata repository is written to the mysql.slave_worker_info table. If the applier metadata repository is written to a file, the applier worker metadata repository is written to the worker-relay-log.info file. For external use, status information for worker threads is presented in the Performance Schema replication_applier_status_by_worker table.
The replication metadata repositories originally contained information similar to that shown in the output of the SHOW REPLICA | SLAVE STATUS statement, which is discussed in Section 13.4.2, "SQL Statements for Controlling Replica Servers". Further information has since been added to the replication metadata repositories which is not displayed by the SHOW REPLICA | SLAVE STATUS statement.
For the connection metadata repository, the following table shows the correspondence between the columns in the mysql.slave_master_info table, the columns displayed


text:
Windmill Hill Culture
Middle Neolithic culture defined in 1954 by Stuart Piggott as typical of communities occupying central southern England. Based on the cultural assemblage recovered from the type‐site of Windmill Hill, the culture was founded upon mixed farming, especially cattle husbandry and the cultivation of wheat and barley. In addition to causewayed enclosures the population built long barrows that also provided repositories for the dead. The pottery was well made and frequently decorated. Trading connections with other parts of the British Isles and near continent were well attested through evidence for exchanges of stone axes and pottery. Radiocarbon testing relating to Windmill Hill Culture sites date them to the period 3600–3000 bc, although the term Windmill Hill Culture itself is now almost obsolete.


text:
Our program partner, Human and Hope Association, has launched a Home Food Garden Project after a successful trial. The goal of this program is to initially support 50 of the families impacted by COVID-19 in Sambour commune of rural Siem Reap with establishing food production.
The training course includes:
- the importance of using natural resources to grow vegetables as opposed to dangerous chemicals, which are commonly used in Cambodia
- choosing the right vegetables for their land
- how to grow vegetables and;
- how to make their own fertiliser.
Following training and mentoring, the Project Coordinators continue informally mentoring the families for two months, in order to provide support and ensure the success of these gardens in establishing sustainable, long-term food security.
*Bronh is one person who has been helped through the Home Food Garden Project trial. Bronh lost his left leg when he was young after stepping on a landmine, which are planted throughout Cambodia as a result of their civil war. His wife was crippled after being given an incorrect injection from a village doctor. Despite these significant challenges, Bronh was employed as a construction worker, and his wife as a silk weaver. Due to the economic impact of COVID-19, they both lost their jobs.
Bronh's family received an emergency food package from our program partner, Human and Hope Association, to ensure he, his wife and their five-year old daughter had enough food to last them for a few weeks. Bronh was eager to participate in HHA's Home Food Garden Project trial, so he could establish food security for his family.
With support from HHA, Bronh is now growing eggplant, long beans, morning glory, cauliflower and bok choy. He is able to supplement his emergency food package with fresh, nutritious vegetables that he grows using the chemical-free techniques he learnt from HHA's Project Coordinators. Bronh is growing extra vegetables to his neighbours so he can earn an income, and also searches for ripe palm fruit to sell.
HHA will continue to support Bronh's family with another emergency food package, and two months of mentoring for his Home Food Garden. Once schools are allowed to reopen in Cambodia, his daughter will be invited to join HHA's successful education program.
It costs $128 to help a family establish food security through the Home Food Garden Project. Please consider donating.
*Name has been changed for privacy purposes


air barriers in chases must be contained by sheathing to prevent them from heating up and falling against the chimney.
A number of things affect how strong cold backdrafting can be, and how big a problem it is, such as:
 - How cold is your climate? The colder the climate [or weather], the stronger the backdraft. Houses in Canada and northern tier US states suffer powerful backdrafts. People in southern states don't [but, of course, they have other problems]
 - How tall is your house and chimney? Taller houses and chimneys backdraft more aggressively. This is why basement stove backdrafts seem stronger than main floor stove backdrafts
 - Where are the leaks in your house? The higher the leaks, the stronger the backdraft. If you have a leaky attic hatch, lots of high level recessed light fixtures, forced air heating ductwork in the attic, or you like to sleep with the second floor bedroom window open, you'll have stronger backdrafts.
The really bad thing about outside chimneys is that the remedial measures are either ineffective or unappealing or expensive or all three, which is why we tend to be strident about not installing chimneys outside in the first place.
Consider the following comments in the context of the three points made above.
Insulating the chase might help some, but a large component of heat loss from typical chases is from leakage, so sealing it [including top and bottom] is at least as important as insulation. The only way to really fix an outside chimney is to trick it into thinking it is inside. That would mean a chase that is the same temperature inside as the house is so the chimney stays warm enough to compete with house stack effect. With a really well sealed and insulated chase, you could vent it into the house, with a couple of passive vents at top and bottom of each storey, so that a convection current would keep the inside of the chase nearly as warm as the house. That strategy is the only one sure to work, and then only if it is done well
On the other hand, if your climate is reasonably mild and your house is reasonably short and if its leaks are relatively low and you keep fires burning most of the winter and you burn the wood bright, hot and clean, you might never have a problem with cold backdrafting.
When it's windy, we have a smoky house
We installed a new woodstove with an existing chimney when we moved into our house three years ago. Last spring and this winter, we have been having problems with smoke coming into the house through the stovepipe joint where it enters the ceiling. When it first happened last spring, we thought it was possibly because of a pressure inversion. This winter, however, we seem to have a smoky house any time there is a wind. Our chimney is straight, inside in a one story addition to a one and one half story house. We clean the chimney frequently (approximately 5 or 6 times/winter). Do you have any diagnosis for the problem, where we can get help, and how we can fix it? We didn't have this problem the first winter we were here.
Thanks, Ed
Hi Ed,
Problems of this kind are so complex that I could spend a long time writing to you about possible contributing factors. I can't do that. But here are a few ideas.
1. A chimney installed in a single storey section of a two storey house has to compete as a stack with the house, especially when no fire burns or when chimney temperatures are low like when the fire smolders. This may not be the main cause, but it weakens the chimneys ability to flow air and gas up under all conditions.
2. You need to pay attention to which wind direction leads to the problem. If spillage happens when wind blows from the single storey side, you need to look for leaks on the downwind side of the house on the two storey side, especially high level leaks like open second floor bedroom windows or a leaky attic hatch. This situation can depressurize the house and suck flue gases down the chimney into the room.
3. Smoldering fires are a key cause of this type of failure. Make sure that you burn small, hot fires and don't let the fire smolder. The wood should be flaming until it is reduced to charcoal.
4. If there is no cap on the chimney, get one; open chimneys are extremely vulnerable to adverse winds. Raising the chimney might help to get the top of it up out of a zone of positive pressure caused by a wind effect.
Ideally you could contract with someone who can come to your house and diagnose this, but such people are hard to find. Check first with local chimney sweeps or long-time stove and fireplace retailers.
Stainless steel liner in a masonry fireplace chimney
What options are available for fireplace flue repair? We are working on a project where there are two existing fireplaces, roughly 75-80 years old. The owner would like the fireplaces restored. Can stainless steel liners be used on wood burning fireplaces? Jim
Hi Jim
Yes they can, but it is not an elegant solution because the connection above the throat and damper are difficult to do and rarely done well. Since we at woodheat.org think wood should not be wasted just to watch it burn, but should provide an energy benefit by delivering heat to the room, we would recommend the installation of a fireplace insert with a full stainless liner to the top of the chimney. In this case the liner is sized to the insert, not to the fireplace, and the connections can be secure and permanent. An additional benefit of an insert is that it would improve resistance to smoke spillage into the room and reduce outdoor air pollution from the fireplace. This is the only environmentally responsible solution, in our opinion.
If your client insists on retaining the conventional fireplace for historical or nostalgic reasons, a far better solution than stainless steel is a solid-set poured-in-place lining system. This insulating cementatious material greatly improves the structural integrity of the chimney and improves performance by insulating it.
You need to find a supplier of SolidFlue, Arens, Golden Flue, Supaflue and there may be a couple of others that I can't think of at the moment. Chimneys sweeps can usually tell you if there is a local supplier.
A fireplace cannot share a chimney
I bought an old house in Philadelphia. The heating system is gas, hot air. There are two chimneys. One vents the heating system and air conditioning; that one is in the living room. The other vents the hot water heater. I would like to add a fireplace in the living room. I would prefer wood. It would need to be very small, as the living room is 14 X 16.
Is there some way to utilize the chimney that vents the heating system? If not, how expensive would it be to install a new chimney for a wood burning fireplace (ball park figure is OK). The house is two stories and very small.
Am I better off with a direct vent gas fireplace? Any advice would be greatly appreciated!!! Susan
Susan wrote,
"Is there some way to utilize the chimney that vents the heating system?"
No, you can't use a chimney for both a fireplace and heating system.
There are many factory-built fireplaces on the market of all shapes and sizes. They don't need a foundation, can be put almost anywhere and routing a chimney up through the house is done all the time without problems. You need to visit a few fireplace retailers, see what they have and what they have to say.
"Am I better off with a direct vent gas fireplace?"
We are not the right people to ask about gas fireplaces. Since most everyone else will advise you to go gas, including most fireplace retailers, I will suggest that if you want a real fire, the only option is wood.


Observing that \(g_{k}(p)= g_{k,2} \left (\frac {1}{p} \right)\) and log(2)≈0.693>γ≈0.577 concludes the proof that gk(p) is a decreasing function.
The second part follows by using Stiriling's approximation \(\Gamma (x+1) \approx \sqrt { 2 \pi x} \left (\frac {x}{\mathrm {e}} \right)^{x}\) and the property that Γ(x+1)=xΓ(x) as follows:
$$\begin{array}{*{20}l} \left(\frac{\mathbb{E}\left[ |X_{p}|^{k} \right] }{\mathbb{E}\left[|X_{q}|^{k}\right] }\right)^{\frac{1}{k}}= \left(\frac{ 2^{\frac{k}{p}-\frac{k}{q}} \Gamma \left(\frac{1}{q} \right)}{ \Gamma \left(\frac{1}{p} \right)} \frac{\Gamma \left(\frac{k+1}{p}\right)}{\Gamma \left(\frac{k+1}{q}\right)} \right)^{\frac{1}{k}} & \approx 2^{\frac{1}{p}-\frac{1}{q}} \left(\frac{ \left(\frac{1}{q\mathrm{e}} \right)^{\frac{1}{q}} }{ \left(\frac{1}{p\mathrm{e}} \right)^{\frac{1}{p}}} \cdot \frac{ \left(\frac{k+1}{p\mathrm{e}} \right)^{\frac{k+1}{p}} }{ \left(\frac{k+1}{q\mathrm{e}} \right)^{\frac{k+1}{q}}} \right)^{\frac{1}{k}} \\ & = 2^{\frac{1}{p}-\frac{1}{q}} \mathrm{e}^{\frac{1}{q}-\frac{1}{p}} \frac{ q^{\frac{1}{q}} }{ p^{\frac{1}{p}}} \left(k+1 \right)^{\frac{k+1}{k} \left (\frac{1}{p} -\frac{1}{q} \right) }. \end{array} $$
The proof is concluded by taking the limit as k and using that q>p.
Appendix B: Proof of Proposition 3
The proof follows from the inequality:
$$ \frac{\gamma\left(\frac{1}{p}, \frac{|x|^{p}}{2} \right)}{\Gamma(\frac{1}{p})} \le \frac{\gamma\left(\frac{1}{q}, \frac{|x|^{q}}{2} \right)}{\Gamma(\frac{1}{q})}, \forall x \in\mathbb{R}, $$
(69)
for pq. For completeness the inequality in (69) is shown in Appendix B.1.
Without loss of generality assume that x>0 and observe that
$$\begin{array}{*{20}l} \int_{-\infty}^{x} [ F_{X_{p}}(t)-F_{X_{q}}(t) ] dt &= \int_{-\infty}^{x} \text{sign}(t) \left(\frac{\gamma\left(\frac{1}{p}, \frac{|t|^{p}}{2} \right)}{\Gamma(\frac{1}{p})}-\frac{\gamma\left(\frac{1}{q}, \frac{|t|^{q}}{2} \right)}{\Gamma(\frac{1}{q})} \right) dt \end{array} $$
(70)
$$\begin{array}{*{20}l} &=\int_{x}^{\infty} \left(\frac{\gamma\left(\frac{1}{q}, \frac{|t|^{q}}{2} \right)}{\Gamma(\frac{1}{q})}-\frac{\gamma\left(\frac{1}{p}, \frac{|t|^{p}}{2} \right)}{\Gamma(\frac{1}{p})} \right) dt \end{array} $$
(71)
$$\begin{array}{*{20}l} & \ge 0, \end{array} $$
(72)
where (71) follows from the symmetry and (72) follows from the inequality in (69). This concludes the proof.
B.1 Proof of the inequality in (69)
Let
$$ f(p,x) := \frac{\gamma \left(\frac{1}{p}, \frac{x^{p}}{2}\right)}{\Gamma \left(\frac{1}{p}\right)}, p>0,\, x>0. $$
(73)
The goal is to show that f(p,x) is an increasing function of p. To that end, observe that by using a change of variable \(u= (2t)^{\frac {1}{p}} \) the function f(p,x) can be written as
$$ f(p,x)= \frac{ \int_{0}^{\frac{x^{p}}{2}} t^{\frac{1}{p}-1} \mathrm{e}^{-t} dt }{ \int_{0}^{\infty} t^{\frac{1}{p}-1} \mathrm{e}^{-t} dt}= \frac{ \int_{0}^{x} \mathrm{e}^{-\frac{u^{p}}{2}} du }{ \int_{0}^{\infty} \mathrm{e}^{-\frac{u^{p}}{2}} du}. $$
(74)
Therefore, showing monotonicity of f(p,x) is equivalent to showing that for pq
$$ \int_{0}^{x} \mathrm{e}^{-\frac{t^{p}}{2}} dt \int_{0}^{\infty} \mathrm{e}^{-\frac{u^{q}}{2}} du \le \int_{0}^{x} \mathrm{e}^{-\frac{u^{q}}{2}} du \int_{0}^{\infty} \mathrm{e}^{-\frac{t^{p}}{2}} dt. $$
(75)
The inequality in (75) can be conveniently re-written as
$$ \int_{0}^{x} \int_{0}^{\infty} \mathrm{e}^{-\frac{t^{p}+u^{q}}{2}} du dt \le \int_{0}^{\infty} \int_{0}^{x} \mathrm{e}^{-\frac{t^{p}+u^{q}}{2}} du dt, $$
(76)
and then the inequality in (76) follows by the monotonicity of the exponential function. This concludes the proof.
Appendix C: Proof of Theorem 1
To show that \( \mathrm


text:
The Learner First is an Amotai registered business in New Zealand. Amotai verifies Māori and Pasifika-owned businesses and holds a national database of Māori and Pasifika-owned businesses that are ready for work. You can read more on their website here.
Curriculum Leads Project
Theory of Change
If kaiako (teachers and others who support learners) are supported to design curricular learning that (1) builds from a shared, cultural understanding of well-being and (2) embeds culturally responsive pedagogical practices, they and their ākonga (learners) will create cultures of well-being in which everyone (ākonga, kaiako, whānau/families) progresses toward self-identified goals.
Developed by The Learner First and the New Zealand Ministry of Education, the Curriculum Lead Project is the culmination of many reports, reviews, and initiatives that pointed to the need for well-being to be incorporated across the many pathways for education and the national curriculum in New Zealand. Designed as a national resource that is regionally based, the Curriculum Lead roles strengthen the Ministry's frontline curriculum resources and engage schools, kura, early learning services, and kōhanga reo to create curriculum that is right for today and tomorrow, supporting the cultures, identities, languages, and well-being of all ākonga.
Across New Zealand, teachers identified that they need more support to include well-being into the design of their learning programs. Desired support centered on:
- a purposeful, integrated, and intentional approach to well-being,
- well-being embedded in local curricular design and marau-ā-kura,
- marau-ā-kura localized to whānau and ākonga aspirations and to the learning context, and
- an emphasis on learning progression and development.
The aim of the Curriculum Leads is to improve how teachers can develop their local curriculum using the resources and guidance to achieve better learning outcomes and enrich their learners' well-being. Leads work with kaiako to design local curriculum that responds to children's wellbeing needs, and to create the right environment in which children and youth will thrive.
In response to identified areas of need, the Curriculum Lead Project was designed with The Learner First's framework to support kaiako to:
Develop a shared language of wellbeing in local contexts.
The foundation of well-being in individual schools, kura, early learning services and kōhanga reo is a shared language and understanding—among learners, kaiako, and whānau—that supports the delivery of learning and development of desired outcomes.
Create a culture of learning and wellbeing for ākonga and their whānau.
The culture of a learning environment determines learners' experiences. Ākonga learn best, and experience the greatest well-being, in environments where they feel known, cared for, and supported to succeed—not only academically, but in all aspects of life. A shared definition of success is determined by weaving national curricula with the aspirations of ākonga and their whānau.
Use curriculum decision making to design teaching and learning that develops wellbeing.
Kaiako learn to use the curriculum as a springboard to wider well-being outcomes, weaving well-being into everyday learning experiences no matter the learning context.
Embed positive and culturally sustaining pedagogical practices.
Processes for improving pedagogy, along with strategies and approaches that have proven effective for developing well-being in an academic setting, give kaiako practical ideas on how to shift practice.
Progress toward self-identified well-being goals.
Progression is at the heart of well-being learning. Kaiako are supported with a range of tools for identifying goals, planning their actions and monitoring progress along the way.
Interested in Learning More?
Contributive Learning develops self-understanding, connection, knowledge, and competency.
When these come together, we add to the world. And that leads to meaning, fulfillment, and well-being.
Reach out today to learn more or get started!
Don't bring down—lift people up.
Don't subtract—add to the world.
Learn to contribute, in your way, every day.


text:
The way to answer this question objectively is to play with timetables. Actually, a sequence of timetables, each of which represents a "Phase." For Phased Implementation, a "Phase" could be defined as follows:
Phase: a coherent set of capital improvements that enable a new timetable that provides better service, by some agreed-upon set of metrics, as compared to the old timetable.We already described one example of how you might define service metrics for Caltrain, and these could be expanded to measure HSR service quality. The metrics, regardless of how they are defined, need to be timetable-independent, clear, concise, and transparent to the public. Discrete capital improvements, i.e. construction projects, can then be priced out on an individual basis and examined in the context of the new timetables that they enable. The idea is to pick the low hanging fruit first, and to build the improvements that produce the biggest improvement in the service metrics for the least construction cost or community disruption, i.e. the biggest bang for the buck.
The Service Pattern Generator
To exemplify the phased planning process and to make it more accessible to the armchair service planner, we can take the train performance calculations previously presented and fold them into an automatic service pattern generator that generates a graphical representation of a timetable and immediately highlights where additional tracks will be needed on the peninsula corridor.
Try it for yourself: Service Pattern Generator
Rather than work with tables of departure times, this tool specifies intuitive clockface timetables as graphical position-versus-time string diagrams, based on a few basic parameters for each type of train on the peninsula corridor:
- Train type, as described in the train performance calculations, which determines how many seconds it takes a train to travel from one stop to the next;
- Speed limit of the track, which can be considerably lower than the train's capability and also determines stop-to-stop times;
- Station stopping pattern and dwell times, strongly influenced by whether or not level boarding is provided;
- Frequency in trains per hour, or conversely, the clockface interval. For example, 4 trains per hour = 15 minute interval;
- Time offset in minutes from the top of the hour. This offset determines where this train meets other trains in the service pattern, and ultimately determines where you need overtaking tracks;
- Schedule padding, in percent of the overall end-to-end run time. 10% padding is a reasonable value.
The key output of the service pattern generator is the yellow highlighting that indicates where trains will catch up and overtake. In these locations, triple or quadruple tracks will be required. The challenge is to develop service patterns that provide good service for both peninsula commuters and long-distance travelers, while minimizing the cost and community disruption that comes with additional tracks.
Professionals do this using much more powerful software that can quantify how resistant these timetables are to cascading delays, but the ultimate results might not be too far off from what this simplified tool produces, when using conservative values for dwell and padding. Far from trying to do the pros' job for them, this exercise empowers the public to understand the trade-offs that must be contended with.
Working Smarter, Not Harder
Using the service pattern generator, we can explore a few examples of how to produce maximum bang for the buck.
Example 1: here's what Caltrain might look like with a mid-line overtake, often mentioned on this blog as the next logical step after (some would even say before!) electrification. Expresses meet locals at Hillsdale to exchange passengers across the same platform. Only one new grade separation is required at 25th Ave. The local holds for three minutes at Hillsdale so that downtown San Mateo can remain with two tracks. This is a typical illustration of cost vs. benefit: the hundreds of millions needed to quadruple-track San Mateo have to be weighed against the two-minute savings for the local. In this particular example, your metrics would tell you that it's not worth it.
Example 2: here's what things might look like with 3 high-speed trains per hour thrown into the mix. We now assume the entire corridor has been upgraded for 100 mph operation, which presumably implies major grade separations and crossing improvements. Introducing HSR requires quadruplication from South San Francisco (well, probably Bayshore) to Burlingame. The bottleneck at San Mateo is allowed to remain with two tracks. Further south, Atherton and Menlo Park are spared while Palo Alto and Mountain View require quadruple tracks. These two new overtake sections illustrate what would be required to provide a reasonable starting level of HSR service via Pacheco. Notice how no enormous civil works are required anywhere in the terminal areas, whether in San Francisco (no expensive tunnels starting at Bayshore) or San Jose (no hulking multi-level station). Transbay to SJ HSR trip time is less than 45 minutes; this can be reduced by increasing the HSR speed limit to 125 mph, but as you'll see if you try it, considerably more construction would be required. Are the few minutes saved worth the extra investment?
Example 3: in the never ending Altamont vs. Pacheco debate, Pacheco proponents often point out that this route is clearly best for Caltrain because it "improves" Caltrain all the way to San Jose. Try this for improvement: here's a service pattern where high-speed trains don't gum up the corridor and head for Altamont from Redwood City. This pattern assumes 4 trains per hour Caltrain local, 4 tph Caltrain express, 4 tph HSR to San Francisco, 4 tph HSR to San Jose via the East Bay, and 4 tph of Dumbarton local commuter rail. 20 trains per hour is a very high level of peninsula train service, probably more than the region will ever need... and look!
- No expensive new SF tunnels starting at Bayshore
- All Caltrain service terminates at Transbay
- Two tracks through Burlingame and San Mateo
- Two tracks through PAMPA (Palo Alto Menlo Park Atherton) and all the way south to Santa Clara
Announcing: the Peninsula Blended Plan Contest
If you like the power of experimenting with service patterns, there's a contest you can enter! Entries may be made in the comments section below by copying and pasting (or better yet, linking) the URL string of your favorite service pattern, with a short paragraph to describe why you think this is the best balance of service, cost, and community impact. Entries will be judged by an impartial panel of armchair experts consisting of Clem and Richard Mlynarik (the brains behind the tool), whose own service patterns will not count for the contest.
The grand prize, a big shiny ASCII trophy known as the Takt Cup, will be awarded in two weeks.


text:
Dr. Scott Publishes in Toxicology Journal on Abuse of Drugs Among Prisoners in Scotland
Headshot of Dr. Karen Scott
Dr. Karen Scott, director and associate professor of Forensic Science, published an article in the March 2020 issue of the Oxford University Press' Journal of Analytical Toxicology titled, "An Insight into Gabapentin and Pregabalin in Scottish Prisoners."
The article was based on a study done with Dr. Scott's University of Glasgow doctorate student Shaza Deeb in collaboration with the University of Glasgow and Scottish Prison Services. The study's purpose was to evaluate the prevalence and potential abuse of antiepileptic drugs (AEDs) among prisoners in Scotland.
The study found a high prevalence of AEDs in the Scottish prison system, primarily due to the drugs Gabapentin and Pregabalin. However, due to anonymous sample collection they were unable to determine if these drugs had been prescribed or acquired illicitly.
The Journal of Analytical Toxicology is an international toxicology journal published by the Oxford University Press, which is devoted to the study of potentially toxic substances as well as drug identification and research.


text:
Have you ever found yourself in the situation where you want to send someone a Twitter message but you can't remember their Twitter username although you do know their real name? Or where you can remember their twitter username or their real name, but you do remember who they work for, or some other biographical fact about them that might appear in their Twitter biography? If that sounds familiar, here's a trick that may help…
… a searchable Twitter friends and followers contact list in Google Spreadsheets.
It's based on Martin Hawksey's rather wonderful Export Twitter Followers and Friends using a Google Spreadsheet (I have to admit – Martin has left me way behind now when it comes to tinkering with Google Apps Script…!) To get started, you'll need a Google docs account, and then have to indulge in a quick secret handshake between Google docs and Twitter, but Martin's instruction sheet is a joy to follow:-) Follow the *** Google Spreadsheet to Export Twitter Friends and Followers *** link on Martin's page, then come back here once you've archived your Twitter friends and/or followers…
..done that? Here's how to make the contact list searchable… I thought it should have been trivial, but it turned out to be quite involved!
The first thing I did was create a drop down list to let the user select Friends or Followers as the target of the search. (Martin's application loads friends and followers into different sheets.)
The next step was to generate a query. To search for a particular term on a specified sheet we can use a QUERY formula that takes the following form:
=query(Friends!B:E,"select B,C,D,E where D contains 'JISC'")
Friends! specifies the sheet we want to search over; B:E says we want to pull columns B, C, D and E from the Friends sheet into the current sheet; the select statement will display results over four columns (B, C, D and E) from Friends for rows where the entry in column D contains the search term JISC.
To pull in the search term from cell D1 we can use a query of the form:
=query(Friends!B:E,concatenate("select B,C,D,E where D contains '",D1,"'"))
The =concatenate formula constructs the search query. Make sure you use the right sort of quotes when constructing the string – Google Spreadsheets seems to prefer the use of double quotes wherever possible!
To search over two columns, (for example, the real name and the description columns of the twitter friends/follower data) we can use a query of the form:
=query(Followers!B:E,concatenate("select B,C,D,E where C contains '",D1,"' or D contains '",D1,"'")
Again – watch out for the quotes – the result we want from the concatenation is something like:
=query(Followers!B:E,concatenate("select B,C,D,E where C contains 'Jisc' or D contains 'Jisc')
so we have to explicitly code in the single quote in the concatenation formula.
Unfortunately, the query formula is case sensitive, which can cause the search to fail because we haven't taken (mis)use of case into account in our search term. This means we need to go defensive in the query formulation – in the following example, I force everything to upper case – search corpus as well as search terms:
=query(Followers!B:E,concatenate("select B,C,D,E where upper(C) contains upper('",D1,"') or upper(D) contains upper('",D1,"')")
The final step is to define the sheet we want to search – Friends! or Followers! – depending on the setting of cell B1 in our search sheet. I had idly though I could use a concatenate formula to create this, but concatenate returns a string and we need to define a range. In the end, the workaround I adopted was an if statement, that chooses a query with an appropriate range set explicitly/hardwired within the formula depending on whether we are are searching Friends or Followers. Here's the complete formula, which i put into cell E1.
=if(B1="Friends",query(Friends!B:E,concatenate("select B,C,D,E where upper(C) contains upper('",D1,"') or upper(D) contains upper('",D1,"')")),query(Followers!B:E,concatenate("select B,C,D,E where upper(C) contains upper('",D1,"') or upper(D) contains upper('",D1,"')")))
I now have a query sheet defined that allows me to search over my friends or followers, as required, according to their real name or a search term that appears in their biography description.


text:
Importing accounting: the case of Trinidad and Tobago
Abstract:In the period immediately following its achieving independence, Trinidad and Tobago switched from a pattern of importing British professional accountants to one of importing British professional qualifications. It was also in this period that the first professional accounting association appeared: that is, eighty years after such bodies emerged in Britain and her settler colonies. This paper seeks to explain why the achievement of political independence in Trinidad and Tobago (and perhaps in some other British non-settler colonies) signified a critical turning point in the development of a local accounting profession. The paper also explores how the history of importing accounting impacted on the contemporary organization of the profession in Trinidad and Tobago.
Document Type: Research Article
Publication date: 1999-03-01


CREATING ATTRIBUTE DIMENSION / CREACIÓN DIMENSIÓN ATRIBUTO
English (Español a continuación)
To create an attribute-type dimension, the following steps must be followed:
 - Create the dimension.
 - In the "Member properties" menu, in the "Dimension type" section, "Attribute" is selected, and in "Attribute type" a specific one is selected (if none is selected Essbase applies by default the "Text" type).
 - Associate it to a base dimension: right-click on the base dimension and select "Edit member properties". In the "Attributes" tab, in the "Other attribute dimensions" window, select the attribute dimension to be associated and click "Assign" and then accept. The outline is verified and saved.
 - In this same window you can remove the assignment of an attribute dimension to a base dimension.
Once the attribute dimension has been created, the members of this dimension must be associated with the members of the base dimension.
a) It can be associated manually:
 - Right click on the member of the base dimension to which you want to associate an attribute; In the "Member Properties" window, click on the "Associations" tab. In the "Available attributes" window select the attribute that you want to assign; click on "Assign" and then on "Accept". Finally, the outline is validated and saved.
b) It can also be associated by means of a build rule:
 - In the "Data preparation editor", in the "Field properties" menu, in the "Dimension creation properties" tab, in the "Field" section, in the "Attribute dimensions" option we select the attribute we want to assign.
 - For this build rule to allow us to modify the assigned attributes if it is required, in the menu of the rule "Data preparation editor", in the menu "Configuration of dimension creation", in the tab "Configuration of creation dimension ", in the"Attribute members" option, activate the" Allow association changes "option.
In Boolean, numeric, or date attributes dimensions, member names may be repeated in different dimensions.
 - For example, if there are two Boolean attribute dimensions, the names "True" / "False" can be repeated.
To avoid these duplications, prefixes or suffixes must be added to the names to differentiate them.
 - To add prefix or suffix, right-click on the outline, and in the "Properties" menu, in the "Attribute configuration" / "Prefix / suffix format" section it can be defined.
 - The selected prefix or suffix does not appear when consulting the outline, but it does have to be included when the attribute is used in a formula.
 - For example, if we have the attribute "Size", and one of its members is "Large". If we have selected the dimension as a prefix and the underscore as a separator, when including this attribute in a formula we have to write it as "Size_Large".
If we want to delete the association between attribute members and members of the base dimension:
 - It can be done manually: right-click on the member of the base dimension and in the "Member Properties" window, in the "Associations" tab, select the attribute you want to delete and click on "Remove". The outline is verified and saved.
 - If we want to delete all the attributes of an attribute dimension associated to the members of a base dimension, we can eliminate the association between these two dimensions.
Español
Para la creación de una dimensión tipo atributo se siguen los siguientes pasos:
 - Crear la dimensión.
 - En el menú "Propiedades del miembro", en el apartado "Tipo de dimensión" se selecciona "Atributo", y en "Tipo de atributo" se selecciona uno determinado (si no se selecciona ninguno Essbase aplica por defecto el tipo "Texto").
 - Asociar a una dimensión base: se hace click con el botón derecho sobre la dimensión base y se selecciona "Editar propiedades de miembros". En la pestaña "Atributos", en la ventana "Otras dimensiones de atributo" se selecciona la dimensión atributo que se quiere asociar y se hace click en "Asignar" y luego en aceptar. Se verifica el outline y se guarda.
 - En esta misma ventana se puede eliminar la asignación de una dimensión atributo a una dimensión base.
Una vez creada la dimensión atributo hay que asociar los miembros de esta dimensión con los miembros de la dimensión base.
a) Se puede asociar manualmente:
 - Se hace click con el botón derecho sobre el miembro de la dimensión base al que se le quiere asociar un atributo; en la ventana "Propiedades del miembro", se hace click en la pestaña "Asociaciones". En la ventana "Atributos disponibles" se selecciona el atributo que se quiere asignar; se hace click en "Asignar" y luego en "Aceptar". Para finalizar se valida el outline y se guarda.
b) También se puede asociar mediante una regla de carga:
 - En el "Editor de preparación de datos", en el menú "Propiedades de campo", en la pestaña "Propiedades de creación de dimensión", en el apartado "Campo", en la opción "Dimensiones de atributo" seleccionamos el atributo que queremos asignar.
 - Para que esta regla de carga nos permita modificar en un momento determinado los atributos asignados, en el menú de la regla "Editor de preparación de datos", en el menú "Configuración de creación de dimensión", en la pestaña "Configuración de creación de dimensión", en la opción "Miembros de atributo" hay que activar la opción "Permitir cambios de asociación".
En las dimensiones atributos de tipo booleanas, numéricas o de fechas puede que se repitan nombres de miembros en distintas dimensiones.
 - Por ejemplo, si hay dos dimensiones de atributo de tipo booleanas se pueden repetir los nombres "True" / "False".
Para evitar estas duplicidades hay que añadir a los nombres prefijos o sufijos para diferenciarlos.
 - Para añadir prefijo o sufijo, se hace click con el botón derecho sobre el outline, y en el menú "Propiedades", en el apartado "Configuración de atributo" / "Formato de prefijo/sufijo" se puede definir.
 - El prefijo o sufijo seleccionado no aparece al consultar el outline, pero sí se tiene que incluir cuando se utiliza el atributo en alguna fórmula.
 - Por ejemplo, si tenemos el atributo "Tamaño", y uno de sus miembros es "Grande". Si hemos seleccionado como prefijo la dimensión y como separador el guion bajo, al incluir este atributo en una fórmula tenemos que escribirlo como "Tamaño_Grande".
Si queremos borrar la asociación entre miembros atributos y miembros de la dimensión base:
 - Se puede hacer manualmente: se hace click con el botón derecho sobre el miembro de la dimensión base y en la ventana "Propiedades del miembro", en la pestaña "Asociaciones", se selecciona el atributo que se quiere eliminar y se hace click en "Eliminar". Se verifica el outline y se guarda.
 - Si nos interesa borrar todos los atributos de una dimensión atributo asociados a los miembros de una dimensión base podemos eliminar la asociación entre estas dos dimensiones y de esta manera se borran los atributos que habíamos asignado.


On this page:
send-url
send-url/ file
send-url/ contents
external-browser
browser-preference?
unix-browser-list
6 Send URL: Opening a Web Browser
 (require net/sendurl) package: net-lib
Provides send-url for opening a URL in the user's chosen web browser.
See also browser/external, which requires racket/gui, but can prompt the user for a browser if no browser preference is set.
procedure
(send-url str
 [separate-window?
 #:escape escape?]) void?
 str : string?
 separate-window? : any/c = #t
 escape? : any/c = #t
Opens str, which represents a URL, in a platform-specific manner. For some platforms and configurations, the separate-window? parameter determines if the browser creates a new window to display the URL or not.
On Windows, send-url normally uses shell-execute to launch a browser. (If the URL appears to contain a fragment, it may use an intermediate redirecting file due to a bug in IE7.)
On Mac OS X, send-url runs osascript to start the user's chosen browser.
On Unix, send-url uses a user-preference, or when none is set, it will look for a known browser. See the description of external-browser for details.
If escape? is true, then str is escaped (by UTF-8 encoding followed by "%" encoding) to avoid dangerous shell characters: single quotes, double quotes, backquotes, dollar signs, backslashes, non-ASCII characters, and non-graphic characters. Note that escaping does not affect already-encoded characters in str.
On all platforms, external-browser parameter can be set to a procedure to override the above behavior — the procedure will be called with the url string.
procedure
(send-url/file path
 [separate-window?
 #:fragment fragment
 #:query query]) void?
 path : path-string?
 separate-window? : any/c = #t
 fragment : (or/c string? false/c) = #f
 query : (or/c string? false/c) = #f
Similar to send-url (with #:escape? #t), but accepts a path to a file to be displayed by the browser, along with optional fragment (with no leading #) and query (with no leading ?) strings. Use send-url/file to display a local file, since it takes care of the peculiarities of constructing the correct file:// URL.
The path, fragment, and query arguments are all encoded in the same way as a path provided to send-url, which means that already-encoded characters are used as-is.
procedure
(send-url/contents contents
 [separate-window?
 #:fragment fragment
 #:query query
 #:delete-at seconds]) void?
 contents : string?
 separate-window? : any/c = #t
 fragment : (or/c string? false/c) = #f
 query : (or/c string? false/c) = #f
 seconds : (or/c number? false/c) = #f
Similar to send-url/file, but it consumes the contents of a page to show and displays it from a temporary file.
When send-url/content is called, it scans old generated files (this happens randomly, not on every call) and removes them to avoid cluttering the temporary directory. If the #:delete-at argument is a number, then the temporary file is more eagerly removed after the specified number of seconds; the deletion happens in a thread, so if Racket exits earlier, the deletion will not happen. If the #:delete-at argument is #f, no eager deletion happens, but old temporary files are still deleted as described above.
A parameter that can hold a procedure to override how a browser is started, or #f to use the default platform-dependent command.
On Unix, the command that is used depends on the 'external-browser preference. If the preference is unset, send-url uses the first of the browsers from unix-browser-list for which the executable is found. Otherwise, the preference should hold a symbol indicating a known browser (from the unix-browser-list), or it a pair of a prefix and a suffix string that are concatenated around the url string to make up a shell command to run. In addition, the external-browser paremeter can be set to one of these values, and send-url will use it instead of the preference value.
Note that the URL is encoded to make it work inside shell double-quotes: URLs can still hold characters like #, ?, and &, so if the external-browser is set to a pair of prefix/suffix strings, they should use double quotes around the url.
If the preferred or default browser can't be launched, send-url fails. See get-preference and put-preferences for details on setting preferences.
procedure
(browser-preference? a) boolean?
 a : any/c
Returns #t if v is a valid browser preference, #f otherwise. See external-browser for more information.
A list of symbols representing Unix executable names that may be tried in order by send-url. The send-url function internally includes information on how to launch each executable with a URL.


Link Search Menu Expand Document Documentation Menu
Flat object field type
In OpenSearch, you don't have to specify a mapping before indexing documents. If you don't specify a mapping, OpenSearch uses dynamic mapping to map every field and its subfields in the document automatically. When you ingest documents such as logs, you may not know every field's subfield name and type in advance. In this case, dynamically mapping all new subfields can quickly lead to a "mapping explosion," where the growing number of fields may degrade the performance of your cluster.
The flat object field type solves this problem by treating the entire JSON object as a string. Subfields within the JSON object are accessible using standard dot path notation, but they are not indexed for fast lookup.
The maximum field value length in the dot notation is 224 − 1.
The flat object field type provides the following benefits:
 - Efficient reads: Fetching performance is similar to that of a keyword field.
 - Memory efficiency: Storing the entire complex JSON object in one field without indexing all of its subfields reduces the number of fields in an index.
 - Space efficiency: OpenSearch does not create an inverted index for subfields in flat objects, thereby saving space.
 - Compatibility for migration: You can migrate your data from systems that support similar flat types to OpenSearch.
Mapping a field as a flat object applies when a field and its subfields are mostly read and not used as search criteria because the subfields are not indexed. Flat objects are useful for objects with a large number of fields or when you don't know the keys in advance.
Flat objects support exact match queries with and without dot path notation. For a complete list of supported query types, see Supported queries.
Searching for a specific value of a nested field in a document may be inefficient because it may require a full scan of the index, which can be an expensive operation.
Flat objects do not support:
 - Type-specific parsing.
 - Numerical operations, such as numerical comparison or numerical sorting.
 - Text analysis.
 - Highlighting.
 - Aggregations of subfields using dot notation.
 - Filtering by subfields.
Supported queries
The flat object field type supports the following queries:
Limitations
The following limitations apply to flat objects in OpenSearch 2.7:
 - Flat objects do not support open parameters.
 - Painless scripting and wildcard queries are not supported for retrieving values of subfields.
This functionality is planned for a future release.
Using flat object
The following example illustrates mapping a field as a flat object, indexing documents with flat object fields, and searching for leaf values of the flat object in those documents.
Only the root field of a document can be defined as a flat object. You cannot define an object that is part of another JSON object as a flat object because when a flat object is flattened to a string, the nested architecture of the leaves is lost.
First, create a mapping for your index, where issue is of type flat_object:
PUT /test-index/
{
 "mappings": {
 "properties": {
 "issue": {
 "type": "flat_object"
 }
 }
 }
}
Next, index two documents with flat object fields:
PUT /test-index/_doc/1
{
 "issue": {
 "number": "123456",
 "labels": {
 "version": "2.1",
 "backport": [
 "2.0",
 "1.3"
 ],
 "category": {
 "type": "API",
 "level": "enhancement"
 }
 }
 }
}
PUT /test-index/_doc/2
{
 "issue": {
 "number": "123457",
 "labels": {
 "version": "2.2",
 "category": {
 "type": "API",
 "level": "bug"
 }
 }
 }
}
To search for a leaf value of the flat object, use either a GET or a POST request. Even if you don't know the field names, you can search for a leaf value in the entire flat object. For example, the following request searches for all issues labeled as bugs:
GET /test-index/_search
{
 "query": {
 "match": {"issue": "bug"}
 }
}
Alternatively, if you know the subfield name in which to search, provide the field's path in dot notation:
GET /test-index/_search
{
 "query": {
 "match": {"issue.labels.category.level": "bug"}
 }
}
In both cases, the response is the same and contains document 2:
{
 "took": 1,
 "timed_out": false,
 "_shards": {
 "total": 1,
 "successful": 1,
 "skipped": 0,
 "failed": 0
 },
 "hits": {
 "total": {
 "value": 1,
 "relation": "eq"
 },
 "max_score": _PHONE_,
 "hits": [
 {
 "_index": "test-index",
 "_id": "2",
 "_score": _PHONE_,
 "_source": {
 "issue": {
 "number": "123457",
 "labels": {
 "version": "2.2",
 "category": {
 "type": "API",
 "level": "bug"
 }
 }
 }
 }
 }
 ]
 }
}
Using a prefix query, you can search for all issues for the versions that start with 2.:
GET /test-index/_search
{
 "query": {
 "prefix": {"issue.labels.version": "2."}
 }
}
With a range query, you can search for all issues for versions 2.0–2.1:
GET /test-index/_search
{
 "query": {
 "range": {
 "issue": {
 "gte": "2.0",
 "lte": "2.1"
 }
 }
 }
}
350 characters left
Want to contribute? or .


text:
Dynamic Substructuring (DS) is a powerful engineering concept to model and analyse dynamic systems in terms of its components or substructures. It derives from the ancient principle of "divide and conquer" ("divide et impera"), which suggests that large problems are most effectively governed by dividing them into smaller parts and choosing the best approach for each. Dynamic Substructuring does just that: it allows to model each component using the most qualityand cost-effective technique and "substructure" their dynamics together. This way, one can simulate the sound and vibration behaviour of the full assembly (the end-product), long before any physical prototype is available.
With Dynamic Substructuring, insights on full-vehicle NVH performance can be obtained much earlier, as already-available components can be measured and substructured to FE models of the rest of the vehicle.


text:
Streetwork: Homeless Youth Facts
Who are homeless youth?
According to a 2002 federal study, approximately 1.7 million young people call the streets home every year.
Children under 18 years of age accounted for 39% of the homeless population. Of that number, 42% were younger than age 5.
Approximately 40% of homeless youth identify as L(esbian) G(ay) B(isexual) or T(ransgendered) – compared to 10% of the general youth population in the United States.
What can cause a young person to be homeless?
Young people are at far greater risk of becoming homeless if their parents engage in substance abuse or have mental health problems, if there is child abuse or neglect in the home, if the family has been homeless previously, or if they identify themselves as lesbian, gay, bisexual, or transgendered.
A U.S. Department of Health and Human Services study found that 46% of homeless youth escaped a home where they suffered physical abuse, while 17% left because of sexual abuse.
Children who have been in foster care have a greater risk of becoming homeless at an earlier age than other youth, and are more likely to remain homeless for a longer period of time.
What happens to young people who try to survive on the streets?
Young people who are too old for foster care and too young to apply for social services face devastating shortand long-term consequences from being forced to survive on the streets.
- Nearly 43% of homeless young men and 39% of homeless young women say they were assaulted with a weapon while living on the streets.
- Homeless youth suffer significant mental health problems that include depression, anxiety disorders, post-traumatic stress disorder, substance abuse, and suicidal thoughts.
- Young people living on the streets are highly likely to be engaged in substance abuse (approximately 75%), as a means to self-medicate to deal with traumatic experiences and abuse they face while trying to survive.
- Children living on the streets are more likely to engage in "survival sex" – trading sex to gain food, clothing, drugs, money, or just for a safe place to sleep at night.
- According to a San Francisco government study, 17% of homeless youth are HIV-positive.
- Homeless youth who identify as lesbian, gay, bisexual, or transgendered are more likely commit suicide than other youth.
- Every year, approximately 5,000 homeless young people will die because of assault, illness, or suicide while on the street.
How does Safe Horizon help young people affected by violence and abuse?
Nearly 20,000 homeless people 24 years old and younger live in New York City, most of whom have fled to the streets because of violence and abuse. Safe Horizon's Streetwork program offers homeless and street-involved youth a refuge – a hot meal, a hot shower, and a lifeline.
- Streetwork makes contact with more than 19,000 youth each year through our two drop-in centers, two residential programs, and street outreach services.
- Streetwork distributes over 45,000 meals to young people every year.
- Streetwork offers free legal, medical, and psychiatric services; individual and group counseling; practical and educational assistance; advocacy; HIV prevention; and many other services that homeless youth urgently need, all in a safe, non-judgmental setting.
What can I do to help young people in crisis?
Safe Horizon's Streetwork program helps give homeless young people the refuge they need from the streets – and critical resources they need to find safety and hope. You can make a difference for young people in crisis through any of the following ways:
Donate today and help provide young people with the tools they need to find brighter, safer futures.
Find out more about Streetwork and how we help homeless and street-involved youth.
More information about homeless youth
National Child Traumatic Stress Network
National Coalition for the Homeless
National Resource Center for Foster Care and Permanency Planning, Hunter College - School of Social Work, City University of New York