text:
"""
This script is part of a spectroscopic reduction pipeline used to
extract 1D optical spectra from data taken at MDM observatory with
the ModSpec spectrograph mounted on the 2.4m Hiltner telescope.

This script processes and extracts 1D spectra from the 2D raw images
from a single night or block of observing. The input 2D images are
expected to be the raw frames that are output directly from the
instrument software (OWL). This script does the following:

    - Bias-subtract
    - Flat-correct
    - Trim 2D CCD images
    - 2D-to-1D extraction

The resulting 1D (flux vs. pixel) spectra are then saved to new files
that contain the source flux, source flux uncertainty, sky (background)
flux, sky flux uncertainty, and the position of the trace centroid
along the spatial dimension of the CCD as a function of pixel in the
disperion direction.

Wavelength calibration and radial velocity corrections are handled in
subsequent scripts.

"""

# Standard library
import os
from os import path
import logging

# Third-party
from astropy.io import fits
import astropy.units as u
import ccdproc
from ccdproc import CCDData
import matplotlib.pyplot as plt
import numpy as np
import yaml

# Project
from comoving_rv.log import logger
from comoving_rv.longslit import GlobImageFileCollection
from comoving_rv.longslit.extract import SourceCCDExtractor, CompCCDExtractor

# -------------------------------
# CCD properties
#
ccd_gain = 2.7 * u.electron/u.adu
ccd_readnoise = 7.9 * u.electron
oscan_idx = 300
oscan_size = 64
#
# -------------------------------

ccd_props = dict()
ccd_props['ccd_gain'] = ccd_gain
ccd_props['ccd_readnoise'] = ccd_readnoise
ccd_props['oscan_idx'] = oscan_idx
ccd_props['oscan_size'] = oscan_size

# plotting configuration
from astropy.visualization import ZScaleInterval
zscaler = ZScaleInterval(32768, krej=5., max_iterations=16)
cmap = 'Greys_r'

def main(night_path, skip_list_file, mask_file, overwrite=False, plot=False):
    """
    See argparse block at bottom of script for description of parameters.
    """

    night_path = path.realpath(path.expanduser(night_path))
    if not path.exists(night_path):
        raise IOError("Path '{}' doesn't exist".format(night_path))
    logger.info("Reading data from path: {}".format(night_path))

    base_path, night_name = path.split(night_path)
    data_path, run_name = path.split(base_path)
    output_path = path.realpath(path.join(data_path, 'processed',
                                          run_name, night_name))
    os.makedirs(output_path, exist_ok=True)
    logger.info("Saving processed files to path: {}".format(output_path))

    if plot: # if we're making plots
        plot_path = path.realpath(path.join(output_path, 'plots'))
        logger.debug("Will make and save plots to: {}".format(plot_path))
        os.makedirs(plot_path, exist_ok=True)
    else:
        plot_path = None

    # check for files to skip (e.g., saturated or errored exposures)
    if skip_list_file is not None: # a file containing a list of filenames to skip
        with open(skip_list_file, 'r') as f:
            skip_list = [x.strip() for x in f if x.strip()]
    else:
        skip_list = None

    # look for pixel mask file
    if mask_file is not None:
        with open(mask_file, 'r') as f: # load YAML file specifying pixel masks for nearby sources
            pixel_mask_spec = yaml.load(f.read())
    else:
        pixel_mask_spec = None

    # generate the raw image file collection to process
    ic = GlobImageFileCollection(night_path, skip_filenames=skip_list)
    logger.info("Frames to process:")
    logger.info("- Bias frames: {}".format(len(ic.files_filtered(imagetyp='BIAS'))))
    logger.info("- Flat frames: {}".format(len(ic.files_filtered(imagetyp='FLAT'))))
    logger.info("- Comparison lamp frames: {}".format(len(ic.files_filtered(imagetyp='COMP'))))
    logger.info("- Object frames: {}".format(len(ic.files_filtered(imagetyp='OBJECT'))))

    # HACK:
    ic = GlobImageFileCollection(night_path, skip_filenames=skip_list)

    # ============================
    # Create the master bias frame
    # ============================

    # overscan region of the CCD, using FITS index notation
    oscan_fits_section = "[{}:{},:]".format(oscan_idx, oscan_idx+oscan_size)

    master_bias_file = path.join(output_path, 'master_bias.fits')

    if not os.path.exists(master_bias_file) or overwrite:
        # get list of overscan-subtracted bias frames as 2D image arrays
        bias_list = []
        for hdu, fname in ic.hdus(return_fname=True, imagetyp='BIAS'):
            logger.debug('Processing Bias frame: {0}'.format(fname))
            ccd = CCDData.read(path.join(ic.location, fname), unit='adu')
            ccd = ccdproc.gain_correct(ccd, gain=ccd_gain)
            ccd = ccdproc.subtract_overscan(ccd, overscan=ccd[:,oscan_idx:])
            ccd = ccdproc.trim_image(ccd, fits_section="[1:{},:]".format(oscan_idx))
            bias_list.append(ccd)

        # combine all bias frames into a master bias frame
        logger.info("Creating master bias frame")
        master_bias = ccdproc.combine(bias_list, method='average', clip_extrema=True,
                                      nlow=1, nhigh=1, error=True)
        master_bias.write(master_bias_file, overwrite=True)

    else:
        logger.info("Master bias frame file already exists: {}".format(master_bias_file))
        master_bias = CCDData.read(master_bias_file)

    if plot:
        # TODO: this assumes vertical CCD
        assert master_bias.shape[0] > master_bias.shape[1]
        aspect_ratio = master_bias.shape[1]/master_bias.shape[0]

        fig,ax = plt.subplots(1, 1, figsize=(10,12*aspect_ratio))
        vmin,vmax = zscaler.get_limits(master_bias.data)
        cs = ax.imshow(master_bias.data.T, origin='bottom',
                       cmap=cmap, vmin=max(0,vmin), vmax=vmax)
        ax.set_title('master bias frame [zscale]')

        fig.colorbar(cs)
        fig.tight_layout()
        fig.savefig(path.join(plot_path, 'master_bias.png'))
        plt.close(fig)

    # ============================
    # Create the master flat field
    # ============================
    # HACK:
    ic = GlobImageFileCollection(night_path, skip_filenames=skip_list)

    master_flat_file = path.join(output_path, 'master_flat.fits')

    if not os.path.exists(master_flat_file) or overwrite:
        # create a list of flat frames
        flat_list = []
        for hdu, fname in ic.hdus(return_fname=True, imagetyp='FLAT'):
            logger.debug('Processing Flat frame: {0}'.format(fname))
            ccd = CCDData.read(path.join(ic.location, fname), unit='adu')
            ccd = ccdproc.gain_correct(ccd, gain=ccd_gain)
            ccd = ccdproc.ccd_process(ccd, oscan=oscan_fits_section,
                                      trim="[1:{},:]".format(oscan_idx),
                                      master_bias=master_bias)
            flat_list.append(ccd)

        # combine into a single master flat - use 3*sigma sigma-clipping
        logger.info("Creating master flat frame")
        master_flat = ccdproc.combine(flat_list, method='average', sigma_clip=True,
                                      low_thresh=3, high_thresh=3)
        master_flat.write(master_flat_file, overwrite=True)

        # TODO: make plot if requested?

    else:
        logger.info("Master flat frame file already exists: {}".format(master_flat_file))
        master_flat = CCDData.read(master_flat_file)

    if plot:
        # TODO: this assumes vertical CCD
        assert master_flat.shape[0] > master_flat.shape[1]
        aspect_ratio = master_flat.shape[1]/master_flat.shape[0]

        fig,ax = plt.subplots(1, 1, figsize=(10,12*aspect_ratio))
        vmin,vmax = zscaler.get_limits(master_flat.data)
        cs = ax.imshow(master_flat.data.T, origin='bottom',
                       cmap=cmap, vmin=max(0,vmin), vmax=vmax)
        ax.set_title('master flat frame [zscale]')

        fig.colorbar(cs)
        fig.tight_layout()
        fig.savefig(path.join(plot_path, 'master_flat.png'))
        plt.close(fig)

    # =====================
    # Process object frames
    # =====================
    # HACK:
    ic = GlobImageFileCollection(night_path, skip_filenames=skip_list)

    logger.info("Beginning object frame processing...")
    for hdu, fname in ic.hdus(return_fname=True, imagetyp='OBJECT'):
        new_fname = path.join(output_path, 'p_{}'.format(fname))

        # -------------------------------------------
        # First do the simple processing of the frame
        # -------------------------------------------

        logger.debug("Processing '{}' [{}]".format(hdu.header['OBJECT'], fname))
        if path.exists(new_fname) and not overwrite:
            logger.log(1, "\tAlready processed! {}".format(new_fname))
            ext = SourceCCDExtractor(filename=path.join(ic.location, new_fname),
                                     plot_path=plot_path, zscaler=zscaler,
                                     cmap=cmap, **ccd_props)
            nccd = ext.ccd

            # HACK: FUCK this is a bad hack
            ext._filename_base = ext._filename_base[2:]

        else:
            # process the frame!
            ext = SourceCCDExtractor(filename=path.join(ic.location, fname),
                                     plot_path=plot_path, zscaler=zscaler,
                                     cmap=cmap, unit='adu', **ccd_props)

            _pix_mask = pixel_mask_spec.get(fname, None) if pixel_mask_spec is not None else None
            nccd = ext.process_raw_frame(pixel_mask_spec=_pix_mask,
                                         master_bias=master_bias,
                                         master_flat=master_flat)
            nccd.write(new_fname, overwrite=overwrite)

        # -------------------------------------------
        # Now do the 1D extraction
        # -------------------------------------------

        fname_1d = path.join(output_path, '1d_{0}'.format(fname))
        if path.exists(fname_1d) and not overwrite:
            logger.log(1, "\tAlready extracted! {}".format(fname_1d))
            continue

        else:
            logger.debug("\tExtracting to 1D")

            # first step is to fit a voigt profile to a middle-ish row to determine LSF
            lsf_p = ext.get_lsf_pars() # MAGIC NUMBER

            try:
                tbl = ext.extract_1d(lsf_p)
            except Exception as e:
                logger.error('Failed! {}: {}'.format(e.__class__.__name__,
                                                     str(e)))
                continue

            hdu0 = fits.PrimaryHDU(header=nccd.header)
            hdu1 = fits.table_to_hdu(tbl)
            hdulist = fits.HDUList([hdu0, hdu1])

            hdulist.writeto(fname_1d, overwrite=overwrite)

        del ext

    # ==============================
    # Process comparison lamp frames
    # ==============================
    # HACK:
    ic = GlobImageFileCollection(night_path, skip_filenames=skip_list)

    logger.info("Beginning comp. lamp frame processing...")
    for hdu, fname in ic.hdus(return_fname=True, imagetyp='COMP'):
        new_fname = path.join(output_path, 'p_{}'.format(fname))

        logger.debug("\tProcessing '{}'".format(hdu.header['OBJECT']))

        if path.exists(new_fname) and not overwrite:
            logger.log(1, "\tAlready processed! {}".format(new_fname))
            ext = CompCCDExtractor(filename=path.join(ic.location, new_fname),
                                   plot_path=plot_path, zscaler=zscaler,
                                   cmap=cmap, **ccd_props)
            nccd = ext.ccd

            # HACK: FUCK this is a bad hack
            ext._filename_base = ext._filename_base[2:]

        else:
            # process the frame!
            ext = CompCCDExtractor(filename=path.join(ic.location, fname),
                                   plot_path=plot_path, unit='adu', **ccd_props)

            _pix_mask = pixel_mask_spec.get(fname, None) if pixel_mask_spec is not None else None
            nccd = ext.process_raw_frame(pixel_mask_spec=_pix_mask,
                                         master_bias=master_bias,
                                         master_flat=master_flat,)
            nccd.write(new_fname, overwrite=overwrite)

        # -------------------------------------------
        # Now do the 1D extraction
        # -------------------------------------------

        fname_1d = path.join(output_path, '1d_{0}'.format(fname))
        if path.exists(fname_1d) and not overwrite:
            logger.log(1, "\tAlready extracted! {}".format(fname_1d))
            continue

        else:
            logger.debug("\tExtracting to 1D")

            try:
                tbl = ext.extract_1d()
            except Exception as e:
                logger.error('Failed! {}: {}'.format(e.__class__.__name__,
                                                     str(e)))
                continue

            hdu0 = fits.PrimaryHDU(header=nccd.header)
            hdu1 = fits.table_to_hdu(tbl)
            hdulist = fits.HDUList([hdu0, hdu1])

            hdulist.writeto(fname_1d, overwrite=overwrite)

