Arecanut or Betelnut refers to the seed of the Areca Palm tree. The seeds mixed with the leaves and are eaten in Asia and the South Pacific.
Arecanut Palm leaves and nuts are known to have a host of medicinal benefits. In Ayurveda, the nut has been used as an aphrodisiac. In addition, Arecanut Palm leaves stimulate the central nervous system, relieve pain, stomach ailments, gynecological disorders and a sore throat.
Arecanut contains an alkaloid compound called arecoline. Arecoline produces a warming, invigorating and refreshing effect soon after chewing. This sensation, similar to that of nicotine, lasts for a very short time.
Arecanut tannins are predominantly catechol tannins, which are beneficial in diarrhea and urinary disorders. In combination with other astringent and styptic herbs, Arecanut is used as a major constituent in Ayurvedic remedies for gynecological disorders.
The nut has been traditionally used in treating sore throats.
The anti-inflammatory properties of Arecanut Palm leaves are beneficial in conditions such as arthritis.
Arecanut stimulates the central nervous system and serves as tonic for exhaustion and debility.
The Ayurvedic Pharmacopoeia of India documents the use of the nut in leucorrhea and vaginal laxity.


text:
EN + 0
Arrival 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 2022 2023
Nights 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Diving and Snorkelling
Visit Elba / Things to do / Outdoor Sports / Diving and Snorkelling
Hotel Ilio
The "treasures" of the seabeds of Capo Sant'Andrea on Elba
For lovers of scuba diving, the seabeds around Capo Sant'Andrea are an exciting world to be explored. Here in Sant'Andrea, marine biologists have observed that the posidonia, a marine plant with long and thin green leaves, sexually reproduces, which is a rare event in this part of the Tyrrhenian and is testimony to the cleanness of these waters. Its fruit, similar to small olives (they are actually called "sea olives") are visible in the spring. The carpets of posidonia on the seabed are the ideal habitat for numerous species of fish living here in abundance. Shoals of small Mediterranean chromis, which are electric blue in colour, swim among the brilliant green of the posidonia, together with wrasses, needle fish, bream and porgies… there are also starfish and noble pen shells on the seabed. For more experienced divers, there are some very interesting dives near the rocks known as the "Formiche della Zanca", to the west of Sant'Andrea. Descending down the seaward side, at depths of 40 metres and more, there are intensely coloured gorgonians to be found, and it is easy to come across lobsters, moray eels, large fishing frogs and dentex. Moon fish can also be seen during the summer, with a bit of luck.
This sea also hides other treasures. Opposite Sant'Andrea, the wrecks of two cargo ships form Roman times have been found, the first is almost on the coastline, at a depth of only 10 metres, and the second 193 metres off the coast at a depth of about 45 metres. The former transported sacks of grain, the latter amphorae of wine from Campania. Many of these findings are now exhibited in the archaeological museums in Marciana and Portoferraio, but, in spite of everything, the seabed remains the custodian and natural museum of these two shipwrecks.
SNORKELLING AND DIVING TO DISCOVER THE UNDERWATER WORLD OF CAPO SANT'ANDREA ON ELBA
There are innumerable plants and many unexplored corners in the sea at Capo Sant'Andrea, and enjoying these marvels is now a sport available to everyone. This is called snorkelling, or sea-watching, and is a chance for even the laziest of seaside tourists who love nothing more than a sun-bed and an umbrella to sit under, to change a normal holiday into an extraordinary experience rich in pleasant surprises; a delight for the eyes and the soul.
All that is needed is a mask and a snorkel, and the desire to observe the beauty of nature. Alone or with a guide, from June to September, excursions led by expert marine biologists can be enjoyed at Capo Sant'Andrea. A light wetsuit is preferable, to protect the body from abrasions, the cold and sunburn, depending on the season. An underwater camera is a must to make this adventure truly unforgettable: one can see but not touch things down here!
For more experienced divers, or those who want to learn about life on the seabeds, there is a diving centre in Sant'Andrea which hires specific equipment and organises scuba diving courses and guided immersions with PADI and SSI instructors.
Hotel Ilio Hotel of the year
Unexpected hotels
New Elba Hotels
Seafront Elba Hotels
Charming Elba Hotels
social_facebook	social_twitter	social_instagram	social_tumblr	social_pinterest	social_youtube	Contacts
Discover Elba
Elba's top ten
Elba in three days
Capo S. Andrea
Western Ring
Mineral Side
Theme Breaks
The beaches of Elba
Beaches on northern side
Beaches on southern side
Beaches on eastern side
Beaches on western side
Museums and attractions
Elba and its history
Napoleon on Elba
Bio Watching
Traditional handicrafts and typical products
Elba cuisine
Wine and gastronomy
Ferry special price
Car special price
Hotel special price
Taxi Transfer
Helicopter Taxi
Elba weather
Hotel of the year
Charming Accommodation
Charming Hotels
New Hotels
Enchanting B&Bs
Mid-tier accomodation
Copyright © www.visitelba.com
Legal notice > Media >
Questo sito o gli strumenti terzi da questo utilizzati si avvalgono di cookie. Può trovare maggiori informazioni e dettagli sulla nostra pagina Informativa sulla Privacy e Cookies - Informativa ai sensi del Regolamento UE 2016/679 GDPR Accetto Leggi tutto

redpajama_set_name: RedPajamaCommonCrawl


text:
ADOLPH GOTTLIEB "BLUE NIGHT" SCREENPRINT, 1970
Compared with his peers, the original Abstract Expressionist posse, including Arshile Gorky, Hans Hoffmann, Jackson Pollock and Mark Rothko, Gottlieb arguably created the most easily recognizable paintings.
His signature forms include bursts, circles and "labyrinths". While the forms appear to be expressionist or even automatic shapes they are often highly symbolic and inspired by primitive art.
Gottlieb's practice is strongly connected to gestural painting, yet his work also posses a calm and almost contemplative energy that is often at odds with the work of Gorky, Hoffmann and Pollock (whose canvases can be heavy with angst with violent or chaotic application of paint)
While in recent years, Adolph Gottlieb has been overshadowed by his friend and colleague Mark Rothko, Gottlieb is still one of the most important and influential American abstract painters...and one of Caviar20's favorites.
Gottlieb was an exceptional colorist, as evidenced here in "Blue Night". In this highly collectable screenprint, a vibrant shade of blue serves as the background for Gottlieb's signature circular form.
Printed at the height of Gottlieb's career in the 1970s, "Blue Night" has a subtle composition and striking palette which remain as fresh as ever.
Published by Marlborough Graphics
Signed, numbered, and dated 1970 by the artist
From an edition of 200
35.5"H 28.5"W (artwork)
24"H 17.5"W (artwork)


text:
Home Publications
Search for publications associated with the studies in this repository
A Cohort Study to Investigate the Value of Exercise in ESRD/Analyses Designed to Investigate the Paradox of Obesity and Survival in ESRD (1) A Prospective Database of Infants With Cholestasis (120) Acute Liver Failure Study Group: Adult Acute Liver Failure Study (68) Acute Renal Failure Trial Network (10) Adolescent Bariatrics: Assessing Health Benefits & Risks (2) Adult Living Donor Liver Transplantation Studies (72) African American Study of Kidney Disease and Hypertension Cohort Study (12) African American Study of Kidney Disease and Hypertension Study (Clinical Trial) (33) Aprepitant for the Relief of Nausea in Patients With Chronic Nausea and Vomiting of Presumed Gastric Origin Trial (1) Assessing Long Term Outcomes in Living Kidney Donors (3) Behavior Enhances Drug Reduction of Incontinence (1) Biliary Atresia Research Consortium (13) Biliary Atresia Study in Infants and Children (2) Boston Area Community Health Survey (105) Careful Urinary Tract Infection Evaluation (1) ChiLDReN Network (20) Chronic Prostatitis Collaborative Research Network (37) Chronic Prostatitis Collaborative Research Network Clinical Trial- Alfuzosin (1) Chronic Prostatitis Collaborative Research Network Clinical Trial- Ciprofloxacin and Tamsulosin (1) Chronic Prostatitis Collaborative Research Network Clinical Trial- Pregabalin (1) Chronic Renal Insufficiency Cohort Study (66) Complementary and Alternative Medicine for Urological Symptoms (3) Comprehensive Dialysis Study (1) Consortium for Radiologic Imaging Studies of Polycystic Kidney Disease (10) Continuous Glucose Monitoring and Insulin Pump Therapy in Diabetic Gastroparesis (1) Cysteamine Bitartrate Delayed-Release for the Treatment of Nonalcoholic Fatty Liver Disease (NAFLD) in Children (1) DILIN: Prospective (2) Diabetes Control and Complications Trial (226) Diabetes Control and Complications Trial / Epidemiology of Diabetes Interventions and Complications (226) Diabetes Prevention Program (23) Diabetes Prevention Program Outcomes Study (9) Diabetes Prevention Trial of Type 1 Diabetes (45) Dialysis Access Consortium (4) Dialysis Access Consortium GRAFT (1) Effect of Clopidogrel on Early Failure of Arteriovenous Fistulas for Hemodialysis (1) Effect of Metabolic Control at Onset of Diabetes on Progression of Type 1 Diabetes (1) Efficacy of Amitriptyline for the Treatment of Painful Bladder Syndrome (PBS) in Newly Diagnosed Patients (1) Evaluate the Efficacy of Intravesical Bacillus Calmette Guerin (BCG), for the Treatment of Interstitial Cystitis (IC) (1) Evaluating Predictors and Interventions in Sphincter of Oddi Dysfunction (1) FONT 2 Study: Novel Therapies for Resistant FSGS Phase II Clinical Trials (1) Familial Barrett's Esophagus Consortium (1) Family Investigation of Nephropathy and Diabetes (8) Folic Acid for Vascular Outcome Reduction in Transplantation Trial (7) Frequent Hemodialysis Network (1) Frequent Hemodialysis Network: Nocturnal Study (1) Functional Dyspepsia Treatment Trial (1) Gastroparesis Clinical Research Consortium (23) Gastroparesis Registry (1) Genetic Resources Investigating Diabetes (77) Hemodialysis Study (68) Hepatitis B Research Network (24) Hepatitis B Research Network Adult Cohort Study (1) Hepatitis B Research Network Pediatric Cohort Study (1) Hyperglycemia and Adverse Pregnancy Outcome Follow-Up Study (1) Inflammatory Bowel Disease Genetics (48) Interstitial Cystitis cohort study (33) Intraprostatic Injection of Botulinum Toxin for the Management of Benign Prostatic Hyperplasia (MIST) (1) Islet Transplantation in Type 1 Diabetes (9) Liver Transplantation Database (30) Liver Transplantation Database Follow Up (2) Longitudinal Assessment of Bariatric Surgery (386) Longitudinal Study of Genetic Causes of Intrahepatic Cholestasis (2) Look AHEAD: Action for Health in Diabetes (5) Lower Urinary Tract Dysfunction Research Network (3) Medical Therapy of Prostatic Symptoms (20) Middle-School Based Primary Prevention Trial of Type 2 Diabetes (14) Modification of Diet in Renal Disease (64) Multidisciplinary Approach to the Study of Pelvic Pain (1) N/A (2) NAFLD Adult Database 2 (1) NAFLD Pediatric Database 2 (1) National Analgesic Nephropathy Study (1) Nephrotic Syndrome Study Network (13) Nonalcoholic Fatty Liver Disease (NAFLD) Adult Database (1) Nonalcoholic Fatty Liver Disease (NAFLD) Pediatric Database (1) Nonalcoholic Fatty Liver Disease Database (1) Nonalcoholic Steatohepatitis Clinical Research Network (157) Nortriptyline for Idiopathic Gastroparesis (23) Novel Therapies to Treat Resistant Focal Segmental Glomerulosclerosis: Phase II Clinical Trial (1) Pediatric Acute Liver Failure (1) Pegylated Interferon +/- Ribavirin for Children with HCV (8) Preservation of Pancreatic Production of Insulin Through Immunosuppression (1) Program to Reduce Incontinence by Diet and Exercise (21) RAND Interstitial Cystitis Epidemiology Study (1) RIVUR Network (3) Safety and Effectiveness of Low Molecular Weight Sulfated Dextran in Islet Transplantation (1) Screening for Impaired Glucose Tolerance (5) Silymarin Trials for Hepatitis C and NASH (5) Steroids in the Treatment of Biliary Atresia (3) Studies of Pediatric Liver Transplantation (30) The Chronic Kidney Disease in Children Cohort Study (219) The Effects of Rituximab on the Progression of Type 1 Diabetes in New Onset Subjects (1) The Environmental Determinants of Diabetes in the Young (37) The Farnesoid X Receptor Ligand Obeticholic Acid in NASH Treatment (1) The Finland-United States Investigation of NIDDM Genetics Study (4) The Genetics of Kidneys in Diabetes (24) The HALT Progression of Polycystic Kidney Disease (3) The Hepatitis C Antiviral Long-Term Treatment Against Cirrhosis Trial (7) The Nonalcoholic Steatohepatitis Research Network (NASH CRN) Pioglitazone vs Vitamin E vs Placebo for Treatment of Non-Diabetic Patients With Nonalcoholic Steatohepatitis (9) The Stress Incontinence Surgical Treatment Efficacy Trial (5) Treatment Options for Type 2 Diabetes in Adolescents & Youth (1) Treatment of Nonalcoholic Fatty Liver Disease in Children (5) Trial Of Mid-Urethral Slings (5) TrialNet (4) TrialNet 06: Nutritional Intervention to Prevent (NIP) Type 1 Diabetes Pilot Trial (1) TrialNet 08: Effects of Recombinant Human Glutamic Acid Decarboxylase (rhGAD65) Formulated in Alum (GAD-alum) on the Progression of Type 1 Diabetes in New Onset Subjects (1) TrialNet 09: Effects of CTLA-4 IG (Abatacept) on the Progression of Type 1 Diabetes in New Onset Subjects (1) TrialNet 14: Effects of Canakinumab on the Progression of Type 1 Diabetes in New Onset Subjects (1) TrialNet Pathway To Prevention (formerly Natural History Study) (2) Type 1 Diabetes Genetics Consortium (77) Value of Urodynamic Evaluation (2) Viral Resistance to Antiviral Therapy of Chronic Hepatitis C (28)
Request Related
Repository Related
Found 0 results in 2 milliseconds — Export these results


