One of the first things I did when starting to use the AnyBody Modeling System, was to understand how to configure the human model. This means enabling and disabling different body parts and setting up the available options for muscles, ligaments etc. The model is configured in AnyScript by defining switches which we call Body Model (BM) statements.
Wouldn't it be nice to configure the model by having some buttons and instantaneous visual feedback as well? That is what I thought! Therefore, I have developed a small plugin which provides a graphical user interface (GUI) for configuring the Body Model (called BM-Plugin). By using it, you will be able to configure your human model in a more friendly manner but without trying to give up the flexibility of AnyScript.
BM Plugin: gives you the ability to visually configure the Body Model.
The BM-Plugin targets both beginner and advanced AMS users. If you have little to no experience using AnyScript, the BM-Plugin will help you a lot in getting started with it and to understand how switches and BM statements work. If you are an advanced AMS user, you will find configuring your human model much easier and much faster by using the plugin. And don't worry about losing your freedom with AnyScript! BM Plugin is not meant to replace it, it is meant to write it for you, so it saves you time.
In the remainder of this post I will show you what the plugin is able to do and some technicalities.
Load your model and start the plugin by only clicking a button.
The BM-Plugin is structured in a number of tabs, each giving you options to adjust the configuration of different body parts while providing visual feedback if available.
These tabs are: Body, Legs, Arms, Trunk and Mannequin Drivers. Once the desired configuration is set, you can load it in AMS by clicking Apply or OK. The difference is that by clicking Apply the Plugin will stay open for you to configure the model further. When OK is clicked, the configuration is saved in a history file which is available in the Apply History drop menu, next to the Apply button. It is therefore possible to load a previous configurations of the model.
The 'Body', 'Legs', 'Arms', 'Trunk' and 'Mannequin Drivers' tabs.
Of course, not all BM statements have a visual representation in the AMS Model View or are directly related to physical body parts. Therefore, the BM statements which were not classified in the tabs mentioned before can be found and modified in the Advanced tab.
By having the presented overview of the Plugin, you should be ready to use it now. However, if you are interested in finding some details about how it works behind the scenes, continue reading.
As stated in the introduction, the BM-Plugin is dependent on the HumanModel. Therefore, every time you start the plugin, it will check your .main.any file to determine if it is included. If it is, the Plugin will create a new file named BodyModelConfiguration.any inside the Model folder next to your .main.any file.
Note! All the example models in the AMMR already come with an BodyModelConfiguration.any file pre-included.
The plugin will store and modify all the needed BM statements for your model inside the BodyModelConfiguration.any file. I encourage you to use this file to store the BM statements regardless if you use the plugin frequently or not. You will also find that most of the examples using the HumanModel have this structure implemented and they are ready to be configured using the BM-Plugin.
Now I think you know enough about the plugin to try it yourself, so what are you waiting for?
Any development suggestions and feedback are more than welcomed!


Maybe you wish your partner would chat it up with your friends without being prompted or put the cap on the toothpaste. But, their inability to notice crumbs on the counter may stem from the laid-back personality that drew you to them in the first place. One of the things I've noticed with happy couples is they have stopped trying to change one another and have learned to accept one another. They try to focus on their partner's strengths and not their weaknesses.
Whether you want your partner to take the kids to school or help cook dinner, your partner will be more likely to change their behavior if they feel like they'll get relationship brownie points. Instead of telling your partner, ask your partner. Make sure to let your partner know how happy it makes you when they help with dinner or the kids. Everyone wants to make their partner feel happy.


text:
Q: Postfix Notation Calculator I'm trying to code a postfix calculator, but I keep running into two issues-
first: When the calculator encounters a space, it sort of just exits immediately
second: when it encounters a non operator/non digit (ie- z) it doesn't display the error message that I coded.
int main()
{

stack <int> calcStack;
string exp;
char ans;
cout << "\nDo you want to use the calculator?" << endl;
cin >> ans;
while (ans == 'y')
{
    cout << "\nEnter your exp" << endl;
    cin >> exp;
    for (int i = 0; i < exp.size(); i++)
    {
        if (isspace(exp[i]))
        {

        }
        else if (isdigit(exp[i]))
        {
            int num = exp[i] - '0';
            calcStack.push(num);
        }
        else
            doOp(exp[i], calcStack);
    }

    while (!calcStack.empty())
    {
        calcStack.pop();
    }

    cout << "\nDo you want to use the calculator again?" << endl;
    cin >> ans;
}

system("pause");
return 0;
}

This is the function--
void doOp(const char & e, stack <int>& myS)
{

if (myS.size() == 2)
{
    int num1, num2, answ;
    num2 = myS.top();
    myS.pop();
    num1 = myS.top();
    myS.pop();
    if (e == '+')
        answ = num1 + num2;
    else if (e == '-')
        answ = num1 - num2;
    else if (e == '*')
        answ = num1 * num2;
    else if (e == '/')
        answ = num1 / num2;
    else if (e == '%')
        answ = num1 % num2;
    else
        cout << "\nError- Invalid operator" << endl;

    cout << "\nCalculating..." << endl << answ << endl;
    myS.push(answ);
}
else
    cout << "\nInvalid stack size- too few, or too many" << endl;
}

A: In your main loop, you're reading strings with the string extractor:
    cin >> exp;

THe string extractor is space sensitive.  So as soon as a space char is encountered in the input,  the string reading stops, and the witespace is not included in exp.
If you want to get a full line including spaces, you should opt for:
    getline (cin, exp);

Edit:
The issue you experience with getline() is realted to the char extraction when you ask if user wants to use the calculator.  Entering y is not sufficient. So you'l enter yenter.  Only the y will be put into ans, so that getline() will start reading an empty line.
To solve this, update your initial input:
    cin >> ans;                   // as before
    cin.ignore (INT_MAX, '\n');   // add this to skip everything until newline included

Here an online demo showing that it works (including error message in case of wrong operator)

redpajama_set_name: RedPajamaStackExchange


text:
Алекса́ндр Дюма́ (27 липня 1824 — 27 листопада 1895) — французький письменник (драматург, прозаїк, поет), член Французької академії з 1874.

Життєпис
Позашлюбний син письменника Александра Дюма-батька і кравчині Катрін Лабе.

У віці семи років його всиновив батько, а до того Дюма-син мешкав із матір'ю в Парижі.

По усиновленню батько віддає сина до пансіону, де той зазнає знущань через незаконне народження.