if __name__ == "__main__":
    from argparse import ArgumentParser

    # Define parser object
    parser = ArgumentParser(description="")

    vq_group = parser.add_mutually_exclusive_group()
    vq_group.add_argument('-v', '--verbose', action='count', default=0, dest='verbosity')
    vq_group.add_argument('-q', '--quiet', action='count', default=0, dest='quietness')

    parser.add_argument('-s', '--seed', dest='seed', default=None,
                        type=int, help='Random number generator seed.')
    parser.add_argument('-o', '--overwrite', action='store_true', dest='overwrite',
                        default=False, help='Destroy everything.')
    parser.add_argument('--plot', action='store_true', dest='plot',
                        default=False, help='Make plots along the way.')

    parser.add_argument('-p', '--path', dest='night_path', required=True,
                        help='Path to a single night or chunk of data to process.')
    parser.add_argument('--skiplist', dest='skip_list_file', default=None,
                        help='Path to a file containing a list of filenames (not '
                             'paths) to skip.')
    parser.add_argument('--mask', dest='mask_file', default=None,
                        help='Path to a YAML file containing pixel regions to ignore '
                             'in each frame. Useful for masking nearby sources.')

    args = parser.parse_args()

    # Set logger level based on verbose flags
    if args.verbosity != 0:
        if args.verbosity == 1:
            logger.setLevel(logging.DEBUG)
        else: # anything >= 2
            logger.setLevel(1)

    elif args.quietness != 0:
        if args.quietness == 1:
            logger.setLevel(logging.WARNING)
        else: # anything >= 2
            logger.setLevel(logging.ERROR)

    else: # default
        logger.setLevel(logging.INFO)

    if args.seed is not None:
        np.random.seed(args.seed)

    main(night_path=args.night_path,
         skip_list_file=args.skip_list_file,
         overwrite=args.overwrite,
         mask_file=args.mask_file,
         plot=args.plot)

redpajama_set_name: RedPajamaGithub


text:
Samuel Byrns (March 4, 1848 – July 9, 1914) was a U.S. Representative from Missouri.

Born on a farm in Jefferson County, Missouri, Byrns studied law.
He was admitted to the bar in 1872 and commenced practice in Hillsboro, Missouri.
He served as collector of revenue for Jefferson County in 1872.
He served as member of the State house of representatives in 1876 and 1877.
He served in the State senate in 1878.
He served as member of the Democratic State central committee 1886–1888.