text:
Q: calcular fecha de entrega solo tomando en cuenta los dias laborables en javascript var fechaIncio = new Date();
var fechaTotal = new Date();

var FechasFestivas = [
    [1],
    [40],
    [19, 25],
    [19, 22],
    [1],
    [24, 29],
    [40],
    [15],
    [40],
    [9, 12],
    [1],
    [6, 25],
];

fechaTotal.setDate(fechaTotal.getDate() + 10);
var diaSaDo = 0;
var diafestivo = 0;
var dom = 0;
var sab = 6;

while (fechaIncio.getDate() < fechaTotal.getDate()) {
    document.getElementById("a").prepend("dia inicio = " + fechaIncio.getDate() + "---");
    if (fechaIncio.getDay() == dom || fechaIncio.getDay() == sab) {
        diaSaDo++;
    } else {
        for (var i = 0; i <= FechasFestivas[fechaIncio.getMonth()].length; i++) {
            if (fechaIncio.getDate() == FechasFestivas[fechaIncio.getMonth()][i]) {
                diafestivo++;
            }
        }
    }
    fechaIncio.setDate(fechaIncio.getDate() + 1);
}

fechaIncio.setDate(fechaIncio.getDate() + diaSaDo + diafestivo);

A: la verdad que no vi donde. soy nuevo consultando por aqui bueno lo siguiente del codigo es uno de prueba que tengo que su funcion es dado la fecha actual al hacer un pedido hacer una entrega en 10 dias o x cantidad de dias pero que no cuente los fines de semana y los dia no laborables como feriados festivos y dar el dia exacto como por ejemplo hoy viernes/21/12/2018 se hace un pedido de 5 dias comienza a contar de desde el lunes/24/12/2018 sin contar sabado y domingo y el martes 25/12/2018  porq es dia feriado y sigue contando miercoles/26/12/2018 asi hasta los 5 dias que seria el sabado/29 y domingo/30 no se cuentan porq es fin de semana y el lunes31/12/2018 que seria los 5 dias estimado de la entraga del pedido

A: Espero que esto te ayude, por lo menos así lo haría yo.
En primer lugar debemos establecer un par de cosas en tu pregunta, ya que voy a asumirlas de acuerdo al código que has publicado.
Lo primero es establecer que el Array de festivos contiene los días festivos. Sin embargo en tu ejemplo pones más de un par de veces el número 40, y que yo sepa, al menos en la Tierra, los meses tienen a lo sumo 31 días. Imagino que es un error de tipeo y así lo asumo. También asumo que el Array de días festivos contiene los días en formato Number, agrupados a su vez en arrays de acuerdo al número del mes.
Lo segundo que voy a asumir, ya que no aportas información al respecto, es que la fecha que recibes como fecha de inicio viene en algún formato válido, sea String, Number o Date.
Leyendo bien tu comentario, veo que la fecha de pedido es la fecha actual, por lo tanto hago las modificaciones necesarias.
Hechas esas dos acotaciones, vamos a lo que nos ocupa (usaré sintaxis de ES6 )

// Array con los días festivos de cada mes (ejemplo de muestra)
// Nótese que si un mes no tiene festivos debemos incluir igualmente un array vacío, (ejemplo: Noviembre)
const festivos = [[1, 7, 8],[27, 28],[1],[6, 9],[1],[15],[9],[17, 18, 19],[10],[12, 23],[],[25]];

// JavaScript usa como estándar el formato de fecha ISO (YYYY-MM-DD)
// const diaPedido = new Date('2019-01-04');
// Leyendo un poco tu comentario con más atención veo que la fecha de pedido
// es la fecha actual, por lo tanto edito para que la respuesta se ajuste a tu pregunta

const diaPedido = new Date(Date.now());
// Construimos la fecha usando como parámetro el valor devuelto por Date.now().

// La siguiente función recibe como parámetros:
// diaPedido: Es el día inicial, (cuando se recibe un pedido), tipo: Date
// diasPactados: Es la cantidad de días laborales que han sido pactados para entrega, tipo: Number
// festivos: Es el Array que hemos inicializado anteriormente y contiene los días festivos del año, tipo: Array
//      Se espera que los días festivos sean fijos de año en año, pero pudieran modificarse.
//      Así que sólo hay que asegurarse de pasar el array de festivos mas actualizado a la función.

function calculaEntrega(diaPedido, diasPactados, festivos) {
    // diaPropuesto: almacena el mismo valor de diaPedido, en caso que diasPactados = 0, la función
    // devolverá el valor de diaPedido (para mi tiene lógica)
    let diaPropuesto = new Date(diaPedido.getFullYear(), diaPedido.getMonth(), diaPedido.getDate());

    // iniciamos un contador en 1 para calcular la fecha de diaPropuesto.
    let i = 1;

    // El siguiente bucle se ejecutará hasta que se consuman los diasPactados
    while (diasPactados > 0 ) {
        // En cada iteración asumimos que el día no es festivo
        let festivo = false;
        // incrementamos en 1 el diaPropuesto para efectuar las verificaciones
        diaPropuesto = new Date(diaPedido.getFullYear(), diaPedido.getMonth(), diaPedido.getDate() + i);
        // Nótese que usamos formato ISO y solo incrementamos el día, dejando el mes y el año iguales
        // Alguien preguntará: ¿Y que pasa si la fecha es, digamos, 31 de Enero y le aumentamos 1 día?
        // Pues la respuesta lógica es que daría 32 de Enero, lo cual no es una fecha válida.
        // Sin embargo, JavaScript es un poco mas atento que nosotros y simplemente realiza la aritmética
        // necesaria para convertir el 32 de Enero en 01 de Febrero, y así nos salva el pellejo.
        // Véase bien que usamos los métodos getFullYear(), getMonth() y getDate().
        // Esto funciona siempre y cuando hagamos la construcción del objeto Date de esta manera.
        // Ya irá alguno de avispado y pondrá: fecha = new Date('2019-01-32'); lo cual le dará 'fecha inválida'
        // Alguien un poco mas versado puede aclarar este asunto, pero no es el objetivo en este momento.

        if (diaPropuesto.getDay() > 0 && diaPropuesto.getDay() < 6) {
            // Aquí hemos usado el método getDay() del objeto Date, este método devuelve un valor entero entre 0 y 6,
            // donde 0: Domingo, 1: Lunes, ... , 6: Sabado.
            // Los días laborables van del 1 al 5 (ambos inclusive)

            // Si el día es laborable debemos entonces verificar si es festivo

            // Aquí es importante que entendamos lo siguiente:
            //  * Por cada iteración debemos obtener el mes en el que estamos comprobando el festivo
            //  * Vamos a comparar el día propuesto con el Array de festivos, usando el mes correspondiente

            let m = diaPropuesto.getMonth();
            let dia = diaPropuesto.getDate();

            // Felizmente para nosotros el método getMonth() devuelve un entero entre 0 y 11, que se
            // corresponde con cada mes del año, y digo felizmente, porque los índices de nuestro Array
            // van de 0 a 11 también.

            for (let d in festivos[m]) {
                if (dia === festivos[m][d]) {
                    festivo = true;
                    //Aquí no hay mucho que aclarar, si es festivo ya no sigo comprobando el resto del mes.
                    break;
                }
            } // Fin bucle for

            if (!festivo) {
                // Si las condiciones son: Laborable y No Festivo, descuento el diaPactado.
                diasPactados--;
            }
        }

        // Por último, debemos incrementar el número de días que sumaremos al diaPropuesto
        // en cada iteración
        i++;
    } // Fin de bucle while

    // Devolvemos el resultado
    return diaPropuesto;

} // Fin función

// Finalmente asignamos nuestra variable diaEntrega, la cual contendra un Objeto Date valido indicando
// la fecha en que el pedido sera entregado.

const diaEntrega = calculaEntrega(diaPedido, 10, festivos);

console.log(`Dia de pedido: ${diaPedido.toString()}`);
console.log(`Dia de entrega calculado: ${diaEntrega.toString()}`);

Espero que esta respuesta sea satisfactoria.
Nota: Los festivos son ficticios.

redpajama_set_name: RedPajamaStackExchange