Твори
1847 року написано збірку віршів «Гріхи юності». 1848 — роман «Дама з камеліями», навіяний його стосунками з куртизанкою Альфонсиною Плессі, котра називала себе Марі дю Плессі й померла від сухот 1847 року, як і героїня роману Маргарита Готьє. Александр дізнався про її смерть лише після приїзду до Парижа. На сюжет роману Джузеппе Верді написав оперу «Травіата» і через це дуже посварився з автором, бо не просив у того дозволу на використання сюжету. 1852 року вперше поставлено п'єсу «Дама з камеліями», котра одразу стала популярною — це доводить те, що роль Маргарити Готьє грали такі великі акторки, як Елеонора Дузе чи Сара Бернар.

Переклади українською
Александр Дюма-син. /Переклад Якубяка М. — Л.: Піраміда, 2009. ISBN 978-966-441-139-1

Примітки

Посилання

Персоналії за алфавітом
Французькі письменники
Поховані на цвинтарі Монмартр

redpajama_set_name: RedPajamaWikipedia


text:
Trio of projects seek IDA tax incentives
By Tim Gannon
A new hotel on Route 58, a new cider mill on Sound Avenue, and a new office complex downtown are all proposed for Riverhead and are all seeking tax incentives from the Riverhead Industrial Development Agency.
The IDA can grant sales tax exemptions on the cost of building materials, mortgage recording tax exemptions, and a partial property tax exemption that usually starts at 50 percent of the value of the improvements, with the the amount of the exemption declining by five percent per year over 10 years until the project is paying 100 percent of its property tax.
The following projects came before the IDA on Tuesday night seeking tax exemptions:
• A 140-room Marriott Residence Inn is proposed for the north side of Route 58, right next to the Hilton Garden Inn that's already there.
Developer Lee Browning actually got a site plan approval to build both hotels back in 2007, and he got IDA benefits for the 114-room Hilton Garden Inn in 2007, as well. The 2007 site plan approval was a phased approval in which the Hilton Garden Inn would be built first, followed by the Marriott, for which Mr. Browning was required to purchase 26 farmland development rights credits, at a cost of between $1.4 million and $1.8 million.
"When the weather breaks, we're ready to go," he said of the Marriott construction.
Mr. Browning said the IDA benefits are required by his bank as a condition of the financing for the project. He said he two hotels together would be able to bring large groups or conventions to the area.
"In order to attract large groups, you've got to hit 250 rooms, so we're just there," Mr. Browning said. The Hilton doesn't have a lot of meeting room, he said.
The Hilton Garden Inn will also be undergoing a $1 million renovation, which is required every six years by the company, Mr. Browning said.
The IDA is planning a March 30 public hearing on the Marriott Residence Inn.
• Greg Ferraro of food distribution company J. Kings Food Service Professionals and Andy Calimano of Starfish Junction — which is behind the popular local cider festival Pour the Core — envision a destination cider making, bottling and tasting facility on Sound Avenue.
"We have an opportunity to take advantage of the trend in hard cider, which is probably the fastest growing beverage in the adult market," Mr. Calimano said.
The project would be called Riverhead Ciderhouse and would be located inside the existing Grapes and Greens agricultural processing and storage facility on Sound Avenue.
Grapes and Greens was started by J. Kings Food Service Professionals in 2012 with support from the Long Island Farm Bureau, as well as a $500,000 state grant.
"Grapes and Greens hasn't flourished to the level they would like to see, so there are portions of the building that are vacant," said IDA director Tracy Stark.
The team behind the cider house plans on using New York State apples, and, if they're available, local apples, Mr. Calimano said. However, they plan to buy the juice from upstate orchards, rather than actually crushing the apples themselves, because there's less waste involved, he said.
In addition to the cider production space, Riverhead Ciderhouse also plans to run a bottling facility, which could be used by other local cider makers as well, Mr. Calimano said.
The company would start out small, with four to six employees, and then add about four to six more each year, Ferraro said. There would be a full-time cider maker and assistant cider maker, as well as a full-time manager and assistant manager at the proposed cider center, where customers could sample the cider, according to Mr. Ferraro.
There would also be some part-time positions and Greg Gove, winemaker and cidermaker at the former Peconic Bay Winery, will also be involved, he said.
Mr. Ferraro has also proposed some new landscaping and building facade changes outside the existing facility.
The project will cost about $3 million, according to Mr. Ferraro.
The IDA, which grants tax breaks to attract businesses to the area, is planning to hold an April 6 public hearing on Riverhead Ciderhouse's application seeking IDA benefits.
• Georgia Malone recently bought renovated 30 West Main Street with 27 fully furnished, mid-sized office units and shared space on the second and third floors, and retail on the ground floor.
Now, Ms. Malone is proposing to shift her focus one building to the east, where she is proposing to buy and renovate 20 West Main Street, which has been the longtime home of Allied Optical and is owned by Jerry Steiner.
As with 30 West Main — for which the IDA granted tax incentives last January — Ms. Malone is seeking IDA benefits for 20 West Main.
"Tax abatements are tremendously important," she said. She has yet to sign a contract to buy the building from Mr. Steiner.
Ms. Malone is eying professional offices on the ground floor and possibly on the upper floors, as well. She says she doesn't want to rent the upper floors as residences.
"This might be the best looking building in Riverhead," she said. Still, she said it needs a lot of work.
"It's going to be a full renovation of the inside," said her real estate broker Ike Israel.
The IDA is planning to hold a public hearing on 20 West Main on April 6.
Tim Gannon has been a reporter for Times Review Media Group since 1996 and has covered police, government, schools and more.He previously worked as a reporter for Suffolk Life, the Traveler-Watchman and The Whale. He is a graduate of the former Mercy High School in Riverhead and Southampton College.
Email Tim Gannon Email Created with Sketch. Email Tim Gannon
30 west main
riverhead ciderhouse
Riverhead Industrial Development Agency
Year in Business: Unprecedented challenge to 'pivot' amid pandemic
Shuttered stores. Stalled revitalization. Business as we've never known it. The COVID-19 pandemic brought unprecedented challenges to local businesses...
East End Financial, after four decades helping small businesses grow, reaches milestone
In 1979, John Kosinski took a leap of faith. Working with just a little more than $10,000, a client...
Riverhead's McGuire's Hearing Centers expands with new location in Southold
It isn't so much a sound that is like music to David Carr's ears as it is a look....
New restaurant, two apartments pitched for former Hy Ting Restaurant building on West Main Street
The founders of a real estate firm plan to renovate the building formerly home to Hy Ting Restaurant on...
Developer in contract to purchase former Homeside Florist says it 'has a lot of options'
A pair of Mattituck-based developers have plans to purchase the Homeside Florist property at the corner of Main Road...
Governor says businesses must think about how they can safely reopen; two-phase plan to begin with construction, manufacturing
Gov. Andrew Cuomo outlined a general two-phase outline for when nonessential businesses can resume, a plan that would vary...