Byrns was elected as a Democrat to the Fifty-second Congress (March 4, 1891 – March 3, 1893).
He was an unsuccessful candidate for renomination in 1892 to the Fifty-third Congress.
He resumed the practice of his chosen profession in De Soto, Missouri, where he died on July 9, 1914.
He was interred in Hillsboro Cemetery, Hillsboro, Missouri.

References

External links

1848 births
1914 deaths
Democratic Party members of the Missouri House of Representatives
Democratic Party Missouri state senators
Democratic Party members of the United States House of Representatives from Missouri
19th-century American politicians
People from Hillsboro, Missouri
People from De Soto, Missouri

redpajama_set_name: RedPajamaWikipedia


How many Primark locations are there in the world? While the store's official website doesn't necessarily state hard numbers, it's evident that there are easily over 200 Primark stores situated throughout the UK, Ireland, Spain, among a few other countries such as Portugal and the Neterlands.
The company holds its headquarters in Dublin – one of the largest and most well-known cities in all of Ireland. A Mr. Paul Marchant operates at the CEO, and the retailer is known primarily for supplying goods in fashion and apparel, as well as bags, jewelry and other accessories.
One unique and enjoyable aspect of this chain's clothing is the fact that it is all designed, produced and distributed soley for the network of Primark stores. As a result of this arrangment, there are many brands that you can find only within the walls of one of the stores.
Some of the most notable house-brands include Atmosphere, Opia, Primark Home, Limited Edition, Young Dimension, Backswing, Butler and Webb, and plenty more. All of these labels specialize in something specific, such as formal, casual, kids, or sports attire. Other sections of the namesake have their foot in something outside of clothes altogether, such as cosmetics or home furnishings.
The latest count puts the total number of Primark stores at a staggering two-hundred and twenty-three. A bulk of these, over 150 to be precise, are nestled somewhere in the United Kingdom. Ireland hold close to forty, Spain has twenty, and so on. Belgium only holds home to one, while the Netherlands can claim double that.
The flagship store, known to be the biggest and most impressive store on many accounts, is located in the great city of Manchester, England. Sitting smack on the famous Market Street, the retail outlet is absolutely massive in size. WIth literally thousands of shirts and pants and bags to look at, you could easily spend an entire weekend soaking up the sights and trying on your favorite items in the fitting rooms.
Over the past years Primark has actually been subjected to media fraud and slander over the treatment of the store's garment workers. some concern arose about the health and well-being of some fabricators in India, and the BBC eventually release footage that painted Primark in a very bad light. However, the same network that aired the video clip, later appologized and admitted the segment was not real, that in fact it was entirely ficticious.
Since then, the brand has used the blunder as an opportunity to highlight their many laudable ethical work and trade practices. In 2010 they removed the sandblasting process from their manufacturing lines, citing studies that pointed toward long-term health effects from exposure to fine sand over long periods of time.
The chain is no stranger to good PR, and whether they're touting their fair trade fabrics or happy employee roster, the company is always trying to put their best foot forward and make a good name for themselves. As such, the franchise has jumped on board the bandwagon of "environmental sustainability." Adapting practices such as using recycled bags and recycling already-used bags, or even just installing water-conscious fixtures in the lavatories, they're on the hunt for positive, efficient change.
Not an organization to get comfortable in their quest for "greening," the entity actually launched a clothing-recycling program in 2010. Whether collecting entire boxes of unused clothes, or even just gathering up remnant fabric that can be used by struggling communities, the concept of textile reissuing and recyling is commonsense and much-needed in many of the communities around the county, and even around the world.
For more information on the good initiatives and deeds brought forth by Primark, look into their Newlife Foundation for Disabled Children, which collects donations for needy children, donations that include everything from wheelchairs to hotwheels.
Many people are still confused as to how you can access, shop and buy clothes from Primark online. Sadly, there's no store website that has all their apparel in one place. The site they do have only acts as a hub for general information about the boutique locations, beliefs, business practices, and the like.
There are several items of clothing you can see by visiting the different sections on the site – from mensware to womensware, kidsware to housewares, there's a brief selelection of each to give you an idea of what's on the shelves and hanging on the racks. There are a few prices listed here and there, but for the most part perusing the pages will leave you upset and confused. You cannot buy anything online, but the portal acts as a good preview into what you can purchase and try on when you visit one of the 220+ Primark stores.
I was shopping in primark mullingar the other day when i noticed you have these lovely sports bras in stock. I went looking for my size thinking i might find one to fit, but o no, there was not a one bra that would fit.
Do you have on line shopping available in Spain?
PLEASE OPEN A STORE IN WEST CORWALL-FURTHER DOWN THAN TRURO.
Have you any plans to open a branch in Cumbria? I'm moving to the area next month and only ever shop at Primark , I'll really miss it!
hi is there a Primark in Cyprus Please ?


Benbulbin, with its limestone escarpment resembling the prow of a ship, is one of the most recognisable Irish mountains. It is also steeped in legend. It takes its name from Conall Gulban, son of Niall of the Nine hostages, who was fostered here. Fionn Mac Cumhaill finds his son Oisín naked under a rowan tree on Benbulben, having not seen him for seven years. It is also the spot where Diarmuid Ó Duibhne is finally killed by a boar, after he and Gráinne have been pursued for many years throughout Ireland by Fionn. Sometimes spelt Benbulben. Benbulbin is the 484th highest place in Ireland. Benbulbin is the most westerly summit in the Dartry Mountains area.
pquinn and Benbulbin. Not being a regular visitor to these parts, I am cautious about confirming but have certainly heard rumours and also experienced that access to this hill is not the best.


You are here: Home / People / George R. Mastroianni, Ph.D.
Dr. Mastroianni served twelve years as a US Army Research Psychologist, where he worked in a variety of biomedical laboratories and other military research settings. His research experience included aviation human factors, the effects of laser exposure on human vision and performance, modeling and simulation of human performance, and operational testing of new Army equipment. Dr. Mastroianni retired from the US Army Reserve as a Lieutenant Colonel. After leaving active duty Dr. Mastroianni worked as a defense contractor and then civil servant at an Army engineering and development laboratory. In 1997 Dr. Mastroianni accepted a position as an Associate Professor of Psychology at the US Air Force Academy in Colorado Springs, CO. He taught Biopsychology, Learning and Memory, Sensation and Perception, and Introduction to the Behavioral Sciences. He also served as Chair of the Institutional Review Board and as Chair of the Institutional Animal Care and Use Committee.
Dr. Mastroianni has published widely and co-edited A Warrior's Guide to Psychology and Performance, created on the model of two WWII works produced for soldiers by psychologists. This book has been used as a class text at both the Air Force Academy and West Point.
Dr. Mastroianni is interested in leadership and ethical behavior, and has commented extensively on the 2003 abuses at Abu Ghraib, most recently in Parameters. His main scholarly interests for the last several years have centered on the psychology of the Holocaust. His book, Of Mind and Murder: Toward a More Comprehensive Psychology of the Holocaust, will be available from Oxford University Press September 7, 2018.