Our healthcare trial attorneys have an in-depth and working knowledge of the myriad of federal and state laws that govern healthcare providers. Our experienced trial attorneys have litigated numerous cases before federal and state agencies and courts as well as private arbitrations. We represent individual providers as well as medical groups, IPA's and other providers in complex litigation.


Capital Plumbing and Drainage provides a complete range of specialist drainage solutions in a professional and friendly manner. We only employ experienced plumbers and engineers, ensuring that you receive the very highest levels of quality and service.
From repairing a leaking radiator valve to the design and installation of a modern, high efficiency central heating system.
A complete range of plumbing services including maintenance and repair and bathroom/en suite installations.
Our specialist drainage team are on hand 24 hours a day, 7 days a week to clear blocked drains, lay new drainage services or provide CCTV surveys.
Whether you require power flushing, repair of a drain or unblocking of a drain we can help. For more information, or simply to talk to us about your particular project or problem, please contact us.


text:
Self healing nano spaceships travelling at a fifth the speed of light help NASA explore the heavens
By Matthew Griffin Space 12th December 2016
Many regions of space are still off limits to us because of the extreme distances involved but new self-healing, nano sized spacecraft that can travel at a fifth of the speed of light will help us unlock more mysteries of the universe
Working with the Korea Institute of Science and Technology (KAIST), NASA is pioneering the development of tiny nano sized spacecraft that are made from a single silicon chip that could slash interstellar exploration times, and costs.
Last Wednesday at the International Electron Devices Meeting in San Francisco, NASA's Dong-Il Moon presented the teams new technology aimed at ensuring the miniature spacecraft can survive the intense radiation they'll encounter on their journey.
Space Tango unveil their autonomous, robotic space based manufacturing platform
Using a silicon chip as a spacecraft it's estimated that it could travel at one fifth of the speed of light and reach our nearest stars in just 20 years – that's hundreds of times faster than today's best spacecraft. But twenty years in the harsh environment of space is much more than any ordinary silicon chip can endure because, asides from the huge swings in temperatures and space dust and debris that could pummel them, they'd also be bombarded by ginormous doses of high energy radiation.
These doses of radiation would lead to the accumulation of positively charged defects in the chip's silicon dioxide layer, where over time they'd degrade the devices performance.
One of the most serious consequences for the miniature spacecraft would be when an increase in the current, caused by a radiation spike, leaks through a transistor when it is supposed to be turned off. But there are also other issues, such as a shift in the voltage at which the transistor turns on – all seemingly small details but fatal to a chip.
Ordinarily the team would have two options, the first would be to select a path through space that minimizes radiation exposure and the second would be to add shielding. But the former leads to longer missions and constrains exploration, and the latter adds weight and eliminates the advantage of using a miniaturised spacecraft in the first place.
It's electric, US to cover 25,000 miles of roads with charging stations
A far better approach, argues Moon, is to let the devices suffer damage but then to add an extra contact to the transistors, and use this contact to heal the devices with heating.
"On-chip healing has been around for many, many years," says Jin-Woo Han, a member of the NASA team, "milestones included the revelation in the 1990s – by a team at the National Microelectronics Research Centre in Ireland – that heating could repair radiation sensors, and far more recently, Macronix demonstrated that heat could be used to heal flash memory."
As a consequence the team have turned to KAIST's latest experimental self-healing technology – a "Gate-all-around" nanowire transistor. Gate-all-around nanowire transistors differ from regular transistors in that they use nanoscale wires, often made from graphene as the transistor channel instead of today's fin-shaped channels.
The gate – the electrode that turns on or off the flow of charge through the channel – completely surrounds the nanowire and if you add an extra contact to the gate you can pass current through it and it's that current that will heat the gate, and the channel it surrounds, and fix it. And there it is – a self-healing chip.
Nanowire transistors are ideal for space because they have a relatively high degree of immunity to cosmic rays because they are very small, with dimensions in the tens of nanometers.
"The typical size for [transistor-dimensions on] chips devoted to spacecraft applications is about 500 nanometers," says Choi, "if you can replace 500 nanometer feature sizes with 20 nanometers feature sizes, the chip size and weight can be reduced, and costs fall too."
New solid state coolant could spell the end of exploding batteries
The Gate-all-around device may not be that well known today, but production is expected to rocket in the early 2020s, when silicon foundries will use it in place of the today's FinFET for producing circuits featuring transistors with gate lengths smaller than 5-nm.
KAIST's new technique has so far been used as the foundation for three key building blocks of the single chip spacecraft – the microprocessor, a DRAM memory module to support it and a flash memory module that will serve as the nanocrafts hard disk.
The new technique will let the team repair any radiation damage many times over with experiments showing that flash memory can be recovered up to around 10,000 times and DRAM can be returned to its pristine state 1012 times – the figure is even higher with logic devices and all of these results indicate that a long interstellar space mission could be feasible, especially if the chip is powered down every few years, heated internally to recover its performance, and then brought back to life.
While adding a second gate for heating isn't ideal, because it modifies chip design and demands the creation of a new transistor library, which escalates production costs it could be the technology that makes the mission possible.
To address the extra costs though the team are looking into junctionless transistors that could heat the channels during normal operation when current flows through them. And separately, at NASA, researchers are developing on-chip embedded micro-heaters that are compatible with standard circuits.
Intels Nervana chip shows the giant is serious about owning the AI market
Cutting the costs of self healing technology is crucial to the future of the program and it's hoped that as the teams discover more about the potential of the technology more people will pile into the space, at which point the launch of the first silicon chip spacecraft, the first man made object to potentially enter into orbit around our next nearest star, won't be too far away.
Chip ArchitecturesGrapheneKorea Institute of Science and TechnologyMacronixNanowiresNASANational Microelectronics Research CentreSelf Healing MaterialsSouth KoreaSpace ExplorationSpace IndustryUSA
DARPA closes in on its ambitions to build the worlds first flying aircraft carriers
WHY THIS MATTERS IN BRIEF The future of warfare will include drones, and that flips the idea of today's aircraft carriers on its head. …
Next gen wearable monitors your blood and the environment to improve your health
WHY THIS MATTERS IN BRIEF Today's wearables don't monitor many of your vital signs or the environment, and now researchers have found a way to…
The first Mars colony will be 3D printed from Martian dust
WHY THIS MATTERS IN BRIEF The colossal distances involved in getting to Mars means that shipping equipment to Mars will be an expensive herculean effort…
DARPA selects Gryphon to build world's first ever nuclear rocket engine
WHY THIS MATTERS IN BRIEF Today's combustion engine rockets are cheap-ish but not that efficient so the race is on to develop new and better…
Three tech giants team up to build 'giant' laptops with flexible displays
WHY THIS MATTERS IN BRIEF Being able to fold screens and displays opens the door to new computer and smart device formats, and this is…
First test passengers push Virgin Hyperloop's 750mph train closer to reality
WHY THIS MATTERS IN BRIEF New technologies and innovations follow a common pattern, first they're built, then they're tested, then they're regulated and commercialised. This…
A US startup just built a giant centrifuge to fling rockets into space
WHY THIS MATTERS IN BRIEF Companies are trying to lower the cost of accessing space, and flinging rockets into space could make space travel ridiculously…
The US Army's augmented night vision goggles look like alien tech
WHY THIS MATTERS IN BRIEF In the heat of battle you only want to see what's important – and augmented night vision systems are here…
Oracle's America's Cup yacht will never sail, because it flies
WHY THIS MATTERS IN BRIEF Today's ultra expensive racing yachts don't float, they fly, and this years America's cup could see the first time a…
Nascar quadraplegic Sam Schmidt reaches 100mph in this tricked out Stingray
The former racer and IndyCar team owner can control the Corvette using head movements and voice commands Following a horrible wreck back in 2000, IndyCar…
Researchers show off transformer-like robots that change shape without central control
WHY THIS MATTERS IN BRIEF Small, cheap robots that can swarm together and transform themselves to accomplish a wide variety of different tasks make for…
The world's biggest 3D printed house opens in Dubai
WHY THIS MATTERS IN BRIEF The way we build homes and buildings is changing, and 3D printing offers companies a way to build more spectacular…
New Qualcomm hardware smashes existing 5G distance record
WHY THIS MATTERS IN BRIEF The fastest form of 5G, mmWave, has a limited distance of a mile or so, this latest breakthrough smashes that…
Future wearables will be powered by your skin
WHY THIS MATTERS IN BRIEF One day batteries will go away as new materials help us harness energy in more natural and more convenient ways….
Architects unveil plans for Dubai's Mars Science City and colonies on Mars
WHY THIS MATTERS IN BRIEF The first Martians are going to need somewhere to live that can protect them from Mars' environment and the designs…