redpajama_set_name: RedPajamaCommonCrawl


text:
Hof Eich ist eine Gehöftgruppe, die zum Ortsteil Geislitz der Gemeinde Linsengericht im Main-Kinzig-Kreis in Hessen gehört und historisch eine eigenständige Siedlung bildete.

Lage

Hof Eich liegt 190 Meter über NN, 750 Meter südwestlich von Geislitz, am Eichelbach.

Geschichte

Der Hof war ursprünglich ein Allod der Herren von Eppstein. 1379 wird er als Lehen des Adelsgeschlechts der Forstmeister von Gelnhausen, 1416 der Familie von Breitenbach aus Gelnhausen und später des Grafen Christoph von Stolberg genannt. 1545 kaufte die Vormundschaft des Grafen Philipp III. von Hanau-Münzenberg Hof Eich und vereinigt es mit dem Amt Altenhaßlau.

Nach dem Tod des letzten Hanauer Grafen, Johann Reinhard III., 1736, erbte Landgraf Friedrich I. von Hessen-Kassel aufgrund eines Erbvertrages aus dem Jahr 1643 die Grafschaft Hanau-Münzenberg und damit auch Hof Eich. 1674–1768 war Hof Eich an die von Edelsheim zu Lehen gegeben, 1779 wurde Prinz Karl von Hessen-Kassel mit dem Hof belehnt.

1821 kam Hof Eich, nunmehr im "Kurfürstentum Hessen" genannten Hessen-Kassel gelegen, bei einer dort durchgeführten grundlegenden Verwaltungsreform zu dem neu gebildeten Landkreis Gelnhausen. 1895 lebten hier in 11 Häusern 73 Bewohner. Die Mühle wurde zu Beginn des 20. Jahrhunderts aufgegeben. In den 1930er Jahren war die Führung des Untergaus Kinzigtal des Bundes Deutscher Mädel hier untergebracht.

Am 1. September 1970 schlossen sich die vier bis dahin selbständigen Gemeinden Altenhaßlau, Eidengesäß, Geislitz (einschließlich des Hofes Eich) und Großenhausen zur neuen Gemeinde Linsengericht zusammen. Mit der hessischen Kreisgebietsreform ging der Landkreis Gelnhausen 1974 dann im Main-Kinzig-Kreis auf.

Historische Namensformen

 Hof zu Eychin (1379)
 Hof Eiche (1416)
 Eich (1634)
 Eicher Hof (1779)

Literatur

 Walter Engel: Die urkundlichen Ersterwähnungen der Linsengerichter Ortsteile in einer kurzen Zusammenfassung – Altenhaßlau – Eidengesäß – Geislitz mit Hof Eich, Großenhausen mit Waldrode – Lützelhausen. In: Mitteilungsblatt des Zentrums für Regionalgeschichte 30 (2005), S. 6f.
 Willi Klein: Zur Geschichte des Mühlenwesens im Main-Kinzig-Kreis = Hanauer Geschichtsblätter 40. Hanau 2003, S. 303.
 Abteilung I der Reichsjugendführung (Hrsg.): Aufbau, Gliederung und Anschriften der Hitler-Jugend : Amtliche Gliederungsübersicht der Reichsjugendführung der NSDAP. Stand vom 1. Januar 1934. o. O. 1934.
 Heinrich Reimer: Historisches Ortslexikon für Kurhessen. Marburg 1926., S. 106f.

Einzelnachweise

Weblinks

Ort im Main-Kinzig-Kreis
Geographie (Linsengericht, Hessen)
Kulturdenkmal in Linsengericht (Hessen)
Ersterwähnung 1379


Come visit the historic Robin's Nest Restaurant and enjoy a delicious lunch, intimate dinner, relaxing Sunday brunch or evening cocktail in an old fashioned bar. Sample our interesting, eclectic cuisine peppered with a French American flair.
Meals, cocktails or even a light snack or dessert can be served at the old fashioned bar, in one of several elegant dining rooms or in warm weather on the outdoor patio overlooking the Mill Race waterway. Multiple patios take advantage of the Rancocas Creek's natural beauty. Rippling water, umbrellas and beautiful greenery make for a lovely and relaxing place to sip a cocktail, have dinner al fresco and listen to live music.
When celebrating a special occasion whether it's a wedding reception, corporate function, special family dinner or an open pit barbecue, The Robin's Nest Restaurant & Catering will provide the finest food and service so you can relax and enjoy the party.
The Robin's Nest is situated in the center of Mount Holly's historic downtown shopping district, just minutes from Route 295 and exit 5 off the New Jersey Turnpike.
Monday lunch 11:00–2:30 Tuesday lunch 11:00–4:00 dinner 4:30–8:00 Wednesday & Thursday lunch 11:00–4:00 dinner 4:30–9:00 Friday lunch 11:00–4:00 dinner 4:30 –9:30 Saturday lunch 11:00–4:00 dinner 5:00–9:30 Sunday brunch 10:00–2:00 Happy Hour Tuesday - Friday 4:30-6:30 Closed: Memorial Day Weekend (open Saturday, Closed Sunday and Monday) Independence Day Weekend (open Saturday, Closed Sunday and Monday) Labor Day Weekend (open Saturday, Closed Sunday and Monday). Closed Thanksgiving and Christmas.
high-energy and easygoing restaurant - much like their guests.
Located in Williamstown, NJ, we are a fine restaurant offering quality prepared food and friendly service.