text:
UM Hosting Preview Days in October and November
The University of Montevallo will offer all prospective high school and transfer students another opportunity to find out why #YouBelongAtMontevallo by attending one of two Preview Days in the upcoming weeks.
The first Preview Day will be held Saturday, Oct. 1, at the Robert M. McChesney Student Activity Center followed by another opportunity on Friday, Nov. 11, at the Center for the Arts.
To register, visit the  event registration page.
The in-person open house provides welcoming information sessions that invite high school and community college students to experience what it's like to attend Montevallo.
Representatives from the offices of admissions, student aid, student life and housing will be at the sessions to provide information and answer any questions prospective students may have. Additionally, academic interest sessions will be offered for each major, giving prospective students a chance to meet the institution's professors.
Prospective students will get to walk the bricks and see for themselves why UM has been named one of the South's most beautiful campuses by Southern Living magazine. Montevallo Mavens will guide the tours, revealing the cool spots where students hang out, residence halls on campus and more!
U.S. News & World Report recently ranked the University of Montevallo as one of the best colleges in the South in multiple categories for the 14th consecutive year, including No. 6 in the Best Value School in the South category in the 2022-2023 rankings.
Standardized test scores are currently not required for admission and the University has frozen tuition rates since 2018. Learn more about the University of Montevallo at montevallo.edu.
Press ReleasesJanuary 24, 2023
U.S. News & World Report Ranks UM Online Graduate Education Programs Among the Best in State and Nation
The University of Montevallo's online graduate education programs in the College of Education and Human Development ranked in the top 100 in the nation and in the top four in Alabama, according to U.S. News & World Report's 2023 Best Online Graduate Programs rankings. UM's national ranking of 97 is an improvement from last year […]
UM Fishing Team Ranked No. 1 in the Nation in New Season
The University of Montevallo fishing team is ranked No. 1 in the Bass Pro Shops 2022-2023 School of the Year standings released last week. "The fishing team's extraordinary success at the national level is exemplary of a long-standing standard of excellence on our campus," said President John W. Stewart III . "Everyone in the Montevallo family […]
More Montevallo StoriesJanuary 19, 2023
Featured Falcons: Tim Alexander
Where are you from and what city do you currently reside in? I am from Montevallo, but I now reside in Helena. What is your title with the University of Montevallo? I am blessed to be the chief of police and director of public safety. What degrees do you hold and from what schools? I […]

redpajama_set_name: RedPajamaCommonCrawl


A fun run through pretty pine trees.
This run is very similar to Glade Two and Three.
It's a really fun run through pine trees which are a little more open than Glade Two and Three, which makes it a little less challenging.
It also has great snow and varying pitches.
You can find some awesome powder in here a few days after a storm because it's not a high traffic area.
This run is almost always in the shade and the snow stays nice and dry and cold.


You have accessed the Rafna.com website ("the Site"). In so doing, you are deemed to have read, understood and accepted the terms of this notice. The Site is owned and operated by Rafna Industries Limited.
Not all of the products shown on the Site are available in all markets. Rafna Industries Limited. is not responsible for the consequences of importing, even for personal use, any product into a particular country.
Rafna Industries Limited. reserves all rights that are not expressly granted herein.
Subject to the exceptions noted in the next paragraph, all of the trademarks, including word, design and service marks, displayed on the Site are trademarks and registered trademarks of Rafna Industries Limited. No such trademark may be used by a third party without the written consent of Rafna Industries Limited.
The Site and its contents constitute copyright works owned by Rafna Industries Limited. No third party may make any reproduction, publication, transmission, modification or other use, including derivative use, of any part of the contents of the Site unless expressly authorized by a notice appearing on a screen.
All suggestions, ideas, photos, drawings etc. submitted to us by any means, including e-mail, shall become the property of Rafna Industries Limited., and not be treated as confidential or proprietary in any regard vis-à-vis the person or entity making the submission.
It is forbidden to create a hyperlink to the Site or any part of the Site without our prior written consent. Although we may have linked the Site to other people's Websites, we have not reviewed the contents of those other sites and do not necessarily endorse their contents. If you access any such linked site, you do so at your own risk.


