Poverty in Portugal
Portugal is usually known as a hotspot for tourists; a country filled with breathtaking historical sites and exquisite cuisine. Even though it may look like a luxury spot for vacation from the outside, Portugal is actually a country filled with economic and financial problems. Behind the array of castles, cathedrals and towers lay people living on the streets because of unemployment and children that are suffering. Why is poverty in Portugal such a big problem?
Poverty in Portugal: Top 10 Facts
 1. There are almost 2.6 million people living below the poverty line in Portugal, according to the National Statistics Institute. 487,000 of the citizens living in poverty in the country are under the age of 18.
 3. Portugal is known as one of the European countries that work the most, although, the hourly wage for workers is extremely low compared to other countries in Europe.
 4. Parents have to work multiple jobs, leaving them with less time to spend with their children. Due of this, students have been known to act out more and come to school not having eaten a proper breakfast.
 5. Unemployment is one of the main causes of poverty in Portugal. In 2018, the unemployment rate dropped down to 7.9 percent.
 6. After the 2008 recession, Portugal did not progress economically compared to the other countries around the world. Economic growth has been slowing down since then.
 7. A lot of families are forced to live in shacks or shambled housing due to poverty in Portugal. The need for suitable housing in the country is increasing, especially in urban areas.
 8. Portugal has the highest rate of HIV/AIDs in all of Western Europe.
 9. Child labor is common in the northern and central parts of Portugal. Many children under the age of 16 are made to beg on the streets and even have to leave school in search of work.
 10. Elderly citizens and children are more likely to be living in poverty in Portugal than any other group of people. The elderly are the most dominant demographic in Portugal, especially in more rural areas.
What is the Future of Portugal?
Portugal's president, Marcelo Rebelo de Sousa mentioned that citizens should not be simply pretending that poverty doesn't exist in their country. It is indeed disturbing that in Portugal almost 2.6 million people are at risk of poverty.
In March at the Calouste Gulbenkian Foundation in Lisbon, President de Sousa discussed his national strategy for increasing the growth of employment, education, housing and health to hopefully eradicate poverty in Portugal. He said that he believes the country had been in a rut since the financial crisis and a global strategy must be implemented immediately to eradicate it.
– McKenzie Hamby
Photo: Flickr


text:
First, here is a picture of some hot glue that dried in the shape of Squidward:
Now here is how to make diaper cupcakes:
- Unfold and refold diapers lengthwise.
- Roll up like a doobie (half of the diapers - save the other half)
- Other half - roll up straight edge to edge.
- Wrap a rubber band around.
- Stick the doobie inside the straight roll.
- Decorate with anything that will not affect the integrity of the diaper (no staples/pins/markers/etc).
For a cake, wrap them all up straight except for one, which will be the top layer. Put a bottle of wine or water or something the mommy and daddy like to drink in the middle of a platter. Place diaper wraps all around, making three layers. Secure each layer with a big rubber band. Wrap ribbon around, or cover each entire layer with a receiving blanket - the possibilities are endless!

source: openbmb/Ultra-FineWeb


Conceptual Art
Conceptual Music, New Notation, Groups, etc.
Conceptual Music (Art) as an umbrella term for a number of tendencies.
 - groups:
 1. ONCE
 2. Fluxus
 3. scratch orchestra and
 4. Lucas Foss performance group at UCLA
 5. Contemporary Chamber Players at U of I
 6. Source Magazine of the Avantgarde
 The "New" Notation. In the '60s, many composers felt the need of a "non-traditional" notation to better communicate their music. Proportional notation uses lines of various the lengths to suggest the duration of sound in a proportional way. Sometimes pitches are only approximately marked on a stave, without using accidentals or even note heads. Polish composer Krzysztof Penderecki wrote an influential work, Threnody for the Victims of Hiroshima in which he uses proportional notation. Bruno Bartolozzi's book"New Sounds for Woodwind and Erhard Karkoschka's book Notation in New Music were among the first works discussing multiphonics and the emergence of new music symbols.
 The need for a "new" notation is related both to aleatory music and improvisation and to the advent of new, extended instrumental and vocal techniques. William Albright - Amerithon
 Earl Brown has a group of pieces (Folio and Four Systems ) in which he pushed far the limits and the consequences of such notation about one decade before it became "popular".
 Sylvano Bussotti, his scores and their lack of instructions or explanatory notes.
 Gyorgy Ligeti's Aventures as an example of new notation and extended techniques.


text:
You are looking at the manual for Wusage 7.1. This product is three years old! Check out Wusage 8.0 and its remarkable new features.
Wusage 7.1 Manual
If you prefer to manually edit your configuration files, use the following syntax for this option:
topos 10 (or another number, or all)Description
The How Many Operating Systems? (topos) option indicates how many
of the most frequently used operating systems should be shown
in each Chart Top Operating Systems (os) report. By default, the top ten operating systems
are shown. The sorting order is determined
by the Top Operating Systems Report: Sort by (osorder) option.
You may specify any whole number of user agents
or the word
Topical Configuration Editor Reference
Alphabetical Configuration Editor Reference
Alphabetical Configuration File Reference
Glossary of Frequently Used Terms