text:
namespace google_breakpad {

MinidumpProcessor::MinidumpProcessor(SymbolSupplier *supplier,
                                     SourceLineResolverInterface *resolver)
    : supplier_(supplier), resolver_(resolver),
      enable_exploitability_(false) {
}

MinidumpProcessor::MinidumpProcessor(SymbolSupplier *supplier,
                                     SourceLineResolverInterface *resolver,
                                     bool enable_exploitability)
    : supplier_(supplier), resolver_(resolver),
      enable_exploitability_(enable_exploitability) {
}

MinidumpProcessor::~MinidumpProcessor() {
}

ProcessResult MinidumpProcessor::Process(
    Minidump *dump, ProcessState *process_state) {
  assert(dump);
  assert(process_state);

  process_state->Clear();

  const MDRawHeader *header = dump->header();
  if (!header) {
    BPLOG(ERROR) << "Minidump " << dump->path() << " has no header";
    return PROCESS_ERROR_NO_MINIDUMP_HEADER;
  }
  process_state->time_date_stamp_ = header->time_date_stamp;

  bool has_cpu_info = GetCPUInfo(dump, &process_state->system_info_);
  bool has_os_info = GetOSInfo(dump, &process_state->system_info_);

  u_int32_t dump_thread_id = 0;
  bool has_dump_thread = false;
  u_int32_t requesting_thread_id = 0;
  bool has_requesting_thread = false;

  MinidumpBreakpadInfo *breakpad_info = dump->GetBreakpadInfo();
  if (breakpad_info) {
    has_dump_thread = breakpad_info->GetDumpThreadID(&dump_thread_id);
    has_requesting_thread =
        breakpad_info->GetRequestingThreadID(&requesting_thread_id);
  }

  MinidumpException *exception = dump->GetException();
  if (exception) {
    process_state->crashed_ = true;
    has_requesting_thread = exception->GetThreadID(&requesting_thread_id);

    process_state->crash_reason_ = GetCrashReason(
        dump, &process_state->crash_address_);
  }

  // This will just return an empty string if it doesn't exist.
  process_state->assertion_ = GetAssertion(dump);

  MinidumpModuleList *module_list = dump->GetModuleList();

  // Put a copy of the module list into ProcessState object.  This is not
  // necessarily a MinidumpModuleList, but it adheres to the CodeModules
  // interface, which is all that ProcessState needs to expose.
  if (module_list)
    process_state->modules_ = module_list->Copy();

  MinidumpThreadList *threads = dump->GetThreadList();
  if (!threads) {
    BPLOG(ERROR) << "Minidump " << dump->path() << " has no thread list";
    return PROCESS_ERROR_NO_THREAD_LIST;
  }

  BPLOG(INFO) << "Minidump " << dump->path() << " has " <<
      (has_cpu_info           ? "" : "no ") << "CPU info, " <<
      (has_os_info            ? "" : "no ") << "OS info, " <<
      (breakpad_info != NULL  ? "" : "no ") << "Breakpad info, " <<
      (exception != NULL      ? "" : "no ") << "exception, " <<
      (module_list != NULL    ? "" : "no ") << "module list, " <<
      (threads != NULL        ? "" : "no ") << "thread list, " <<
      (has_dump_thread        ? "" : "no ") << "dump thread, and " <<
      (has_requesting_thread  ? "" : "no ") << "requesting thread";

  bool interrupted = false;
  bool found_requesting_thread = false;
  unsigned int thread_count = threads->thread_count();
  for (unsigned int thread_index = 0;
       thread_index < thread_count;
       ++thread_index) {
    char thread_string_buffer[64];
    snprintf(thread_string_buffer, sizeof(thread_string_buffer), "%d/%d",
             thread_index, thread_count);
    string thread_string = dump->path() + ":" + thread_string_buffer;

    MinidumpThread *thread = threads->GetThreadAtIndex(thread_index);
    if (!thread) {
      BPLOG(ERROR) << "Could not get thread for " << thread_string;
      return PROCESS_ERROR_GETTING_THREAD;
    }

    u_int32_t thread_id;
    if (!thread->GetThreadID(&thread_id)) {
      BPLOG(ERROR) << "Could not get thread ID for " << thread_string;
      return PROCESS_ERROR_GETTING_THREAD_ID;
    }

    thread_string += " id " + HexString(thread_id);
    BPLOG(INFO) << "Looking at thread " << thread_string;

    // If this thread is the thread that produced the minidump, don't process
    // it.  Because of the problems associated with a thread producing a
    // dump of itself (when both its context and its stack are in flux),
    // processing that stack wouldn't provide much useful data.
    if (has_dump_thread && thread_id == dump_thread_id) {
      continue;
    }

    MinidumpContext *context = thread->GetContext();

    if (has_requesting_thread && thread_id == requesting_thread_id) {
      if (found_requesting_thread) {
        // There can't be more than one requesting thread.
        BPLOG(ERROR) << "Duplicate requesting thread: " << thread_string;
        return PROCESS_ERROR_DUPLICATE_REQUESTING_THREADS;
      }

      // Use processed_state->threads_.size() instead of thread_index.
      // thread_index points to the thread index in the minidump, which
      // might be greater than the thread index in the threads vector if
      // any of the minidump's threads are skipped and not placed into the
      // processed threads vector.  The thread vector's current size will
      // be the index of the current thread when it's pushed into the
      // vector.
      process_state->requesting_thread_ = process_state->threads_.size();

      found_requesting_thread = true;

      if (process_state->crashed_) {
        // Use the exception record's context for the crashed thread, instead
        // of the thread's own context.  For the crashed thread, the thread's
        // own context is the state inside the exception handler.  Using it
        // would not result in the expected stack trace from the time of the
        // crash. If the exception context is invalid, however, we fall back
        // on the thread context.
        MinidumpContext *ctx = exception->GetContext();
        context = ctx ? ctx : thread->GetContext();
      }
    }

    MinidumpMemoryRegion *thread_memory = thread->GetMemory();
    if (!thread_memory) {
      BPLOG(ERROR) << "No memory region for " << thread_string;
      return PROCESS_ERROR_NO_MEMORY_FOR_THREAD;
    }

    // Use process_state->modules_ instead of module_list, because the
    // |modules| argument will be used to populate the |module| fields in
    // the returned StackFrame objects, which will be placed into the
    // returned ProcessState object.  module_list's lifetime is only as
    // long as the Minidump object: it will be deleted when this function
    // returns.  process_state->modules_ is owned by the ProcessState object
    // (just like the StackFrame objects), and is much more suitable for this
    // task.
    scoped_ptr<Stackwalker> stackwalker(
        Stackwalker::StackwalkerForCPU(process_state->system_info(),
                                       context,
                                       thread_memory,
                                       process_state->modules_,
                                       supplier_,
                                       resolver_));
    if (!stackwalker.get()) {
      BPLOG(ERROR) << "No stackwalker for " << thread_string;
      return PROCESS_ERROR_NO_STACKWALKER_FOR_THREAD;
    }

    scoped_ptr<CallStack> stack(new CallStack());
    if (!stackwalker->Walk(stack.get())) {
      BPLOG(INFO) << "Stackwalker interrupt (missing symbols?) at " <<
          thread_string;
      interrupted = true;
    }
    process_state->threads_.push_back(stack.release());
    process_state->thread_memory_regions_.push_back(thread_memory);
  }

  if (interrupted) {
    BPLOG(INFO) << "Processing interrupted for " << dump->path();
    return PROCESS_SYMBOL_SUPPLIER_INTERRUPTED;
  }

  // If a requesting thread was indicated, it must be present.
  if (has_requesting_thread && !found_requesting_thread) {
    // Don't mark as an error, but invalidate the requesting thread
    BPLOG(ERROR) << "Minidump indicated requesting thread " <<
        HexString(requesting_thread_id) << ", not found in " <<
        dump->path();
    process_state->requesting_thread_ = -1;
  }

  // Exploitability defaults to EXPLOITABILITY_NOT_ANALYZED
  process_state->exploitability_ = EXPLOITABILITY_NOT_ANALYZED;

  // If an exploitability run was requested we perform the platform specific
  // rating.
  if (enable_exploitability_) {
    scoped_ptr<Exploitability> exploitability(
        Exploitability::ExploitabilityForPlatform(dump, process_state));
    // The engine will be null if the platform is not supported
    if (exploitability != NULL) {
      process_state->exploitability_ = exploitability->CheckExploitability();
    } else {
      process_state->exploitability_ = EXPLOITABILITY_ERR_NOENGINE;
    }
  }

  BPLOG(INFO) << "Processed " << dump->path();
  return PROCESS_OK;
}

ProcessResult MinidumpProcessor::Process(
    const string &minidump_file, ProcessState *process_state) {
  BPLOG(INFO) << "Processing minidump in file " << minidump_file;

  Minidump dump(minidump_file);
  if (!dump.Read()) {
     BPLOG(ERROR) << "Minidump " << dump.path() << " could not be read";
     return PROCESS_ERROR_MINIDUMP_NOT_FOUND;
  }

  return Process(&dump, process_state);
}

// Returns the MDRawSystemInfo from a minidump, or NULL if system info is
// not available from the minidump.  If system_info is non-NULL, it is used
// to pass back the MinidumpSystemInfo object.
static const MDRawSystemInfo* GetSystemInfo(Minidump *dump,
                                            MinidumpSystemInfo **system_info) {
  MinidumpSystemInfo *minidump_system_info = dump->GetSystemInfo();
  if (!minidump_system_info)
    return NULL;

  if (system_info)
    *system_info = minidump_system_info;

  return minidump_system_info->system_info();
}

// static
bool MinidumpProcessor::GetCPUInfo(Minidump *dump, SystemInfo *info) {
  assert(dump);
  assert(info);

  info->cpu.clear();
  info->cpu_info.clear();

  MinidumpSystemInfo *system_info;
  const MDRawSystemInfo *raw_system_info = GetSystemInfo(dump, &system_info);
  if (!raw_system_info)
    return false;

  switch (raw_system_info->processor_architecture) {
    case MD_CPU_ARCHITECTURE_X86:
    case MD_CPU_ARCHITECTURE_AMD64: {
      if (raw_system_info->processor_architecture ==
          MD_CPU_ARCHITECTURE_X86)
        info->cpu = "x86";
      else
        info->cpu = "amd64";

      const string *cpu_vendor = system_info->GetCPUVendor();
      if (cpu_vendor) {
        info->cpu_info = *cpu_vendor;
        info->cpu_info.append(" ");
      }

      char x86_info[36];
      snprintf(x86_info, sizeof(x86_info), "family %u model %u stepping %u",
               raw_system_info->processor_level,
               raw_system_info->processor_revision >> 8,
               raw_system_info->processor_revision & 0xff);
      info->cpu_info.append(x86_info);
      break;
    }

    case MD_CPU_ARCHITECTURE_PPC: {
      info->cpu = "ppc";
      break;
    }

    case MD_CPU_ARCHITECTURE_SPARC: {
      info->cpu = "sparc";
      break;
    }

    case MD_CPU_ARCHITECTURE_ARM: {
      info->cpu = "arm";
      break;
    }

    default: {
      // Assign the numeric architecture ID into the CPU string.
      char cpu_string[7];
      snprintf(cpu_string, sizeof(cpu_string), "0x%04x",
               raw_system_info->processor_architecture);
      info->cpu = cpu_string;
      break;
    }
  }

  info->cpu_count = raw_system_info->number_of_processors;

  return true;
}

// static
bool MinidumpProcessor::GetOSInfo(Minidump *dump, SystemInfo *info) {
  assert(dump);
  assert(info);

  info->os.clear();
  info->os_short.clear();
  info->os_version.clear();

  MinidumpSystemInfo *system_info;
  const MDRawSystemInfo *raw_system_info = GetSystemInfo(dump, &system_info);
  if (!raw_system_info)
    return false;

  info->os_short = system_info->GetOS();

  switch (raw_system_info->platform_id) {
    case MD_OS_WIN32_NT: {
      info->os = "Windows NT";
      break;
    }

    case MD_OS_WIN32_WINDOWS: {
      info->os = "Windows";
      break;
    }

    case MD_OS_MAC_OS_X: {
      info->os = "Mac OS X";
      break;
    }

    case MD_OS_IOS: {
      info->os = "iOS";
      break;
    }

    case MD_OS_LINUX: {
      info->os = "Linux";
      break;
    }

    case MD_OS_SOLARIS: {
      info->os = "Solaris";
      break;
    }

    case MD_OS_ANDROID: {
      info->os = "Android";
      break;
    }

    default: {
      // Assign the numeric platform ID into the OS string.
      char os_string[11];
      snprintf(os_string, sizeof(os_string), "0x%08x",
               raw_system_info->platform_id);
      info->os = os_string;
      break;
    }
  }

  char os_version_string[33];
  snprintf(os_version_string, sizeof(os_version_string), "%u.%u.%u",
           raw_system_info->major_version,
           raw_system_info->minor_version,
           raw_system_info->build_number);
  info->os_version = os_version_string;

  const string *csd_version = system_info->GetCSDVersion();
  if (csd_version) {
    info->os_version.append(" ");
    info->os_version.append(*csd_version);
  }

  return true;
}

// static
string MinidumpProcessor::GetCrashReason(Minidump *dump, u_int64_t *address) {
  MinidumpException *exception = dump->GetException();
  if (!exception)
    return "";

  const MDRawExceptionStream *raw_exception = exception->exception();
  if (!raw_exception)
    return "";

  if (address)
    *address = raw_exception->exception_record.exception_address;

  // The reason value is OS-specific and possibly CPU-specific.  Set up
  // sensible numeric defaults for the reason string in case we can't
  // map the codes to a string (because there's no system info, or because
  // it's an unrecognized platform, or because it's an unrecognized code.)
  char reason_string[24];
  u_int32_t exception_code = raw_exception->exception_record.exception_code;
  u_int32_t exception_flags = raw_exception->exception_record.exception_flags;
  snprintf(reason_string, sizeof(reason_string), "0x%08x / 0x%08x",
           exception_code, exception_flags);
  string reason = reason_string;

  const MDRawSystemInfo *raw_system_info = GetSystemInfo(dump, NULL);
  if (!raw_system_info)
    return reason;

  switch (raw_system_info->platform_id) {
    case MD_OS_MAC_OS_X:
    case MD_OS_IOS: {
      char flags_string[11];
      snprintf(flags_string, sizeof(flags_string), "0x%08x", exception_flags);
      switch (exception_code) {
        case MD_EXCEPTION_MAC_BAD_ACCESS:
          reason = "EXC_BAD_ACCESS / ";
          switch (exception_flags) {
            case MD_EXCEPTION_CODE_MAC_INVALID_ADDRESS:
              reason.append("KERN_INVALID_ADDRESS");
              break;
            case MD_EXCEPTION_CODE_MAC_PROTECTION_FAILURE:
              reason.append("KERN_PROTECTION_FAILURE");
              break;
            case MD_EXCEPTION_CODE_MAC_NO_ACCESS:
              reason.append("KERN_NO_ACCESS");
              break;
            case MD_EXCEPTION_CODE_MAC_MEMORY_FAILURE:
              reason.append("KERN_MEMORY_FAILURE");
              break;
            case MD_EXCEPTION_CODE_MAC_MEMORY_ERROR:
              reason.append("KERN_MEMORY_ERROR");
              break;
            // These are ppc only but shouldn't be a problem as they're
            // unused on x86
            case MD_EXCEPTION_CODE_MAC_PPC_VM_PROT_READ:
              reason.append("EXC_PPC_VM_PROT_READ");
              break;
            case MD_EXCEPTION_CODE_MAC_PPC_BADSPACE:
              reason.append("EXC_PPC_BADSPACE");
              break;
            case MD_EXCEPTION_CODE_MAC_PPC_UNALIGNED:
              reason.append("EXC_PPC_UNALIGNED");
              break;
            default:
              reason.append(flags_string);
              BPLOG(INFO) << "Unknown exception reason " << reason;
              break;
          }
          break;
        case MD_EXCEPTION_MAC_BAD_INSTRUCTION:
          reason = "EXC_BAD_INSTRUCTION / ";
          switch (raw_system_info->processor_architecture) {
            case MD_CPU_ARCHITECTURE_PPC: {
              switch (exception_flags) {
                case MD_EXCEPTION_CODE_MAC_PPC_INVALID_SYSCALL:
                  reason.append("EXC_PPC_INVALID_SYSCALL");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_UNIMPLEMENTED_INSTRUCTION:
                  reason.append("EXC_PPC_UNIPL_INST");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_PRIVILEGED_INSTRUCTION:
                  reason.append("EXC_PPC_PRIVINST");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_PRIVILEGED_REGISTER:
                  reason.append("EXC_PPC_PRIVREG");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_TRACE:
                  reason.append("EXC_PPC_TRACE");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_PERFORMANCE_MONITOR:
                  reason.append("EXC_PPC_PERFMON");
                  break;
                default:
                  reason.append(flags_string);
                  BPLOG(INFO) << "Unknown exception reason " << reason;
                  break;
              }
              break;
            }
            case MD_CPU_ARCHITECTURE_X86: {
              switch (exception_flags) {
                case MD_EXCEPTION_CODE_MAC_X86_INVALID_OPERATION:
                  reason.append("EXC_I386_INVOP");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_INVALID_TASK_STATE_SEGMENT:
                  reason.append("EXC_INVTSSFLT");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_SEGMENT_NOT_PRESENT:
                  reason.append("EXC_SEGNPFLT");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_STACK_FAULT:
                  reason.append("EXC_STKFLT");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_GENERAL_PROTECTION_FAULT:
                  reason.append("EXC_GPFLT");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_ALIGNMENT_FAULT:
                  reason.append("EXC_ALIGNFLT");
                  break;
                default:
                  reason.append(flags_string);
                  BPLOG(INFO) << "Unknown exception reason " << reason;
                  break;
              }
              break;
            }
            default:
              reason.append(flags_string);
              BPLOG(INFO) << "Unknown exception reason " << reason;
              break;
          }
          break;
        case MD_EXCEPTION_MAC_ARITHMETIC:
          reason = "EXC_ARITHMETIC / ";
          switch (raw_system_info->processor_architecture) {
            case MD_CPU_ARCHITECTURE_PPC: {
              switch (exception_flags) {
                case MD_EXCEPTION_CODE_MAC_PPC_OVERFLOW:
                  reason.append("EXC_PPC_OVERFLOW");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_ZERO_DIVIDE:
                  reason.append("EXC_PPC_ZERO_DIVIDE");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_FLOAT_INEXACT:
                  reason.append("EXC_FLT_INEXACT");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_FLOAT_ZERO_DIVIDE:
                  reason.append("EXC_PPC_FLT_ZERO_DIVIDE");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_FLOAT_UNDERFLOW:
                  reason.append("EXC_PPC_FLT_UNDERFLOW");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_FLOAT_OVERFLOW:
                  reason.append("EXC_PPC_FLT_OVERFLOW");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_FLOAT_NOT_A_NUMBER:
                  reason.append("EXC_PPC_FLT_NOT_A_NUMBER");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_NO_EMULATION:
                  reason.append("EXC_PPC_NOEMULATION");
                  break;
                case MD_EXCEPTION_CODE_MAC_PPC_ALTIVEC_ASSIST:
                  reason.append("EXC_PPC_ALTIVECASSIST");
                default:
                  reason.append(flags_string);
                  BPLOG(INFO) << "Unknown exception reason " << reason;
                  break;
              }
              break;
            }
            case MD_CPU_ARCHITECTURE_X86: {
              switch (exception_flags) {
                case MD_EXCEPTION_CODE_MAC_X86_DIV:
                  reason.append("EXC_I386_DIV");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_INTO:
                  reason.append("EXC_I386_INTO");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_NOEXT:
                  reason.append("EXC_I386_NOEXT");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_EXTOVR:
                  reason.append("EXC_I386_EXTOVR");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_EXTERR:
                  reason.append("EXC_I386_EXTERR");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_EMERR:
                  reason.append("EXC_I386_EMERR");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_BOUND:
                  reason.append("EXC_I386_BOUND");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_SSEEXTERR:
                  reason.append("EXC_I386_SSEEXTERR");
                  break;
                default:
                  reason.append(flags_string);
                  BPLOG(INFO) << "Unknown exception reason " << reason;
                  break;
              }
              break;
            }
            default:
              reason.append(flags_string);
              BPLOG(INFO) << "Unknown exception reason " << reason;
              break;
          }
          break;
        case MD_EXCEPTION_MAC_EMULATION:
          reason = "EXC_EMULATION / ";
          reason.append(flags_string);
          break;
        case MD_EXCEPTION_MAC_SOFTWARE:
          reason = "EXC_SOFTWARE / ";
          switch (exception_flags) {
            case MD_EXCEPTION_CODE_MAC_ABORT:
              reason.append("SIGABRT");
              break;
            case MD_EXCEPTION_CODE_MAC_NS_EXCEPTION:
              reason.append("UNCAUGHT_NS_EXCEPTION");
              break;
            // These are ppc only but shouldn't be a problem as they're
            // unused on x86
            case MD_EXCEPTION_CODE_MAC_PPC_TRAP:
              reason.append("EXC_PPC_TRAP");
              break;
            case MD_EXCEPTION_CODE_MAC_PPC_MIGRATE:
              reason.append("EXC_PPC_MIGRATE");
              break;
            default:
              reason.append(flags_string);
              BPLOG(INFO) << "Unknown exception reason " << reason;
              break;
          }
          break;
        case MD_EXCEPTION_MAC_BREAKPOINT:
          reason = "EXC_BREAKPOINT / ";
          switch (raw_system_info->processor_architecture) {
            case MD_CPU_ARCHITECTURE_PPC: {
              switch (exception_flags) {
                case MD_EXCEPTION_CODE_MAC_PPC_BREAKPOINT:
                  reason.append("EXC_PPC_BREAKPOINT");
                  break;
                default:
                  reason.append(flags_string);
                  BPLOG(INFO) << "Unknown exception reason " << reason;
                  break;
              }
              break;
            }
            case MD_CPU_ARCHITECTURE_X86: {
              switch (exception_flags) {
                case MD_EXCEPTION_CODE_MAC_X86_SGL:
                  reason.append("EXC_I386_SGL");
                  break;
                case MD_EXCEPTION_CODE_MAC_X86_BPT:
                  reason.append("EXC_I386_BPT");
                  break;
                default:
                  reason.append(flags_string);
                  BPLOG(INFO) << "Unknown exception reason " << reason;
                  break;
              }
              break;
            }
            default:
              reason.append(flags_string);
              BPLOG(INFO) << "Unknown exception reason " << reason;
              break;
          }
          break;
        case MD_EXCEPTION_MAC_SYSCALL:
          reason = "EXC_SYSCALL / ";
          reason.append(flags_string);
          break;
        case MD_EXCEPTION_MAC_MACH_SYSCALL:
          reason = "EXC_MACH_SYSCALL / ";
          reason.append(flags_string);
          break;
        case MD_EXCEPTION_MAC_RPC_ALERT:
          reason = "EXC_RPC_ALERT / ";
          reason.append(flags_string);
          break;
      }
      break;
    }

    case MD_OS_WIN32_NT:
    case MD_OS_WIN32_WINDOWS: {
      switch (exception_code) {
        case MD_EXCEPTION_CODE_WIN_CONTROL_C:
          reason = "DBG_CONTROL_C";
          break;
        case MD_EXCEPTION_CODE_WIN_GUARD_PAGE_VIOLATION:
          reason = "EXCEPTION_GUARD_PAGE";
          break;
        case MD_EXCEPTION_CODE_WIN_DATATYPE_MISALIGNMENT:
          reason = "EXCEPTION_DATATYPE_MISALIGNMENT";
          break;
        case MD_EXCEPTION_CODE_WIN_BREAKPOINT:
          reason = "EXCEPTION_BREAKPOINT";
          break;
        case MD_EXCEPTION_CODE_WIN_SINGLE_STEP:
          reason = "EXCEPTION_SINGLE_STEP";
          break;
        case MD_EXCEPTION_CODE_WIN_ACCESS_VIOLATION:
          // For EXCEPTION_ACCESS_VIOLATION, Windows puts the address that
          // caused the fault in exception_information[1].
          // exception_information[0] is 0 if the violation was caused by
          // an attempt to read data and 1 if it was an attempt to write
          // data.
          // This information is useful in addition to the code address, which
          // will be present in the crash thread's instruction field anyway.
          if (raw_exception->exception_record.number_parameters >= 1) {
            MDAccessViolationTypeWin av_type =
                static_cast<MDAccessViolationTypeWin>
                (raw_exception->exception_record.exception_information[0]);
            switch (av_type) {
              case MD_ACCESS_VIOLATION_WIN_READ:
                reason = "EXCEPTION_ACCESS_VIOLATION_READ";
                break;
              case MD_ACCESS_VIOLATION_WIN_WRITE:
                reason = "EXCEPTION_ACCESS_VIOLATION_WRITE";
                break;
              case MD_ACCESS_VIOLATION_WIN_EXEC:
                reason = "EXCEPTION_ACCESS_VIOLATION_EXEC";
                break;
              default:
                reason = "EXCEPTION_ACCESS_VIOLATION";
                break;
            }
          } else {
            reason = "EXCEPTION_ACCESS_VIOLATION";
          }
          if (address &&
              raw_exception->exception_record.number_parameters >= 2) {
            *address =
                raw_exception->exception_record.exception_information[1];
          }
          break;
        case MD_EXCEPTION_CODE_WIN_IN_PAGE_ERROR:
          reason = "EXCEPTION_IN_PAGE_ERROR";
          break;
        case MD_EXCEPTION_CODE_WIN_INVALID_HANDLE:
          reason = "EXCEPTION_INVALID_HANDLE";
          break;
        case MD_EXCEPTION_CODE_WIN_ILLEGAL_INSTRUCTION:
          reason = "EXCEPTION_ILLEGAL_INSTRUCTION";
          break;
        case MD_EXCEPTION_CODE_WIN_NONCONTINUABLE_EXCEPTION:
          reason = "EXCEPTION_NONCONTINUABLE_EXCEPTION";
          break;
        case MD_EXCEPTION_CODE_WIN_INVALID_DISPOSITION:
          reason = "EXCEPTION_INVALID_DISPOSITION";
          break;
        case MD_EXCEPTION_CODE_WIN_ARRAY_BOUNDS_EXCEEDED:
          reason = "EXCEPTION_BOUNDS_EXCEEDED";
          break;
        case MD_EXCEPTION_CODE_WIN_FLOAT_DENORMAL_OPERAND:
          reason = "EXCEPTION_FLT_DENORMAL_OPERAND";
          break;
        case MD_EXCEPTION_CODE_WIN_FLOAT_DIVIDE_BY_ZERO:
          reason = "EXCEPTION_FLT_DIVIDE_BY_ZERO";
          break;
        case MD_EXCEPTION_CODE_WIN_FLOAT_INEXACT_RESULT:
          reason = "EXCEPTION_FLT_INEXACT_RESULT";
          break;
        case MD_EXCEPTION_CODE_WIN_FLOAT_INVALID_OPERATION:
          reason = "EXCEPTION_FLT_INVALID_OPERATION";
          break;
        case MD_EXCEPTION_CODE_WIN_FLOAT_OVERFLOW:
          reason = "EXCEPTION_FLT_OVERFLOW";
          break;
        case MD_EXCEPTION_CODE_WIN_FLOAT_STACK_CHECK:
          reason = "EXCEPTION_FLT_STACK_CHECK";
          break;
        case MD_EXCEPTION_CODE_WIN_FLOAT_UNDERFLOW:
          reason = "EXCEPTION_FLT_UNDERFLOW";
          break;
        case MD_EXCEPTION_CODE_WIN_INTEGER_DIVIDE_BY_ZERO:
          reason = "EXCEPTION_INT_DIVIDE_BY_ZERO";
          break;
        case MD_EXCEPTION_CODE_WIN_INTEGER_OVERFLOW:
          reason = "EXCEPTION_INT_OVERFLOW";
          break;
        case MD_EXCEPTION_CODE_WIN_PRIVILEGED_INSTRUCTION:
          reason = "EXCEPTION_PRIV_INSTRUCTION";
          break;
        case MD_EXCEPTION_CODE_WIN_STACK_OVERFLOW:
          reason = "EXCEPTION_STACK_OVERFLOW";
          break;
        case MD_EXCEPTION_CODE_WIN_POSSIBLE_DEADLOCK:
          reason = "EXCEPTION_POSSIBLE_DEADLOCK";
          break;
        case MD_EXCEPTION_CODE_WIN_STACK_BUFFER_OVERRUN:
          reason = "EXCEPTION_STACK_BUFFER_OVERRUN";
          break;
        case MD_EXCEPTION_CODE_WIN_HEAP_CORRUPTION:
          reason = "EXCEPTION_HEAP_CORRUPTION";
          break;
        case MD_EXCEPTION_CODE_WIN_UNHANDLED_CPP_EXCEPTION:
          reason = "Unhandled C++ Exception";
          break;
        default:
          BPLOG(INFO) << "Unknown exception reason " << reason;
          break;
      }
      break;
    }

    case MD_OS_ANDROID:
    case MD_OS_LINUX: {
      switch (exception_code) {
        case MD_EXCEPTION_CODE_LIN_SIGHUP:
          reason = "SIGHUP";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGINT:
          reason = "SIGINT";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGQUIT:
          reason = "SIGQUIT";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGILL:
          reason = "SIGILL";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGTRAP:
          reason = "SIGTRAP";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGABRT:
          reason = "SIGABRT";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGBUS:
          reason = "SIGBUS";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGFPE:
          reason = "SIGFPE";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGKILL:
          reason = "SIGKILL";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGUSR1:
          reason = "SIGUSR1";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGSEGV:
          reason = "SIGSEGV";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGUSR2:
          reason = "SIGUSR2";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGPIPE:
          reason = "SIGPIPE";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGALRM:
          reason = "SIGALRM";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGTERM:
          reason = "SIGTERM";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGSTKFLT:
          reason = "SIGSTKFLT";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGCHLD:
          reason = "SIGCHLD";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGCONT:
          reason = "SIGCONT";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGSTOP:
          reason = "SIGSTOP";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGTSTP:
          reason = "SIGTSTP";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGTTIN:
          reason = "SIGTTIN";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGTTOU:
          reason = "SIGTTOU";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGURG:
          reason = "SIGURG";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGXCPU:
          reason = "SIGXCPU";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGXFSZ:
          reason = "SIGXFSZ";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGVTALRM:
          reason = "SIGVTALRM";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGPROF:
          reason = "SIGPROF";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGWINCH:
          reason = "SIGWINCH";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGIO:
          reason = "SIGIO";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGPWR:
          reason = "SIGPWR";
          break;
        case MD_EXCEPTION_CODE_LIN_SIGSYS:
          reason = "SIGSYS";
          break;
      case MD_EXCEPTION_CODE_LIN_DUMP_REQUESTED:
          reason = "DUMP_REQUESTED";
          break;
        default:
          BPLOG(INFO) << "Unknown exception reason " << reason;
          break;
      }
      break;
    }

    case MD_OS_SOLARIS: {
      switch (exception_code) {
        case MD_EXCEPTION_CODE_SOL_SIGHUP:
          reason = "SIGHUP";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGINT:
          reason = "SIGINT";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGQUIT:
          reason = "SIGQUIT";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGILL:
          reason = "SIGILL";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGTRAP:
          reason = "SIGTRAP";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGIOT:
          reason = "SIGIOT | SIGABRT";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGEMT:
          reason = "SIGEMT";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGFPE:
          reason = "SIGFPE";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGKILL:
          reason = "SIGKILL";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGBUS:
          reason = "SIGBUS";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGSEGV:
          reason = "SIGSEGV";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGSYS:
          reason = "SIGSYS";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGPIPE:
          reason = "SIGPIPE";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGALRM:
          reason = "SIGALRM";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGTERM:
          reason = "SIGTERM";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGUSR1:
          reason = "SIGUSR1";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGUSR2:
          reason = "SIGUSR2";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGCLD:
          reason = "SIGCLD | SIGCHLD";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGPWR:
          reason = "SIGPWR";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGWINCH:
          reason = "SIGWINCH";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGURG:
          reason = "SIGURG";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGPOLL:
          reason = "SIGPOLL | SIGIO";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGSTOP:
          reason = "SIGSTOP";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGTSTP:
          reason = "SIGTSTP";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGCONT:
          reason = "SIGCONT";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGTTIN:
          reason = "SIGTTIN";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGTTOU:
          reason = "SIGTTOU";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGVTALRM:
          reason = "SIGVTALRM";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGPROF:
          reason = "SIGPROF";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGXCPU:
          reason = "SIGXCPU";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGXFSZ:
          reason = "SIGXFSZ";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGWAITING:
          reason = "SIGWAITING";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGLWP:
          reason = "SIGLWP";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGFREEZE:
          reason = "SIGFREEZE";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGTHAW:
          reason = "SIGTHAW";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGCANCEL:
          reason = "SIGCANCEL";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGLOST:
          reason = "SIGLOST";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGXRES:
          reason = "SIGXRES";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGJVM1:
          reason = "SIGJVM1";
          break;
        case MD_EXCEPTION_CODE_SOL_SIGJVM2:
          reason = "SIGJVM2";
          break;
        default:
          BPLOG(INFO) << "Unknown exception reason " << reason;
          break;
      }
      break;
    }

    default: {
      BPLOG(INFO) << "Unknown exception reason " << reason;
      break;
    }
  }

  return reason;
}

// static
string MinidumpProcessor::GetAssertion(Minidump *dump) {
  MinidumpAssertion *assertion = dump->GetAssertion();
  if (!assertion)
    return "";

  const MDRawAssertionInfo *raw_assertion = assertion->assertion();
  if (!raw_assertion)
    return "";

  string assertion_string;
  switch (raw_assertion->type) {
  case MD_ASSERTION_INFO_TYPE_INVALID_PARAMETER:
    assertion_string = "Invalid parameter passed to library function";
    break;
  case MD_ASSERTION_INFO_TYPE_PURE_VIRTUAL_CALL:
    assertion_string = "Pure virtual function called";
    break;
  default: {
    char assertion_type[32];
    sprintf(assertion_type, "0x%08x", raw_assertion->type);
    assertion_string = "Unknown assertion type ";
    assertion_string += assertion_type;
    break;
  }
  }

  string expression = assertion->expression();
  if (!expression.empty()) {
    assertion_string.append(" " + expression);
  }

  string function = assertion->function();
  if (!function.empty()) {
    assertion_string.append(" in function " + function);
  }

  string file = assertion->file();
  if (!file.empty()) {
    assertion_string.append(", in file " + file);
  }

  if (raw_assertion->line != 0) {
    char assertion_line[32];
    sprintf(assertion_line, "%u", raw_assertion->line);
    assertion_string.append(" at line ");
    assertion_string.append(assertion_line);
  }

  return assertion_string;
}

}  // namespace google_breakpad