When I was nine years old, I spent the summer at my Nanny's (my grandma's) house in Pilot Mountain, North Carolina. Her house was located down a long, dusty, gravel driveway. It was a two-story, white brick home with a green tin roof. Built in the early 1800's, the house served as a plantation home for the surrounding tobacco fields. By the time I came along, the tobacco was long gone, and only cows wandered the pastures surrounding the house.
I learned the hard way about messing with the electric fences that kept the cows in. Besides the whole, I didn't duck low enough to miss it experience, I also attempted to jump it once and managed to get my foot caught in the barbwire, which then tripped me into the electric part. Then came the third time, when I was sent out to field to put the trash in the burn barrel, and I decided that it would be a good idea to put some freshly peeled cucumber skins on the electric fence to entice the cows to come get electrocuted. Karma.. God.. whatever you want to call it, made me quickly learn about what a terrible and mean thing I was plotting. The juices were all over my hands and the cucumber skins, so I got first hand experience on how water can conduct electricity.
I got my first wasp sting near that burn barrel in the pasture that summer. I was throwing dried up cow patties at trees, and just having fun running around when suddenly I felt like someone stuck me with a needle sized blow torch. I screamed and quickly ran to my grandma, who walked me over to my great-grandma who was sitting in a chair watching me acting like a fool. My grandma pulled my arm over to my grandma's face and said, "Momma.. he's been stung by a wasp."
With that cue, my great-grandma leaned over and hocked her entire wad of snuff onto my arm. For those of you who don't know, snuff is powdered tobacco that is held beneath your gums similar to dip. My Granny loved her Dental Mild Snuff, and as long as she wasn't eating, she was dipping it.
The shock of having an old lady spitting a disgusting black wad of saliva and powdered tobacco all over my arm interrupted the pain. I stood there in disbelief, and I had no idea what or why that had just happened. Nanny explained that tobacco would take the sting out, but I was skeptical. I just couldn't process how that would help. Either way, the confusion or the tobacco took the sting away, and a few minutes later I was back throwing dried up cow patties in the creek.
Nanny had one of those old satellite dishes, because you couldn't get cable at her house. She lived way too far out. Unlike those little dishes that hang on the sides of houses today, this sucker was the size of a mid sized car and was the coolest thing I had ever seen. It was also the only form of entertainment around.
I didn't have a portable gaming system, nor did I have my Nintendo with me. There were no laptops, smart phones, or Netflix. The only source of entertainment was the single television in the living room, which was watched on a schedule everyday. For all simplistic purposes it was something like this: Morning News - Price is Right - Noon News - Stories (Soap Operas) - Game Shows - Evening News. Needless to say, there wasn't much enjoyment outside of the Price is Right for a kid.
I helped cook, wash dishes, and clean to pass the time. I filled the rest of my hours playing with an old cassette tape recorder I found. A hobby of mine was to listen to the radio with a cassette on record and pause, as soon as a song would begin, I'd hit the pause button to release it, and begin recording the song. If I didn't like the song, I'd stop the tape, rewind it and repeat. By using the pause button, I eliminated that half a second delay and it also didn't make a popping noise on the cassette. I made some pretty awesome tapes that way.
Well with this cassette recorder that I found, I accidentally discovered that I could use my cheap headphones as a microphone. One side of the headphones would work like a mic, so now I could record intros and dedications for the songs. So I spent hours recording intros for all sorts of songs, then I'd double tape the songs onto a tape with the intro and basically created my own little radio stations that existed just on a few cassettes. It was a d*mn good time.
I spent days working on my tapes, until I eventually ran out of songs. There weren't a lot of FM radio stations available, and the ones that were played country or Christian music. Not genres that would appeal to a kid like me.
One morning after breakfast, I made my way into the pasture to play by the creek. I was throwing rocks into the creek when I discovered there were fish in the creek. I'd never paid much attention to the water before other than running or swinging across it.
I stopped throwing rocks and slowly made my way down the bank watching as the little schools of fish swam. Most were the size of minnows, but I saw a few the size of my hand. I attempted (and failed) to catch some fish by hand, and decided I needed a rod. In the tobacco barn, there were hundreds of old wooden tobacco sticks that were used to hold the crop up. The sticks were pretty much the same size of me, but were small enough to hold in my hand, not too unlike a fishing pole. I grabbed a sturdy stick and ran to the house to tell my grandma about the fish. She saw the stick and offered to find me some string, a hook, and some bait. I walked out with some sewing thread, a safety pin, and a can of corn.
I made my way back down to the creek to the spot where I watched the fish. The creek was only a few inches deep, so finding the fish wasn't difficult. I baited up my new makeshift fishing pole and dropped the little piece of corn right down into the middle of the school. The fish scattered in every direction, no doubt startled by the sudden thump of yellow splashing down onto them. To my surprise, one fish turned back around and went straight for the bait. I pulled the stick ever so lightly and out came a tiny fish. I had actually caught a fish using corn as bait. Of course, looking back, the idea that a safety pin managed to hook the fish is even more incredible.
I did a little dance and put the fish back in the water. I got another piece of corn ready, and dropped it back into the creek. The fish weren't quite as anxious to attack this piece like the last one, but with my unfair advantage of being able to see them, I taunted the little fish until they could no longer resist. I caught one, right after another, and then another. For hours, I walked a thirty foot section of the creek catching fish with corn, and the occasional crawdad by hand. I was having a blast.
Nanny had planned a trip to K-Mart later in the afternoon. I heard her hollering for me, so I ran up to the house to get cleaned up and ready to go to town. I guess my excitement about fishing impressed her, or maybe she just enjoyed having me out of the house, but for whatever reason, she bought me my own little box of fishing line and a little box of hooks to go along with it. I was now properly stocked to create a decent fishing pole.
I got up early the next morning to resume my fishing activities. I made my new tobacco stick rod, and took my remaining corn down to the creek. I had to walk a little further up to the creek to find the fish, but I found them and I started catching them again. I spent the whole day catching fish and using up my can of corn. It was one of the greatest days I ever had.
The following morning I was anxious to get out and begin fishing, but I needed some new bait. My grandma didn't offer me a can of veggies this time, instead, she handed me a baggie with a few old hot dogs in it. I guess since I was a kid, I didn't see anything strange in this. I just happily took my bag of hot dogs, grabbed my pole by the door, and scaled the electric fence out back. I maneuvered through some of the staggered cows, and sat down under the tree where the rope swing was. I tore a tiny piece of the hot dog off, about the same size as a kernel of corn, and put it on my hook. I wasn't sure it was going to garner the same success as the corn, but I didn't think about it much. I just did what I did best, found the fish, dropped the bait on top of them, and waited for them to eat it. I learned after just a minute or two, that fish like hot dogs as much as they like corn.
For a couple of weeks, my days were spent doing pretty much the same thing. Eat breakfast, get whatever random leftover food my grandma gave me for bait, grab my pole, and go fishing. Sometimes she'd even pack me a lunch to take down to the creek. I started exploring more of the creek, and even walked down so far that I couldn't see the house, or the part of the pasture beside the house. It was pretty scary at first, but the creek was a good two hundred yards from the house to begin with, so it wasn't like my grandma was able to watch me even when I was near the house.
After the first few hours, I began feeling comfortable along the creek. I decided to start exploring the woods some. I knew my uncle had an old club house in the woods somewhere, and he warned me to never go near it because it was probably full of snakes. So like a kid, I really wanted to find that club house. It took me about ten minutes to track it down, and I was really disappointed to learn all the doors had padlocks on them. Still, being able to explore in the woods successfully brought me a lot of joy. I decided to see what else I could find.
I spent the remainder of the day walking in the woods alone. I climbed a few trees, ate my lunch on an old stump, and attempted to find an old Indian burial ground that supposedly existed somewhere. I wasn't raised in the country, so this whole experience was totally new to me. It was incredibly liberating. I was the master of my own destiny, and was fully responsible for myself. There was no homesickness or panicking. It was just me smiling and enjoying the day, deep in the woods.
When it started to get dark, I knew I needed to make my way home. I wasn't really sure where I was, or how deep in the woods that I was. The only thing I knew was I had followed the creek on the right side, so I just needed to do the opposite to get back. It was almost pitch black by the time I saw the lights to the house. I walked in like a man. I wasn't ever frightened, or even nervous. Nanny must have known, she didn't have any issue with me being out so late.
I spent my remaining weeks exploring the woods from all directions. I started leaving my fishing pole at the house, and instead just took a lunch and went out to see what I could see. One morning I'd go one way, the next morning another. I found swimming holes, a little sandy islands, and even occasionally came upon an old abandoned house. One day, I came up to a busy bridge that ran above the creek and recognized it was from the main road that led towards my grandma's house a good seven or eight miles a way.
I look back on that time now with almost disbelief. I realize how dangerous my exploration was, and how almost negligent my lack of supervision was. There were so many risk factors in those woods that it seems borderline crazy to allow a child to wander them alone and with no guidance. But you know what? I was fine. Nothing bad happened.
What did happen was I had the best time of my life. To this day, nothing has ever come as close to the freedom and feeling I got wandering the woods alone. It was peaceful, relaxing, and exciting. I learned so much about myself and nature, there was nothing but good that came out of those days in the woods.
When I look back at my childhood, it's easy to remember the toys, games, and movies. These are things that many of us shared, because they were created for mass consumption. But when I think about the best moments, I think about the woods. A single experience that I shared with no one.
If there is a Heaven, and it turns out to be a place where you can relive some great moments, mine will be back wandering those woods and fishing with a tobacco stick.
Great memories, and I envy you being able to enjoy such times. Growing up in the suburbs didn't let me get close to nature.
Great article. As a kid I always loved exploring in the woods. Even now one of my favorite things to do is go for long walks in the woods with my girlfriend. I just find it peaceful and relaxing.
Wow. Just wow. Loved this one. True... we each have fond memories of time spent with things that we all knew of and had as children. And those things are special to us and we share similar feelings and memories with regard to them. And then there are those memories that, like you mentioned, are solely our own and unlike any that others may have had.
And yet this feels familiar to me. I also spent time exploring nearby woods. Both at my childhood home, and the home I spent my teen years growing up in. Both had woods behind them, and both were just calling to be explored.
The home of my childhood featured woods directly behind it that seemingly went on forever (to a kid). At one point, you could exit them and find yourself in a valley with the shadow of a water tower cast over a small junk pile. In the junk pile was a VW Bug surrounded by old appliances and trash. I recall finding an "adult" magazine there, and my friend who had traveled there with me taking quite the interest in it. I used to tell the other neighborhood kids that a little girl died in those woods, in a quicksand pit that I had yet to find. I have no idea why. If you exited another part of the woods, you did so through a large cement culvert under a main highway. At the other end of the culvert was a small body of water. It was very cool.
The home I spent my teenage years in also had a nice wooded area behind it. My brother and I would explore it once in a while. And once, a friend and I went deep into the woods and discovered a rocky outcropping that lined a large hillside. In the outcropping was a cave, but not an enclosed one. One side of the cave was completely open, so that watching us traverse the cave from outside would look like watching ants travel through the dirt in an ant farm. It was really cool. My friend and I were jumping from one side of a small creek to another outside the cave, and when he landed on one side further down, his shoe sank into the mud, and when his foot popped back out, his shoe did not. All we could see was the hole for his foot in the shoe. The shoe itself was buried in the mud. Good times.