_USER_ {Woodriff:1973-05-01T00:00:00:0003-7028:181, author = "Woodriff, Ray and Shrader, Douglas", title = "A New Dual Wave-length Spectrophotometer", journal = "Applied Spectroscopy", volume = "27", number = "3", year = "1973-05-01T00:00:00", abstract = "The design, construction, specifications, and operation of a new dual wave-length spectrophotometer are presented. The instrument utilizes only one fixed grating and mobile exit slits with photomultiplier light sensors. Two wave lengths can be monitored and both channels may be scanned, simultaneously and independently. The spectrophotometer has been integrated into an atomic absorption system which includes a Woodriff furnace and Ithaco dual channel lock-in amplifier. The two channels may be used separately (A and B) or may be ratioed (A/B). Calibration curves were obtained for Ag and Pb. Results are given for the determination of Ag in a complex water sample requiring background correction using the ratio (A/B) mode and for the simultaneous determination of Ag and Pb in synthetic samples using the two separate channel (A and B) mode.", pages = "181-185", url = "_URL_ doi = "doi:10.1366/000370273774333632", keyword = "Atomic absorption spectroscopy, Dual channel spectrophotometer, Instrumentation, ultraviolet-visible, Methods, analytical, Techniques, spectroscopic" }


interface, and finally you can configure Visual Studio to notify your generator on certain events (such as when the user saves), so that your generator would be launched automatically.
There are different ways to register your custom run tool (or generator). The most simple ones being to either make your own.reg file or to do it programmatically. In our case, we'd rather do it programmatically, because when we installed the Visual Studio SDK 1.0, it copied all the Visual Studio registries to create an "Experimental Visual Studio Hive", thanks to which you are able to test your new language. What we will do, is a small class which will register our generator in the right registries depending on the context.
In the DslPackage project, you will notice a Generated Code directory. In this directory, you will find text template files (*.tt), and if you expand the node in the Solution Explorer, you will see C# files under them. One of those files is named In this text template, you'll notice registering information, made through attributes. We will copy this principle, and make our own attribute that we are going to add to this text template.
Quick note: you can notice DSL Tools has its own custom run tool, which generates from a Text Template (*.tt) a C# file (*.cs), and this is the exact same behaviour we want to copy: we will generate a text file (*.txt) from our domain specific language file (*.smpl).
Here is part of the code contained in SmplGeneratorRegistrationAttribute:
public class SmplGeneratorRegistrationAttribute : RegistrationAttribute
 private string _packageGuid;
 private string _generatorClsid;
 private string _editorFactoryGuid;
 private Type _generatorType;
 private const string CSharpGeneratorsGuid =
 private const string CSharpProjectGuid =
 public ExampleGeneratorRegistrationAttribute(string packageGuid,
 string generatorClsid,
 string editorFactoryGuid, Type generatorType)
 if (packageGuid == null)
 throw new ArgumentNullException("packageGuid");
 if (generatorClsid == null)
 throw new ArgumentNullException("generatorClsid");
 if (editorFactoryGuid == null)
 throw new ArgumentNullException("editorFactoryGuid");
 if (generatorType == null)
 throw new ArgumentNullException("generatorType");
 _packageGuid = packageGuid;
 _generatorClsid = generatorClsid;
 _generatorType = generatorType;
 _editorFactoryGuid = editorFactoryGuid;
 public override void
 Register(RegistrationAttribute.RegistrationContext context)
 context.Log.Write("Registering Example generator... ");
 // First we are registering our class
 Key key = context.CreateKey(@"CLSID");
 Key subKey = key.CreateSubkey(_generatorClsid);
 subKey.SetValue("ThreadingModel", "Both");
 Path.Combine(Environment.SystemDirectory, "mscoree.dll"));
 subKey.SetValue("Class", _generatorType.FullName);
 subKey.SetValue("Assembly", _generatorType.Assembly.FullName);
 // Then we are registering our custom generator
 key = context.CreateKey(@"Generators\" + CSharpGeneratorsGuid);
 subKey = key.CreateSubkey("SmplGenerator");
 subKey.SetValue(string.Empty, "Example Generator");
 subKey.SetValue("CLSID", _generatorClsid);
 subKey.SetValue("GeneratesDesignTimeSource", 1);
 // register.sl editor notification
 key = context.CreateKey(@"Projects\" +
 CSharpProjectGuid + @"\FileExtensions");
 subKey = key.CreateSubkey(".smpl");
 subKey.SetValue("EditorFactoryNotify", _editorFactoryGuid);
 catch (Exception e)
 context.Log.WriteLine("Failure: " + e);
 public override void Unregister(
 RegistrationAttribute.RegistrationContext context)
 context.Log.Write("Unregistering Example generator... ");
 context.RemoveKey(@"CLSID\" + _generatorClsid);
 context.RemoveKey(@"Generators\" +
 CSharpGeneratorsGuid + @"\SmplGenerator");
 context.RemoveKey(@"Projects\" +
 CSharpProjectGuid + @"\FileExtensions\.smpl");
 catch (Exception e)
 context.Log.WriteLine("Failure: " + e);
Now that our attribute was created, we are going to add it to the file:
[SmplGeneratorRegistrationAttribute(Constants.<#= dslName #>PackageId,
 "{D8760704-A993-40ee-89B9-FB77764D99AF}", "{" +
 Constants.<#= dslName #>EditorFactoryId + "}",
 typeof(<#= this.Dsl.Namespace #>.ExampleGenerator))]
Be very careful not to forget the braces surrounding the GUIDs, or else it won't work. You can also notice that we are using a Constants class. The Constants class is one of the classes automatically generated by the DslTools, thanks to the text template files of the Dsl Tools projects. I also invite you to check the text templating syntax documentation if you want to know more about it.
From now on, our generator will be registered and attached to this file format; however, we still have to set Visual Studio to notify our generator in case of an event that we are interested in. This is done in the editor factory. You will notice a file in the DslPackage project called [NameOfYourProject] For my part, I find the text templating syntax not quite convenient, so instead of editing the text templates, I preferred to use another way. If you look at the [NameOfYourProject]EditorFactory class, you will notice that it is a partial class; so all we have to do is add our own [NameOfYourProject]EditorFactory partial class in which we implement the IVsEditorFactoryNotify interface, so that our generator is notified of a save or some other event you may be interested in. This is also here so that you will set your new language's file custom run tool property to your generator.
private int SafeNotifyItemAdded(uint grfEFN,
 IVsHierarchy pHier, uint itemid, string pszMkDocument)
 object itemObject;
 int hr = pHier.GetProperty(itemid,
 (int)__VSHPROPID.VSHPROPID_ExtObject, out itemObject);
 if (hr < 0)
 return hr;
 ProjectItem item = itemObject as ProjectItem;
 if (item == null)
 return -1;
 // Place here the name of the custom tool you want to run
 item.Properties.Item("CustomTool").Value = "SmplGenerator";
 return 0;
Now that everything is set (registration + event notification), we can add our generator. To do so, we will have to implement the IVsSingleFileGenerator in case of a single file generator like the one generating C# code from text templates. I would also recommend to implement the IVsGeneratorProgress interface too, so that you will be able to throw exceptions which will appear in the Visual Studio Error List window. So this would look like this:
public void Generate(
 string inputFilePath,
 string inputFileContents,
 string defaultNamespace,
 out System.IntPtr outputFileContents,
 out int outputLength,
 IVsGeneratorProgress generateProgress)
 ProjectItem item = SiteServiceProvider.GetService(
 typeof(EnvDTE.ProjectItem)) as ProjectItem;
 outputLength = 0;
 byte[] bytes = null;
 bytes = GenerateCode(inputFilePath,
 inputFileContents, item, out outputLength);
 catch (SmplConverterException cce)
 generateProgress.GeneratorError(false, 0, cce.Message, 0, 0);
 catch (Exception e)
 generateProgress.GeneratorError(false, 0, e.ToString(), 0, 0);
 if (bytes == null)
 outputFileContents = IntPtr.Zero;
 outputLength = 0;
 outputFileContents = Marshal.AllocCoTaskMem(outputLength);
 Marshal.Copy(bytes, 0, outputFileContents, outputLength);
And now everything is set to work. Check the "Using the code" section to know how to test your custom run tool (it is not as straightforward as usual, and is a great productivity loss).
A list of licenses authors might use can be found here
About the Author
Software Developer SoftFluent
France France
Carl Anderson is a.NET consultant at SoftFluent. You can contact him at carl "dot" anderson "at" softfluent "dot" com.
Comments and Discussions
QuestionConverted to (using 2008 wizard and manual editing of csproj files) vs2008 SDK okay but won't run PinmemberMember 883428924-Aug-12 5:02
GeneralGreat article! PinmemberJuergen Baeurle25-Jul-07 23:07
QuestionCan't start preprocessor Pinmemberpetercli13-Mar-07 12:38
AnswerRe: Can't start preprocessor Pinmemberpetercli14-Mar-07 6:29
OK - i fixed my problem by installing c++.
GeneralA great introduction PinmemberDavid Wulff9-Feb-07 9:17
QuestionGenerateCode Detail PinmemberHenrique Carvalho4-Jan-07 6:03
AnswerRe: GenerateCode Detail PinmemberCarl_Anderson4-Jan-07 7:37
GeneralRe: GenerateCode Detail PinmemberHenrique Carvalho4-Jan-07 8:22
GeneralRe: GenerateCode Detail PinmemberCarl_Anderson4-Jan-07 11:51
QuestionNot working PinmemberHugo.Pereira21-Dec-06


text:
Did you know that there is a superstition among classical music composers called the curse of the ninth?
Fearing a rapid death soon after finishing their ninth symphony, composers started building on the idea that there was somehow a curse attached to it. You see, Beethoven never finished his tenth symphony. Schubert died right after his ninth symphony. So did Dvorak. So did Vaughan Williams.
Composer Gustav Mahler lived in fear of the curse of the ninth, to the point where he designed his ninth symphony, Das Lied von der Erde, to function as a song cycle instead of as a symphony.
This is just one of the things to learn at our upcoming 12-session class on Gustav Mahler and Arnold Schoenberg, taught by Time Out New York classical critic Daniel Felsenfeld.
And hey, Schoenberg's complete works are available for free online as well.

source: HuggingFaceFW/fineweb-edu


Last updated: 15 December 2014
What information does Adobe collect on behalf of the developer when an end-user uses the Developer Application and how is that information used?
 - Device GUID: The Device GUID is a unique value generated to identify the end-user's device. It is used to ensure that the eBook may be viewed on the end-user device and that the number of devices permitted by the licence is not exceeded.
 - Device IP (Internet Protocol): This identifies the country the end-user is located in when they purchase an eBook. It is used by eBook providers for the enablement of localised pricing models. Only the country identifier of the Device IP is stored.
 - Information provided by eBook providers relating to the eBook an end-user has purchased: The following information is provided by the eBook provider to enable the delivery of the eBook to the end user's device:
 - Date of eBook purchase/download
 - Distributor ID and Adobe Content Server Operator URL
How is the information transmitted?
How is the information used?
Adobe uses the information collected about the eBook an end-user has opened in the Developer Application to ensure that it is being viewed in accordance with the type of DRM licence that accompanies that eBook. The type of licence is determined by the eBook provider. For more information on how each piece of data is used, please see above.
What information does Adobe share?
Is there more information available about Adobe's eBook solutions?
More information is available in Adobe's white paper.


text:
"Nephew" Used to Refer to Both Boys and Girls
"Nephew" at one time was a gender neutral term, but since around the 17th century has referred nearly exclusively to male children of one's siblings or brother/sister-in-law's children. The word "nephew" comes from the Old French "neveu" meaning "grandson, descendant", which in turn comes from the Latin "nepotem", meaning "sister's son, grandson, or descendant". The first documented case of "nephew" being used in English was in the 14th century.
Today, because we now lack a gender neutral word to refer to a niece or nephew, it has been suggested that the slang word "nibling" be adopted, derived more or less from "sibling".
|Share the Knowledge!|


text: Professional accountants are important agents of change, contributing significantly to effective implementation of financial reporting and auditing reform and helping businesses meet their objectives through the provision of relevant business advisory and consulting services. Professional Accounting Organizations (PAOs), to which professional accountants belong, help their membership through ongoing training, guidance and tools aimed to maintain their professional competence. PAOs also provide authorities, such as audit Public Oversight Bodies (POBs), with potential partners in regulation. For example, the performance of quality assurance reviews of non-Public Interest Entities is performed in many countries by the PAO under the POB's supervision rather than by the POB. PAO's also undertake other important functions such as; promoting the adoption and implementation of international accounting, auditing and ethical standards, investigating and where necessary disciplining members not meeting professional obligations and overseeing the recruitment of new entrants into the profession to ensure a talent pipeline sufficient to undertake its important role in society on an ongoing basis.


text:
TV Spots on Cross-Cutting COVID-19 and Ebola Prevention Behaviors (Mali)
In early 2021, Mali was faced both with the COVID-19 pandemic as well as the challenge of an outbreak of Ebola Virus Disease (EVD) in neighboring Guinea. The Breakthrough ACTION project, in collaboration with the National Communication Sub Commission of the COVID-19 Crisis Committee, developed a French and Bambara TV spot with the theme of "Une Pierre, Deux Coups" (Two birds, one stone) to reinforce key behaviors that help to prevent the transmission of both COVID-19 and Ebola. These aired nationally while the EVD response effort was active.
Source: TV Spots on Cross-Cutting COVID-19 and Ebola Prevention Behaviors (Mali)


Main menu:
Posts by Author
History of RPE Thought
Posts by Tag
RSS New from the CCPA
Progressive Bloggers
Recent Blog Posts
Recent Blog Comments
The Progressive Economics Forum
Re-defining (Un)Employment Insurance
Several key changes to Employment Insurance came into effect on Sunday. Â The EI program is about to get Grinch-ier, especially for who happen to have needed it more than once.
What Changed
Some of the changes made are reasonable, some are technical, and some are misguided. Â Together, these changes go some way toward redefining what employment insurance is all about, and changing how Canadians think about employment insurance.
Here is a run down of changes that came into effect on Sunday:
 1. The creation of three categories of EI users – frequent, occasional, and long-tenured. Â The definition of suitable employment that applies to an individual claimant will vary depending on their category and the length that they have been on claim. Â HRSDC & Minister Finley assert that this confusing and clunky categorization will in no way increase errors or appeals (I, myself, amÂ sceptical).
 2. The definition of reasonable job search. Â Mostly clarification, and mostly reasonable.
 3. The definition of suitable employment. Focused on a quick return to work, and emphasizing that no one will be financially worse off working than they were while they were on claim. Â Forces claimants to accept wages between 70% and 90% of their previous earnings. Â Good news: Higher travel or childcare costs will be taken into account when determining if someone is better off in a given job situation. Â Bad news: This is an incredibly short sighted view of 'better off'. Â The purpose of EI is to allow for better job market matches, not faster job market matches.
 4. Job alerts system. Â Sends targeted emails to claimants based on Postal Code. Â A good idea, but it falls into "it's the least you could do" category. Â Only works for those with access to the internet.
EI Myths & Facts
Discussion of these changes invariably bumps into one or more common EI myths. Â In fact, getting support for these changes requires voters to buy into the following myths.
 1. Myth: Employment Insurance is taxpayer funded. Â It is paid for entirely by employers and employees. Â The government stole $56 billion, but they don't pay back into it. Â So there are no savings to government coffers from changes to EI. Â To qualify for EI, you have to have paid into it.
 2. Myth: Employment Insurance prevents people from leaving Atlantic Canada. Anyone who thinks this has never been on a flight from St. John's or Halifax heading west. Â Since 2008, over 7,000 (net) Canadians left the Maritimes for other Canadian provinces. Â During the same time period, over 55,000 (net) Canadians moved to Saskatchewan and Alberta from another province. (CANSIM _PHONE_) Â This doesn't include those who commute incredibly long distances to get work in the oil patch.
 3. Myth: Seasonal workers are lazy fishermen. Â Many seasonal workers are highly skilled, and some of these skills even transfer between seasons (think heavy machinery drivers that plow snow in the winter, and dig basements in the summer). Â But the fact that their employment is seasonal makes it more precarious, and more likely that on any given change of season there simply won't be enough work to go around.
 4. Myth: Claimants will always be better off working under these changes. Â This is more the official line than a myth, but it's wrong nonetheless. Â As I already noted, the purpose of EI is to allow forÂ betterÂ job market matches, notÂ fasterÂ job market matches. Â A parent who is eight weeks into their claim, and is presented with an evening job at 80% of their previous wage would be better off continuing to look for a job that paid higher wages and allowed them time with their child in the evenings.
There are some other EI Facts, that help make sense of why these changes are misguided.
 1. Fact: EI is not terribly generous in the first place.Â Â Claimants receive up to 55% of their average weekly income, up to a maximum of $485 / week. The average payment is around $370 / week.
 2. Fact: There are over 5 unemployed Canadians for every job vacancy in Canada. News reports of labour shortages are grosslyÂ exaggerated. Â Where they do exist, the solution is often more spots for training and apprentices, and maybe (gasp) higher wages.
 3. Fact: Most jobs created since the recession have been temporary. A rise in precarious employment will mean a rise in the number of unemployed without access to Employment Insurance, even without these changes. Â These changes will increase the tendency toward precarious employment, as people are encouraged to take 'bad jobs'.
What the Changes Mean
The previous definition of 'suitable employment' in the Employment Insurance Act had the clear intent of ensuring that Â unemployed workers did not unduly impact wages and working conditions for the broader labour market. Â The system was set up to ensure that claimants had time to assess their labour market situation, determine if they needed to switch fields, get training, or move.
The new hurry-up approach to EI will act to lower wages, lower productivity, and threaten seasonal businesses.
Combined with other changes announced in the last budget, such as the consolidation of EI, CPP, and OAS appeals into one Social Security Tribunal, these new regulations are depressing start to the New Year for unemployed workers. Â At least the Grinch eventually had a change of heart.
Share and Enjoy:
 - Twitter
 - Digg
 - Google Bookmarks
 - Reddit
 - Tumblr
 - Facebook
Write a comment
Related articles


text:
The COVID-19 pandemic has negatively affected the mental health of older adults. They have been encouraged to stay at home, and restrictions have limited social interactions and increased social isolation. Social isolation is associated with increased emotional distress and depressive symptoms in older adults. Despite the increase in isolation during the pandemic, there have been limited studies that examine differences in mental well-being between household compositions. The purpose of this study is to investigate whether religious belief, networks, and technology usage influence the mental well-being of older adults in coupleand single-households during COVID-19. It is important to understand how various factors impact mental health for older adults living in different household types during the pandemic as this may guide future interventions.
This study used Health and Retirement Survey COVID Project data. The sample was comprised of respondents aged 60 or older (N=1,249). The independent variables consisted of age, gender, education, race, ethnicity (Hispanic), perceived health, household income, digital technology usage, religious belief, and network with a spouse, children, other family members, and friends. This study adopted scales of mental health, digital technology usage, religious belief, and networks from HRS. Simple regression analyses were conducted with coupleand single-households to examine what factors affected older adults' mental health during COVID-19.
The study found that perceived health, religious belief, network with other family members, and digital technology usage have different impacts on the mental health of older adults. In couple households (n=795), health [b=1.7], digital technology usage [b=0.3], and network with spouse [b=0.2], children [b=0.2], and friends [b=0.2] had significant positive effects on mental health [p<.05]. Regarding the single older adults (n=448), their mental health had positive relationships with perceived physical health [b=1.9], religious belief [b=0.1], and network with children [b=0.2], other family members [b=0.2], and friends [b=0.3, p<.05].
Conclusion and Implications
This study contributes to a more complete understanding of what factors positively impact mental health outcomes in older adults during the pandemic and how perceived health, networks, religious belief, and digital technology usage impact individuals in different household types. The study results indicate that perceived good health status had a positive impact on older adults' mental health in both household types. The findings suggest that technology use and closer relationships with a spouse, children, and friends are associated with better mental health outcomes in couple households. On the other hand, closer relationships with children, friends, and other family members and religious belief were important for the mental well-being in single households. Using technology had no significant relationship to mental health in single households. However, since the pandemic began, research has revealed that technology use has a significantly positive capacity to promote mental health in couple households. Further research is needed to understand factors related to technology use in single older adults. Increasing technology use may help prevent isolation and improve mental well-being in single households.


Institute for War and Peace Reporting | Giving Voice, Driving Change
Armenia Reforms Disability Rules
Radical change will encourage disabled people to work if they can, but some experts fear new system could prove as unfair as its predecessor.
Armenia is about to introduce major changes to the way disabled benefits are assessed, so that people will be categorised according to their ability to work.
Experts point to a shortage of workplaces with proper accessibility in Armenia, and warn that the new classification system might be just as open to corrupt practices as the current one.
Until now, the health authorities have put disabled people in one of three categories, ranked by severity of impairment. Category one is the most serious, category three the least; and this determines the level of disability benefits that the state pays out to each.
The employment register currently shows 170,000 registered disabled people in Armenia, of whom 90,000 are considered to be able to work to some extent.
The authorities plan to replace the current system with one based on models used in Lithuania and the Czech Republic. It will take two years to launch, during which time the method for assessing disability will be refined.
Jemma Baghdasaryan, deputy minister for labour and welfare, explained that anyone classed as able to work would be provided with a job, and would then lose disability benefits.
"People will be deemed to be disabled if they have lost a certain percentage of their ability to work," she explained. "For children, the criteria applied will be 'activeness' and 'engagement'."
Marianna Chalikyan, spokeswoman for the disabled rights group Unison, doubts that the conditions exist to make the change so quickly.
"Under the new system, they will assess individuals' state of health and circumstances, and then assign them a level of employability. [Most workplaces] are totally unprepared for this," she said. "If you look at the state of the country as a whole, it is not ready to provide work, so an employer who wants to take on a disabled person will have problems."
Anna Khachatryan, a lawyer with Unison, expressed concern at the way the criteria had been drawn up for the new classifications. She said concepts like "ability to move around" and "ability to work" were defined in very broad terms, so someone might be assessed as fit for work if even they had only limited mobility.
The current system, where people come before a medical commission to be placed in one of the three categories, is widely accepted as being open to abuse.
Last September, the government sacked the head of the labour ministry's medical examinations agency after hearing the results of an investigation which found that 65,000 people paid bribes every year to be classified as disabled. Investigators found that the bribes ranged from 15,000 to 150,000 drams, or 37 to 370 US dollars.
Karen Hovhannisyan notes that the reverse is common, too – people who are undeniably disabled but find their status is downgraded or annulled altogether when they appear before a medical commission.
Marat Atovmyan, a lawyer who heads the Anti-Corruption Centre in Yerevan, cited the high-profile case of Armenui Arakelyan, a disabled woman called before an army conscription commission in 2011 after her son asked to defer his military service on the grounds that he was a carer.
At the hearing, three doctors downgraded Arakelyan's disability category, and that of her husband as well, so that their son could no longer claim the right to a deferment. The Anti-Corruption Centre stepped in and helped her reclaim her original disability status.
Atovmyan and others argue that the new system of categorisation is liable to be just as arbitrary.
"The structure needs to be made more transparent so as to reduce the risk of corruption," he said. "Professional doctors often can't tell from a diagnosis which category a patient should be assigned to. It's natural that lawyers and judges find it hard to discern what is illegal, since there are no clear categories."
Under the new system, Hovhannisyan predicts, "the number of appeals will rise".
Gayane Mirzoyan is a freelance reporter and a media expert with the Journalists for the Future group in Armenia.
More IWPR's Global Voices
"They Won't Break Me," Says Jailed Azerbaijani Journalist
As Khadija Ismayil is given a seven-and-a-half year jail term, she tells judges that witnesses were pressured and testimony based on coercion and forgery.
Tajik Families in Shock as Sons Die for Islamic State
Water Deal to Help Georgian, Ossetian Farmers


text:
category with duals (list of them)
dualizable object (what they have)
n-category = (n,n)-category
n-groupoid = (n,0)-category
String diagrams are a graphical calculus for expressing operations in a monoidal category. The idea is roughly to think of objects in a monoidal category as "strings" and a morphism from one tensor product to another as a node which the source strings enter and the target strings exit. Further structure on the monoidal category is encoded in geometrical properties on these strings. For instance
putting strings next to each other denotes the monoidal product, and having no string at all denotes the unit;
braiding strings over each other corresponds to – yes, the braiding (if any);
bending strings around corresponds to dualities on dualizable objects (if any).
Many operations in monoidal categories that look rather unenlightening in symbols become very obvious in string diagram calculus, such as the trace: an output wire gets bent around and connects to an input.
There are many additional structures on monoidal categories, or similar structures, which can usually be represented by encode further geometric properties. For instance:
in monoidal categories which are ribbon categories the strings from above behave as if they have a small transversal extension which makes them behave as ribbons. Accordingly, there is a twist operation in the axioms of a ribbon category and graphically it corresponds to twisting the ribbons by 180 degrees.
in a traced monoidal category?, the trace can be represented by bending an output string around to connect to an input, even though if the objects are not dualizable the individual "bends" do not represent anything.
in monoidal categories which are spherical all strings behave as if drawn on a sphere.
there is also a string diagram calculus for bicategories, which extends that for monoidal categories regarded as one-object bicategories. Thus, the strings now represent 1-cells and the nodes 2-cells, leaving the two-dimensional planar regions cut out by the strings to represent the 0-cells. This makes it manifest that in general, string diagram notation is Poincaré dual to the globular notation: where one uses -dimensional symbolds the other uses -dimensional symbols.
A string diagram calculus for monoidal fibrations can be obtained as a generalization of C.S. Peirce's "existential graphs." The ideas are essentially contained in this paper by Brady and Trimble, and was discussed here.
String diagrams for closed monoidal categories are similar to those for autonomous categories, but a bit subtler, involving "boxes" to separate parts of the diagram. They were used informally here, but can also be done in essentially the same way as the proof net?s used in intuitionistic linear logic; see this paper. Proof nets for classical linear logic similarly give string diagrams for *-autonomous categories.
See the article by Selinger below for more examples.
John Baez and Mike Stay, Physics, Topology, Logic and Computation: A Rosetta Stone, arXiv
The Catsters (Simon Willerton), String diagrams (YouTube)
An early amplification of the use of string-diagram notation as an alternative for the traditional index-calculus for tensors is due to Roger Penrose.
Peter Selinger, A survey of graphical languages for monoidal categories (pdf)
Ross Street, Low dimensional topology and higher-order categories – talks about surface diagrams and includes some pictures (PS version only).
Ross Street, "Categorical structures" – discusses string diagrams for bicategories.
This article discusses the generalization of string diagrams to one dimension higher:


text:
Investigating Taste Rewiring During Chemotherapy Treatment
Many commonly prescribed chemotherapy drugs have adverse side effects that include disruptions in taste. It is reported that 50-80% of cancer patients who receive chemotherapy treatments experience taste alteration in the form of reduced taste sensitivity. distorted taste perception. or even complete loss of taste during treatment1-5. These deficits can persist for months beyond the end of therapy. Indeed. the side effects of chemotherapy on taste is listed as one of the most disturbing elements of treatment. affecting the patient???s ability to eat and drink and maintain healthy nutritional balance4. This can result in loss of appetite. malnutrition. poor recovery. and a reduced quality of life. To date. most research on the mechanisms leading to chemotherapy induced taste dysfunction has focused on the loss and repopulation of Taste Receptor Cells (TRCs) within taste buds. A critical element that is missing in these studies is the role of gustatory sensory neurons in re-establishing functional taste circuits. It is important to note that nerve fiber innervation maintains the TRCs within the taste bud. and that signals originating from both the TRCs and the peripheral fibers work together to maintain the taste bud and the specificity of rewiring6-9. It is not yet known how chemotherapy treatment affects the sensory fibers innervating the taste buds. My lab investigates the connectivity of peripheral taste circuits. and we have developed new tools to visualize gustatory fibers and taste synapses in vivo. Here. we propose to apply these techniques to investigate the process of taste re-wiring after cancer treatment. These experiments will provide new information about the basic processes of taste wiring in normal conditions and how this is disrupted over the course of chemotherapy treatment. This work will also create a platform to screen for therapeutics that could protect taste function during and after cancer treatment by reducing TRC loss or by enhancing rewiring.


Take the 2-minute tour ×
I confused with the three terms:
 1. Packet drop.
 2. Packet loss.
 3. Packet drop attack.
share|improve this question
1 Answer 1
up vote 6 down vote accepted
These terms are a bit more general that that, which may be the cause of the confusion.
When Alice sends Bob a message over a packet switched network, like the Internet, then it is broken into a number of individual packets, which are sent one at a time. Each packet travels from router to router, eventually ending up at Bob's computer, where the message is reassembled.
If one of the packets fails to get from Alice to Bob for some reason, we say it is lost. (One of the reasons why you use packet switching is that if you lose a packet, you can just ask for it again, rather than needing the whole message to be retransmitted.)
It might get lost by accident, but packets can also be lost because a router receives it and specifically decides not to pass it on to the next hop. This deliberate loss of a packet is called dropping. (There are legitimate reasons for dropping a packet: for example if the router is overloaded, or if the router believes the packet is part of a DOS attack.)
A packet-drop-attack, then, is a denial of service attack where the attacker takes control of one of the routers between Alice and Bob and tells it to deliberately drop some or all of the packets in the message.
share|improve this answer
Your Answer


Turbine efficiency equation
How do you calculate turbine efficiency?
Calculate steam turbine efficiency by dividing the theoretical pounds per hour of steam by the steam actually consumed. This is 44,855.58 pounds (theoretical) / 52,462 pounds actual = 0.855 or 85.5 percent operating efficiency.
What is the efficiency of turbine?
How do you calculate isentropic efficiency of a turbine?
Hence, the definition of isentropic efficiency of turbine is the ratio of the actual work output of the turbine to the work output of the turbine if the turbine undergoes an isentropic process between the same inlet and exit pressures. Compressors and pumps, when undergo a steady-flow process, consume power.
Why is steam turbine efficiency so low?
A decrease of the steam pressure pt in the condenser causes a decrease of the steam condensation temperature and consequently increases the temperature difference in the cycle. The efficiency of steam-turbine units increases when regenerative extraction of steam from the turbine is used.
Which turbine has highest efficiency?
Large Francis turbines are individually designed for each site to operate with the given water supply and water head at the highest possible efficiency, typically over 90%. In contrast to the Pelton turbine, the Francis turbine operates at its best completely filled with water at all times.
What are the formula for power?
The standard metric unit of power is the Watt. As is implied by the equation for power, a unit of power is equivalent to a unit of work divided by a unit of time. Thus, a Watt is equivalent to a Joule/second.
Why is gas turbine efficiency so low?
The decrease in the thermal efficiency is due to the decrease in the compressor efficiency and pressure ratio. Trends in gas turbine power and thermal efficiency due to compressor fouling when operating at low power.
Are turbine engines efficient?
Latest generation gas turbine engines have achieved an efficiency of 46% in simple cycle and 61% when used in combined cycle.
What is turbine and how it works?
What is an ideal turbine?
The ideal (theoretical) steam turbine is considered to be an isentropic process, or constant entropy process, in which the entropy of the steam entering the turbine is equal to the entropy of the steam leaving the turbine, with isentropic efficiencies ranging from 20–90%.
Why is a turbine adiabatic?
Two general classes of turbines are steam and gas turbines depending on the working substance used. Usually, changes in potential energy are negligible, as is the inlet kinetic energy. Normally, the process in the turbine is adiabatic and the work output reduces to decrease in enthalpy from the inlet to exit states.
What is compressor efficiency?
Compression efficiency is usually defined as the adiabatic efficiency also known as isentropic efficiency and so is the ratio of the adiabatic power to the PV card indicated power: EFF = AP / IP × 100 %
How do you increase steam turbine efficiency?
Tips to improve steam plant efficiencyStep 1: Do a Steam Trap Survey. First, a steam trap survey can easily identify leaking or faulty traps and provide significant potential savings. Step 2: Understand the Value of Condensate. Step 3: Insulate your Steam System. Step 4: Look for Steam Leaks. Step 5: Start Steam Metering.
You might be interested: Harmonic wave equation
How efficient is a water turbine?
Efficiency. Large modern water turbines operate at mechanical efficiencies greater than 90%.
Leave a Reply
Equation for decibels
Convert to an exponential equation
How do you convert a logarithmic equation to exponential form? How To: Given an equation in logarithmic form logb(x)=y l o g b ( x ) = y, convert it to exponential form. Examine the equation y=logbx y = l o g b x and identify b, y, and x. Rewrite logbx=y l o […]


TensorFlow 1 version View source on GitHub
Computes the 1D Inverse Discrete Cosine Transform (DCT) of input.
Currently Types I, II, III, IV are supported. Type III is the inverse of Type II, and vice versa.
Note that you must re-normalize by 1/(2n) to obtain an inverse if norm is not 'ortho'. That is: signal == idct(dct(signal)) * 0.5 / signal.shape[-1]. When norm='ortho', we have: signal == idct(dct(signal, norm='ortho'), norm='ortho').
input A [..., samples] float32/float64 Tensor containing the signals to take the DCT of.
type The IDCT type to perform. Must be 1, 2, 3 or 4.
n For future expansion. The length of the transform. Must be None.
axis For future expansion. The axis to compute the DCT along. Must be -1.
norm The normalization to apply. None for no normalization or 'ortho' for orthonormal normalization.
name An optional name for the operation.
A [..., samples] float32/float64 Tensor containing the IDCT of input.
ValueError If type is not 1, 2 or 3, n is not None,axisis not-1, ornormis notNoneor'ortho''.
Scipy Compatibility
Equivalent to scipy.fftpack.idct for Type-I, Type-II, Type-III and Type-IV DCT.


el); elt->incoming_edges->e = incoming_edge; elt->incoming_edges->next = NULL; return elt; } /* E was in the hash table. */ else { /* Free ELT as we do not need it anymore, we will extract the relevant entry from the hash table itself. */ free (elt); /* Get the entry stored in the hash table. */ elt = (struct redirection_data *) *slot; /* If insertion was requested, then we need to add INCOMING_EDGE to the list of incoming edges associated with E. */ if (insert) { struct el *el = XNEW (struct el); el->next = elt->incoming_edges; el->e = incoming_edge; elt->incoming_edges = el; } return elt; } } /* Given a duplicate block and its single destination (both stored in RD). Create an edge between the duplicate and its single destination. Add an additional argument to any PHI nodes at the single destination. */ static void create_edge_and_update_destination_phis (struct redirection_data *rd) { edge e = make_edge (rd->dup_block, rd->outgoing_edge->dest, EDGE_FALLTHRU); tree phi; e->probability = REG_BR_PROB_BASE; e->count = rd->dup_block->count; /* If there are any PHI nodes at the destination of the outgoing edge from the duplicate block, then we will need to add a new argument to them. The argument should have the same value as the argument associated with the outgoing edge stored in RD. */ for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi)) { int indx = rd->outgoing_edge->dest_idx; add_phi_arg (phi, PHI_ARG_DEF (phi, indx), e); } } /* Hash table traversal callback routine to create duplicate blocks. */ static int create_duplicates (void **slot, void *data) { struct redirection_data *rd = (struct redirection_data *) *slot; struct local_info *local_info = (struct local_info *)data; /* If this entry should not have a duplicate created, then there's nothing to do. */ if (rd->do_not_duplicate) return 1; /* Create a template block if we have not done so already. Otherwise use the template to create a new block. */ if (local_info->template_block == NULL) { create_block_for_threading (local_info->bb, rd); local_info->template_block = rd->dup_block; /* We do not create any outgoing edges for the template. We will take care of that in a later traversal. That way we do not create edges that are going to just be deleted. */ } else { create_block_for_threading (local_info->template_block, rd); /* Go ahead and wire up outgoing edges and update PHIs for the duplicate block. */ create_edge_and_update_destination_phis (rd); } /* Keep walking the hash table. */ return 1; } /* We did not create any outgoing edges for the template block during block creation. This hash table traversal callback creates the outgoing edge for the template block. */ static int fixup_template_block (void **slot, void *data) { struct redirection_data *rd = (struct redirection_data *) *slot; struct local_info *local_info = (struct local_info *)data; /* If this is the template block, then create its outgoing edges and halt the hash table traversal. */ if (rd->dup_block && rd->dup_block == local_info->template_block) { create_edge_and_update_destination_phis (rd); return 0; } return 1; } /* Not all jump threading requests are useful. In particular some jump threading requests can create irreducible regions which are undesirable. This routine will examine the BB's incoming edges for jump threading requests which, if acted upon, would create irreducible regions. Any such jump threading requests found will be pruned away. */ static void prune_undesirable_thread_requests (basic_block bb) { edge e; edge_iterator ei; bool may_create_irreducible_region = false; unsigned int num_outgoing_edges_into_loop = 0; /* For the heuristics below, we need to know if BB has more than one outgoing edge into a loop. */ FOR_EACH_EDGE (e, ei, bb->succs) num_outgoing_edges_into_loop += ((e->flags & EDGE_LOOP_EXIT) == 0); if (num_outgoing_edges_into_loop > 1) { edge backedge = NULL; /* Consider the effect of threading the edge (0, 1) to 2 on the left CFG to produce the right CFG: 0 0 | | 1<--+ 2<--------+ / \ | | | 2 3 | 4<----+ | \ / | / \ | | 4---+ E 1-- | --+ | | | E 3---+ Threading the (0, 1) edge to 2 effectively creates two loops (2, 4, 1) and (4, 1, 3) which are neither disjoint nor nested. This is not good. However, we do need to be able to thread (0, 1) to 2 or 3 in the left CFG below (which creates the middle and right CFGs with nested loops). 0 0 0 | | | 1<--+ 2<----+ 3<-+<-+ /| | | | | | | 2 | | 3<-+ | 1--+ | \| | | | | | | 3---+ 1--+--+ 2-----+ A safe heuristic appears to be to only allow threading if BB has a single incoming backedge from one of its direct successors. */ FOR_EACH_EDGE (e, ei, bb->preds) { if (e->flags & EDGE_DFS_BACK) { if (backedge) { backedge = NULL; break; } else { backedge = e; } } } if (backedge && find_edge (bb, backedge->src)) ; else may_create_irreducible_region = true; } else { edge dest = NULL; /* If we thread across the loop entry block (BB) into the loop and BB is still reached from outside the loop, then we would create an irreducible CFG. Consider the effect of threading the edge (1, 4) to 5 on the left CFG to produce the right CFG 0 0 / \ / \ 1 2 1 2 \ / | | 4<----+ 5<->4 / \ | | E 5---+ E Threading the (1, 4) edge to 5 creates two entry points into the loop (4, 5) (one from block 1, the other from block 2). A classic irreducible region. So look at all of BB's incoming edges which are not backedges and which are not threaded to the loop exit. If that subset of incoming edges do not all thread to the same block, then threading any of them will create an irreducible region. */ FOR_EACH_EDGE (e, ei, bb->preds) { edge e2; /* We ignore back edges for now. This may need refinement as threading a backedge creates an inner loop which we would need to verify has a single entry point. If all backedges thread to new locations, then this block will no longer have incoming backedges and we need not worry about creating irreducible regions by threading through BB. I don't think this happens enough in practice to worry about it. */ if (e->flags & EDGE_DFS_BACK) continue; /* If the incoming edge threads to the loop exit, then it is clearly safe. */ e2 = e->aux; if (e2 && (e2->flags & EDGE_LOOP_EXIT)) continue; /* E enters the loop header and is not threaded. We can not allow any other incoming edges to thread into the loop as that would create an irreducible region. */ if (!e2) { may_create_irreducible_region = true; break; } /* We know that this incoming edge threads to a block inside the loop. This edge must thread to the same target in the loop as any previously seen threaded edges. Otherwise we will create an irreducible region. */ if (!dest) dest = e2; else if (e2!= dest) { may_create_irreducible_region = true; break; } } } /* If we might create an irreducible region, then cancel any of the jump threading requests for incoming edges which are not backedges and which do not thread to the exit block. */ if (may_create_irreducible_region) { FOR_EACH_EDGE (e, ei, bb->preds) { edge e2; /* Ignore back edges. */ if (e->flags & EDGE_DFS_BACK) continue; e2 = e->aux; /* If this incoming edge was not threaded, then there is nothing to do. */ if (!e2) continue; /* If this incoming edge threaded to the loop exit, then it can be ignored as it is safe. */ if (e2->flags & EDGE_LOOP_EXIT) continue; if (e2) { /* This edge threaded into the loop and the jump thread request must be cancelled. */ if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, " Not threading jump %d --> %d to %d\n", e->src->index, e->dest->index, e2->dest->index); e->aux = NULL; } } } } /* Hash table traversal callback to redirect each incoming edge associated with this


Go Down
Topic: Autopilot for Ruddered Kayak (Read 3784 times) previous topic - next topic
Hi, my first post since joining the forum.
I'm planning to build an autopilot to control the rudder on my kayak.
This is different from most autopilots discussed here which navigate to one or more GPS waypoints. Auto mode will use an electronic compass to maintain a selected heading. In manual mode the system will position the rudder according to input.
I have a lot to learn about Arduino (my only 'programing' experience is in VBA) and a lot of hardware selection to do.
I would appreciate advice anyone can give me based on the info I have provided below.
The hardware I think I will need is: -
- A 12v - 5.5v transformer (the power source on the kayak is a 12v battery)
- An Arduino
- A 3 axis tilt compensated solid state compass with shield
- A position interfaced linear actuator (to adjust the rudder angle)
- A controller board for actuator if required
- A switch to select auto/manual modes
- Left & right course select switches each comprising a pedal, reed switch and simple XBee transmitter
- An Xbee receiver with shield
- An LED display (to display course and compass values)
Okay -
You are using a 12V battery - that supplies DIRECT CURRENT or more commonly DC. A transformer requires ALTERNATING CURRENT or more commonly AC.
The Arduino has, mounted on board, a device, commonly referred to as a 7805 which is a voltage regulator. I takes an input of greater than 7V DC and, by turning some of the supply current to heat, supplies 5V DC to the Arduino board. Whatever device you use to control the rudder would either need to operate on 12V DC or have a regulator in the circuit to supply the voltage required.
An important to piece of information would be how much TORQUE you need to control the rudder. Torque is the amount of force it takes to turn something. That translates into ho big an actuator would be required to move and hold the rudder position.
You could use XBee for the foot controls, but since you still have to run wireds to power the XBee module, why not just run wires from the controls and reduce the amount of power you need to power the 2 XBee units at the pedals and the Arduino? Every piece you add that uses electricity means you either have shorter battery life, or you need a bigger battery.
A very important consideration is making everything water tight. That may be the most important and most difficult part of the project.
Conformal coating with the lead wires attached will probably get you 98% of the way towards waterproofing. I agree with the last poster that use wired comms instead of the XBee, I like XBee's but in any situation where wires are easy I will use wired comms a lot less complexity and headaches.
You probably want to look in PID algorithms for controlling the rudder correction, I doubt you need a full-up Kalman filtering approaching with only one sensor and what I imagine is a pretty flat solution space.
Free advice and overpriced at that,
Sounds like a cool project!
I have a suggested simple addition... Am I correct that it takes more energy when you steer with a rudder than when you steer with the paddles? I was thinking you could add a couple of LEDs to indicate when the rudder is "working" (when it's off-center more than 1/2 degree, or so). That would give you a chance to pull in the correct direction before you fight against the rudder... if that's even an issue.
Or, maybe just 2 or 3 LEDs to indicate if you are on-course, and forget about motorizing the rudder? That would save the weight of the motor and the motor-battery (and simplify the project).
I assume you realize that dead reckoning is a poor way to navigate? A fraction of a degree in direction can create a large error at a distance. Wind & currents mean that you are not traveling in the direction in-which you are pointed. And it's an open-loop system without feedback (without self-correction), so errors accumulate.
Hi all, thanks for your suggestions.
Thanks for the correction on transformer vs converter.
The linear actuator will be powered by 12v direct from the battery, via relays that the Arduino will control. I'm struggling with this as most relays I have seen also require a 12v signal voltage, and I'm not sure if an Arduino can provide this...
Very little torque (<1kg) will be required to move and hold the rudder as it will be pivoted above the center of pressure. On kayaks, most of the effort required to turn a rudder comes from the friction of the mechanical cable systems which I won't have.
I'll reconsider the XBee, but running cables to the pedal switches will be very difficult, it's als abut a 3m run from where the Arduino will be and I wonder about voltage drop etc?
Steering with the paddle could be more energy efficient than turning a rudder, but it disrupts paddling rhythm.
The benefit of an autopilot (apart from satisfaction of making it), is that I can just paddle and the kayak will steer itself. I use my kayak for fishing so I spend a lot of time looking at the fishfinder, not the landmark I am heading toward. When I'm trolling on a nice day, I can just zone out and immerse myself in the rhythm of paddling.
Dead reckoning is a crude navigation method, but most marine autopilots are compass based and they work. I tend to head toward a particular landmark. The pedal switches allow me to make course adjustments as I go.
I think I will need some sort of PID. On a kayak it's quite common to hold the rudder in an off-center position to correct cross track error. You never bother looking where your rudder is set, you simply adjust it till you are heading in the right direction.
I am hoping to apply the same rationale to my autopilot. I won't need to monitor the position of the rudder, but to simply adjust the rudder proportionate to the deviation from intended course (within limit switches) at a set interval.
Conceptually something like....
adjustment = (course - heading) * (rudder range/360).
For a 60 degree rudder span if I am 90 deg off course then the rudder will move by 15 degrees and after a set interval check again. If the deviation is reduced, it will make a smaller adjustment.
It's not quite that simple, a deviation can be measured in two directions and I need to ensure I always measure it the shortest way. Still working on the maths of that bit.
I'm hoping to have the LED display alternate between course (C###) and heading (H###).
Waterproofing will be critical - heatshrink and silicon grease go a long way on junctions. Everything will be inside the hull, hanging down off the underside of the deck. Leads will be marine grade and tinned. Pedal switches will be reed switches inside the hull triggered by magnets in the pedals. The electronics etc will be in an IP68 enclosure.
3m should not be a problem for wiring switches - little current so little voltage loss, and you still have to power the romote with XBee which would use more power (and more voltage drop) than just the switches - 2 switches means just 3 wires, power to the XBee would require at least 2, and going with switches and wiring them back would be a lot less complex. either approach would need some sort of water proof connector and the number of wires in the connector would be a small part of the cost. Powering the XBee board with another battery adds complexity, and another battery to maintain. Switches and cabling could be mounted permanent and just connected to the controller when being used.
What you seem to be looking for is a heading hold function on the rudder. You want to travel 238 degrees, wind and current are pushing you slightly off course so you hold a heading of 235 to follow a line to your destination.
Hi Mike,
I am doing the same thing. My wife and I are keen paddlers and would do 10 to 20 miles every weekend. Kayaks (particularly kayaks loaded up with gear) do tend to wander from side to side as you paddle. You can exert significant energy holding them on course using your paddle, or create drag with you rudder. Small, early course corrections are definitely the way to go. Of course the heading will change slightly with every stroke. The key will be to average over a few seconds and gradually bring the kayak back to course. I am approaching the problem a little differently;
When we paddle on the river we tend to follow the same path every time. When we go on longer distances, it is important to use a GPS so you can see your "Crosstrack Error" and not end up paddiling in massive curves. Most hand held GPS units will give you your course to steer back to the "Rhumbline" (the initial straight line between two waypoints). I am also integrating a digital compass. So I will have two modes; 1) Hold Heading, 2) Use GPS.
Rather than a linear actuator, I am using a large servo with bunge


death under Japanese law is cited as the following:
Brain death will only be declared if organic injury is observed in the brain with attributable cause and if the following criteria are met:
Deep coma
Dilated and fixed pupils
Loss of brain stem reflex
Flat brain waves
Loss of spontaneous respiration
Two or more doctors with requisite expertise and experience confirm no changes after a second test conducted six or more hours later.
Japanese organ transplantation network
There are ongoing campaigns to either change the law in Japan to allow donations from a wider pool of donors and campaigns to raise awareness. The green ribbon campaign works with one core principle:
Yes is okay. No is okay. It is your intention [choice].
Green ribbon campaign
This campaign shows the difference organ donation has on many lives and has a section on the website to share the stories of recipients so you can see what a difference it has made.
Families that have not been able to receive a new organ have only a few options.
Firstly, do nothing. For patients who need a major organ (heart, liver, lungs etc) they can choose to do nothing. This would result in their death.
Secondly, secondary care options e.g. dialysis for kidney issues. The problem with this option is the expense. Dialysis costs 6 Million yen a yearfor the rest of their liveswhereas transplantation costs 6 Million yen and only requires blood tests and doctors appointments instead. This is a cheaper option which takes us to option 3.
Travelling abroad in hopes of paying for a transplant. This method is expensive as in remortgage your house expensive. The problem is that no country has a stockpile of spare organsbut these organs need to be sources from somewhere. This may be the black market or taking organs from others in that country that also need them.
This is an extremely complicated issue in Japan where tradition and human life fight against each other. Japanese law was changed in 2010 and even though may younger Japanese are filling out organ donation forms and, as an outsider, I feel more still needs to be done in order to help more people survive.
What do you think about organ donation in Japan?
Thank you for reading and happy exploring.
Disposition in Japan
Definition: disposal of human remains in Japan
Global disposition options
Other global options
 - Immurement: being placed into a mausoleum or tomb
 - cannibalism*
Disposition in Japan
Problems with cremation in Japan
Other options for cremains (cremated remains)
 - Internment in a home shrine (extremely traditional)
 - Internment in a sky scraper grave
 - Interment in another mass memorial
 - Interment is a communal grave (extremely cheap option)
 - Interment in a company grave
 - spread on the winds (not really practiced in Japan)
 - Shot into space (a small part of you only)
 - up-cycled into jewelry, pictures etc
The Japanese problem
Thank you for reading and happy exploring.


Rate this page:
Messaging module allows to exchange instant messages between two or more participants. Messaging supports text and metadata. The conversation doesn't bind or depend on audio/video calls though there is a possibility to integrate messaging in audio/video calls. FEATURES:
 1. Messaging is the separate part of WEB SDK but it uses the Client.login, Client.loginWithOneTimeKey and Client.loginWithToken methods. In brief, if a user has already been logged in, he can use Messaging functionality.
 2. Messaging doesn't use backend JS scenarios at all.


text:
A Perl script to convert a text file to Multiterm XML
Added: 12 June 2008, last updated: July 17, 2008
I've often read in forums and mailing lists about people having problems with importing a glossary into Multiterm. Most of the time you need a bilingual glossary from which you can insert terms into Word, TagEditor or SDL Edit.
A few years ago I had the same problem and it was then that I developed a Perl script to convert a tab-delimited text file into an XML file compatible with Multiterm's bilingual glossary template. Unfortunately this script ran only inside Notetab Pro, which can execute external scripts and grab their output.
Now I learned how to handle encoding conversions in Perl and I made a standalone version of the script, which can be downloaded here. Actually two scripts, one for English – Polish, and the other for Polish – English glossaries.
Before you use the script, you will have to edit it once to adapt it to your language pair. The script may be made smarter in the future, but for now it does its job well, once you edit the language settings.
When you open the script with a plain text editor (one that can edit/save UTF-8 encoded files), disable wrapping of long lines and go to line 31 which looks like this:
Change English (United States) and EN-US to the correct settings for your source language.
Go to line 45 of the script and repeat this step for the target language.
You can check the correct language names and codes in step 3 of 5 of Multiterm's Termbase Creation Wizard.
Make sure that you do not delete the quotation marks around the language name and language code, nor the forward slash at the end of the tag.
Save the script. You can use the Save As command and rename the script from MTENUSPL.pl to something that represents your source and target language. Keep the pl extension. It stands for "perl" not "Polish". ;-)
To run the script, you need:
- Perl. You can get Perl for Windows as a free download from _URL_
- A tab-delimited file with your glossary, saved in the UTF-8 encoding. You can save a tab delimited file with this encoding in Word, OpenOffice Writer, UltraEdit, NoteTab Pro, PSPad etc. I can't make the script guess the encoding of the source file, so it must be in UTF-8. Also, if your tab-delimited file contains any of these characters: <, >, &, replace them as follows:
- replace < with <
- replace > with >
- replace & with &
If you leave these characters without any changes, they will break the import into Multiterm.
To run the script, copy it where your tab-delimited file is.
Open the command line (Start key+R, type cmd, press Enter). Change the directory to where the script and the tab-delimited file are.
Type the following command:
perl MTENUSPL.pl sourcefile.txt
and press Enter. If the source file is "well formed", the script will process it and create a sourcefile.txt.xml file. This file can be imported into a Multiterm termbase based on the bilingual glossary template.
You can download the two scripts in a zipped file here. For feedback about the scripts please use this form, or contact me through the cat_conv yahoogroup.
When you have successfully created your xml glossary file, you can import it into Multiterm. This short tutorial explains how to do it.
December 24, 2008:
Added the Multiterm Termbase Setup and Import Tutorial.
July 17, 2008:
- The actual user name is inserted, based on the current logged-on user name, "Piotr" was hardcoded before;
- Current date and time is inserted instead of a hardcoded date in the earlier version;
- Fixed an error in the numbering of "concept" elements, all concept elements were numbered as 1, now they are numbered sequentially.


Take the 2-minute tour ×
Let $(X, \|\cdot\|)$ be an Banach space. Assume that a sequence $f_n \rightarrow f$ weakly in $X$, and $\|f_n\| \rightarrow \|f\|$ as $n \rightarrow \infty$. It's known that if $X$ is a uniformly convex Banach space, then we have $f_n \rightarrow f$ strongly in $X$. Is this true for an reflexive Banach space?
share|improve this question
1 Answer 1
up vote 7 down vote accepted
I take it "strongly" means "in norm"? No, this can fail for reflexive Banach spaces.
For a counterexample, let $X$ be the $l^\infty$ direct sum of ${\bf R}$ and $l^2$. (I'm doing this for real Banach spaces, but the same counterexample works in the complex case too.) Thus a typical element of $X$ looks like $(a,f)$ where $a \in {\bf R}$ and $f \in l^2$, and its norm is ${\rm max}(|a|, \|f\|_2)$. Since $X$ is a direct sum of two reflexive spaces, it is reflexive. Now consider the sequence $(1, e_n)$ where $(e_n)$ is the standard basis of $l^2$. It's easy enough to check that this sequence converges weakly, but not in norm, to $(1,0)$.
share|improve this answer
Yes, it is, thanks for your nice example. – Wang Ming May 5 '12 at 12:14
Just to add to Nik answer, reflexivity is invariant to equivalent renormings (topologic property), while uniform convexity is not, it depends on the geometry of the norm (geometric property). The hypotheses that $||f_n||\to||f||$ is also a geometric property, and the conclusion that $f_n\to f$ is again topologic. This should give you the intuition, before any concrete counter-example, that the property shouldn't hold under the assumption of reflexivity, or any other topologic property for that matter. – Adi Tcaciuc May 9 '12 at 17:49
Your Answer


text: Men and women 150 years ago grappled with information overload by making scrapbooks—ancient ancestors of Facebook and blogging. Both African American and women's rights scrapbook-makers documented their experiences in the public realm and experimented with ways to present them. In this lecture, Ellen Gruber Garvey reveals a previously unexplored layer of American popular culture, where activists collected and constructed new narratives by creating unwritten histories in books they "wrote" with scissors and paste. Ellen Gruber Garvey is professor of English at New Jersey City University. Co-sponsored by the Barnard English department and the Consortium for Critical Interdisciplinary Studies.


Environment Variables
1. Shared State
This feature is only available on macOS 10.15+. Prior to macOS 10.15, it might be crashed.
It's possible to share states from the onRequest() and the onResponse() from different scripts when the script is executed with the global object: sharedState
 - The sharedState is a JS Object (Dictionary), so you can assign any keys and values from onRequest(), then receiving it on the onResponse() or from different script.
The following code demonstrates:
 - Get the global counter and increase it as soon as the script is executed
 - Share data between Request and Response
function onRequest(context, url, request) {
// Save some state to sharedState
sharedState.url = url;
sharedState.data = "custom";
sharedState.info = {"username": "Proxyman"};
// Increase the global counter
var count = sharedState.count?? 0;
count += 1;
sharedState.count = count;
// Log
return request;
function onResponse(context, url, request, response) {
// Receive it
console.log("Custom data = " + sharedState.dataa);
console.log("sharedState.count = " + sharedState.count);
// Done
return response;
From Proxyman 2.25.0+, the sharedState is available across different scripts. It is only released when quitting Proxyman app or using 'clearSharedState()' function.
Prior to Proxyman 2.24.0, the sharedState is only alive on the current flow that executes the script and it's released when the script is run over.
To clear all data, please consider using 'clearSharedState' function.
// Clear all data from sharedState object
2. Environment Variables
Plan to support soon.


text:
OKRA, LADIES FINGER, BHINDI
Okra is a popular health food due to its high fiber, vitamin C, and folate content. Okra is also known for being high in antioxidants. Okra is also a good source of calcium and potassium. Okra, commonly known as lady's fingers, is used in various recipes. This vegetable is of high medicinal and nutritional value. it can be eaten raw, cooked, or steamed depending on the diet plan. it helps in normalizing blood sugar levels, relieves constipation acts as a respiratory soother.
Health Benefits of Eating Okra
- It's low on calories
- It contains no saturated fats or cholesterol.
- It can help stabilize blood sugar levels.
- It contains lots of dietary fiber.
- It's rich in vitamin A and other antioxidants.
- It's a rich source of vitamin C, which helps with the body's immunity
- It's a good source of minerals, including iron, calcium, magnesium and manganese.
- It contains vitamin K, which is important for bone health and plays a major role in blood clotting.


text:
learningCloud introduces a new tool for event management that allows authors to create sessions to schedule virtual and face-to-face classes.
The main features of this new functionality are:
- Ability to create virtual sessions
- Ability to create face-to-face sessions.
- Create and assign physical locations to face-to-face classes.
- Add attachments to share between users.
- Ability to integrate with video conferencing tools for seamless session creation.
- Registration of users or groups of users.
- Creation of self-registration sessions.
- Enable evaluation with cut-off criteria.
- Register attendance.
- Check the status of users in the sessions.
- Filter by student, group or completion status.
- Export report in CSV.
- Possibility of assigning permission to the teacher to record attendance and evaluation, and uploading attachments.
With an intuitive interface and from one place, you can create units to structure the Events, add attachments, evaluation and much more.
From the interface itself, it is possible to assign which user will assume the teacher's role for a given session. This role will be able to register the attendance of the users, as well as evaluation capabilities, if the session is assessable.
Users can access their Events directly from the learningCloud portal, and attend both the events in which they have been registered and those with free registration that they are interested in.
From its portal, the user can:
- add their sessions to their personal calendar
- download teacher attachments
- access the session link
- check the location of the physical sessions
- check the score and attendance of past sessions.
The administrator of the platform can access reports on all published events. Among the data available are:
- check the student's status regarding the completeness of the sessions.
- filter by status and/or group.
- check the score and attendance of users.
- export the data in CSV format.
Customer support service by UserEcho


text:
Thoughts on native mobile development on Microsoft platforms
Monday, October 26, 2009
HOWTO: Implement a text ticker
Here's the answer to yet another question asked on the Windows Mobile Developer Center Forums: How to implement a text ticker. The request implied for a flicker-free implementation, so a memory bitmap is required. This bitmap is generated whenever the screen changes size (CTextTickerView::OnSize) or when the text itself changes (CTextTickerView::SetTickerText). To calculate the text size when printed with the given font, a call is made to CDC::GetTextExtent which returns both the height and the width of the text in pixels. The off-screen is then created using the screen width and the text height plus a few padding pixels (CTextTickerView::ResizeBitmap).
Scrolling of the ticker is achieved through a timer that shifts the ticker printing position every 100 ms. The ticker is painted by invalidating its own rectangle and the whole painting process is performed on CTextTickerView::OnPaint. Note how the ticker text gets painted a second time tailing the first instance in order to give a continuous feel. Also note how the x offset is incremented by the timer handler. Go and have a look at the code!


text:
Posters are characteristic of Shell's advertising during the 1920s and 1930s. Young talented artists were commissioned to convey simple messages for Shell's poster advertising. Many of these artists went on to become famous names in 20th century British art.
The posters, known as Lorry Bills, were displayed on the side of the delivery lorries transporting cans of fuel to customers across the country. They were large in size and made to fit boards that were 30 by 45 inches.
In 1925 Shell began a series of posters featuring the slogan 'See Britain First – On Shell'. The campaign encouraged the nation to explore the British countryside in their cars using Shell petrol. The posters showed romantic landscapes with traffic free roads. Shell tapped into the longing for a rural escape from the city and reassured motorists of the reliability of their products with the strap line 'You can be sure of Shell'.
Shell continued the campaign to promote motor tourism throughout the British Isles with press advertising, TV advertising and the popular Shell Guide series until the mid 1980s.
The number of private cars on British roads reached a million for the first time in 1930 and there was a growing concern that motoring was harming the countryside. Protests against poster hoardings and signs along country roads led to Shell removing all their placards and enamelled signs. Lorry Bills however, remained the focal point for Shell's advertising.
Have a story about "1925 Shell Poster", or simply want to tell us what you think?
Add your thoughts below. You can sign in with Google, Twitter, Facebook, Yahoo! to get your story posted straight away - or just post a comment to be published later.
Let us help you plan a route and make a visit


Random Color Scheme
Making a coherent Material Design theme is hard. This is a Flutter plugin that generates a random color pallet based on Material Design while respecting WCAG guidelines.
The idea is for you to (temporarily) replace your ColorScheme() with a randomColorSchemeLight() or randomColorSchemeDark(). On each run, hot refresh or hot restart, the app is going to look different. The theme is printed in terminal, so you can easily copy and paste back into your project with the colors that you want to stay.
The interactive sample allows you to see how it works and the reasoning behind:
pub package
 random_color_scheme: ^VERSION
In your project, just replace the ColorScheme.dark(...) with RandomColorSchemeDark().
If you want a light theme, there is a RandomColorSchemeLight().
import 'package:random_colorscheme/random_color_scheme.dart';
 data: ThemeData(
 colorScheme: randomColorSchemeDark(),
 child: MyApp(),
How it works
This started in my Color Studio project.
I started looking at the Material Design Guidelines on color for both light and dark theme.
After extracting some colors (like the Primary, Secondary and Owl Study), I decided to see how similar were they, in what range are they and how they behave together.
Then, I used HSLuv with a random number generator and rules detected from my observation. The final adjustments were made when tweaking the sample.
HSLuv is great because only the Lightness attribute affects WCAG calculated contrast, so all themes are guaranteed to pass
a minimum accessibility threshold.
Function listing
 - randomColorSchemeDark(seed: null | int)
 - randomColorSchemeLight(seed: null | int)
 - randomColorScheme(seed: null | int, isDark: bool)
Seed: an integer which guarantees the random function is always going to have the same output (i.e., the same ColorScheme).
It is optional.


text:
A Body Image Program for Girls
The Robert Crown Center has developed the innovative program Express Yourself! to help girls overcome concerns about their body image. The proactive approach teaches young girls how to adjust to changes in a positive way and feel good about their own bodies as they mature, despite the barrage of the media's unhealthy messages and role models. The program helps youth develop an individual positive sense of self and learn effective strategies to respond to peer and media pressures. Through this program, RCC is adding an affirming voice into the mix of input that young people receive regarding their bodies.
About Express Yourself! The program is facilitated by an RCC Health Educator to an audience of primarily sixth grade girls, but can be adapted to fifth or seventh grade. Express Yourself! is based upon Illinois State health learning standards, and address the topics of body image and self-esteem. RCC Educators engage students in discussion and creative activities to help construct a positive body image through the topics of healthy decision-making, media awareness, and self-expression. Express Yourself! also features a journal for girls to complete at home, either on their own or with family members or friends. Girls will receive the journal at the conclusion of the program.
Activities/skills acquired include:
- Through an interactive activity, students learn how the opinions of their peers may influence their decision making skills.
- Students identify how women are normally portrayed in the media and develop media literacy skills.
- Students develop skills to continually improve their self-esteem including adequate sleep, nutrition, and exercise.
- Students learn the benefits of positive thinking, respect (including self-respect), challenging themselves, goal setting, and positive self-expression.
What is body image and why is it so important? Body Image is a combination of a person's feelings and thoughts about their body. A healthy body image is critical to establishing good health. A poor self-image, lack of confidence, and social problems are precursors to many poor health habits; these habits include eating disorders, drug abuse, early sex, teenage pregnancy, alcohol, tobacco abuse, and violence.
Goals of Express Yourself!
- Students will learn the factors that influence body image and self-esteem.
- Students will learn how body image and self-esteem play an important role in developing critical thinking skills to positively navigate media messages and peer influences that may negatively impact their behavior, eating habits, self-esteem, and decision making.
- Students will develop tools and communication skills, including self-expression, that support positive feelings about who they are and build self-esteem.
Express Yourself! for Boys How strong? How athletic? Boys too, experience cultural pressures linked to body image. Express Yourself! serves as an effective follow-up class to the Michael and Linda puberty programs.
Express Yourself! can be presented as a one-time (one hour) program or in six after school sessions as an Express Yourself! Club. Register for Express Yourself!


text:
If a device has stopped functioning or if you are replacing an older device with a newer device, you can remove it from Insteon+. Follow the steps in this article to remove an Insteon device from Insteon+. Removing a device will also remove it from any room, schedules and scenes and cannot be undone.
Delete an Insteon Device from Insteon+
1. Press and hold the set button on the back of Hub Pro until Hub Pro beeps. Press and hold the set button on the back of Hub Pro until Hub Pro beeps again.
2. Press and hold the set button on your old Insteon device until it double beeps.
3. Repeat the process in reverse, starting with your old Insteon device. After several moments, the Insteon device will disappear from Insteon+.
If An Insteon Device Has Not Disappeared from Insteon+
If you have followed the steps to remove an Insteon device from Insteon+ but the removed device continues to show and no longer responds, try the troubleshooting steps below.
Sign out of Insteon+
1. Navigate to Homes and tap Settings
2. Tap Sign Out
Force Quit Insteon+
1. With Insteon+ open on your iPhone, iPad or iPod touch, press and hold the power button until Slide to Power Off appears.
2. Release the power button and press and hold the Home button until Insteon+ disappears.


CSVLogger.FILE_NAME_FORMAT.format(data.getBlock()) + ".csv");
 .equalTo("block", data.getBlock())
 return null;
 protected void onPostExecute(Void aVoid) {
 if (LocalDataLog.with().getAllSensorBlocks().size() <= 0) {
As can be seen, we look for all the stored logs, and then delete each file one after another in doInBackground(). Once all the files are deleted, onPostExecute() is called, where we make the progress bar disappear. So, this how AsyncTask is used to implement deleteAllFiles feature.
Capture Task and Fourier Transform Output of Signals in Oscilloscope.
To display the generated signal in the oscilloscope, we call captureTraces() and fetchTraces functions from the ScienceLab class. Now, both these functions communicate with the PSLab Board, request for data, receives the data, manipulates it into the desired format and then display the signal on the Oscilloscope screen. Now clearly we can't afford to run such a process on the main thread. So we use AsyncTask to handle it.
In the Oscilloscope, there is a feature to see the fourier transform output of the signal generated by the oscilloscope. Now to generate the Fourier Transform Output of the signal, we use the Fast Fourier Transform method. The time complexity of FFT (Fast Fourier Transform) is O(Nlog(N)), where N is the number of samples of the input signal. Now even if FFT is fast, we can risk to run this function on the main Thread. So once again we get help from AsyncTask.
Both of these functionalities are included in same AsyncTask Class called captureTask A snippet for this task can be seen below,
public class CaptureTask extends AsyncTask {
 private ArrayList> entries = new ArrayList<>();
 private ArrayList> curveFitEntries = new ArrayList<>();
 private Integer noOfChannels;
 private String[] paramsChannels;
 private String channel;
 protected Void doInBackground(String... channels) {
 paramsChannels = channels;
 noOfChannels = channels.length;
 try {
 double[] xData;
 double[] yData;
 ArrayList yDataString = new ArrayList<>();
 String[] xDataString = null;
 maxAmp = 0;
 for (int i = 0; i < noOfChannels; i++) {
 entries.add(new ArrayList<>());
 channel = channels[i];
 HashMap data;
 if (triggerChannel.equals(channel))
 scienceLab.configureTrigger(channelIndexMap.get(channel), channel, trigger, null, null);
 scienceLab.captureTraces(1, samples, timeGap, channel, isTriggerSelected, null);
 data = scienceLab.fetchTrace(1);
In this part of the capture Task class, we use the captureTrace() and fetchTrace() function to get the signal samples and then store them into the data variable. Below is the part where we use call the fft() for the input signal.
if (isFourierTransformSelected) {
 Complex[] yComplex = new Complex[yData.length];
 for (int j = 0; j < yData.length; j++) {
 yComplex[j] = Complex.valueOf(yData[j]);
 fftOut = fft(yComplex);
This is a very simple part where we just call the Fast Fourier Transfer function is the user has selected to see the fourier transform output. The implementation of the Fourier function can be seen below,
 public Complex[] fft(Complex[] input) {
 Complex[] x = input;
 int n = x.length;
 if (n == 1) return new Complex[]{x[0]}; // if only single element, return as it is
 if (n % 2!= 0) {
 x = Arrays.copyOfRange(x, 0, x.length - 1);
 //No of samples should be even for this function to run, so i case of odd samples we remove the last element. This doesn't affect the output significantly
 Complex[] halfArray = new Complex[n / 2];
 for (int k = 0; k < n / 2; k++) {
 halfArray[k] = x[2 * k]; // Array of input terms at even places
 Complex[] q = fft(halfArray); // recursive call for even terms
 halfArray[k] = x[2 * k + 1]; // Array of terms at odd places
 Complex[] r = fft(halfArray); // recursive call for odd terms
 Complex[] y = new Complex[n]; // Array of final output
 double kth = -2 * k * Math.PI / n;
 Complex wk = new Complex(Math.cos(kth), Math.sin(kth)); // "kernel" for kth term is the output (based on nth root of unity)
 if (r[k] == null) {
 r[k] = new Complex(1); // exception handling
 if (q[k] == null) {
 q[k] = new Complex(1); // exception handling
 y[k] = q[k].add(wk.multiply(r[k])); // kth term will be addition of odd and even terms
 y[k + n / 2] = q[k].subtract(wk.multiply(r[k])); // (k + n/2)th term will be subtraction of odd and even terms
 return y; // rsultant array
This is a classic implementation of Fast Fourier Transform. We divide the samples of input into odd and even placed terms and call the same function recursively until there is only one term left. After that we use nth (n being the number of samples) complex root of unity, we combine the results of odd termed fft() and even termed fft() to get the final output. Since at each iteration we are breaking the input into half it will run for O(logN) time and to merge the odd and even termed output we run a loop in each iteration on the O(N). So the total complexity would be O(NlogN), and since it might take longer to compute the fourier transform for large input we require it to be inside the AsyncTask and not on the main thread.
There are many other functionalities throughout the app, where AsyncTask has been used. In a nutshell, AsyncTask is a very useful method to handle longer tasks off the main thread.
Tags: PSLab, Android, GSoC 19, AsyncTask, Threading
Continue Reading Examples of how AsyncTask is used in PSLab Android App
How to use and implement Save Wave Configs feature in Pocket Science Lab Wave Generator
What is a Wave Generator?
A Wave Generator is one of the most important features of PSLab. It is used to generate different kinds of waves like, sine, triangular, square, PWM. Wave generator UI is as under:
 (Figure 1 : Wave Generator Analog Mode UI)
 (Figure 2 : Wave Generator Digital Mode UI)
As can be seen the Screenshot above user is provided with options to set Frequency, Phase, Duty of different waves and once configurations are set user can either output the waves in Oscilloscope or can compare different waves in Logic Analyzer.
What is Save Wave Configs Feature?
 (Figure 3 : Wave Generator Control Buttons (View,Save,Mode))
In this feature, the user is given a "Save" button to use this feature.
The reason to add this feature is that, sometimes we need to perform the same experiment multiple times, is such scenarios if we have to set wave configurations everytime, it will become boring and there will be chances of errors. Hence using the save configs feature, user can currently set configurations in the Local Storage and can use it anytime later.
Further since the Wave Configurations are saved on Local Storage as.CSV file, a user can save configs and can share the file with others so others can as well set their device to same configurations. The saved Wave Configurations can be seen in the DataLogger Activity and opening a saved log would take the user to Wave Generator Activity where all the configs will be set as per the saved log.
A sample CSV of the log data can be seen below.
(Figure 4: Wave Configs CSV file)
How is Save Configs Feature Implemented
The implementation of this feature is quite simple. There is a class named WaveData. With the parameters of Mode(Square or PWM), Wave name, Shape, Freq, Phase and Duty. Whenever the user clicks the save configs button, the saveWaveConfigs() function is called. This function fetches set values of different fields and creates realm objects and also write them to csv file as shown above. Once the realm objects are created, this log can be seen in the Data Logger Activity. The code to generate the realm object for the wave configs (that is the implementation of the function saveWaveConfig()) is given below.
public void saveWaveConfig(View view) {
 long block = System.currentTimeMillis();
 long timestamp;
 double lat, lon;
 String data = "Timestamp,DateTime,Mode,Wave,Shape,Freq,Phase,Duty,lat,lon\n";
 recordSensorDataBlockID(new SensorDataBlock(block, getResources().getString(R.string.wave_generator)));
So till now in the function, we create a header string for the data to be stored in the csv file. We create a block from the current system time. This block will be used to save all the realm object for this function, so all the objects created at this instance will be grouped as a single log entry in DataLoggerActivity.
double freq1 = (double) (WaveGeneratorCommon.wave.get(WaveConst.W


Vegetables: To eat or not to eat?
Watermelon, Luigi Rignanese
Bible Reference: Read Romans 14:1-4 for Paul's example of vegetables; however, the entire Chapter 14 develops Paul's persuasive argument of acting out of love for our brothers.
The apostle Paul wrote the book "Romans" in about 57 A.D. It was written as a letter to the Roman Church from Corinth, Greece. Likely Phoebe carried the letter from Corinth to Rome (Romans 16:1-2). The theme of Romans is the revelation of God's judging and saving righteousness through Christ. In Chapter 14, Paul called for mutual acceptance between weak and strong Christians. Weak Christians felt that in order to remain close to God, they should eat some foods, e.g., vegetables, while abstaining from others, e.g. meat. In contrast, strong Christians accepted that what they ate was independent of their saving relationship with Christ.
Many of us cannot relate to how or why eating vegetables versus meat was so important to the Roman church. Today, a parallel is Christians who believe that drinking alcohol hinders their walk with Christ while other Christians believe that drinking alcohol in moderation is consistent with the Christian life.
In the first four verses of Romans 14, Paul provided three principles for Christians and Christian churches to live by:
Principle 1: We should welcome weaker Christians into our churches; but not for the purpose of disputing or arguing with them over their opinions. We should welcome them because they are fellow believers.
Principle 2: In the Christian church there must be mutual forbearance. The mature (strong) Christian must not despise his weak brother. Similarly, neither should a weak brother judge as a sinner a Christian who enjoys meat, e.g., ham, beef. God has received both groups of Christians into his family; both groups are members in good standing.
Principle 3: Each believer is a servant of the Lord; God is their master. God, the master of all Christians, will sustain those on both sides of the issue of what to eat.
At the beginning of the first millennium in Rome, most Christians were slaves or from the very poor class (plebeians). Their foods were simple and consisted of grains, vegetables, and fish; fish was often a luxury. Examples of vegetables included cabbage, cucumbers, leeks, lettuce, melons, onions, and pumpkins. Watermelon was a common vegetable found in both Rome and Palestine and will be used as an example of a vegetable.
The species name of watermelon is Citrullus lanatus, previously known as Citrullus vulgaris. Watermelons were indigenous to tropical Africa. Pictures of the watermelon were included in Egyptian pyramid paintings from 2000 B.C. Watermelon seeds were found in Iron Age deposits near the Dead Sea and at Arad, Israel.
Luigi Rignanese
Symbolism: Grace
What better plant to symbolize grace than the watermelon which supplied both water and food to the early Church? Grace is unmerited divine assistance that God gives humans for their regeneration or sanctification. Grace occurred through Christ giving his body and blood for the Church. The water of the melon reminds us of God's blood and the pulp of his body given up for us. The poorest people in the early Church were sustained by watermelons.
Reflection: Christians today would all be impoverished without Christ's grace.
Copyright: May 2014, Carolyn A. Roth
3 responses to "Vegetables: To eat or not to eat?
 1. Hi, would like to ask You about onions and garlic and cabbage. Andrea moritz (ayrveda medecine say that garlic is bad, toxic. I ate today some onions raw fresh onions (white fresh) then it feels hard to digest but it cleans the body i think? the nose is cleaner but i feel heavy for my body.
 The wuestion to You is to eat or not to eat vegetables, onions?
 Best Wishes
 - Adam, Vegetables, as a whole, are great foods to eat. Onion and garlic in limited quantities are healthy; of course they have the side effect of causing bad breath. I have never heard that onions, unlike cucumbers, were difficult to digest. Most definitely garlic is not normally toxic.
 Blessings, Carolyn
 2. The annalogy with the lowly watermelon is the best I've ever read. Being from Mississippi, where the best watermelons in the world are grown, it is especially meaningful. Thanks so much.
Leave a Reply
You are commenting using your account. Log Out / Change )
Google photo
Twitter picture
Facebook photo
Connecting to %s