redpajama_set_name: RedPajamaGithub


text:
Home » Combo-Chemo Approach Nets $40M In VC Money For Celator
Combo-Chemo Approach Nets $40M In VC Money For Celator
West Coast Editor
With a new name and Phase I trials under way to test its product for colorectal cancer, Celator Pharmaceuticals Inc. raised $40 million in one of the larger venture capital financings of late.
Andrew Janoff, CEO of Princeton, N.J.-based Celator, said the "extraordinary level of interest" recognizes the firm's bid to create a "new medical standard" by combining chemotherapies in exact, maximally effective ratios.
Lead product CPX-1, for example, is irinotecan and floxuridine in a 1-to-1, "locked-in" ratio that has proved synergistic, he said.
"In the past, clinicians haven't recognized the role that ratios play in chemotherapies, and they also didn't have the technology available to maintain those ratios systemically," he said, and simply combined "agents of non-overlapping toxicities, so each drug could be given at its maximum dose."
Formerly known as Celator Technologies Inc., Janoff's firm bases its combination chemo agents on the CombiPlex platform, which has yielded CPX-1, undergoing Phase I trials at the British Columbia Cancer Agency in Vancouver and at McGill University in Montreal, as well as CPX-351, targeting acute myeloid leukemia, and a third compound against either lung or head and neck cancer.
The $40 million gives Celator enough cash to operate "into 2007," Janoff said. Funds will bring CPX-1 through Phase II, get CPX-351 into Phase II, and start Phase I trials with the third compound, which will emerge from platinum-based compounds being studied preclinically.
"We start with generic combinations that are already approved, but building on this we'll focus on new combinations of existing drugs, and then combinations derived from entirely new agents," Janoff said, noting that the approach gives the company "an almost unlimited pipeline" with limited risk at the outset, since Celator is using combinations with toxicity profiles that already are understood, he said.
"We've been fund-raising for about a year," Janoff told BioWorld Today. The firm last made major news at the start of 2003, when venture capitalists put $6.8 million into the company. (See BioWorld Today, Jan. 27, 2003.)
Since then, Janoff said, Celator has been working on its products, increasing its presence in New Jersey, and building out facilities in Vancouver to pursue a line of research that first deploys liposomal delivery but eventually will include polymers and nanotechnology. Combining stable, synergistic forms of cancer therapies apparently has not been tried before, at least not the way Celator is going about it.
"We think we're alone," Janoff said of the company, spun out of the British Columbia Cancer Agency in 2000.
The financing includes first-time investments in Celator from Domain Associates, of Princeton, N.J.; Quaker BioVentures and TL Ventures, both of Wayne, Pa.; as well as previous investors Ventures West and GrowthWorks Capital, both of Vancouver; and the Business Development Bank of Canada in Montreal.
As part of the fund raising, Brenda Gavin from Quaker, Marc Ostro from TL and Nicole Vitullo from Domain are joining Celator's board.