Apr 16, 2019TopicParisDay trip to Reims: Is Friday or Saturday better?
Feb 28, 2019ReplyParisRe: Taittinger or Ruinart Cellar tour?
Feb 28, 2019ReplyReimsRe: Taittinger or Ruinart?
Feb 27, 2019TopicReimsTaittinger or Ruinart?
Feb 27, 2019ReplyParisRe: Taittinger or Ruinart Cellar tour?
Feb 27, 2019TopicParisTaittinger or Ruinart Cellar tour?
Feb 19, 2019ReplyParisRe: Stay at Hotel Clement or Hotel Dauphine?
Feb 19, 2019TopicParisStay at Hotel Clement or Hotel Dauphine?


just a quick post: if you haven't already heard kirk degiorgio's recent mix for the consistently excellent bleep43 crew, i strongly strongly suggest you go get it now. i've had this one on constant repeat since it went online, and yesterday found myself accidentally dancing like an idiot to it at sydney airport. luckily i got onto the plane without being picked up by security... anyway, the point is you should download this mix because it is awesome. beautiful downbeats from degiorgio. classy stuff.
awesome podcast of captain kirk!


The 3rd edition of the 'Home Automation Market Report - UK 2017-2021 Analysis' addresses the market for home automation products, which is a rapidly growing market and has benefited from the spread of wireless and app based technologies. The report includes up to date information on recent trends and issues that are likely to impact on the market going forward over the next 5 years.
Detailed analysis and insight - of key trends and demand for home automation systems.
Key technological trends influencing market development.
Detailed analysis of key product sectors - access and security control, climate control, lighting control, home entertainment systems and others (communication systems, home health monitoring etc).
Assessment of the supply side of the market and a detailed analysis of the leading home automation systems manufacturers, suppliers and distributors.
Forecasts of market developments up to 2021 - market size and factors impacting on the market.
Market performance review and forecasts to 2021.
Product group analysis - review of major product sectors.
Review of key players - product mix and market share estimates.
Detailed market data and insight on the home automation market by AMA Research, a leading UK provider of construction market intelligence.
AMX UK, Control4 EMEA, Crestron Electronics, Savant, LightwaveRF plc, Came BPT UK, Leviton Qubino, Rako Controls, Gira, Carlo Gavazzi UK, Cytech Technology, Global Cache, Fibaro UK, Secant, VDA Group, Loxone, Lutron EA, Cooper Controls, JCC Lighting, Philips Dynalite, Ledvance (Osram), RTI (Remote Technologies Incorporated), Helvar, Futronix, BEG (UK), Armour Home Electronics, Nortek, Legrand, Loewe UK, Basalte, Russound, Sonos UK, Pure International, ADT Fire and Security, Verisure Services (UK), Yale UK, SECOM, Ring.com, iSmart Alarm, Response Electronics, British Gas, Google, Tado, Climote, Heatmiser, Heat Genius, Honeywell Control Systems, Myson, PassivSystems, Devolo UK, Green Energy Options (GEO), Inspire Home Automation, SALUS Controls, Green Momit SL, Intelli Heat, Netatmo, Q-bus.
Market definition - components within a home automation system can include devices, sensors, control system hardware, programming of interfaces (eg remote controls, touch screens/pads, etc), cabling infrastructure, wireless links, high-speed internet connection, emergency back-up power source for the control system and the wiring within the home.
Market size and value 2012-2016 and future prospects to 2021 - market structure.
Technologies used - home networks, hardwired and wireless, system protocols - advantages and disadvantages, proprietary systems vs. standardized.
Key influencing factors - social and demographic change, housebuilding, consumer confidence, technological innovations, environmental considerations, etc.
Home automation market - background, definition, components used, key advantages and disadvantages, market penetration, pricing trends, move towards mainstream systems, mix by type of installation etc.
Key trends by application sector - access and security control, climate control (heating and ventilation), lighting control, home entertainment systems, communication systems, home health monitoring, other home systems - market sizes, key trends etc.
Environmental concerns - including building regulations and legislation, energy savings, impact of smart meters, development of smart grid, use with renewables etc.
Technological influences - including internet access trends, super-fast broadband coverage, mobile internet usage, tablet computers, home automation apps, cloud-based systems, touch panel controls, home automation packages, third party products, future developments etc.
Housing market - including housing completions - overall and by dwelling type, use in new homes, second residences, RMI activity, self-build sector etc.
Review and analysis of leading home automation suppliers, including company profile, turnover, key products, market positioning etc.
Distribution - including overall structure and market mix by channel.
Specialist suppliers - home automation distributors and specialist dealers.
Other suppliers - direct from manufacturer, internet sales, non-specialist retailers, electrical wholesalers, utilities.
Market prospects for the home automation market to 2021, with market size estimation.
Factors affecting market - positive and negative influences, trends in key sectors.
Although home automation systems have been available in the UK for many years, it is in recent years they have expanded from an upper market niche into a more mainstream market. This crossover to the mainstream is a key development that is changing the structure of the market with a large variety of entry level and lower cost home automation products having been made available at very competitive prices in the past 2-3 years.
Technological advances driving the home automation market include the progress of wireless controls and "app" or application programme-driven control interfaces, which emphasize user-friendliness. Remote control of the system has meant that the consumer is increasingly able to control all aspects of the connected home from within the home, whilst travelling, at work or even abroad via smartphones, tablets and PCs. Take up of wireless routers/Internet has also benefited the home automation market, with increasing numbers of suppliers offering wireless systems based around the home Wi-Fi network. Growth of wireless systems has also resulted in lower installation costs and less complexity of the installation.
The offering of modular systems which enable future expansion has also driven growth, and in addition, the development of systems aimed at self-installation has expanded significantly helping to substantially reduce costs and make systems more affordable to a wider market. Greater interest and purchase of home security systems and devices has been encouraged by the wider availability of smartphone app controlled devices that are now more affordable and enable greater monitoring and control of security devices: access, CCTV, motion and smoke, water detectors and other devices.
The market is currently considered to be in the initial growth stage, supported by a near tripling in growth 2012-16 which is currently forecast to continue into the medium-term, with market value forecast to nearly double by 2021. Medium-term prospects for home automation remain positive. Recent growth of intelligent heating controls is likely to continue into the medium-term, with rapid innovation likely to be the key driver.
The 'Home Automation Market Report - UK 2017-2021 Analysis' costs £895+VAT (if applicable) for a PDF version.


Jurgen Klopp has launched a passionate defence of Liverpool's huge summer outlay and is not concerned about whatever criticism comes his way.
This has been the most aggressive window in Liverpool's modern history and their spending went beyond £170million last Thursday after they paid a world record £65million for Brazil goalkeeper Alisson Becker to supplement the additions of Naby Keita, Fabinho and Xherdan Shaqiri.
Given that Liverpool also broke the world record for a central defender (£75m) to sign Virgil van Dijk from Southampton, it has left their rivals — specifically the Manchester clubs — to ask questions about comments Klopp made in July 2016 while in Los Angeles.
Klopp raised a smile when the subject was raised ahead of Liverpool's opening International Champions Cup game against Borussia Dortmund but he was firm in his response and made it clear criticism from elsewhere will have no effect.
'We don't care what the world around us is thinking, like Manchester United didn't care what I said,' said Klopp. 'It is only an opinion in that moment. Did I change my opinion? Yes. That is true. But it is better to change your opinion than never have one. That is it.
'Whatever people say about that and bring it up again and again, I have had worse days in my life and worse things. I am fine with that. All good. We have the players we wanted.
Nowhere has that been more evident than Anfield. At the end of the 2016-17 season, Liverpool's club transfer record remained the £35million that was lavished on Andy Carroll in January 2011. Since then, though, Klopp has gone beyond that fee for players SIX times.
Mohamed Salah (£36.9m), Alex Oxlade Chamberlain (£40m) and Van Dijk (£75m), arrived last season, with Keita (£52.5m), Fabinho (£43.7m) and Alisson (£65m) following on this summer. Klopp, though, believes such figures will now become the norm.
'I am sure at this moment we have signed the most expensive goalkeeper,' said Klopp. 'It is early in the transfer window. There will be some nice transfers (elsewhere) to follow. My responsibility is for this club to be as successful as possible.
'It is not for me to push through my thoughts and say we don't want to buy players or pay big money and in the end Liverpool is not successful. That doesn't work. We have a really good squad. To improve it is expensive. Better players than we already have are not waiting around the corner.
'You need to respect contracts but if you are interested in a player you have to try and bring them in. When we are convinced about it, our owners – thank God – believe that much in the project, then they say 'Let's do it'. It has been a good year for us. Really good squad, Played really good football.
'But we needed to replace Emre Can so we brought in Fabinho – good business. Keita was a no brainer. Shaqiri had a lot of good games for Stoke. I know they got relegated but he had a lot of good games. In a team with other players around he can make the next step.
'He has a contract at Dortmund, no? That's the first problem! I like Christian, I known him since he was a kid and he's still not really old.