text:
Gray Fox
Urocyon cinereoargenteus Photo Fiona Sunquist ©
The gray fox is one of Florida's most commonly seen carnivores. Though most are wary, some individuals become quite tame. They are frequently seen at night on unpaved roads, and individuals often allow themselves to be followed for some distance. The gray fox has a wide red-orange stripe along both flanks and on the sides of the neck, and a black-tipped tail. It is often confused with the red fox, which is a mahogany red, and has a white-tipped tail.
Red and gray foxes are similar in size and weigh 3-5 kg (7-11 lb). A coyote weighs about 3 times as much as a fox and looks like a smaller bushy-tailed version of a German shepherd dog.
Gray foxes are adaptable, opportunistic carnivores, flexible in their feeding habits, and quite tolerant of people. They feed on small animals, fruit, and insects, but they will also eat out of garbage cans and scavenge road-killed animals. Gray foxes prey heavily on rabbits, but they also eat rodents, birds, insects, acorns and fruit. They are active at night and usually hunt alone. They move at a rapid trot, eyes, ears and nose alert for signs of prey.
Gray foxes are most abundant in hardwood forests, pine-oak woodlands and brushy fields. They are the only member of the canid (dog) family that regularly climbs trees and have been seen in trees at heights up to 18 meters (59 ft).
Gray foxes usually form pair bonds that last year-round. Pairs mate in winter and produce a litter of about 4 pups in March or April after a gestation period of 53 days. Both parents guard and feed the young.
Fox populations are vulnerable to infectious diseases, especially rabies and canine distemper.
top of page | back to mammals
• Live weather radar
• About Florida weather
• Map & Key to Regions
Wildlife of Florida 2011
Fiona Sunquist
Wildlife of Florida: Lizards
Download $2.49
gator/crocs | birds | mammals | snakes | turtles | frogs/toads | lizards | sharks
Wildlife | Favorite Activities | My Destinations | about us | resources | site map | home
web site development by Creative Communications


Louise was born on February 9, 1923 and passed away on Thursday, March 14, 2019.
Louise was a resident of Petersburg, Virginia at the time of passing.
For 60 years she was an active member of First Baptist Church and in her later years, Second Baptist where her family will receive friends at 10:30 am on Thursday, March 21, 2019. Her funeral service will be officiated by Dr. Joseph Lewis beginning at 11:00 am with interment following at Southlawn Memorial Park.
In lieu of flowers, memorial gifts may be sent to Second Baptist Church endowment fund, 3355 Johnson Road, Petersburg.


text:
include('shared.lua')
ENT.Spawnable			= false
ENT.AdminSpawnable		= false
function ENT:Initialize()
end

function ENT:Draw()
	self:DrawModel()
end

net.Receive("OCRP_ShowItemBank", function()
    local items = net.ReadTable()
    ShowItemBank(items)
end)

OCRP_ItemBank = OCRP_ItemBank or {}

ITEMBANKMENU = nil
ITEMBANKINV = nil