text:
Q: How to delete specific models in Yii2? I need to delete all the records from A and its related models except some model/s.
For e.g.
A is a parent model :
There are some related models with relation for e.g.
B -> hasOne
C -> hasMany
D -> hasOne
What if I want to remove A along with B and C but not D.
A::deleteAll("some condition");

So the above line should delete A, B, and C but not D.
I saw documentation of Yii2, but it is not that good.
Any help will be appreciated.
Thanks in advance.

A: http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#deleting-data
Customer::deleteAll(['status' => Customer::STATUS_INACTIVE]);
The condition is put in the way as described here:
http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#where()-detail
DeleteAll works directly on the database so - as some comments suggest - deleting related records on the fly would be possible by using triggers on SQL level - provided you use SQL. I would not recommend this as this would be magic behaviour that is not apparent from the PHP code itself unless well documented.
Unless you have triggers or foreign keys specified to CASCADE ON DELETE for B and C would A::deleteAll() would only affect the table related to A.
As I said, the ActiveRecord::deleteAll(), does not create instances of ActiveRecord but writes to DB instead.
You could create logic like this, using the each function so you do create instances of A, while preserving memory using the batch functionality:
$transaction = \Yii::$app->db->beginTransaction();
$condition = []; // your condition to find A

foreach(A::find()->where($condition)->joinWith(['b','c'])->each() as $a) {
   foreach($a->getB()->each() as $b) {
      $b->delete();
   }
   foreach($a->getC()->each() as $c) {
      $c->delete();
   }
   $a->delete();
}
$transaction->commit();