Hi, all! FTL is an awesome game, isn't it? So many different ships to play with, so many different weapons to try out, so many encounters.
But if you play it a lot, you may find yourself wanting to go beyond those limits. Wanting to make up your own ships, weapons, events. Fortunately, FTL is a very moddable game, thanks to some great tools the modding community have written.
If you instead want to create enemy ships, to attack the player rather than for the player to use, then a lot of this guide will still apply, but bits of it won't. You'll have to explore a bit more.
Ready to create a new playable ship? Then let's get started.
Download FTLEdit from here and GMM from here.
When you've unzipped GMM, put it in the same directory that ftlgame.exe is in. (You can find this by right-clicking the FTL shortcut to start the game, clicking Properties, and clicking Find Target or Open File Location. For Steam installs, look in C:\Program Files (x86)\Steam\steamapps\common\FTL Faster Than Light, or perhaps without the (x86).) When you find ftlgame.exe, I'll call that directory your FTL install directory. After you put the contents of the GMM zip there, this directory should contain modman.exe, ftlgame.exe, and a number of subdirectories including resources/ and mods/ .
I can't provide tech support for these utilities. For problems with GMM ask in the GMM thread.
When you've got them installed, check it's working. Run GMM, click "Beginning Scrap Advantage", click Patch. When GMM finishes, launch FTL (you may have to do it directly rather than letting GMM launch it for you), and start a new game: if you see a blue option saying "(Mod) Strip a near-by asteroid for scrap", the mod is installed!
Since you'll be creating a .ftl mod, and .ftl files are renamed .zip files, you'll also need a zip program installed. I recommend 7Zip, but WinZip will do fine as well.
Okay. With those preliminaries out of the way, time to move on to actual mod design!
The first step is: Figure out what you want your ship to do! Plan the image you're going to use for the ship, what weapons and crew and drones you want the ship to have, any augments, what systems you want to start off levelled-up or have absent entirely.
Obviously you'll need to draw the ship. Where "draw" may mean draw in a graphics program, or it may mean extract them from some other source. For my Starcraft mod, this meant loading the Starcraft editor, zooming in on one ship, taking a screenshot and then tidying it up in GIMP.
You'll also want at this point to give a little consideration to mount points: where do you want the weapons to appear on the outside of your ship?
Now it's time to fire up FTLEdit. If you haven't launched it before, then once it loads you'll need to click Options and specify the path to where your FTL install is. If you've run GMM as I told you to, the resources directory ought to contain unpacked versions of data.dat and resources.dat. This is what you need to point FTLEdit at. There's no OK button in this dialog - just close it once you've filled in the directories. You'll know it's right if you can edit an existing ship successfully.
Click "Show floor" to remove the grey background to the rooms.
Click each room and door in turn and press the Delete key.
Click "Load base", and browse to the image you created earlier. Use "Move base" to position the ship image behind the grid.
Draw the rooms using "Add room". Click-and-drag to initially size a room; right-click-and-drag to resize. I recommend you first place all the rooms, and only then add all the doors using "Add door".
Add systems using the system icons for weapons, shields, etc. You need to specify which room will have a system even if you don't want the ship to start with that system. If you leave any systems unplaced, the ship will be unable to ever gain that system even if the player buys the system in a shop.
In the "Important ship settings" section, it's simplest if you set the "Img" and "Layout" to the same thing. For simplicity this should be all lower case and with no spaces (but underscores _ are fine).
Do not change the "ID" other than to one of the 18 ships in the hangar.
When you're done, click "Export Ship" and "Export the .ftl package". This will produce a first draft of the .ftl file that will form your mod. It's nowhere near finished, but it's a good first step. Copy the .ftl file over to your FTL install's mods/ directory. Make a backup copy of it somewhere else as well if you like.
Right, it's time to fill in the gaps in what FTLEdit produced. Rename your .ftl file to instead end .zip, and unzip it to a directory somewhere. Go into that directory. This I'll call your mod root directory. It should contain two subdirectories, data/ and img/. The img/ directory needs to contain a subdirectory called ship/ with all your ship images in, but FTLEdit doesn't put them in there. So that's your first task: copy your ship image into your mod's img/ship directory. Give it the name [myship]_base.png , where [myship] is what you specified as the "Img" setting in FTLEdit's options.
You also need to add an image called [myship]_floor.png . For most mods this is just an empty transparent .png file, but if you feel like it you can draw a floor layout. If you don't have an easy way to create a transparent png, download this one and save it as myship_floor.png in the same directory, img/ship inside your mod directory.
Navigate to your mod's root directory in Windows Explorer. You should see two directories: img/ and data/ .
Select both img/ and data/ (e.g. by dragging a box around both of them). Right-click one of them and select "Add to zip file myship.zip" or similar.
When 7Zip finishes creating the archive, rename it to myship.ftl .
Move the .ftl file off into your FTL install's mods/ directory.
Run GMM. Select your mod and click Patch.
Launch FTL and take a look at your ship in the hangar!
It's best to do this regularly. For example, after each of the remaining steps, you could do this process to test out your work.
Now, inside your mod's data/ directory is a key file called blueprints.xml.append. Open this file in a text editor (Notepad would do if you don't have anything else).
You ought to be able to see how the XML in this file matches up to what you defined in FTLEdit's options screen. The power levels, weapons and so on should all match what you set. If you want to change them, you can do that here.
In particular, if you want your ship to have fewer augments, weapons or drones than the one you were editing had, then you'll need to remove some lines here, because FTLEdit unfortunately leaves them in.
FTLEdit does now produce a layout xml file, including the offset, which is great as you don't have to do that yourself any more. (Make sure you have the latest version of FTLEdit, version 0.91 as of 31st December 2012, as that step is a real pain to do manually.) But you do still need to define weapon mount points: that is, the places where weapon images poke out from behind the ship.
This is pretty easy. Open the ship image in any image editor. Position your mouse cursor over the point where you want the rear corner of the first weapon to be. Now look at the editor's status bar for two numbers: these are the x and y coordinates of this mount point. Note down these numbers. Repeat for each mount point (you usually want 4). If your ship has the Artillery Beam as on the Federation Cruiser, do the same to get an extra pair of mount point coordinates for where the beam should fire from.
The x and y numbers are the coordinates you noted earlier. "rotate" should usually be true: true means point to the right, false means point upwards. "mirror" should be true for weapons that poke up-and-right (usually on top of your ship) and false for weapons that poke down-and-right (on the bottom). "slide" indicates which direction the weapon slides out when you activate it.
If you have problems with your mod not working, the most common cause is some XML that's slightly wrong or not as FTL expects it. You need to very carefully check your XML in blueprints.xml.append and myship.xml, to make sure that every <tag> either ends with />, or is matched by a closing </tag>.
You need to choose a shield image that's about the right size for your ship. Look at the existing shield images in your FTL install's img/ship/ subdirectory – everything ending in _shields1.png. They're all different sizes, and you want one that's big enough to enclose your whole ship. You don't have to use the same image that the base-game ships use, but you do need to use something that's an ellipse.
(Note that you leave off "_shields1", because FTL adds that at the end.) If you're creating your own shield image file called myship_shields1.png , you don't need to add to the blueprint; just put the shield image in your mod's img/ship directory.
The second half of this task is to edit the ELLIPSE dimensions in the myship.txt file. This is important because if you don't change it, then no matter what the image looks like, the shield will only protect rooms within a 400x400px circle: outlying rooms can be hit even if your shields are up! You need to set the numbers after ELLIPSE to half the width and half the height of the shield image.
This would be a good time to rezip your mod and check it out again, following the same instructions as in step 6.
You should choose or create images for the individual rooms in your ship. Go and look in resource.dat-unpacked/img/ship/interior . All those images are possibilities to appear in the rooms of your ship. This isn't just graphical polish, because you need to select which space of the crewable rooms is the one where the operator needs to go. By default, FTLEdit doesn't give sensible settings here. Room images come out very distorted, and some rooms can end up not crewable at all, which imposes a major gameplay penalty.
So what you need to do is bring up your ship, either in FTL with the mod installed, or in FTLEdit; simultaneously open the blueprint in a text editor; and also have a thumbnails view of img/ship/interior to hand. For each of the systems and subsystems on your ship - probably all eleven, unless you've deliberately omitted some - you need to do the following steps.
Note the room's size. For example, the weapons room in your ship might be width 2 and height 1.
Look in img/ship/interior for an image for that system of that size. Note that each square of a room is precisely 35x35 pixels: so in the example we're looking for a weapons system image that's 70px wide by 35px high. If you look in img/ship/interior you'll see that room_weapons_8.png is the only one of that size.
Edit the ship blueprint's line for that system to specify the image in question. E.g. you should update the <weapons> line to say img="room_weapons_8".
Take particular note that the line used to end /> but now it ends >.
If you don't want any slot blocked – likely to be the case if your medbay is 2 spaces or smaller – then the magic code is to use slot minus two, i.e. <number>-2</number> .
What if none of the existing room images fit your room? Then you'll have to either redesign the room layout in FTLEdit to fit the available room images, or create a room image for your desired size. It's easy enough: just choose an image similar to the one you need, open it, expand the border to the size you want, and move bits of room image around until they're on the appropriate edges. Save it into your mod's img/ship/interior directory with a new name, like room_weapons_51.png. Then do the same with the three coloured glow images for the computer screen, with names room_weapons_51_glow1.png. (These should just need positioning correctly in the new border.) Then specify that new name in the blueprint: img="room_weapons_51"
If you're a stickler for making sure that none of the bits of cloaking system or shield system go in front of doors, you may need to edit images to move bits around for several other room images.
Any images you specify that aren't the right size will be stretched or shrunk to fit. This looks awful for rooms with computer terminals, but can be okay with some others, especially the sensors room.
For 1x1 system rooms, you may want to just use img="computer", a free-standing terminal without any accoutrements around it.
This technically isn't required, but if you don't do this, whenever anyone in your ship cloaks they'll see a sudden black box appear behind the ship.
The image you create should be a version of the ship image, but with the edges highlighted in grey/white. Importantly, you also need to expand it away from the border by 10px in each direction: so the cloak image should be 20px larger than the ship image in both x and y. I found the following sequence of GIMP commands produced a reasonable cloak image, but you can produce one however you like.
We're nearly done. There's still one step you should do before releasing your mod, which is to create a thumbnail view of your ship for the Select Your Ship screen and the Highscores screen.
It's mainly a case of shrinking the ship image to 191 x 121 px and saving it in your mod's img/customizeUI directory. To fit the look of the base-game ships, you should probably add a small glow behind the thumbnail. You can do this in GIMP using feathered selection similar to how I described for creating a cloak image.
Note that in the hangar's Select Your Ship screen, only the primary versions (Type A) of each ship are shown. However, you should create thumbnails for any secondary versions (Type B) you overwrite too, so that they show up correctly in the highscores list.
This isn't necessary, and a lot of modders skip this step entirely. But if you want to make your ship looks nice when it explodes, then take a look at the existing ships' _gib1.png through to _gib6.png, and at the section of an existing ship's .xml file such as circle_cruiser.xml (in data.dat-unpacked), and make yourself some images for the different parts of the ship, and define the <explosion> to say which direction each of the gibs should fly off in. Note that gib1 will be on top of the rest, then gib2, and so on, down to your last gib (often gib6) which will be underneath all the others.
Now you've got all the skills you need to make a ship every bit as good as the ships in the base game. But odds are, your first design will be missing the mark somewhere. It might be too strong, too weak, unbalanced in one way or another. The only way to find out is to playtest it, and then playtest it some more! Keep on trying changes until you're happy with the quality level, and then upload the .ftl file somewhere publicly accessible and go and post about it on the FTL Working Mods Forum!
This tutorial was written by alextfish, creator of the Starcraft mod. SDG.