function ShowItemBank(items)

    OCRP_ItemBank = items

    local frame = vgui.Create("OCRP_BaseMenu")
    frame:SetSize(470, 545)
    frame:SetOCRPTitle("Your Item Bank")
    frame:Center()
    frame:SetPos(ScrW()/2-(frame:GetWide()+15), select(2, frame:GetPos()))
    frame:MakePopup()

    ITEMBANKMENU = frame

    local OOR = frame.OnRemove

    function frame:OnRemove()
        if ITEMBANKINV and ITEMBANKINV:IsValid() then
            ITEMBANKINV:Remove()
        end
        OOR(self)
    end

    surface.SetFont("Trebuchet19")
    local textw,texth = surface.GetTextSize("These are the items in your bank.")

    local caption = vgui.Create("DPanel", frame)
    caption:SetSize(textw+10,texth+10)
    caption:SetPos(frame:GetWide()/2-caption:GetWide()/2, 10)

    function caption:Paint(w,h)
        draw.RoundedBox(8, 0, 0, w, h, Color(30,30,30,255))
        draw.DrawText("These are the items in your bank.", "Trebuchet19", 5, 5, Color(255,255,255,255), TEXT_ALIGN_LEFT)
    end

    local inv = vgui.Create("DPanelList", frame)
    inv:SetSize(470, frame:GetTall()-select(2, caption:GetPos())-caption:GetTall()-50)
    inv:SetPos(0, select(2, caption:GetPos())+caption:GetTall()+10)
    inv:SetPadding(10)
    inv:SetSpacing(10)
    inv:SetNoSizing(true)
    inv:EnableVerticalScrollbar(true)
    inv:EnableHorizontal(true)

    local pl = inv.PerformLayout

    function inv:PerformLayout()
        pl(self)
        self.VBar:SetTall(self:GetTall()-10)
        self.VBar:SetPos(self:GetWide() - 20, 5)
    end

    ITEMBANKMENU.itemBank = inv

    PopulateItemBank(items, true)

    local weight = vgui.Create("DPanel", frame)
    weight:SetSize(frame:GetWide()-20, 20)
    weight:SetPos(10, frame:GetTall()-30)

    function weight:Paint(w,h)
        local cur = items["WeightData"] and items["WeightData"].Cur or 0
        local max = items["WeightData"] and items["WeightData"].Max or 100
        draw.RoundedBox(8, 0, 0, w, h, Color(255,255,255,150))
        draw.RoundedBox(8, 1, 1, w-2, h-2, Color(20,20,20,255))
        if cur > 0 then
            local col = Color(25,255,0,100)
            if cur/max > .5 and cur/max < .8 then
                col = Color(255,255,0,100)
            elseif cur/max >= .8 then
                col = Color(255,0,0,100)
            end
            draw.RoundedBox(8, 2, 2, cur/max*w, h-4, col)
        end
        draw.SimpleTextOutlined("Weight: " .. tostring(cur) .. " / " .. tostring(max), "UiBold", w/2, h/2, Color(255,255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, 1, Color(0,0,0,255))
    end

    local frame = vgui.Create("OCRP_BaseMenu")
    frame:SetSize(470, 545)
    frame:SetOCRPTitle("Your Inventory")
    frame:Center()
    frame:SetPos(ScrW()/2+15, select(2, frame:GetPos()))
    frame:MakePopup()

    ITEMBANKINV = frame

    local OOR = frame.OnRemove

    function frame:OnRemove()
        if ITEMBANKMENU and ITEMBANKMENU:IsValid() then
            ITEMBANKMENU:Remove()
        end
        OOR(self)
    end

    surface.SetFont("Trebuchet19")
    local textw,texth = surface.GetTextSize("These are the items in your inventory.")

    local caption = vgui.Create("DPanel", frame)
    caption:SetSize(textw+10,texth+10)
    caption:SetPos(frame:GetWide()/2-caption:GetWide()/2, 10)

    function caption:Paint(w,h)
        draw.RoundedBox(8, 0, 0, w, h, Color(30,30,30,255))
        draw.DrawText("These are the items in your inventory.", "Trebuchet19", 5, 5, Color(255,255,255,255), TEXT_ALIGN_LEFT)
    end

    local inv = vgui.Create("DPanelList", frame)
    inv:SetSize(470, frame:GetTall()-select(2, caption:GetPos())-caption:GetTall()-50)
    inv:SetPos(0, select(2, caption:GetPos())+caption:GetTall()+10)
    inv:SetPadding(10)
    inv:SetSpacing(10)
    inv:SetNoSizing(true)
    inv:EnableVerticalScrollbar(true)
    inv:EnableHorizontal(true)

    local pl = inv.PerformLayout

    function inv:PerformLayout()
        pl(self)
        self.VBar:SetTall(self:GetTall()-10)
        self.VBar:SetPos(self:GetWide() - 20, 5)
    end

    ITEMBANKINV.inv = inv

    PopulateItemBank(OCRP_Inventory, false)

    local weight = vgui.Create("DPanel", frame)
    weight:SetSize(frame:GetWide()-20, 20)
    weight:SetPos(10, frame:GetTall()-30)

    function weight:Paint(w,h)
        local cur = OCRP_Inventory["WeightData"] and OCRP_Inventory["WeightData"].Cur or 0
        local max = OCRP_Inventory["WeightData"] and OCRP_Inventory["WeightData"].Max or 50
        draw.RoundedBox(8, 0, 0, w, h, Color(255,255,255,150))
        draw.RoundedBox(8, 1, 1, w-2, h-2, Color(20,20,20,255))
        if cur > 0 then
            local col = Color(25,255,0,100)
            if cur/max > .5 and cur/max < .8 then
                col = Color(255,255,0,100)
            elseif cur/max >= .8 then
                col = Color(255,0,0,100)
            end
            draw.RoundedBox(8, 2, 2, cur/max*w, h-4, col)
        end
        draw.SimpleTextOutlined("Weight: " .. tostring(cur) .. " / " .. tostring(max), "UiBold", w/2, h/2, Color(255,255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, 1, Color(0,0,0,255))
    end

end

function PopulateItemBank(items, bank)

    if bank then
        ITEMBANKMENU.itemBank:Clear()
    else
        ITEMBANKINV.inv:Clear()
    end

    for item,amt in pairs(items) do
        if not amt or amt == 0 then continue end
        if item == "WeightData" then continue end
        local itemPanel = vgui.Create("DPanel")
        itemPanel:SetSize(100, 140)

        function itemPanel:Paint(w,h)
            draw.RoundedBox(8, 0, 0, w, h, Color(0,0,0,255))
            draw.DrawText(GAMEMODE.OCRP_Items[item].Name, "UiBold", w/2, 5, Color(255,255,255,255), TEXT_ALIGN_CENTER)
            if amt > 1 then
                draw.DrawText("x" .. amt, "UiBold", w/2, 18, Color(255,255,255,255), TEXT_ALIGN_CENTER)
            end
        end

        local itemMdlPanel = vgui.Create("DModelPanel", itemPanel)
        itemMdlPanel:SetSize(80, 80)
        itemMdlPanel:SetPos(5, 30)
        itemMdlPanel:SetModel(GAMEMODE.OCRP_Items[item].Model)
        itemMdlPanel:SetCursor("arrow")

        itemMdlPanel.OnCursorEntered = itemPanel.OnCursorEntered
        itemMdlPanel.OnCursorExited = itemPanel.OnCursorExited

        FocusModelPanel(itemMdlPanel)

        local withdraw = vgui.Create("OCRP_BaseButton", itemPanel)
        withdraw:SetSize(90, 15)
        withdraw:SetPos(5, 115)
        if bank then
            withdraw:SetText("Withdraw")

            function withdraw:DoClick()
                net.Start("OCRP_WithdrawItemBank")
                net.WriteString(item)
                net.SendToServer()
            end
        else
            withdraw:SetText("Deposit")

            function withdraw:DoClick()
                net.Start("OCRP_DepositItemBank")
                net.WriteString(item)
                net.SendToServer()
            end
        end
        if bank then
            ITEMBANKMENU.itemBank:AddItem(itemPanel)
        else
            ITEMBANKINV.inv:AddItem(itemPanel)
        end
    end
    if bank then
        while table.Count(ITEMBANKMENU.itemBank:GetItems()) < 12 do
            local filler = vgui.Create("DPanel")
            filler:SetSize(100, 140)
            filler.Paint = function() draw.RoundedBox(8, 0, 0, 100, 140, Color(0,0,0,255)) end
            ITEMBANKMENU.itemBank:AddItem(filler)
        end
    else
        while table.Count(ITEMBANKINV.inv:GetItems()) < 12 do
            local filler = vgui.Create("DPanel")
            filler:SetSize(100, 140)
            filler.Paint = function() draw.RoundedBox(8, 0, 0, 100, 140, Color(0,0,0,255)) end
            ITEMBANKINV.inv:AddItem(filler)
        end
    end

end

net.Receive("OCRP_UpdateItemBankItem", function()
    local item = net.ReadString()
    local amt = net.ReadInt(32)
    local weight = net.ReadTable()
    OCRP_ItemBank[item] = amt
    OCRP_ItemBank["WeightData"] = weight
    if ITEMBANKMENU and ITEMBANKMENU:IsValid() then
        PopulateItemBank(OCRP_ItemBank, true)
    end
    if ITEMBANKINV and ITEMBANKINV:IsValid() then
        PopulateItemBank(OCRP_Inventory, false)
    end
end)

redpajama_set_name: RedPajamaGithub


text:
.. cmake-manual-description: CMake Toolchains Reference

cmake-toolchains(7)
*******************

.. only:: html

   .. contents::

Introduction
============

CMake uses a toolchain of utilities to compile, link libraries and create
archives, and other tasks to drive the build. The toolchain utilities available
are determined by the languages enabled. In normal builds, CMake automatically
determines the toolchain for host builds based on system introspection and
defaults. In cross-compiling scenarios, a toolchain file may be specified
with information about compiler and utility paths.

Languages
=========

Languages are enabled by the :command:`project` command.  Language-specific
built-in variables, such as
:variable:`CMAKE_CXX_COMPILER <CMAKE_<LANG>_COMPILER>`,
:variable:`CMAKE_CXX_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` etc are set by
invoking the :command:`project` command.  If no project command
is in the top-level CMakeLists file, one will be implicitly generated. By default
the enabled languages are C and CXX:

.. code-block:: cmake

  project(C_Only C)

A special value of NONE can also be used with the :command:`project` command
to enable no languages:

.. code-block:: cmake

  project(MyProject NONE)

The :command:`enable_language` command can be used to enable languages after the
:command:`project` command:

.. code-block:: cmake

  enable_language(CXX)

When a language is enabled, CMake finds a compiler for that language, and
determines some information, such as the vendor and version of the compiler,
the target architecture and bitwidth, the location of corresponding utilities
etc.

The :prop_gbl:`ENABLED_LANGUAGES` global property contains the languages which
are currently enabled.

Variables and Properties
========================

Several variables relate to the language components of a toolchain which are
enabled. :variable:`CMAKE_<LANG>_COMPILER` is the full path to the compiler used
for ``<LANG>``. :variable:`CMAKE_<LANG>_COMPILER_ID` is the identifier used
by CMake for the compiler and :variable:`CMAKE_<LANG>_COMPILER_VERSION` is the
version of the compiler.

The :variable:`CMAKE_<LANG>_FLAGS` variables and the configuration-specific
equivalents contain flags that will be added to the compile command when
compiling a file of a particular language.

As the linker is invoked by the compiler driver, CMake needs a way to determine
which compiler to use to invoke the linker. This is calculated by the
:prop_sf:`LANGUAGE` of source files in the target, and in the case of static
libraries, the language of the dependent libraries. The choice CMake makes may
be overridden with the :prop_tgt:`LINKER_LANGUAGE` target property.

Toolchain Features
==================

CMake provides the :command:`try_compile` command and wrapper macros such as
:module:`CheckCXXSourceCompiles`, :module:`CheckCXXSymbolExists` and
:module:`CheckIncludeFile` to test capability and availability of various
toolchain features. These APIs test the toolchain in some way and cache the
result so that the test does not have to be performed again the next time
CMake runs.

Some toolchain features have built-in handling in CMake, and do not require
compile-tests. For example, :prop_tgt:`POSITION_INDEPENDENT_CODE` allows
specifying that a target should be built as position-independent code, if
the compiler supports that feature. The :prop_tgt:`<LANG>_VISIBILITY_PRESET`
and :prop_tgt:`VISIBILITY_INLINES_HIDDEN` target properties add flags for
hidden visibility, if supported by the compiler.

.. _`Cross Compiling Toolchain`:

Cross Compiling
===============

If :manual:`cmake(1)` is invoked with the command line parameter
``-DCMAKE_TOOLCHAIN_FILE=path/to/file``, the file will be loaded early to set
values for the compilers.
The :variable:`CMAKE_CROSSCOMPILING` variable is set to true when CMake is
cross-compiling.

Cross Compiling for Linux
-------------------------

A typical cross-compiling toolchain for Linux has content such
as:

.. code-block:: cmake

  set(CMAKE_SYSTEM_NAME Linux)
  set(CMAKE_SYSTEM_PROCESSOR arm)

  set(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs)
  set(CMAKE_STAGING_PREFIX /home/devel/stage)

  set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf)
  set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
  set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)

  set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