http://www.yiiframework.com/doc-2.0/yii-db-query.html#each()-detail


As we mentioned in previous articles during the last stage of the menstrual cycle normally a layer of endometriosis lining in the inside of the uterus is expelled, known as menstruation blood but instead some of the endometriosis tissues grow somewhere in the body causing endometriosis. Endometriosis also reacts to hormonal signals of the monthly menstrual cycle, building up tissue, breaking it, and eliminating it through menstrual period. In this article, we will discuss what exhibits hormonal imbalance to cause endometriosis.
Hormonal imbalance is defined as chemical messengers that regulate our body's systems are no longer function properly. In case of endometriosis, hormonal imbalance is defined as over-production of certain hormones in the reproductive system causing endometrial cells to develop in the abdominal region other than the endometrial wall.
Hormone medication may increase the risk of over-production of certain hormones. In case of endometriosis, the surge of estrogen during menstrual cycle may cause menstrual cramps and other symptoms of menstruation increasing the risk of endometriosis.
Xenoestrogens are harmful man-made products that interfere with the production of natural estrogen in a woman's body. Too much xenoestrogen increases symptoms during the mense as well as increasing the risk of endometriosis.
Environmental toxins cause inflammation and stimulates the production of certain hormones in our body causing hormonal imbalance. Over-production of estrogen during a woman's menstrual cycle increases the risk of endometriosis.
Over intake of saturated and trans fat causes an imbalance of omega 3 and omega 6 fatty acids which increases the risk of over-production of estrogen that turns into bad estrogen, resulting in hormonal imbalance as well as increasing the risk of endometriosis.


text:
Stardust - Music Sounds Better With You
Added 10 years ago by Erdem in 90s Electronic
Stardust was a one-time musical collaborative effort consisting of producers Thomas Bangalter, Alan Braxe and vocalist Benjamin Diamond.
The short-lived group released the popular club track titled "Music Sounds Better with You" in 1998. The song, which is based around a sample from "Fate" by Chaka Khan, was recorded in Paris by Daft House productions, of which Bangalter, one half of the popular French house duo Daft Punk, is based. The song was conceived in Rex Club, Paris, where the trio were playing a live set. Bangalter and Braxe created the instrumental, which Diamond instinctively sang the title words over. The next day they laid down the track in the studio, adding the Chaka Khan sample.
The three members of the band parted ways soon after the single's chart run. Diamond and Braxe pursued solo careers, and Bangalter, along with his usual partner Guy-Manuel de Homem-Christo, went on to release the second Daft Punk album, Discovery.
The video for the song was directed by the acclaimed Michel Gondry.
Tags: house, electronic, dance, french house, 90s
The Timewriter - Revealing the Sounds
Mellow Music Mix Jan 2014
Ini Kamoze - World a Music
Donae'o - Riot Music
Malente - Music Forever
Henrik Schwarz - Walk Music
alt-J (∆) - Fitzpleasure (Official Music Video)
Martin Solveig - Rocking Music
Seoul - The Line (Official Music Video)


text:
Kentucky Open Government Blog
Monitoring First Amendment and open government issues across the commonwealth.
AG says U of L physician groups tied to Passport must release salaries, other financial data
Two groups representing the University of Louisville's faculty physicians have been deemed public agencies and are subject to the state open-records law, Attorney General Jack Conway has ruled. He said the groups violated the Open Records Act when they denied a request by The Courier-Journal's Tom Loftus for five years' worth of records showing employee salaries, sources of income and expenses. U of L doctors have a majority on the board of Passport Health Plan, which manages the Medicaid program for Jefferson and 15 surrounding counties.
The matter concerns the University Physicians Association and the University of Louisville Physicians. In December, Loftus requested the salary and expense documents after state Sen. Tim Shaughnessy of Louisville, right, asked the state Cabinet for Health and Family Services to "examine the flow of Medicaid funds from the state through Passport to UPA," Loftus writes. State Auditor Crit Luallen did not look into the issue in her November report, which pointedly criticized Passport for excessive spending and conflicts of interest.
Though the physician groups contended they were non-profit corporations, Conway said UPA is a public agency "because it was established and created, and is controlled, by the University of Louisville School of Medicine," Conway concludes. "In all material respects, ULP mirrors UPA in the manner of its establishment, creation and control ... We are not prepared to casually dismiss these facts as 'coincidence born of practicality,' and instead find that ULP and the School of Medicine 'act as one and the same.'"
In its articles of incorporation, UPA says its mission is "to further the research mission and teaching of the praction of medicine at the University." Moreover, UPA and ULP were established and continue to be run by U of L medical school administrators, department chairs and professors. "We agree with The Courier-Journal that the suggestion that these physician administrators and/or professors, each the chair or interim chair of their respective medical school departments, came together of their own accord, and as private actors to establish and create UPA defies logic."
Shaughnessy was impressed with the findings. "It causes me to ask: How could they think they are not a public entity? What remains to be seen is whether the university accepts this ruling or continues its arguments that it is not subject to public openness." (Read more)
Posted by Al Cross at 8:59 PM No comments:
Labels: higher education, open records, state government
Budget deal hits federal transparency websites
"Government transparency websites likely will be scaled back or even eliminated as a result of a 75 percent budget cut that congressional leaders and the White House agreed to last week," William Matthews of GovExec.com writes for National Journal.
The $34 million Electronic Government Fund, being cut to $8 million, "supports websites such as http://www.usaspending.gov/ and the IT Dashboard, which provide public access to vast amounts of information on how the government spends money," Matthews writes. "Another transparency site, http://www.data.gov/, also is endangered, transparency advocates said. The site offers access to 380,000 government agency data sets as diverse as climate change statistics and export licensing records." (Read more)
Labels: federal government, freedom of information, open records, transparency
Two Danville city commissioners walk out during closed session, refuse to comment
Two Danville city commissioners walked out of a closed-door meeting last night, leaving the other two and the mayor to discuss a personnel matter that the absentees either didn't want discussed or thought should be discussed in public.
Kevin Caudill and J.H. Atkins, who voted against holding the closed session, left it after 45 minutes and "refused comment on either the purpose of the meeting or their reasons for leaving," David Brock reports for The Advocate-Messenger. "When the remaining commission members returned from executive session about 20 minutes later, no action was taken."
The Advocate-Messenger quoted from the personnel exception to the state Open Records Act: "Discussions or hearings which might lead to the appointment, discipline or dismissal of an individual employee, member or student without restricting that employee's, member's or student's right to a public hearing if requested. This exception shall not be interpreted to permit discussion of general personnel matters in secret." Then the paper added in conclusion: "The lengthy closed-door session was not the first in which one of the stated subjects was possible firing and no action was subsequently taken." To read the full story, click here.
Labels: local government, newspapers, open meetings, privacy
National open-government blog is started
Charles Davis, associate professor of journalism at the University of Missouri, has started a blog about freedom of information and open government, and is updating it several times a day. Davis is a former executive director of the National Freedom of Information Coalition. The blog is The Art of Access.
Labels: freedom of information
Passport Health Plan drops secrecy; governor calls on corrections non-profit to do likewise
Passport Health Plan, the managed-care organization for Medicaid in the Louisville area, announced today that it would no longer fight to keep its records secret, deciding not to appeal a ruling by Attorney General Jack Conway that it had to give records to The Courier-Journal because most of its money comes from the state.
"The announcement came the same day Gov. Steve Beshear said he wants Dismas Charities Inc., a halfway-house company that stymied a state audit by refusing to fully release its financial information, to open its records as well," reports Deborah Yetter of the Louisville newspaper, which "has published stories detailing questionable spending by both Passport and Dismas, and legislators and state officials have demanded greater accountability from both." Louisville-based Dismas says it gets 22 percent of its funds from the state, 3 points short of the threshold for being subject to the open-records law.
Passport's interim CEO, Mark Carter, said in an article on the paper's op-ed page that the decision "was not based upon legal advice but was made as part of the continuing evolution, perhaps even transformation, of the plan." He said state Auditor Crit Luallen's scathing report on the plan "has served as a very beneficial wake-up call to our organization."
Luallen "was rebuffed in her attempt to audit Dismas," and yesterday "said outside companies that do state business must be held accountable for their use of tax dollars," Yetter writes. Today the state issued a request for proposals to expand Medicaid managed care to other parts of the state. Luallen told Yetter, "I think if government is going to privatize services … we have to have a higher level of accountability, not a lower level of accountability." (Read more)
Posted by Al Cross at 10:24 PM 1 comment:
Labels: Medicaid, public-private partnerships, state government
AG tells Kentucky Retirement Systems to reveal its salaries, which even its board doesn't know
Attorney General Jack Conway told Kentucky Retirement Systems administrators yesterday that it must reveal how much employees are paid. They had refused a Feb. 10 request by Eva Smith-Carroll of Frankfort for "current payroll records."
"All the other state employee salaries are posted online. It wasn't clear to me why this one agency should not have to disclose the size of its salaries," Smith-Carroll told John Cheves of the Lexington Herald-Leader, who writes: "Robert Wilcher, a member of the KRS board of trustees, said he and his colleagues hadn't heard about the case until after KRS management denied Smith-Carroll's request. KRS executives have not disclosed their pay to the board, either, Wilcher said."
Because it deals with open records, Conway's opinion has the force of law, but the retirement systems can appeal it to Franklin Circuit Court within 30 days. "KRS general counsel Schuyler Olt declined to comment Tuesday," Cheves writes. UPDATE, April 22: The salaries have been posted online, Cheves reports: "The new board chairwoman, Jennifer Elliott, on Friday said the board insisted that KRS salaries be posted online as quickly as possible." Elliott told Cheves, "We had not previously been aware that the system failed to turn over this information when requested. The board as a whole wants us to be transparent."
UPDATE, April 7: One salary just became moot. In an apparently unrelated move, the KRS board fired its executive director and elected a new chairman, reports Tom Loftus of The Courier-Journal reports.
Posted by Al Cross at 11:31 AM No comments:
Labels: Attorney general opinions, open records
Scripps Howard First Amendment Center
Institute for Rural Journalism and Community Issues
Kentucky Citizens for Open Government
Al Cross
Tara Kaprowy
AG says U of L physician groups tied to Passport m...
Two Danville city commissioners walk out during cl...
Passport Health Plan drops secrecy; governor calls...
AG tells Kentucky Retirement Systems to reveal its...
911 bill (1)
accountability and review (6)
attorney general (41)
Attorney general opinions (54)
Attorney-Client Privilege (1)
Beshear (4)
Bluegrass Institute (2)
business records (2)
Cabinet for Health and Family Services (16)
Cabint for Health and Family Services (1)
campaign disclosure (2)
chjild welfare (1)
copying fees (2)
county clerks (3)
Courier-Journal (2)
court decisions (11)
court records (2)
Department of Public Advocacy (1)
election coverage (3)
family courts (4)
fleischaker (1)
franklin circuit court (2)
freedom of information (28)
General Assembly (34)
HB 540 (1)
Herald-Leader (2)
Hopkinsville (1)
investigations (6)
Investigative agency (1)
journalism ethics (2)
KBA (1)
kenton county (1)
Knight Open Government Survey (2)
KPA (3)
Labor Department (1)
legal ads (1)
legal expenses (1)
media access (4)
Mt. Vernon (1)
open courts (24)
open media (1)
open meetings (52)
Open Meetings Act (3)
open records (170)
political protest (1)
public notice (1)
public-private partnerships (2)
reporter's privilege (1)
scholastic journalism (4)
secrecy (1)
shield law (2)
SPJ (2)
state boards (2)
state government (26)
state police (3)
student media (4)
sunshine week (3)
U.S. attorney general (1)