Back in the 1960s when NASA were planning on getting people into space they ran various programs to select the finest astronauts for the job – or so we are told. In actual fact, there were a number of candidates that out-performed the successful ones but only failed on some arbitrary rules that were put in place – specifically, rules that were impossible for women to meet. These high-performing women became known as the Mercury 13 and are the subject of this Netflix Original Documentary.
During the original program one of the doctors involved, Dr. Lovelace, decided to start, and fund, his own program where he carried out the same tests on female pilots who wanted to be astronauts. The women involved were Myrtle Cagle, Jerrie Cobb, Janet Dietrice, Marion Dietrich, Wally Funk, Sarah Gorelick (later Ratley), Jane "Janey" Hart (née Briggs), Jean Hixson, Rhea Hurrle (later Allison, then Woltman), Gene Nora Stumbough (later Jessen), Irene Leverton, Jerri Sloan (née Hamilton, later Truhill), Bernice Steadman (née Trimble). They were aged between 23 and 41 at the time.
"Mercury 13" takes the form of talking heads interspersed with archive footage as well as some great aerial shots of the pilots. We hear how the women in the Mercury 13 were experienced pilots with thousands of flying hours under each of their belts. We also learn more about their feelings surrounding the sexism in the government, NASA and society in general. Jacqueline Cochrane failed the tests but is still one of the main people in the documentary.
The documentary is as much about women in space as it is about sexist attitudes in the 1960s. Looking at it now, the 'rules' as to why women couldn't be astronauts are laughable – they just make no sense when put into a modern perpsctive. But that was society at the time and it's clear that the women involved are aware of this. While they obviously didn't realise their dreams of being astronauts, they know that their experience paved the way for the first female astronauts during the shuttle program years later.
It was very interesting to watch "Mercury 13" – I only have a vague interest in space exploration so was not aware of this story until I saw the trailer. So for me it was all new and very interesting to learn about. You may already know about the Mercury 13 program but even if you do, then there is a good chance that a lot of the archive footage, as well as the interviews, will be new to you. Don't watch it to get enraged by sexist attitudes, watch it to hear about the stories of these amazing women.