The :variable:`CMAKE_SYSTEM_NAME` is the CMake-identifier of the target platform
to build for.

The :variable:`CMAKE_SYSTEM_PROCESSOR` is the CMake-identifier of the target architecture
to build for.

The :variable:`CMAKE_SYSROOT` is optional, and may be specified if a sysroot
is available.

The :variable:`CMAKE_STAGING_PREFIX` is also optional. It may be used to specify
a path on the host to install to. The :variable:`CMAKE_INSTALL_PREFIX` is always
the runtime installation location, even when cross-compiling.

The :variable:`CMAKE_<LANG>_COMPILER` variables may be set to full paths, or to
names of compilers to search for in standard locations. In cases where CMake does
not have enough information to extract information from the compiler, the
:module:`CMakeForceCompiler` module can be used to bypass some of the checks.

CMake ``find_*`` commands will look in the sysroot, and the :variable:`CMAKE_FIND_ROOT_PATH`
entries by default in all cases, as well as looking in the host system root prefix.
Although this can be controlled on a case-by-case basis, when cross-compiling, it
can be useful to exclude looking in either the host or the target for particular
artifacts. Generally, includes, libraries and packages should be found in the
target system prefixes, whereas executables which must be run as part of the build
should be found only on the host and not on the target. This is the purpose of
the ``CMAKE_FIND_ROOT_PATH_MODE_*`` variables.

Cross Compiling using Clang
---------------------------

Some compilers such as Clang are inherently cross compilers.
The :variable:`CMAKE_<LANG>_COMPILER_TARGET` can be set to pass a
value to those supported compilers when compiling:

.. code-block:: cmake

  set(CMAKE_SYSTEM_NAME Linux)
  set(CMAKE_SYSTEM_PROCESSOR arm)

  set(triple arm-linux-gnueabihf)

  set(CMAKE_C_COMPILER clang)
  set(CMAKE_C_COMPILER_TARGET ${triple})
  set(CMAKE_CXX_COMPILER clang++)
  set(CMAKE_CXX_COMPILER_TARGET ${triple})

Similarly, some compilers do not ship their own supplementary utilities
such as linkers, but provide a way to specify the location of the external
toolchain which will be used by the compiler driver. The
:variable:`CMAKE_<LANG>_COMPILER_EXTERNAL_TOOLCHAIN` variable can be set in a
toolchain file to pass the path to the compiler driver.

Cross Compiling for QNX
-----------------------

As the Clang compiler the QNX QCC compile is inherently a cross compiler.
And the :variable:`CMAKE_<LANG>_COMPILER_TARGET` can be set to pass a
value to those supported compilers when compiling:

.. code-block:: cmake

  set(CMAKE_SYSTEM_NAME QNX)

  set(arch gcc_ntoarmv7le)

  set(CMAKE_C_COMPILER qcc)
  set(CMAKE_C_COMPILER_TARGET ${arch})
  set(CMAKE_CXX_COMPILER QCC)
  set(CMAKE_CXX_COMPILER_TARGET ${arch})

Cross Compiling for Windows CE
------------------------------

Cross compiling for Windows CE requires the corresponding SDK being
installed on your system.  These SDKs are usually installed under
``C:/Program Files (x86)/Windows CE Tools/SDKs``.

A toolchain file to configure a Visual Studio generator for
Windows CE may look like this:

.. code-block:: cmake

  set(CMAKE_SYSTEM_NAME WindowsCE)

  set(CMAKE_SYSTEM_VERSION 8.0)
  set(CMAKE_SYSTEM_PROCESSOR arm)

  set(CMAKE_GENERATOR_TOOLSET CE800) # Can be omitted for 8.0
  set(CMAKE_GENERATOR_PLATFORM SDK_AM335X_SK_WEC2013_V310)

The :variable:`CMAKE_GENERATOR_PLATFORM` tells the generator which SDK to use.
Further :variable:`CMAKE_SYSTEM_VERSION` tells the generator what version of
Windows CE to use.  Currently version 8.0 (Windows Embedded Compact 2013) is
supported out of the box.  Other versions may require one to set
:variable:`CMAKE_GENERATOR_TOOLSET` to the correct value.

Cross Compiling for Windows 10 Universal Applications
-----------------------------------------------------

A toolchain file to configure a Visual Studio generator for a
Windows 10 Universal Application may look like this:

.. code-block:: cmake

  set(CMAKE_SYSTEM_NAME WindowsStore)
  set(CMAKE_SYSTEM_VERSION 10.0)

A Windows 10 Universal Application targets both Windows Store and
Windows Phone.  Specify the :variable:`CMAKE_SYSTEM_VERSION` variable
to be ``10.0`` to build with the latest available Windows 10 SDK.
Specify a more specific version (e.g. ``10.0.10240.0`` for RTM)
to build with the corresponding SDK.

Cross Compiling for Windows Phone
---------------------------------

A toolchain file to configure a Visual Studio generator for
Windows Phone may look like this:

.. code-block:: cmake

  set(CMAKE_SYSTEM_NAME WindowsPhone)
  set(CMAKE_SYSTEM_VERSION 8.1)

Cross Compiling for Windows Store
---------------------------------

A toolchain file to configure a Visual Studio generator for
Windows Store may look like this:

.. code-block:: cmake

  set(CMAKE_SYSTEM_NAME WindowsStore)
  set(CMAKE_SYSTEM_VERSION 8.1)

Cross Compiling using NVIDIA Nsight Tegra
-----------------------------------------

A toolchain file to configure a Visual Studio generator to
build using NVIDIA Nsight Tegra targeting Android may look
like this:

.. code-block:: cmake

  set(CMAKE_SYSTEM_NAME Android)

The :variable:`CMAKE_GENERATOR_TOOLSET` may be set to select
the Nsight Tegra "Toolchain Version" value.

See also target properties:

* :prop_tgt:`ANDROID_ANT_ADDITIONAL_OPTIONS`
* :prop_tgt:`ANDROID_API_MIN`
* :prop_tgt:`ANDROID_API`
* :prop_tgt:`ANDROID_ARCH`
* :prop_tgt:`ANDROID_ASSETS_DIRECTORIES`
* :prop_tgt:`ANDROID_GUI`
* :prop_tgt:`ANDROID_JAR_DEPENDENCIES`
* :prop_tgt:`ANDROID_JAR_DIRECTORIES`
* :prop_tgt:`ANDROID_JAVA_SOURCE_DIR`
* :prop_tgt:`ANDROID_NATIVE_LIB_DEPENDENCIES`
* :prop_tgt:`ANDROID_NATIVE_LIB_DIRECTORIES`
* :prop_tgt:`ANDROID_PROCESS_MAX`
* :prop_tgt:`ANDROID_PROGUARD_CONFIG_PATH`
* :prop_tgt:`ANDROID_PROGUARD`
* :prop_tgt:`ANDROID_SECURE_PROPS_PATH`
* :prop_tgt:`ANDROID_SKIP_ANT_STEP`
* :prop_tgt:`ANDROID_STL_TYPE`