Chiang-huo 13 was developed following an analysis of several Chinese herbal formulas for arthritis (bi syndrome manifesting as joint pain). It combines the three key features of the traditional bi syndrome formulas, which are: 1) a collection of warming antirheumatic herbs (siler, chiang-huo, tu-huo, cinnamon) that dispel wind, resolve dampness accumulation and alleviate pain; 2) tonic herbs to nourish the kidney and liver and prevent wind from invading the channels (tang-kuei, peony, cnidium, rehmannia, achyranthes); and 3) herbs to help prevent accumulation of dampness (hoelen, atractylodes). The traditional formulas most similar to this one are Sanbi Tang (Decoction for the Three Bi Syndromes) and Duhuo Jisheng Tang (Tu-huo and Loranthus Combination), which are used for most cases of chronic rheumatoid arthritis as well as for lumbago and sciatica. Chiang-huo 13 is intended as a generalized formulation for body pain; if a few joints are affected by early stage rheumatoid arthritis, it may stand alone as a therapy. For other conditions, it may be better to combine it with a second formula to direct it towards the specific type of problem. For persons who show deficiency syndrome, especially with aging, additional tonic formulas may be given, such as Acanthopanax 10 or Recovery Pills. This formula may be able to serve as a substitute for all or part of the anti-inflammatory drugs being used by some individuals; for others who have avoided using drug therapies, this may help reduce the damaging impact of arthritis. For leg arthralgia, see also Achyranthes Tablets. To boost the pain-relieving therapy, consider adding Qi Ye Lian (Pine Mountain). For osteoarthritis, see Drynaria 12 and Boswellamine (White Tiger).


Fans of the TV show Robot Wars may remember these amazing creations battling for supremacy in the 2000's. These robots have behind them teams of brains who are not only there for the tech, but also for dominance. Yes, these machines fight to the death in a larger-than-life arena surrounded by spectators behind bulletproof glass.
It was a spectacular show for kids and grown-ups alike. It sparked a new generation of dreamers, scientists, and techies who would then create the next wave. So what is the next wave of these amazing robot battles? Well, the original Robot Wars took place on land. Now, the robots do battle in the air.
The answer to the next wave of robot battles is DroneClash. Created in the Netherlands, teams gear up their drones for air supremacy. The event, which is on its second year, has a number of powerful names backing it. These include the Dutch Police as well as the Ministry of Defense.
So as you can see, it is not just a small event with limited backing. The government of the Netherlands itself has taken interest in DroneClash, and for good reason. The event not only promotes technology, it also entices an entirely new generation of minds.
The drones have in their arsenal a sundry of weapons. These include flamethrowers, blades, and of course, armor to cushion the blows. DroneClash is also not as cut and dry as its land-based ancestor. Instead of directional movement, you see on land robots, drones also have to navigate, dive, and soar through the battlefield.
The contestants come from various institutions. Some from nearby colleges, while others, tech enthusiasts simply wanting to try their mettle. Competition is incredibly varied, and of course the spectating crowd are the true winners. Behind bulletproof glass, they watch as these machines set fire, crash, and destroy one another. Last one standing wins.


Every six months, Americans (except those residing in Arizona and Hawaii) fumble through the ritual of adjusting their timepieces to mark either the start or the finish of Daylight Savings Time (DST).
Though it has become infinitely easier to make the change now that most computers and smart phone clocks are programmed to adjust automatically, your body might need a bit more time.
Technically speaking, your circadian rhythm, or body clock, make take a few days after "fall back" or "spring forward" to get used to the "new time." It's your internal biological clock that regulates body functions based on our wake/sleep cycle. It is hormonally based, and influenced by environmental cues, such as light or bedroom temperature.
So how does the time change affect your body? For up to a week after the time change, one's sleeping patterns may be disrupted. You may find yourself tossing and turning, unable to sleep right away, or you may feel more fatigued when the alarm goes off.
Although for most the temporary sleep disturbance is merely annoying, for some it can lead to serious consequences, says research health scientist Claire Caruso, Ph.D., RN, for the NIOSH Division of Applied Research and Technology.
Good sleep practice year round is key to making the DST transitions a bit easier. This includes following a regular schedule of going to be and getting up, and no electronics on in the bedroom.
Begin to adjust the timing of your daily routines that are "time cues" for your body. For example, start eating dinner a little later each night.
On Saturday night, set your clocks back one hour, then go to sleep at your normal bedtime.
Go outside for some early morning sunlight on Sunday. The bright light will help set your "body clock," which regulates sleep and alertness.
Be careful when driving or operating machinery if you feel drowsy.
Stay as close to your bedtime on Sunday night to get plenty of sleep before the workweek begins.
If you're having trouble sleeping, the Hartford HealthCare Sleep Medicine Department can help.


text:
Discover Revelop
Developer Proposes 'New Age' Boarding House for Parramatta
NSW-based developer Revelop Holdings have lodged a proposal with the City of Parramatta for an eight-storey boarding house.
The ground floor commercial offerings will be provided in two separate space which will take up a total of 115 square metres, while outside on the ground the developers have avoided including car parking so as to not affect the streetscape or disrupt the Parramatta City Centre.
There will be, however, spaces for bicycles and motorbikes on site.The boarding house is expected to include 42 rooms with each room fitted with full bathroom, kitchenette and living area."The boarding house will accommodate a total of 82 lodgers based on the room size and configuration (41 double rooms) along with an on-site manager," the proposal said.
"The development also includes a communal room and outdoor communal open space within the 6th floor." The site currently contains a single-storey brick and tile building that the developer has proposed to demolish. Revelop aims to remove the "stigma" of social housing. In their proposal, they have pointed to the structure as housing a "new generation" boarding house which they describe as "designed to provide affordable options in priced-out areas for the average Joe."
"New generation boarding houses can provide low cost, flexible rental accommodation to a wide range of tenants, particularly single retirees, homeless, working singles, students and young couples," the proposal said. "Stakeholders involved in the delivery of affordable rental housing are finding that there is often a lack of understanding in the local communities of the people likely to be accommodated in affordable rental housing."Local opposition has been most acute for low-rise infill housing in low-density residential areas. This can lead to local resident opposition to new affordable.
22 October 2021 - News
Reimagined City Cross announces first in SA flagships
Rundle Mall's City Cross arcade set for $25m upgrade by new owner Revelop
City Centres $25M Touch of Europe
City Cross in line for $25m revamp
SHEIKE and Vans flagship stores announced as part of $25m City Cross revamp
Ready Media Group
Suite 506, Level 5, 55 Phillip Street Parramatta, NSW 2150
Website by G Squared


Immunogen: Bromodeoxyuridine conjugated to bovine serum albumin.
Recommended Usage: CD314, clone1D11, is a mAb intended for the identification of NK cells, gamma delta T cells, CD8+ T cells, and some CD4+ T cells. This reagent is effective for direct IF staining of human tissue for FCM analysis using ≤1 μg/106 cells.
The 1D11 monoclonal antibody reacts with the human NKG2D, a 42 kDa lectin-like molecule expressed by NK cells, gamma delta T cells, CD8+ T cells, and some CD4+ T cells. Human NKG2D forms complexes with DAP10, a membrane adaptor protein, and has the ability to costimulate multiple NK activation receptors. The counter-receptor for human NKG2D has been identified as MICA/MICB expressed on epithelial tumors from lung, breast, kidney, ovary, prostate and colon carcinoma. 5C6 and 1D11 block binding of soluble MICA to gamma delta TCR T cell clones and inhibit lysis by these cells. 5C6 and 1D11 induced NKG2D function of redirected lysis of FcReceptor bearing P815 cells.