text:
Reporting Africa Since 1960 18 July 2019
Published 8th July 2011
Vol 52 No 14
The clock strikes zero
A policeman walks past a banner reading 'Bye-bye Khartoum' in Juba. Sven Torfinn / Panos
Image courtesy of Panos Pictures
After the celebrations, the Juba government will battle to meet its people's dreams and handle relations with Khartoum
History is made in Sudan this week. Dignitaries from across Africa, Asia, Europe and the Americas flew into Juba, the makeshift capital of the new Republic of South Sudan, which will become Africa's 53rd sovereign state and the world's 194th on 9 July. The RSS (though some Southerners are calling it ROSS) is born to overwhelming public rejoicing, the culmination of a liberation struggle that officially dates beyond British colonialism to 1820, the eve of the Turkish invasion.
Abyei in limbo
Ethiopia's peacekeepers will face heavy scrutiny as Khartoum and Juba differ over Abyei and the still undemarcated border
The Abyei Agreement signed by the Khartoum regime and the Sudan People's Liberation Movement (SPLM) in Addis Ababa on 20 June offers no respite for the more than 150,000 people cha...
Jonathan's new cabinet repays old favours and special interests with no concessions to a restive north
President Goodluck Jonathan shows little desire to impose himself on the country as the 36 state governors and the National Assembly jockey to push their nominees into the cabinet....
THE INSIDE VIEW
This month, Prime Minister David Cameron will make a flag-waving trip to Africa for British business. African governments want to know how much the Conservative-Liberal Democrat coalition has changed policy from its Labour predecessor.
Cameron drew heavily on former Prime Minister Tony Blair's manual on domestic political tactics, but he will tread a fine line between a return to traditional British diplomatic priorities and Blair's Messianic enthusiasm for Africa and ...
Cameron drew heavily on former Prime Minister Tony Blair's manual on domestic political tactics, but he will tread a fine line between a return to traditional British diplomatic priorities and Blair's Messianic enthusiasm for Africa and 'liberal interventionism'. Cameron's decision to keep the Labour government's promise to increase aid to 0.7% of gross domestic product played well with voters but is already under fire from Defence Minister Liam Fox as 'unsustainable' and the popular press is railing about claimed misuses of aid at a time of across-the-board budget cuts.
Foreign Secretary William Hague and Africa Minister Henry Bellingham want to bring back Africa policy to the Foreign Office but the well-financed Department for International Development and its Ministers, Andrew Mitchell and Stephen O'Brien, will dominate the Africa agenda for now. One concession to a more market-led view of Africa was the establishment of a unit in DfID to promote business in developing countries. Mitchell is just back from Libya where he discussed plans for post-Gadaffi reconstruction with the rebel Transitional National Council, while O'Brien was in Côte d'Ivoire, promising British involvement in reconstruction there.
Ministers old and new
President Goodluck Jonathan's cabinet was not complete when we went to press. Here are some key appointments and some of those tipped for appointment soon.
Rebels edge closer to Tripoli
Running out of options, Gadaffi declared in his birthday speech on 7 June that he would choose 'death before surrender'
As the rebel war to drive Colonel Moammar el Gadaffi from power stretches out, public support for the North Atlantic Treaty Organisation's intervention is weakening. However, NATO ...
How honesty can cost jobs
Local officials and Western companies argue about new regulations on conflict minerals which they say could worsen economic hardship
Unemployment among artisanal miners is rising as nervous electronics manufacturers, such as Apple and Intel, source fewer imports from them. Many companies are acting on a precauti...
Veterans with influence
Veterans of the African National Congress's former military wing, Umkhonto we Sizwe (MK), helped Jacob Zuma to get elected ANC leader in 2007 and he wants their support again for a...
Power cuts without responsibility
Chaotic energy policy causes lengthy power cuts – and urban unrest
It is a symbol of the politics behind Senegal's energy crisis. The North Korean-built African Renaissance monument on the hill above the darkened capital was bathed in light. Below...
Strategic electoral alliances
With four months to go to the presidential election, the atmosphere grows more tense
The starting gun for Liberia's second free presidential election since the civil war was officially fired on 5 July. Early indications for October's poll show that President Ellen ...
Zuma and the securocrats
Loyalists in crucial security positions are key to Zuma's bid for a second term in office
President Jacob Zuma's intention to stand for a second presidential term next year has divided the ramshackle coalition which controls the governing African National Congress. Sinc...
Refineries and rivalries
The Chairman of the Board of the Société africaine de raffinage (SAR) is Serigne Mboup, a one-time ally of former Prime Minister Macky Sall, who is expected to challenge President ...
Condé drives a hard bargain
Before parliamentary elections in November, the government is rewriting the mining code and reviewing contracts
Beyond the bonhomie and the stream of foreign dignitaries trooping to see President Alpha Condé in Conakry, evidence is emerging of grand corruption in public works and mining cont...
Police powers set to expand
The security forces have gained extra powers under President Jacob Zuma and some fear that these could be used to curb political opposition. The police are certainly tough enough a...
Opposition hits the Embassy
Southern Independence is already affecting Northern Sudan. In an unprecedented scuffle with oppositionists inside the London Embassy, Presidential Assistant Nafi'e Ali Nafi'e was h...
Durbar without elephants
The swelling procession of senior figures from the Zimbabwe African National Union-Patriotic Front (ZANU-PF) snaking through the Harare divorce courts alongside wronged spouses clu...
Cabinda man arrested
The latest twist in the long dispute between Angola and Congo-Kinshasa came with the arrest in Kinshasa of Cabindan human rights activist Agostinho Chicaia in late June. Tension ha...
Checkpoint Nairobi
The Kenyan at the centre of the Triton Oil scandal, Yagnesh Devani, argues his case against extradition to Kenya on charges of fraud worth $38 mn. in London on 11 July (AC Vol 51...
Oil and reality
The most obvious beneficiaries of Ghana's oil boom so far have been the shareholders of the international companies operating there. Both Ireland's Tullow Oil, listed on the London...
HYPREP's checkered rep
False starts for the clean-up
Asmara and Amhara
Roads, rails, pots and kettles
Lobbying pays off for Bourita
Looking for a specific issue? Search our online archive of over two decades of Africa Confidential
Volume: 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37
Number: 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Become a subscriber today to read our articles in full.
Not yet ready to subscribe to Africa Confidential? Then why not register for our free email alerts.
Every two weeks you get a concise snapshot of the latest issue so you're made aware of which issues we cover each fortnight.
Congo-Kinshasa (Dem. Rep.)
São Tomé and Principe
NewsCurrent Issue
Africa-Asia
News by Issue
News by Country/Category
£0.00 View Basket
Free Account - Register
Copyright © Africa Confidential 2019


The only reason I'm going to show you how to dice an onion is that I was an embarrassingly advanced age (relatively speaking) before I finally figured it out myself. And I want to share that with humanity! I don't want you to be clueless like I was for so many wretched years.
Start by cutting the onion in half from root to tip.
Then lop off the top end.
Then peel off the outer layer.
Then make several small, vertical slices all the way through the onion.
Next, rotate the onion 90 degrees and slice again, creating a fine dice.
Rocket Science: that's what I have to offer the world. And really, I'm happy to do it.
ree. thank you. i doubted this method, as i was a fool. now, i chop better than my food processor and my little choppy gadget.
i'll never doubt you again.
I tried to cut an onion the other day and I had no idea how to do it. Might sound stupid but I don't cute veggies much. So this really helps! Also when are you going to write more about your love story?? I LOVE reading it..
but is this how you're supposed to do it for the onion rings too? Tony insists that he likes his "rings" thick… but I'm not sure if that's the REE ight way or not???
I only know it because I watch way too much of the cooking chanel. It is amazing what you can learn from watching television.
Don't you have to do horitzontal cuts to the vertical and THEN do the last step or else the cut pieces will be really long and not diced???
I'd rather recommend not to cut all the way, leave some at the end. This helps when you slice the onion: it won't fall apart. Then slice the last part in itself.
If your onion is really large and you can see that the pieces are going to be big, you can carefully slice the onion almost through (see Slizard's comment) parallel to the board (before you start the dice) near the bottom of the onion so you don't have to chase around the stubborn suckers that just don't want to get any smaller. If you want to make your kids laugh, wear their swimming goggles to avoid tearing up. My kids like to chop the onion because they get to look silly while doing it.
1. With medium to large onions, after you've halved them and removed the outer layer(s), make a second incision parallel to the cutting board — if it's a really big one, then two — before dicing at 90 degrees.
2. Instead of a knife, use a sharp cleaver. A Chinese friend taught me that long ago in Hong Kong. Once you're used to using 'em, you'll never chop anything with anything else. It also works great for scooping all the little bits up before lobbing them into the pot. I don't even own a paring knife. Useless.
I recently discovered that if I don't spend the extra 10 minutes peeling the dry outer layers off the onion first, it saves time (though is a bit messier.) Now i see that's the way you're SUPOSSED to do it…. (and I thought I was just getting lazy!!!) ROTFL… thanks for the head's up!
Ree, do you have any tips about not making your eyes water?? something other than wearing swimming googles.