Backend data processing
How did we handle missing data points?
By using a package within scikit-learn's regression function set, we
used a polynomial regression to predict and replace the mising data points
from a number of different installations across the state.
Interacting with PVWatts
We used the PVWatts API for a lot of our user-facing coverage. For our calls to PVWatts we used optimal panel installation and orientation conditions to provide a reference point for what a "perfect" cell would achieve.Acknowledgements
This tool would not have been possible without the help of a number of people.
First, a huge thank you to the people with the University of Washington's Clean
Energy Institute, as well as Dave Beck and Kelly Thornton of the UW DIRECT program.
Second, the people at the Alaska Center for Energy and Power, especially Chris Pike
and Michelle Wilber, who have been constant advisors on this project, and also worked
to collect the data for all of the solar installations used in this project.
We would also like to thank our financial sponsors for this project. Much of ACEP's
work has been financed by the Office of Naval Research, and the DIRECT program is
funded through the NSF. Without this support, this work would not have been possible.
We would also like to thank Alan North, of
Analysis North, who provided
inspiration for many of the graphics we used in this project. Also, thank you to
NREL and the PVWatts Dev Team for their tool, PVWatts,
which we used to provide a number of our reference points.
And finally, thank you for your use of this tool. We're glad you're here, and
we hope you find this tool useful.
--The ARCTIC Dev Team
Ge Gu
Ge is a Master student in Chemical Engineering Department at the University of Washington . He is a research assistant in the Vincent Holmberg group focusing on the Lithion ion Battery.
Jon Onorato
Jon is a PhD candidate in the Materials Science and Engineering Department at the University of Washington, where he does research on conjugated polymers for electronic applications in the Luscombe Research Group. Jon is interested in clean energy applications, especially in the context of solar energy and batteries.
Zhi Peng
Zhi is a Master student in the Materials Science and Engineering Department at the University of Washington. Zhi works on secondary lithium ion batteries under supervision of Professor Jun Liu.


WHEN WE WERE KINGS A film review by Peter Gloster
RATING: 9 out of 10
Naturally, at the core of Leon Gast's "When We Were Kings" is the fight itself, for what a fight it was. Thanks to the business savvy of Don King, an ageing Muhammad Ali was pitted against the formidable hulk of heavyweight champion George Foreman. Fans were treated to an 8 round battle of endurance and strategy, as much as brute strength, that immediately entered boxing lore. With the benefit of the first-hand recollections of that old ex-pug Norman Mailer, this classic conflict is brought back to life.
But "When We Were Kings" tackles issues that are harder to pin down than the simple facts of a boxing match. Questions of political power and social justice appear throughout this documentary. Gast could hardly choose otherwise, considering the vocal, uncompromising politics of Muhammad Ali. A member of the controversial black separatist movement The Nation of Islam, Ali opens Gast's film with a forceful swipe at the United States. When Ali hollers "Damn America', the audience knows the imprecation is heartfelt; the brutal yet casual way it is uttered leaves no doubt that Ali is speaking his mind. His decision to buck the draft for Vietnam is defended with the same admirable fury: "No Viet Cong ever called me Nigger", Ali reasons.
Despite showcasing Ali's proud unequivocal politics, one of the most impressive features of "When We Were Kings" is the subtle way in which the documentary considers the difficulties inherent in the overarching philosophy of black unity and black symbolism that Ali and his supporters champion. Listening to the film's numerous commentators, it is clear that the geographic location for this "Rumble in the Jungle" is etched more in the imagination than anywhere you could place on a map. Spike Lee tells us that the event was a pilgrimage, a "coming home" to Africa. Foreman reminds us that Africa is the "cradle of civilisation". Fair enough, but this homeland is a specific nation cursed with a less than inspiring reality. It is the newly founded Zaire and it is ruled by President Mobutu, a brutal dictator. While Ali respects Mobutu's ability to forge an independent African state, Mailer notes that beneath the stadium in which the titans battled lay hidden the Presidents well-stocked torture chambers. Mailer's insights are lost on most of the film's commentators. George Plimpton recalls that he always felt he was in the Congo, rather than the newly christened Zaire. With admirable restraint, Gast quietly suggests that for many the grandeur of myth and history all but obscured the reality of Zaire' s squalid ruling elite.
Mobutu is not the only dubious character to benefit from the heady symbolism of black power. Don King, resplendent in yellow kaftan and at ease with the "Messiah" label attributed to him by a loyal disciple, passes himself off as the voice of a new black international solidarity. Understandably, Foreman believes he has gotten a raw deal. He may be, as one sympathiser notes, "blacker" than Ali, but he is denied the iconic status shared by Ali, the thuggish Mobutu, and the tacky huckster Don King. Africa, Zaire, inspirational leader or vicious dictator, all is left undifferentiated, unconsidered, in this optimistic celebration of black unity. Little wonder that the people of Zaire were shocked to find that Ali's opponent wasn't white.
Admittedly, these issues are only hinted at, rather than substantially explored. The audience must consider the significance of these issues themselves, in their own time. There is just too much to cover, too much that is truly worthy of celebration, for a protracted political analysis to be justified. The excitement of James Brown and B. B King in concert, for instance. And of course there's always Ali to consider, as he shamelessly, and hilariously, hams it up in front of the camera, shadow boxing and uttering one inspired rhyme after another - "We gonna get it on coz we don't get along!". Doubtlessly, considering the multi-faceted nature of the extravaganza they chose to cover, the makers of "When We Were Kings" faced numerous difficulties in deciding what issues, and what personalities, best deserved their attention. Fortunately, by refusing to simplify their complex subject matter, they have captured the richness and excitement of this unique event.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


TextMiningUtil
/
de.mrapp.textmining.util.parser
/
Dictionary
/
Entry
/
key
key
val
key
:
K
The known value to be translated
Property
key
- The known value to be translated


Dom7 - Custom DOM Library
Fill
Classes
Lorem ipsum...
This is first title
This is subtitle
Attributes and properties
Google
Data storage
Lorem ipsum...
Data Set
Styles
I am a box


soupault
Soupault is a static website generator based on HTML element tree rewriting.
It can also be used as an HTML post-processor or metadata extractor.
More information: home page
- Initialize a minimal website project in the current working directory:
soupault --init
- Build a website:
soupault
- Override default config file and directory locations:
soupault --config config_path --site-dir input_dir --build-dir output_dir
- Extract metadata into a JSON file without generating pages:
soupault --index-only --dump-index-json path/to/file.json
- Show the effective config (values from `soupault.toml` plus defaults):
soupault --show-effective-config


{% extends 'base.html' %} {% block content %}
THIS IS A PUBLIC PROFILE!
Username: {{artist.user.username}}
Name: {{artist.name}}
Birthday: {{artist.birthday}}
{{ art }}


The select element
The select element is used to create a drop-down list:
Choose a car:
Volvo
Saab
Opel
Audi


Chatino keyboard uses Unicode modifier letters for superscript tone markers. For desktop/laptop, the top row of keys on the default layer contain the lower case letters a-m, and the shifted layer has uppercase superscripts A-B, D-E, G-M (there are no Unicode upper case for "C" and "F").
A second layout provides the tone marks via a deadkey on the semicolon position. The tone marks are entered by typing ";", then a key from a-m, which will select the uppercase tone marks. To use the lower case tone marks, simply type ; followed by uppercase A-M.
To type a semicolon, enter ;;
This keyboard also suppots Spanish characters á, é, etc., using the single quote key as a deadkey for the accented vowels and also ñ. To enter ü, use the colon key first, then the u. Uppercase forms are entered with the uppercase letters after the dead key. To enter either the color or single quote, touch them twice.
Chatino mobile uses long press on the keys A-M to select the superscript characters in both lower and upper case forms.
The tone marks are standard Unicode values, which have the advantage over formatting styles because these characters are portable, i.e., they can be used in applications without needing to copy styles. These characters are present in most fonts that support the basic Latin letters, so the text is very portable.
This keyboard was created by Craig Cornelius and Emiliana Cruz for use by the Chatino community of Oxaca and around the world.


Simple twitter to atom Available endpoints: {{ url_for('rest_view.home') }}: My home timeline {{ url_for('rest_view.user', user='NASA') }}: NASA timeline, with replies following the tweet. You can change NASA for anything. {{ url_for('rest_view.hashtag', hashtag='python') }}: Tweets with python. You can choose you own hashtag. Coded with love by Petr Kotas


Debug descriptions allow silicon vendors to create tool-agnostic debug and trace configurations so that the development environment settings can be reduced to simple checkboxes for selecting for example either standard run/stop debugging or complex instruction tracing.
Concept
A set of standardized debug and trace methods are automatically executed by the debugger:
- Setting breakpoints and watchpoints
- Reading memory and registers
- Starting and stopping trace
Implementation-specific steps can be described using an XML syntax:
- Special hardware reset
- Trace buffer setup
- Patch silicon issues
Debug description elements
A complete debug description for a device consists of the following elements:
Debug access sequences
Debug access sequences define the activities of development tools to connect to a device using the debug channel for debugging, tracing, or flash programming. Several debug access sequences are pre-defined and executed in specific context. Refer to sequences for details.
Software development tools should implement Default debug access sequences. These default sequences can be overwritten by device specific sequences using the sequence element in the sequences section of the PDSC file. Additionally, a PDSC file can contain user-defined sequences, for example to reuse access sequence fragments:
- Usage of debug access sequences explains how the sequences are used from a development tool point of view.
- Default debug access sequences lists all debug access sequences that are pre-defined by the CMSIS-Pack standard and shows the details of the default debug access sequences.
- Writing debug access sequences explains how to write custom debug access sequences. These can be used to either override default sequences or to define device specific sequences.
Usage of debug access sequences
Pre-defined Debug Access Sequences are used in the following context:
- Connect Debugger to Device is executed when debugging or flash programming with the target starts.
- Reset Device is executed to reset the target.
- Verify Code is executed to verify the content after flash programming.
- Disconnect Debugger is executed when debugging or flash programming with the target stops.
The following diagrams show how the Debug Access Sequences are executed by a development tool.
Connect Debugger to Device is executed when debugging or flash programming with the target starts.
Reset Device is executed to reset the target.
Verify Code is executed to verify the content after flash programming.
Disconnect Debugger is executed when debugging or flash programming with the target stops.
Default debug access sequences
Debug access sequences get defined in the sequence element. The following table lists the available pre-defined debug access sequences. Default debug access sequences are executed if they are not overwritten using a sequence element. Refer to Usage of debug access sequences for more information about the execution of these sequences.
For debug access sequences marked in ItalicRed, no default sequence exists. The usage in a debug description requires a related sequence element to be present. The other sequences should be implemented in a development tool. They are executed when no sequence definition exists in the PDSC file.
- Note
- Default debug access sequences read the System Control Space (SCS) of the processor and assume that the SCS offset is implemented as defined in the ARMv6-M/ARMv7-M/ARMv8-M architecture reference manual.
| name= | Description |
| DebugPortSetup | Prepare the target debug port for connection; is executed before acquiring access to the debug port.
May include for example an SWJ-DP switch sequence as defined in the ARM Debug Interface (ADI) Architecture Specification.
This sequence must not contain debug port/access port register and target memory accesses other than:
- Reading the DPIDR debug port register to release an SWD connection from its line reset.
- Writing the TARGETSEL debug port register (SWD protocol v2).
|
| DebugPortStart | Connect to the target debug port and power it up; is executed after DebugPortSetup.
The parent debugport is default debug port for this sequence.
This sequence must not contain access port register and target memory accesses. |
| DebugPortStop | Power down and disconnect from target debug port.
Executed as last step during target disconnect unless another debugger connection to this port is active. The parent debugport is default debug port for this sequence.
This sequence must not contain access port register and target memory accesses. |
| DebugDeviceUnlock | Check if the device is in a locked state and unlock it. Use query command elements for user confirmation.
Executed after having powered up the debug port. |
| DebugCoreStart | Initialize core debug system.
Executed after having connected and powered up the default debug port for the connection. |
| DebugCoreStop | Uninitialize core debug system.
Executed as last step during disconnect before powering down any debug ports no longer required for concurrent connections. |
| DebugCodeMemRemap | Remap memory to execution location.
Executed before verifying memory content after flash programming. This is required to replicate a memory remap of a device bootloader (that is not executed during debug connection). |
| ResetSystem | Execute a system-wide reset via software mechanisms. |
| ResetProcessor | Execute a processor reset via software mechanisms. |
| ResetHardware | Execute a system-wide reset via the dedicated debugger reset line, e.g. nRST. |
| ResetHardwareAssert | Assert a system-wide reset via the dedicated debugger reset line, e.g. nRST. |
| ResetHardwareDeassert | Deassert a system-wide reset via the dedicated debugger reset line, e.g. nRST. |
| ResetCatchSet | Executed before a target reset to configure the vector catch to stop code execution after the reset.
The implementation of ResetCatchSet requires an implementation of ResetCatchClear to free any hardware resources used for stopping the core. |
| ResetCatchClear | Executed after a target reset to free hardware resources allocated by ResetCatchSet. |
| FlashEraseDone | Executed after erasing flash memory. |
| FlashProgramDone | Eexecuted after programming flash memory. |
| TraceStart | Enable target trace capture.
Executed before the debugger powers up and configures standard CoreSight trace components, e.g. after the initial target connection as well as after a system-wide reset. |
| TraceStop | Disable target trace capture.
Executed after the debugger disabled and powered down standard CoreSight trace components. |
| RecoverySupportStart | Executed before step or run command to support recovery from a lost target connection, e.g. after a low power mode. |
| RecoverySupportStop | Executed after step or run command in context of the RecoverySupportStart sequence. |
| RecoveryAcknowledge | Debugger acknowledge after recovering from a lost target connection. Can be executed independently from a RecoverySupportStart sequence. |
Pre-defined default debug access sequences
The following sections the show the details of the pre-defined default debug access sequences.
DebugPortSetup
Prepare the target debug port for connection.
<sequence name="DebugPortSetup">
<block>
__var isSWJ = ((__protocol & 0x00010000) != 0);
__var protType = __protocol & 0x0000FFFF;
</block>
<!-- JTAG Protocol -->
<control if="protType == 1">
<control if="isSWJ">
<block atomic="1">
DAP_SWJ_Sequence(51, 0x0007FFFFFFFFFFFF);
DAP_SWJ_Sequence(16, 0xE73C);
DAP_SWJ_Sequence(6, 0x3F);
</block>
</control>
<block atomic="1">
DAP_JTAG_Sequence(6, 1, 0x3F);
DAP_JTAG_Sequence(1, 0, 0x01);
</block>
</control>
<!-- SWD Protocol -->
<control if="protType == 2">
<control if="isSWJ">
<block atomic="1">
DAP_SWJ_Sequence(51, 0x0007FFFFFFFFFFFF);
DAP_SWJ_Sequence(16, 0xE79E);
DAP_SWJ_Sequence(51, 0x0007FFFFFFFFFFFF);
DAP_SWJ_Sequence(3, 0x00);
</block>
</control>
<control if="!isSWJ">
<block atomic="1">
DAP_SWJ_Sequence(51, 0x0007FFFFFFFFFFFF);
DAP_SWJ_Sequence(3, 0x00);
</block>
</control>
<block>
ReadDP(0x0);
</block>
</control>
</sequence>
DebugPortStart
Connect to the target debug port and power it up.
<sequence name="DebugPortStart">
<block>
__var SW_DP_ABORT = 0x0;
__var DP_CTRL_STAT = 0x4;
__var DP_SELECT = 0x8;
__var powered_down = 0;
WriteDP(DP_SELECT, 0x00000000);
powered_down = ((ReadDP(DP_CTRL_STAT) & 0xA0000000) != 0xA0000000);
</block>
<control if="powered_down">
<block>
WriteDP(DP_CTRL_STAT, 0x50000000);
</block>
<!-- Wait for Power-Up Request to be acknowledged -->
<control while="(ReadDP(DP_CTRL_STAT) & 0xA0000000) != 0xA0000000" timeout="1000000"/>
<block>
WriteDP(DP_CTRL_STAT, 0x54000000);
</block>
<!-- Wait for Debug Reset to be acknowledged, don't issue error on timeout to deal with improperly connected Debug Reset -->
<control while="(ReadDP(DP_CTRL_STAT) & 0xA8000000) != 0xA8000000" timeout="300000"/>
<!-- JTAG Specific Part of sequence -->
<control if="__protocol == 1">
<block>
// Init AP Transfer Mode, Transaction Counter, and Lane Mask (Normal Transfer Mode, Include all Byte Lanes)
// Additionally clear STICKYORUN, STICKYCMP, and STICKYERR bits by writing '1'
WriteDP(DP_CTRL_STAT, 0x50000F32);
</block>
</control>
<!-- SWD Specific Part of sequence -->
<control if="__protocol == 2">
<block>
// Init AP Transfer Mode, Transaction Counter, and Lane Mask (Normal Transfer Mode, Include all Byte Lanes)
WriteDP(DP_CTRL_STAT, 0x50000F00);
// Clear WDATAERR, STICKYORUN, STICKYCMP, and STICKYERR bits of CTRL/STAT Register by write to ABORT register
WriteDP(SW_DP_ABORT, 0x0000001E);
</block>
</control>
</control>
</sequence>
DebugPortStop
Power down and disconnect from target debug port.
<sequence name="DebugPortStop">
<block>
__var DP_CTRL_STAT = 0x4;
__var DP_SELECT = 0x8;
WriteDP(DP_SELECT, 0x00000000);
WriteDP(DP_CTRL_STAT, 0x00000000);
</block>
</sequence>
DebugCoreStart
Initialize core debug system.
<sequence name="DebugCoreStart">
<block>
__var SCS_Addr = 0xE000E000;
__var DHCSR_Addr = SCS_Addr + 0xDF0;
Write32(DHCSR_Addr, 0xA05F0001);
</block>
</sequence>
DebugCoreStop
Un-initialize core debug system.
<sequence name="DebugCoreStop">
<block>
__var SCS_Addr = 0xE000E000;
__var DHCSR_Addr = SCS_Addr + 0xDF0;
__var DEMCR_Addr = SCS_Addr + 0xDFC;
Write32(DHCSR_Addr, 0xA05F0000);
Write32(DEMCR_Addr, 0x00000000);
</block>
</sequence>
ResetSystem
Execute a system-wide reset via software mechanisms.
<sequence name="ResetSystem">
<block>
__var SCS_Addr = 0xE000E000;
__var AIRCR_Addr = SCS_Addr + 0xD0C;
__var DHCSR_Addr = SCS_Addr + 0xDF0;
Write32(AIRCR_Addr, 0x05FA0004);
</block>
<!-- Reset Recovery: Wait for DHCSR.S_RESET_ST bit to clear on read -->
<control while="(Read32(DHCSR_Addr) & 0x02000000) == 0" timeout="500000"/>
</sequence>
ResetProcessor
Execute a processor reset via software mechanisms.
- Note
- This Default Debug Access Sequence is empty for ARMv6-M and ARMv8-M based processors.
<sequence name="ResetProcessor">
<block>
__var SCS_Addr = 0xE000E000;
__var AIRCR_Addr = SCS_Addr + 0xD0C;
__var DHCSR_Addr = SCS_Addr + 0xDF0;
Write32(AIRCR_Addr, 0x05FA0001);
</block>
<!-- Reset Recovery: Wait for DHCSR.S_RESET_ST bit to clear on read -->
<control while="(Read32(DHCSR_Addr) & 0x02000000) == 0" timeout="500000"/>
</sequence>
ResetHardware
Execute a system-wide reset via the dedicated debugger reset line nRST.
<sequence name="ResetHardware">
<block>
__var nReset = 0x80;
__var canReadPins = 0;
canReadPins = (DAP_SWJ_Pins(0x00, nReset, 0) != 0xFFFFFFFF);
</block>
<!-- Keep reset active for 50 ms -->
<control while="1" timeout="50000"/>
<control if="canReadPins">
<!-- Assert nRESET line and wait max. 1s for recovery -->
<control while="(DAP_SWJ_Pins(nReset, nReset, 0) & nReset) == 0" timeout="1000000"/>
</control>
<control if="!canReadPins">
<block>
DAP_SWJ_Pins(nReset, nReset, 0);
</block>
<!-- Wait 100ms for recovery if nRESET not readable -->
<control while="1" timeout="100000"/>
</control>
</sequence>
ResetHardwareAssert
Assert a system-wide reset line nRST.
<sequence name="ResetHardwareAssert">
<block>
__var nReset = 0x80;
DAP_SWJ_Pins(0, nReset, 0);
</block>
</sequence>
ResetHardwareDeassert
De-Assert a system-wide reset line nRST.
<sequence name="ResetHardwareDeassert">
<block>
__var nReset = 0x80;
__var canReadPins = 0;
canReadPins = (DAP_SWJ_Pins(nReset, nReset, 0) != 0xFFFFFFFF);
</block>
<!-- Wait max. 1s for nRESET to recover from reset if readable-->
<control if="canReadPins" while="(DAP_SWJ_Pins(nReset, nReset, 0) & nReset) == 0" timeout="1000000"/>
<!-- Wait 100ms for recovery if nRESET not readable -->
<control if="!canReadPins" while="1" timeout="100000"/>
</sequence>
ResetCatchSet
Configure the target to stop code execution after a reset.
<sequence name="ResetCatchSet">
<block>
__var SCS_Addr = 0xE000E000;
__var DHCSR_Addr = SCS_Addr + 0xDF0;
__var DEMCR_Addr = SCS_Addr + 0xDFC;
__var value = 0;
value = Read32(DEMCR_Addr);
Write32(DEMCR_Addr, (value | 0x00000001));
Read32(DHCSR_Addr);
</block>
</sequence>
ResetCatchClear
Free hardware resources allocated by ResetCatchSet.
<sequence name="ResetCatchClear">
<block>
__var SCS_Addr = 0xE000E000;
__var DEMCR_Addr = SCS_Addr + 0xDFC;
__var value = 0;
value = Read32(DEMCR_Addr);
Write32(DEMCR_Addr, (value & (~0x00000001)));
</block>
</sequence>
Examples of non-standard debug access sequences
TraceStart
<sequence name="TraceStart">
<block>
__var value = 0;
value = Read8(0x40004D2A);
Write8(0x40004D2A, (value | 0x20));
value = Read8(0x40004D2C);
Write8(0x40004D2C, (value & (~0x20)));
</block>
</sequence>
DebugDeviceUnlock
<sequence name="DebugDeviceUnlock">
<block>
__var DAuthUserInput = 0;
__var DAUTHSTATUS_Val = 0;
__var DHCSR_Val = 0;
__var SecureDebugEna = 0;
__var SecureDebugAvail = 0;
__var DAuthVal = 0;
__var Status = 0;
DAUTHSTATUS_Val = Read32(0xE000EFB8);
DHCSR_Val = Read32(0xE000EDF0);
DAP_Delay(100000);
SecureDebugAvail = (DAUTHSTATUS_Val & 0x00000020) ? 1 : 0;
Status = ReadAP(0x0);
</block>
<control if="SecureDebugAvail" info="Configure Debug Authentication if Security Extensions available">
<block>
SecureDebugEna = ((DHCSR_Val & 0x00100000) || ((DAUTHSTATUS_Val & 0x00000030) == 0x00000030)) ? 1 : 0;
</block>
<control if="DAuthFixed">
<block>
DAuthVal = DAuthConfig;
</block>
</control>
<control if="DAuthFixed == 0">
<block>
DAuthUserInput = Query(1, "Enable Secure Debug?", 3);
</block>
<control if="DAuthUserInput == 3">
<block>
DAuthVal = 0xF;
</block>
</control>
<control if="DAuthUserInput != 3">
<block>
DAuthVal = 0x3;
</block>
</control>
</control>
<control if="SecureDebugEna">
<block>
Write32(0x50007000, DAuthVal);
</block>
</control>
<control if="SecureDebugEna == 0">
<control if="DAuthVal & 0x4">
<block>
Query(0, "Cannot configure Debug Authentication, secure debug disabled! Please reboot FPGA!", 1);
</block>
</control>
</control>
</control>
</sequence>
User-defined hardware reset sequence
<sequence name="HWReset">
<block>
__var protType = __protocol & 0x0000FFFF;
</block>
<!-- JTAG variant-->
<control if="protType == 1">
<block atomic="true">
DAP_SWJ_Pins(0x00, 0x80, 0);
DAP_Delay(50000);
DAP_SWJ_Pins(0x80, 0x80, 0);
DAP_Delay(200);
DAP_JTAG_Sequence(6, 1, 0x7F);
DAP_JTAG_Sequence(1, 0, 0x01);
WriteDP(0x4, 0x50000F00);
WriteDP(0x8, 0x00000000);
WriteAP(0x00, 0x23000052);
WriteAP(0x4, 0xE000EDF0);
WriteAP(0xC, 0xA05F0001);
</block>
</control>
...
</sequence>
Calling sequences in a control block
...
<control if="siliconRevision >= 3" >
<block>
Sequence("SecurityUnlock");
Sequence("Set_JTAG_CTL");
Sequence("WaitIdleState");
Sequence("SetIDCODES");
</block>
</control>
...
Writing debug access sequences
To override a default sequence or to create a custom (default) sequence, you need to write sequence elements. The following sections show how to use the built-in debug access syntax, expressions, and debug access functions to create custom sequences.
Debug access syntax rules
Debug accesses are described in block elements of a debug access sequence (sequence element). The following syntax is used for this purpose:
- The contents of a block element is a series of statements.
- Each statement must begin in a new line and is terminated by a ; character.
- A typical statement consists of variable, followed by a = character and an expression, where the = character is an assignment of the expression result to the variable:
- Alternatively, a statement can be a sole expression without storing its result to a variable.
- Comments begin with two slashes (//) and end with a linebreak:
- Variables must be defined using the keyword __var. The definition must include an initalization of the variable:
- Variables can be defined only once within a scope. Scopes beging with entering a debug access sequence or a control element. They are extended to child control elements. Variables of a parent scope can be modified. Leaving a scope destroys all variables defined in it.
block elements do not begin a new scope. <sequence name="MySequence">
<block info="Block 1">
__var condvar = 1;
__var myvar1 = 5;
__var myvar2 = 0;
</block>
<control if="condvar">
<block>
__var myvar3 = 2;
myvar2 = myvar1 + myvar3;
</block>
</control>
<block info="Block 2">
myvar1 = myvar2 + 1;
</block>
</sequence>
- The debug access variables __dp, __ap, and __errorcontrol can be modified within a debug access sequence. An assigned value is held until leaving the sequence. Calling another sequence by the Sequence debug access function will push their values on a sequence execution stack. The values are restored when returning from such a call.
Expression rules
Expressions are used in various places to describe one of the following:
- A value as assigned in a debug access statement.
- A condition to use in the if attribute of a control element.
- A condition to use in the while attribute of a control element.
- A parameter to a debug access function as described below.
An expression may consist of the following:
- Constant numbers in decimal and hexadecimal representation (prefix 0x).
- Arithmetic operators such as +, -, *, /, and %.
- Bit-arithmetic operators such as &, |, ~, ^, >>, and <<.
- Comparison-operators such as ==, !=, <, >, <=, and >=.
- Logic operators such as !, &&, ||, and ==.
- Conditional expression operations like:
- Precedence of sub-expressions is indicated by brackets ((, )). C-like precedence applies if brackets are omitted.
- References to debug access variables for evaluating debug settings.
- Calls to debug access functions.
- Note
- All values used in expressions resolve to 64-bit unsigned integer values.
- All logic-operations and comparisons resolve to the value 1 if true, to 0 otherwise.
- XML prohibits the use of the characters &, <, and >. Use the corresponding XML entity names instead: &, <, and >.
Debug access functions
Debug access functions can be called in expressions in order to interact with the target device and the user. Parameters to functions can again be expressions.
By default, a debugger must abort the execution of a debug access sequence if a function call fails. However, this behavior can be controlled from a sequence by the __errorcontrol debug access variable.
The following table describes the existing debug access functions, their parameters and the debug access variables which are evaluated for the function call.
| Function | Description |
Sequence("name") | Execute a debug access sequence. Calling a sequence by this function causes the modifiable debug access variables __dp, __ap, and __errorcontrol to be pushed on a sequence execution stack. Returning from such a call will restore the state of these variables.
Parameters:
- name: Name of the sequence to execute. It must be enclosed by quotes.
Return Value:
Always returns 0.
Code Example:
Refer to Calling sequences in a control block
|
Read8(addr) | Read an 8-bit value from target memory. A device must support native 8-bit memory accesses for this function to succeed.
Parameters:
- addr: Memory address to read from.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
- __ap: The access port to use for this memory access.
Return Value:
The 8-bit value as read from target memory.
Code Example:
Refer to TraceStart
|
Read16(addr) | Read an 16-bit value from target memory. A device must support native 16-bit memory accesses for this function to succeed.
Parameters:
- addr: Memory address to read from.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
- __ap: The access port to use for this memory access.
Return Value:
The 16-bit value as read from target memory.
|
Read32(addr) | Read an 32-bit value from target memory. A device must support native 32-bit memory accesses for this function to succeed.
Parameters:
- addr: Memory address to read from.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
- __ap: The access port to use for this memory access.
Return Value:
The 32-bit value as read from target memory.
Code Example:
Refer to ResetSystem
|
Read64(addr) | Read an 64-bit value from target memory. A device must support native 64-bit memory accesses for this function to succeed.
Parameters:
- addr: Memory address to read from.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
- __ap: The access port to use for this memory access.
Return Value:
The 64-bit value as read from target memory.
|
ReadAP(addr) | Read a 32-bit value from an access port register.
Parameters:
- addr: AP register address to read from. Addresses larger than 0xF automatically cause an AP register bank switch.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
- __ap: The access port to use for this memory access.
Return Value:
The 32-bit value as read from the AP register.
Code Example:
Refer to DebugDeviceUnlock
|
ReadDP(addr) | Read a 32-bit value from a debug port register.
Parameters:
- addr: DP register address to read from.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
Return Value:
The 32-bit value as read from the DP register.
Code Example:
Refer to DebugPortSetup
|
Write8(addr, val) | Write an 8-bit value to target memory. A device must support native 8-bit memory accesses for this function to succeed.
Parameters:
- addr: Memory address to write to.
- val: Value to write.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
- __ap: The access port to use for this memory access.
Return Value:
Always returns 0.
Code Example:
Refer to TraceStart
|
Write16(addr, val) | Write a 16-bit value to target memory. A device must support native 16-bit memory accesses for this function to succeed.
Parameters:
- addr: Memory address to write to.
- val: Value to write.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
- __ap: The access port to use for this memory access.
Return Value:
Always returns 0.
|
Write32(addr, val) | Write a 32-bit value to target memory. A device must support native 32-bit memory accesses for this function to succeed.
Parameters:
- addr: Memory address to write to.
- val: Value to write.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
- __ap: The access port to use for this memory access.
Return Value:
Always returns 0.
Code Example:
Refer to DebugCoreStart
|
Write64(addr, val) | Write a 64-bit value to target memory. A device must support native 64-bit memory accesses for this function to succeed.
Parameters:
- addr: Memory address to write to.
- val: Value to write.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
- __ap: The access port to use for this memory access.
Return Value:
Always returns 0.
|
WriteAP(addr, val) | Write a 32-bit value to an access port register. Addresses larger than 0xF automatically cause an AP register bank switch.
Parameters:
- addr: Memory address to write to.
- val: Value to write.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
- __ap: The access port to use for this memory access.
Return Value:
Always returns 0.
Code Example:
Refer to User-defined hardware reset sequence
|
WriteDP(addr, val) | Write a 32-bit value to a debug port register.
Parameters:
- addr: Memory address to write to.
- val: Value to write.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
Return Value:
Always returns 0.
Code Example:
Refer to DebugPortStart
|
DAP_Delay(delay) | Debug probe command to wait for a specific delay.
Parameters:
- delay: Wait time in microseconds.
Return Value:
Always returns 0.
Code Example:
Refer to DebugDeviceUnlock
|
DAP_WriteABORT(value) | Debug probe command to write an abort request to the CoreSight ABORT register of the target debug port.
Parameters:
- value: 32-bit value to write into the CoreSight ABORT register.
Debug Access Variables:
- __dp: The debug port to use for this memory access.
Return Value:
Always returns 0.
|
DAP_SWJ_Pins(pinout, pinselect, pinwait) | Debug proble command to monitor and control the I/O Pins including the nRESET device reset line.
I/O Pin Mapping for pinout, pinselect, and pinwait:
- Bit 0: SWCLK/TCK
- Bit 1: SWDIO/TMS
- Bit 2: TDI
- Bit 3: TDO
- Bit 5: nTRST
- Bit 7: nRESET
The pinwait time is useful in systems where the nRESET pin is implemented as open-drain output. After nRESET is de-asserted by the debugger, external circuit may still hold the target Device under reset for a time. Using the pinwait time, the debugger may monitor selected I/O Pins and wait until they the expected value appears or a timeout expires.
Parameters:
- pinout: Value for selected output pins.
- pinselect: Selects which output pins will be modified.
- pinwait: Wait timeout for the selected output to stabilize. A debugger must extend this timeout to the closest possible time granularity.
- 0 = no wait
- 1 .. 3000000 = time in microseconds (max 3s)
Return Value:
The state of the I/O Pins at the end of this operation. If a debugger is not capable of monitoring the I/O Pins, it must return a value of 0xFFFFFFFF.
|
DAP_SWJ_Clock(val) | Debug probe command to set the clock frequency for JTAG and SWD communication mode.
Parameters:
- val: Maximum SWD/JTAG Clock (SWCLK/TCK) value in Hz.
Return Value:
Always returns 0.
Code Example:
Refer to ResetHardware
|
DAP_SWJ_Sequence(cnt, val) | Debug probe command to generate required SWJ sequences, e.g. for SWD/JTAG Reset, SWD<->JTAG switch and Dormant operation.
Parameters:
- cnt: Number of bits in sequence: 1..64. Larger sequences need to be implemented by multiple subsequent DAP_SWJ_Sequence calls. Such a sequence of DAP_SWJ_Sequence commands must be encapsulated in an atomic block to ensure correct execution.
- val: Sequence generated on SWDIO/TMS (with clock @SWCLK/TCK), LSB transmitted first.
Return Value:
Always returns 0.
Code Example:
Refer to DebugPortSetup
|
DAP_JTAG_Sequence(cnt, tms, tdi) | Debug probe command to generate a JTAG sequence with fixed TMS value and capture TDO.
Parameters:
- cnt: Length of the JTAG sequence (number of TCK cycles and TDI bits): 1..64
- tms: Fixed TMS value: 0..1
- tdi: Data generated on TDI with one bit per TCK cycle, LSB transmitted first.
Return Value:
Data captured from TDO with one bit per TCK cycle, LSB captured first and padded with 0s.
|
Query(type, "message", default) | Query user input. The sequence execution stalls depending on the used type. If the debugger runs in a batch mode, this function returns the value default.
Parameters:
- type: Query type. Can be one of:
- 0 : Query_Ok, displays an informative message which has to be confirmed by the user. This type allows the result OK.
- 1 : Query_YesNo, displays a query with the allowed results Yes and No.
- 2 : Query_YesNoCancel, displays a query with the allowed results Yes, No, and Cancel.
- 3 : Query_OkCancel, displays a query with the allowed results OK and Cancel.
- message: A constant string with the query message to display. It must not be an expression and it must be enclosed by quotes.
- default: The default value to return if the debugger runs in batch mode. See Return Values for a list of allowed values.
Return Value:
The result of the query. The user input maps to the following numbers:
- Error : 0
- OK : 1
- Cancel : 2
- Yes : 3
- No : 4
Code Example:
Refer to DebugPortSetup
|
QueryValue("message", default) | Query input value from user. The sequence execution stalls until the user has entered a value or canceled the query. This function returns the default value if the user canceled the query or if the debugger runs in a batch mode.
Parameters:
- message: A constant string with the query message to display. It must not be an expression and it must be enclosed by quotes.
- default: The default value to return if the user cancels the query or if the debugger runs in batch mode.
Return Value:
The queried value.
|
Message(type, "format", ...) | Outputs a message to a log window.
Parameters:
- type: Message type. Can be one of:
- 0 : Info, outputs an informative message.
- 1 : Warning, outputs a warning.
- 2 : Error, outputs an error. Sequence execution aborts.
- format: A constant string with the message format. It must not be an expression and it must be enclosed by quotes. The string has the following format:
%[flags][width][.precision]specifier
- Specifiers:
- %u: 32-bit unsigned decimal integer.
- %llu: 64-bit unsigned decimal integer.
- %x: 32-bit unsigned hexadecimal integer, lower case letters.
- %llx: 64-bit unsigned hexadecimal integer, lower case letters.
- %X: 32-bit unsigned hexadecimal integer, upper case letters.
- %llX: 64-bit unsigned hexadecimal integer, upper case letters.
- %o: 32-bit unsigned octal integer.
- %llo: 64-bit unsigned octal integer.
- %b: 32-bit unsigned binary integer.
- %llb: 64-bit unsigned binary integer.
- %f: Single-precision (32-bit) floating point value.
- %Lf: Double-precision (64-bit) floating point value.
- %s: Constant character string. Must not be an expression.
- %%: Print % character.
- Flags:
- 0: Pad the displayed value with zeros instead of spaces if padding is required by the width option.
- Width: Minimum number of displayed characters. If width is less than the number of characters of the value, then the value is padded with spaces to the left.
- .Precision:
- Integer: Minimum number of displayed digits. Padded with zeros to the left if the value has less digits than specified with .precision.
- Floating Point: Number of displayed digits after decimal point. Defaults to 6 if not specified.
- Constant String: Maximum number of displayed characters.
- ... : Additional function parameters to replace format string specifiers. Each parameter can be a constant string, or an expression that resolves to an unsigned 64-bit integer. A parameter type must match the corresponding specifier type.
Return Value:
Always returns 0.
- Note
- For 32-bit specifiers the Message command must print the lower 32 Bit of a 64 Bit debug access variable.
|
LoadDebugInfo("file") | Loads DWARF debug information from an application executable.
Parameters:
- file: A constant string with the path to the executable. The path must be relative to the root folder of the pack and use the format path/name.extension. It must not be an expression and it must be enclosed by quotes.
Return Value:
Returns 0 after successful debug information load.
Returns 1 if debug information load failed.
|
- Note
- Target memory access functions must perform a debug access of the size indicated by their name. The target system must support debug accesses of this size.
- Results of all functions are casted to 64-bit unsigned integer values.
- Some target access functions determine the used debug and access port by the current values of the __dp and __ap debug access variables. If a target access requires a different debug or access port than the default ones, it must change these values. This change is held until finishing the sequence the change has occurred in.


--- layout: default ---
I am a computer Engineer, father of an awesome son, husband of strange and great wife. After spending years doing engineering at some companies I had decided to stop and tried to do my own thing, that's why I was also a founder of start-up technology company where we developed a new platform for video delivery using P2P technology called PCDN.IO, but it fail. So currently I am Head of engineering for an online payment product. My job is managing day to day task of our funny teams, a bit of coding, doing some code review and debate all day long.
This blog is where my interesting (and sometimes hated) things will be noted.
You can find me on GitHub or Twitter or Linkedin .


The R package ggplot2 provides a powerful and flexible approach to data visualization, and it is suitable both for rapid exploration of different visualization approaches and for producing carefully crafted publication-quality figures. However, getting ggplot2 to make figures that look exactly the way you want them to can sometimes be challenging, and beginners and experts alike can get confused by themes, scales, coords, guides, or facets. This repository houses a set of step-by-step examples demonstrating how to get the most out of ggplot2, including how to choose and customize scales, how to theme plots, and when and how to use extension packages.
The examples shown are based on the book “Fundamentals of Data Visualization.” However, there are minor differences between the figures here and the ones in the book. Most importantly, the book uses the Myriad Pro font family, which is not freely available. I have also cleaned up the ggplot2 code where appropriate, and I have made adjustments to font and figure sizes so the figures look appropriate in the default R Markdown html style.
The examples presented here require a working installation of the statistical programming language R. You can download the latest version from here. Further, when working with R, it is highly recommended to use the RStudio IDE, and you can download the latest version from here.
In addition to R and RStudio, you need a number of R packages. You can install all required packages by executing the following two commands in an R console:
# install the latest version of package "remotes" from CRAN
install.packages("remotes")
# install package "practicalgg" from github; this pulls in
# all required dependencies and makes available the example data
remotes::install_github("wilkelab/practicalgg")
The install_github()
line will likely prompt you to update packages you have already installed. Unless you know what you’re doing, it is recommended to choose the option “CRAN packages only”. If you’re given the option to install source packages, decline this option unless you routinely install R packages from source.
You may have to repeat the install_github()
command if you want to work through an example I have added after you last installed the practicalgg package.


Honesty Statement
I declare that my assignment is wholly my own work in accordance with Seneca Academic Policy. No part of this assignment has been copied manually or electronically from any other source (including web sites) except for the information supplied by the WEB222 instructors and / or made available in this assignment for my use.
I also declare that no part of this assignment has been distributed to other students.
Credits
- https://solarsystem.nasa.gov/missions/apollo-11/in-depth/
- https://www.nasa.gov/mission_pages/apollo/missions/apollo11.html
Derek Shigetomi
028-970-135
Tuesday November 3, 2020


{% extends "master.html" %} {% block title %} {{session['firstname']}}'s private wall {% endblock %} {% block content %}
{{ msg['firstname'] }} {{ msg['lastname'] }}:
{% if age_days > 0 %}{{age_days}} day(s){% elif age_hours > 0 %}{{age_hours}} hour(s){% elif age_minutes > 0 %}{{age_minutes}} minute(s){% else %}{{age_seconds}} second(s){% endif %} ago
You have no messages in your feed.
There are no other users now. Try in a few hours.


Alana Rios
Artist Statement
The romanticized view of the landscape of the American West did not happen by accident. It was crafted by a tradition of mythologizing the sublime wilderness that has forged a collective American fantasy of possibility and conquest. These visual records trace a history of objectification and possession of the land that often excludes marginalized voices and sanctifies patriarchal systems. And those iconic images are everywhere—from the souvenirs sold in National Parks to calendars hanging on our walls— they stake a claim in our psyche. They drive a desire for a proof of experience that dates back to tourists borrowing hammers to chip away pieces of Plymouth Rock before it was memorialized behind ropes in 1880. The answer to this craving was met by mass-produced photographic curios that cross boundaries between personal memento and fine-art object. My photographic practice calls attention to the relationship between the early use of landscape photographs as propaganda and the social media influencers who seek out growing singular phenomena like Super Blooms that bring destructive volumes of visitors to small towns in California.
Solo Thesis Exhibition Images
Alana Rios
Superbloom, 2020
Hand-cut archival inkjet prints
54 x 180 x 18 in
Alana Rios
Cut Flowers #1, #2, #3, #4, 2020
Hand-cut archival inkjet prints, cellophane bags, pegboard, drywall, acrylic box
(4) 7.5 x 7.5 x 11.75 in
Alana Rios
Cut Flowers #2, 2020
Hand-cut archival inkjet prints, cellophane bags, pegboard, drywall, acrylic box
7.5 x 7.5 x 11.75 in
Alana Rios
Postcard Stand, 2020
Rotating postcard stand, 4 editions of double-sided, 5x7 postcards of images of Cut Flowers
20 x 66 x 17.5 in
Alana Rios
Superbloom (detail), 2020
Hand-cut archival inkjet prints
54 x 180 x 18 in
Alana Rios, Installation View
Superbloom (left), Calendar Project (center), Vista Point Project (beyond curtain on right), Fake Rock Bean Bag Chairs (Left:Lichen covered boulder from Pinnacles NP, Right with sitter: Monzogranite boulder from Joshua Tree NP)
Thesis Exhibition: Postpicturesque, Fall 2020
Jo Farb Hernandez Gallery
Alana Rios, Installation View
Vista Point Project: Overview: Lake Herman Vista Point and Fake Rock Bean Bag Chair, 2020
E-6 Slide show, 80 slides
Jo Farb Hernandez Gallery
Alana Rios
The Calendar Project, 2020
Archival Inkjet Prints
(10) 16 x 20 in
Alana Rios
March in the Kitchen, 2020
Archival Inkjet Print
16 x 20 in


val setups: Map<String, ConfigurationSetup>
may contain configuration setups to be used according to the balin.setup.name
system property.
setups
- may contain configuration setups to be used according to the balin.setup.name
system property.


| DOSE: |
2 bowls |
smoked |
Leonotis nepetaefolia |
(dried) |
I recently tried Leonotis nepataefolia (wild dagga) which I bought off the internet in Australia.
I've been smoking it at uni and at home, by myself or with friends. I find it approximately half as strong as ground grown marijuana. I have been having rollies but I bought a pipe to use which is less time-consuming. It's reasonably harsh on the throat, but certainly still smokable. I did loose my voice a bit, from smoking it. It kind of strips the lining off my throat and I always have water handy. A bong would probably be easier but I haven't tried it like that yet. A friend of mine coughs a lot when he smokes it.
I get pretty relaxed when I smoke it. I recently had a break up and have found it excellent in soothing my nerves, helps me cope. I feel giddy and a bit high immeadiately while smoking it and it lasts a couple of hours. I smoked in the morning and went to uni in the afternoon and I was giggling uncontrollably.
It smells a fair bit like pot. I couldn't really smoke it publicly because people sniff and stare.  It is also dirt cheap, I got 10 grams for $5 Au dollars, and pot is $20 Au dollars a gram here.
I've been smoking 2 cones or 2 rollies and that is nice and enough for me. I think exercise brings it on as well because going for a walk seems to reinvigorate it. I don't hallucinate or anything on it, but I giggle a fair bit and come across as pretty stoned. It's hard to concentrate properly at uni if I smoke before class. It's a depressant.
I have been drinking after smoking, which is much the same as drinking after smoking pot. I feel kinda nauseous but drunk/high at the same time is still good.
A relaxing, easy-going high.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


DEATH NOTICES
Deaths in Tipperary - Thursday, November 21, 2019
by ReporterThe late David Hennessy
The death has occurred of David Hennessy late of Rosbeg, Annacarty, Tipperary. Peacefully at the Woodlands Nursing Home Dundrum, David, predeceased by his sister Bridie Kearney; sadly missed by his loving wife Mary, sons Shane and David, daughters Marian, Nora, Emma and Roseanne, brothers Pat, Noel and Jim, sister Sr. Hilary (Loreto Convent, Kilkenny), grandsons Shane and Thomas, daughter-in-law Sharon, son-in-law Adam, brothers-in-law, sisters-in-law, nieces, nephews, relatives and friends. Reposing at White's Funeral Home, Cappawhite Thursday evening from 5.30 o’c with removal at 7.30 o’c to St. Brigid’s Church, Annacarty. Requiem Mass Friday at 11.30 o’c and burial afterwards in the adjoining cemetery. Family flowers only please.
The late William Stapleton
The death has occurred of William (Bill) Stapleton late of Castlebridge, Wexford and formerly of Upperchurch, Thurles. Beloved husband of the late Sadie, father of Sharon, Kathleen (Doyle), Tom and Will. Sadly missed by his daughters, sons, grandchildren David, Rory, Mal, Liam, Kira and Jake, daughters-in-law Karen and Tracey, brothers-in-law, sisters-in-law, nieces, nephews, extended family, relatives and friends. Reposing at his residence in Castlebridge (Y35 H5NO) on Friday from 2 o’clock until 7 o’clock. Funeral to arrive at St Ibar’s Church, Castlebridge, on Saturday morning for 12 o’clock funeral Mass. Burial afterwards in St Ibar’s Cemetery, Castlebridge. House private on Saturday morning, please.
To read more Tipperary deaths click here.


|
Apache Mesos
|
#include <jvm.hpp>
Public Member Functions | |
| Object () | |
| Object (jobject _object) | |
| Object (const Object &that) | |
| ~Object () | |
| Object & | operator= (const Object &that) |
| operator jobject () const | |
Protected Attributes | |
| jobject | object |
Friends | |
| class | Jvm |
|
inline |
|
inlineexplicit |
|
inline |
|
inline |
|
inline |
|
friend |
|
protected |


We are always looking for people wanting to improve Pinax itself. This document outlines the necessary bits to begin contributing to Pinax.
The Pinax source code is hosted on GitHub. This means you must have git installed locally. We recommend you create an account on GitHub allowing you to watch and fork the Pinax source code.
You will want to be sure that your git configuration is set for making commits to a repository. Check the following:
git config user.name
git config user.email
If the output of any of the two commands above are not entirely correct you can easily correct them:
git config --global user.name "First Last"
git config --global user.email<EMAIL_ADDRESS>It is critical you set this information up correctly. It helps us identify who you are when you start giving us those awesome patches.
Once you have forked the Pinax source code you can now make a clone of it to your local disk. To do this:
git clone git@github.com:<username>/pinax.git
This will create new directory named pinax which now contains the Pinax source tree ready for you to get started.
Now that you’ve cloned the source code you are ready to get your environment setup to work on Pinax. You should be a running a recent release of virtualenv to setup Pinax. We’ll assume that your current working directory is from within the clone (the pinax directory):
virtualenv ../pinax-dev
source ../pinax-dev/bin/activate
pip install -e .
Finally, you need to install the dependencies for the development version:
pip install --no-deps --requirement requirements/external_apps.txt
In order to run the test suite, you’ll also need PIL installed:
pip install PIL
The development version of Pinax is always being updated. You’ll want to make sure you keep up. Your clone of Pinax can easily stay in-sync using git. You will need to setup a git remote to pull in changes from upstream Pinax:
git remote add upstream git://github.com/pinax/pinax.git
Now you will be able to merge in changes that are made upstream:
git fetch upstream
git merge upstream/master
The above will pull in all changes upstream and merge them with your current branch. This can be simplified:
git pull upstream master
To keep your virtual environment in-sync you will need to use pip (make sure you are inside your virtual environment):
pip install --no-deps --requirement requirements/external_apps.txt
Before you begin committing code you’ll want to make sure the Pinax test suite passes. Running the test suite is simple. At the root of your Pinax clone run:
python tests/runner.py
You must be inside the development virtual environment for this to work. If you only want to run a subset of tests (all tests are inside apps) you can specify them explicitly:
python tests/runner.py tasks projects
This useful while developing. However, be sure to run the full suite before committing any code to ensure it doesn’t break other parts of Pinax.
Note
The test runner is new as of November 29, 2009. There are currently many failing tests. We are working on it. This message will be removed when the test suite is generally usable for contributors.
The great thing about using a distributed versioning control system like git is that everyone becomes a committer. When other people write good patches it makes it very easy to include their fixes/features and give them proper credit for the work.
We recommend that you do all your work on Pinax in a separate branch. When you are ready to work on a bug or a new feature create yourself a new branch. The reason why this is important is you can commit as often you like. When you are ready you can merge in the change. Let’s take a look at a common workflow:
git checkout -b task-566
... fix and git commit often ...
git push origin task-566
The reason we have created two new branches is to stay off of master. Keeping master clean of only upstream changes makes yours and ours lives easier. You can then send us a pull request for the fix/feature. Then we can easily review it and merge it when ready.
Writing a good commit message makes it simple for us to identify what your commit does from a high-level. We are not too picky, but there are some basic guidelines we’d like to ask you to follow.
Fixed #1 — added some feature
We ask that you indicate which task you have fixed (if the commit fixes it) or if you are working something complex you may want or be asked to only commits parts:
Refs #1 — added part one of feature X
As said earlier we are not too picky (some core developers may change commit messages before pulling in your changes), but as you get the basics down you make the process of getting your patch into core faster.
Another critical part is that you keep the first line as short and sweet as possible. This line is important because when git shows commits and it has limited space or a different formatting option is used the first line becomes all someone might see. If you need to explain why you made this change or explain something in detail use this format:
Fixed #13 — added time travel
You need to be driving 88 miles per hour to generate 1.21 gigawatts of
power to properly use this feature.
When writing code to be included in Pinax keep our style in mind:
- Follow PEP8 — there are some cases where we do not follow PEP8. It is an excellent starting point.
- Follow Django’s coding style — we’re pretty much in agreement on Django style outlined there.
We would like to enforce a few more strict guides not outlined by PEP8 or Django’s coding style:
- PEP8 tries to keep line length at 80 characters. We follow it when we can, but not when it makes a line harder to read. It is okay to go a little bit over 80 characters if not breaking the line improves readability.
- Use double quotes not single quotes. Single quotes are allowed in cases where a double quote is needed in the string. This makes the code read cleaner in those cases.
- Blank lines are indented to the appropriate level for the block they are in.
- Docstrings always use three double quotes on a line of their own, so, for example, a single line docstring should take up three lines not one.
- Imports are grouped specifically and ordered alphabetically. This is shown in the example below.
- Always use reverse and never @models.permalink.
- Tuples should be reserved for positional data structures and not used where a list is more appropriate.
Here is an example of these rules applied:
# first set of imports are stdlib imports
# non-from imports go first then from style import in their own group
import csv
from datetime import datetime
# second set of imports are Django imports with contrib in their own
# group.
from django.core.urlresolvers import reverse
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
# third set of imports are Pinax imports
from pinax.utils.examplelib import function_name
# forth set of imports are external apps (if applicable)
from tagging.fields import TagField
# fifth set of imports are local apps
from pinax.apps.tasks.fields import MarkupField
class Task(models.Model):
"""
A model for storing a task.
"""
creator = models.ForeignKey(User)
created = models.DateTimeField(default=datetime.now)
modified = models.DateTimeField(default=datetime.now)
objects = models.Manager()
class Meta:
verbose_name = _("task")
verbose_name_plural = _("tasks")
def __unicode__(self):
return self.summary
def save(self, **kwargs):
self.modified = datetime.now()
super(Task, self).save(**kwargs)
def get_absolute_url(self):
return reverse("task_detail", kwargs={"task_id": self.pk})
# custom methods
class TaskComment(models.Model):
# ... you get the point ...
pass


Man United and Barcelona told to pay £51.5m to sign 17 year old wonderkid
by Tom McNeilWe’ve seen a trend of transfer fees being blown out of proportion in recent years, so the top clubs have started to stockpile younger players in the hope that a few of them make the grade.
When you consider that a world class player can easily cost £100m just now, if you can sign 40 youth players for £1m each and a few make it then it’s still cheaper. It might be morally repugnant and also ruins the game, but it makes business sense.
Only it looks like some clubs might be fighting back by demanding huge fees for their younger players. Eduardo Camavinga has gained a lot of attention for his performances for Rennes this season, and the bigger clubs have started to circle.
READ MORE: Video: Brandon Williams scores a stunning half volley for Man United vs Sheffield United
The Sun reported that Man United and Barcelona were showing an interest in the midfielder, but he won’t be going for cheap. They suggest that the French club would be looking for a fee of around £51.5m to let him leave.
When you consider that would be a bigger fee than Real Madrid paid for Zinedine Zidane when he was in his prime at Juventus, it shows where we are with transfer fees just now.
Camavinga has played in most of Rennes’ games this season so it’s clear that he’s capable of playing first team football even at his young age, but it would be a big step up to play for United or Barca.
For that fee they would surely want him to be capable of playing in their first team, which might be too much to ask at this point.


CORONA VIRUS TRACKER
WORLD WIDE DATA
Total Cases
Total Deaths
Total Recovered
Cases on the World Map
Deaths per 1m population (Mortality)
US Total Cases:
Top 5 Countries - Deaths with Recovered Cases
Top 5 Countries - Deaths with Critical Cases


Top 3 Propaganda techniques
1. Card Stacking
An advertizer or an agent would omit any negative information about their product and services and only emphasizes positive information.

(It is still deep fried and a lot of chemicals are added though...)
2. Name Calling
An entity speaks negatively about an idea or another entity. This can be used in political, social or corporate advertizement settings. This technique is somewhat effective in terms of giving a negative stereotypical image to the target entity.
Image captured from Wikipedia, "List of nicknames used by Donald Trump"The name-calling techniques used by the former president of the United States of America. (Some politicians had numerous nicknames apparently...)
3. Bandwagon
The person or entity deliverying the message would emphasize their product or information is popular by a large number of people. This uses human psychology of herd mentality and not missing out on what's popular in the society. This technique is often used in the social media context, such as 'like' or 'follow' button.
Photo by Karsten Winegeart on UnsplashPeople tend to care about how many likes they received, and how many followers a person has on
to determine the value of the person or entity. This can spur people's erratic and attention-seeking behaviors. Advertizers might use this technique to target people who are sensitive to what other people think about them.Part of the information above comes from Canz Marketing. Click here to see more types of propaganda.


|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface Joinable
Joinable
interface provides the methods for getting and
setting a match column, which is the basis for forming the SQL JOIN
formed by adding RowSet
objects to a JoinRowSet
object.
Any standard RowSet
implementation may implement
the Joinable
interface in order to be
added to a JoinRowSet
object. Implementing this interface gives
a RowSet
object the ability to use Joinable
methods,
which set, retrieve, and get information about match columns. An
application may add a
RowSet
object that has not implemented the Joinable
interface to a JoinRowSet
object, but to do so it must use one
of the JoinRowSet.addRowSet
methods that takes both a
RowSet
object and a match column or an array of RowSet
objects and an array of match columns.
To get access to the methods in the Joinable
interface, a
RowSet
object implements at least one of the
five standard RowSet
interfaces and also implements the
Joinable
interface. In addition, most RowSet
objects extend the BaseRowSet
class. For example:
class MyRowSetImpl extends BaseRowSet implements CachedRowSet, Joinable { : : }
The methods in the Joinable
interface allow a RowSet
object
to set a match column, retrieve a match column, or unset a match column, which is
the column upon which an SQL JOIN
can be based.
An instance of a class that implements these methods can be added to a
JoinRowSet
object to allow an SQL JOIN
relationship to
be established.
CachedRowSet crs = new MyRowSetImpl(); crs.populate((ResultSet)rs); (Joinable)crs.setMatchColumnIndex(1); JoinRowSet jrs = new JoinRowSetImpl(); jrs.addRowSet(crs);In the previous example, crs is a
CachedRowSet
object that
has emplemented the Joinable
interface. In the following example,
crs2 has not, so it must supply the match column as an argument to the
addRowSet
method. This example assumes that column 1 is the match
column.
CachedRowSet crs2 = new MyRowSetImpl(); crs2.populate((ResultSet)rs); JoinRowSet jrs2 = new JoinRowSetImpl(); jrs2.addRowSet(crs2, 1);
The JoinRowSet
interface makes it possible to get data from one or
more RowSet
objects consolidated into one table without having to incur
the expense of creating a connection to a database. It is therefore ideally suited
for use by disconnected RowSet
objects. Nevertheless, any
RowSet
object may implement this interface
regardless of whether it is connected or disconnected. Note that a
JdbcRowSet
object, being always connected to its data source, can
become part of an SQL JOIN
directly without having to become part
of a JoinRowSet
object.
setMatchColumn
methods indicates
how many match columns are being set (the length of the array) in addition to
which columns will be used for the match. For example:
int[] i = {1, 2, 4, 7}; // indicates four match columns, with column // indexes 1, 2, 4, 7 participating in the JOIN. Joinable.setMatchColumn(i);Subsequent match columns may be added as follows to a different
Joinable
object (a RowSet
object that has implemented the Joinable
interface).
int[] w = {3, 2, 5, 3}; Joinable2.setMatchColumn(w);When an application adds two or more
RowSet
objects to a
JoinRowSet
object, the order of the indexes in the array is
particularly important. Each index of
the array maps directly to the corresponding index of the previously added
RowSet
object. If overlap or underlap occurs, the match column
data is maintained in the event an additional Joinable
RowSet is
added and needs to relate to the match column data. Therefore, applications
can set multiple match columns in any order, but
this order has a direct effect on the outcome of the SQL
JOIN.
This assertion applies in exactly the same manner when column names are used rather than column indexes to indicate match columns.
JoinRowSet
| Method Summary | |
|---|---|
int[] |
getMatchColumnIndexes()
Retrieves the indexes of the match columns that were set for this RowSet object with the method
setMatchColumn(int[] columnIdxes) . |
String[] |
getMatchColumnNames()
Retrieves the names of the match columns that were set for this RowSet object with the method
setMatchColumn(String [] columnNames) . |
void |
setMatchColumn(int columnIdx)
Sets the designated column as the match column for this RowSet
object. |
void |
setMatchColumn(int[] columnIdxes)
Sets the designated columns as the match column for this RowSet
object. |
void |
setMatchColumn(String columnName)
Sets the designated column as the match column for this RowSet
object. |
void |
setMatchColumn(String[] columnNames)
Sets the designated columns as the match column for this RowSet
object. |
void |
unsetMatchColumn(int columnIdx)
Unsets the designated column as the match column for this RowSet
object. |
void |
unsetMatchColumn(int[] columnIdxes)
Unsets the designated columns as the match column for this RowSet
object. |
void |
unsetMatchColumn(String columnName)
Unsets the designated column as the match column for this RowSet
object. |
void |
unsetMatchColumn(String[] columnName)
Unsets the designated columns as the match columns for this RowSet
object. |
| Method Detail |
|---|
void setMatchColumn(int columnIdx) throws SQLException
RowSet
object. A JoinRowSet
object can now add this RowSet
object based on the match column.
Sub-interfaces such as the CachedRowSet
TM
interface define the method CachedRowSet.setKeyColumns
, which allows
primary key semantics to be enforced on specific columns.
Implementations of the setMatchColumn(int columnIdx)
method
should ensure that the constraints on the key columns are maintained when
a CachedRowSet
object sets a primary key column as a match column.
columnIdx
- an int
identifying the index of the column to be
set as the match column
SQLException
- if an invalid column index is setsetMatchColumn(int[])
,
unsetMatchColumn(int)
void setMatchColumn(int[] columnIdxes) throws SQLException
RowSet
object. A JoinRowSet
object can now add this RowSet
object based on the match column.
columnIdxes
- an array of int
identifying the indexes of the
columns to be set as the match columns
SQLException
- if an invalid column index is setsetMatchColumn(int[])
,
unsetMatchColumn(int[])
void setMatchColumn(String columnName) throws SQLException
RowSet
object. A JoinRowSet
object can now add this RowSet
object based on the match column.
Subinterfaces such as the CachedRowSet
interface define
the method CachedRowSet.setKeyColumns
, which allows
primary key semantics to be enforced on specific columns.
Implementations of the setMatchColumn(String columnIdx)
method
should ensure that the constraints on the key columns are maintained when
a CachedRowSet
object sets a primary key column as a match column.
columnName
- a String
object giving the name of the column
to be set as the match column
SQLException
- if an invalid column name is set, the column name
is a null, or the column name is an empty stringunsetMatchColumn(int)
,
setMatchColumn(int[])
void setMatchColumn(String[] columnNames) throws SQLException
RowSet
object. A JoinRowSet
object can now add this RowSet
object based on the match column.
columnNames
- an array of String
objects giving the names
of the column to be set as the match columns
SQLException
- if an invalid column name is set, the column name
is a null, or the column name is an empty stringunsetMatchColumn(int)
,
setMatchColumn(int[])
int[] getMatchColumnIndexes() throws SQLException
RowSet
object with the method
setMatchColumn(int[] columnIdxes)
.
int
array identifying the indexes of the columns
that were set as the match columns for this RowSet
object
SQLException
- if no match column has been setsetMatchColumn(int)
,
unsetMatchColumn(int)
String[] getMatchColumnNames() throws SQLException
RowSet
object with the method
setMatchColumn(String [] columnNames)
.
String
objects giving the names of the columns
set as the match columns for this RowSet
object
SQLException
- if no match column has been setsetMatchColumn(int)
,
unsetMatchColumn(int)
void unsetMatchColumn(int columnIdx) throws SQLException
RowSet
object.
RowSet
objects that implement the Joinable
interface
must ensure that a key-like constraint continues to be enforced until the
method CachedRowSet.unsetKeyColumns
has been called on the
designated column.
columnIdx
- an int
that identifies the index of the column
that is to be unset as a match column
SQLException
- if an invalid column index is designated or if
the designated column was not previously set as a match
columnsetMatchColumn(int)
void unsetMatchColumn(int[] columnIdxes) throws SQLException
RowSet
object.
columnIdxes
- an arrary of int
that identifies the indexes
of the columns that are to be unset as match columns
SQLException
- if an invalid column index is designated or if
the designated column was not previously set as a match
columnsetMatchColumn(int)
void unsetMatchColumn(String columnName) throws SQLException
RowSet
object.
RowSet
objects that implement the Joinable
interface
must ensure that a key-like constraint continues to be enforced until the
method CachedRowSet.unsetKeyColumns
has been called on the
designated column.
columnName
- a String
object giving the name of the column
that is to be unset as a match column
SQLException
- if an invalid column name is designated or
the designated column was not previously set as a match
columnsetMatchColumn(int)
void unsetMatchColumn(String[] columnName) throws SQLException
RowSet
object.
columnName
- an array of String
objects giving the names of
the columns that are to be unset as the match columns
SQLException
- if an invalid column name is designated or the
designated column was not previously set as a match columnsetMatchColumn(int)
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Copyright © 2004, 2010 Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.


Massage promotes the release of endorphins, the body’s natural pain relief.
Book online, email or call to reserve a massage therapy session for your dog.
Make an appoinmentCall now to enquire about how canine massage therapy can be benficial for your dog's wellbeing.
Canine massage can aid dogs mobility, reduce pain levels and increase activity levels, leading to faster recovery times.
Find out moreCanine massage can aid dogs mobility, reduce pain levels and increase activity levels, leading to faster recovery times.
Massage promotes the release of endorphins, the body’s natural pain relief.
Enhance working and sporting dogs performance, and reduce the risk of injury.
Canine massage can reduce stress, promote relaxation and enhance wellbeing.
Improve recovery time after injury.
Excellent for senior and arthritic dogs to help increase mobility, flexibility and pain relief.
Enhance the body’s circulation and lymphatic movement through canine massage.


Web Dev. Project V1
home
about
placeholder
Website Information
Paragraph detailing website
Sample Text
This is sample text.


Warning!
The City of Garden Grove does not guarantee the accuracy of this map. Please check the signs posted in your area to confirm the exact dates and times of street sweeping to avoid citation.


Apoptosis mediated by HIV protease is preceded by cleavage of Bcl-2.
Abstract
Expression of the human immunodeficiency virus type 1 (HIV) protease in cultured cells leads to apoptosis, preceded by cleavage of bcl-2, a key negative regulator of cell death. In contrast, a high level of bcl-2 protects cells in vitro and in vivo from the viral protease and prevents cell death following HIV infection of human lymphocytes, while reducing the yields of viral structural proteins, infectivity, and tumor necrosis factor alpha. We present a model for HIV replication in which the viral protease depletes the infected cells of bcl-2, leading to oxidative stress-dependent activation of NF kappa B, a cellular factor required for HIV transcription, and ultimately to cell death. Purified bcl-2 is cleaved by HIV protease between phenylalanine 112 and alanine 113. The results suggest a new option for HIV gene therapy; bcl-2 muteins that have noncleavable alterations surrounding the HIV protease cleavage site.


Basic Statistics |
Series of Words
Sikiru Adewale's Array Magic
Welcome to Array Magic
You will find our service to be customer-friendly, and consumer's satisfaction is our focus


Strong technical knowledge with in-depth training, hands-on experience, and proven ability to design and develop professional software and web applications that solve problems, support businesses, and engage target audiences.
Individually designed, developed and deployed a responsive website for a fitness studio in Cleveland, OH. Currently providing regular maintenance and updates to the site, as well as expertise in UI/UX, SEO and hosting for the client.
Full-stack developer for console and web applications created within the .NET environment. Providing expertise in UI/UX and front-end development. Managing the company's business intelligence solutions by maintaining the data warehouse and presenting visual representations of data powered by Microsoft's Power BI.
C# • Java • Python • .NET • Active Server Pages / ASP.net • JavaScript • jQuery • Bootstrap • MVC • HTML5 • CSS3 • AJAX • Object Oriented Programming (OOP) • Structured Query Language (SQL) Transactional Databases / MS SQL • Source Control / GitHub
GPA: 3.9
GPA: 3.53


Hello,
I have an RFM12Pi connected to a Raspberry B. The Wallplug is an iPad USB, with 5.1v/2.1A. I'm using 2 EmonTx boards, with 5 CT + 2 Temperature sensors.
The module is working good 99% of the time. Every values are collected, then transmitted to another linux server.
Unfortunately, without any reason, somtimes the module isn't receiving anything, or sometimes stops receiving from only one EmonTx. I must shutdown the Raspberry, cut power few seconds, then reboot and everything's working fine. If i don't cut the power, it's not working even after a reboot. Because of this, i choose the Hardware section of the forum, because i wonder if it's not a lack of power.
Do you think i need a greater powered wallplug ?
I don't find any wallplug with more than 2 Amps... anyone knows where i can find it ? I often look at ebay, but nothing yet...
I added some verbose lines on the PHP script to log into a file rfm12piphp.log and i can be sure now that the loop is working, only the data are not received. Like if the RFM12Pi daughter board was ... lazy ?
Oh, and unplugging EmonTx doesn't change anything. It was the forst thing i tried.
A final detail, it's happenning approximately once a week... sometimes more.
As i can see, the load of the raspberry is 58% on 15mn :
07:50:44 up 53 min, 1 user, load average: 0.11, 0.40, 0.58
I'm afraid to add snmp periodical checkup of the load, because it will add another load to the little Raspberry's CPU...
I'm thinking to add a script to unplug and replug the raspberry automatically as soons as it detects the absence of data.
I hope you will help !
Re: RFM12Pi sometimes stops receiving
Out of curiosity, what if you try to only unplug the Out of curiosity, what if you try to only unplug the RFM12Pi daughter board ? Which revision is it by the way ?
Do you use the "send time to emonGLCD" feature (disabled by default) ?
Revision 1 of the RFM2Pi has serial port issues, especially when using serial port both ways, for instance with the "send time" feature. This bug does not exist on revision 2.
I can't tell about the load. I think the python gateway consumes about nothing, but I don't know about the php gateway.
Re: RFM12Pi sometimes stops receiving
Thank you for your reply.
Yes i'm using an emonLCD, and receiving from it too (temperature from another room).
And Yes it's a revision 2 i think, here's the line on the order :
1 x RFM12Pi v2 433Mhz + SD Card Bundle
(RFM12Pi V2 433Mhz: RFM12Pi V2 Pre-Assembled Raspberry Pi Expansion..., emoncms Pre-Loaded Raspberry Pi 4GB SD Card: Emoncms Pre-Loaded Raspberry Pi 4GB SD card )
I didn't tried to unplug the RFM12Pi while the power is on on the raspberry, i don't really like the idea of doing this. The original SDCard has already became unusable after an direct unplug without "init 0"... so trying to unplug the daughter card does not seems safe. Plus, the raspberry is in its box, and not really funny to "unbox".
What was the serial port issues exaclty ? Was it the same behavior ?
Re: RFM12Pi sometimes stops receiving
You all may be aware that there seems to be somekind of bug in the raspberry wlan stack requiring a reboot once per day or so. This is not the problem on this case, i guess ?
Re: RFM12Pi sometimes stops receiving
Took me some time but I've got a stable Wi-Fi connection with my Pi, now. I think:
http://openenergymonitor.org/emon/node/2941
Revision 2 does not have the serial port bug. It was a bug in the arduino lib that manages the COM port. A different Atmel is used in the rev2, and it does not have this bug. I think the difference is it that has built-in hardware serial communication support, whereas serial communication is software on the chip in rev1. Basically, gibberish was received when sending in the meantime. But you have rev2, anyway.
Re: RFM12Pi sometimes stops receiving
Thank you for your messages.
Sorry but I'm not talking about any wifi issue... i'm plugged on the switch with a wire...
( And i have other raspberry pi using wifi and don't need a reboot per day (fortunately !). )
My problem is the stability of an RFM12Pi.
Re: RFM12Pi sometimes stops receiving
Jérôme's point was there was a serial port bug. I'm not familiar with the RPi, but does the RFM12 module not communicate serially? If so, that bug might well be relevant.
I assume you don't have the Jeelib problem that affected the emonGLCD a year or so ago?
Re: RFM12Pi sometimes stops receiving
The bug I'm referring to only affects RFM12Pi v1, so it has to be something else.
Re: RFM12Pi sometimes stops receiving
OK, thanks Jérôme.
Re: RFM12Pi sometimes stops receiving
Hello!
I've similar problems with my Raspberry setup (Pi with 256MB and RFM12Pi V1 module). Sometimes it simply stops logging data, I can only solve this by restarting the Raspberry. I don't use a emonGLCD, so this bug should't appear due to my understanding.
Any ideas for this, is there a newer firmware version that I can install on the RFM12Pi module?
Re: RFM12Pi sometimes stops receiving
The bug on the V1 appears if the RF is used to send time every now and then to synchronize emonGLCD, whether the GLCD is actually present or not. In practice, this time feature is disabled by default so if you don't have any GLCD, I doubt you'd have enabled it.
The log would give a little more information: is there any data received at all ? Is it corrupted ? Did the RF change freq band for some reason ?
Re: RFM12Pi sometimes stops receiving
No, I didn't enable the GLCD option.
Could you please tell me how to activate the logfile and to check if the RF band has changed?
Re: RFM12Pi sometimes stops receiving
Hello!
I think, I've found the logfile. Is it /var/log/rfm2pigateway/rfm2pigateway.log ?
I've attached the last lines of this logfile.
Something went wrong today at 9:30 AM, it looks like there are a lot of measurement values that should be transmitted at this time, this is the latest entry in the file, then transmission to local and emoncms.org stops.
Re: RFM12Pi sometimes stops receiving
Please, don't use closed formats such as .docx. To share a log, either embed it in your message, or send a plain text file (.txt).
I see several things:
I don't have the explanation, here. Can you try the same URL directly from your browser ? Do you even use the local emoncms instance ?
Then, the last line:
I don't know why it fails.
Perhaps the URL line is a bit long. Can you try to set a shorter sending period ? 5 or 10 seconds instead of 30, for instance.
Anyway, it should timeout at some point, and/or raise an error. I don't get it.
Edit: Long URL shouldn't be an issue in itself.
http://boutell.com/newfaq/misc/urllength.html
http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-...
Re: RFM12Pi sometimes stops receiving
Hello
I have the same problem.
I'm using the latest image for SD:
oem_gateway22oct2013.img.zip
But the rfm12pi crashes randomly, not getting more data from my two emontx (id 9 and 10) while the raspberrypi continues to operate, in fact accessing via ssh I can do a reset.
How do I enable logging, to understand what's going on?
Re: RFM12Pi sometimes stops receiving
See troubleshooting, here: http://emoncms.org/site/docs/raspberrypigateway
I don't use this card, but if I trust the help page,
/root/oem_gateway/oemgateway.py --config-file /boot/oemgateway.conf
will let the gateway run outputing to the terminal.
I think you can specify
/root/oem_gateway/oemgateway.py --config-file /boot/oemgateway.conf --logfile /root/oem_gateway/oemgateway.log
to let it log in this file.
Re: RFM12Pi sometimes stops receiving
Hello
Now will not start even with the shutdown-r now, I have to turn off the power.
I've tried these instructions, using putty:
ipe-rw
cd oem_gateway
nano oemgateway.log
ctrl+o+enter
ctrl+x+enter
ps-ef | grep python +enter
I came back to this:
root 1122 1 2 09:02? 00:00:09 python / root / oem_gateway / oemgateway.py - config-file / boot / oemgateway.conf
root 1247 1231 0 09:09 pts / 1 00:00:00 grep python
I wrote then:
kill -9 1122
+ enter, and then
python /root/oem_gateway/oemgateway.py --config-file /boot/oemgateway.conf --logfile /root/oem_gateway/oemgateway.log
+ enter.
At this point I left the green cursor and nothing happens.
If I insert:
ctrl + c, and then
python /root/oem_gateway/oemgateway.py --config-file /boot/oemgateway.conf
+ enter
Same thing, blinking cursor, the script does not restart.
There may be a problem on rfm12pi?
Re: RFM12Pi sometimes stops receiving
Is there any content in /root/oem_gateway/oemgateway.log ?
Re: RFM12Pi sometimes stops receiving
I removed the power supply and it is restarted.
I did the above procedure, entered:
python /root/oem_gateway/oemgateway.py --config-file /boot/oemgateway.conf --logfile /root/oem_gateway/oemgateway.log
These are the last lines of the log (two hours), then has received nothing.
2013-10-29 20:26:50,540 INFO Sending to fabiusmontana.dynalias.com/emoncms
2013-10-29 20:26:53,444 DEBUG Send ok
2013-10-29 20:26:53,732 INFO Serial RX: > 0s
2013-10-29 20:26:53,937 INFO Serial RX: -> 4 b
2013-10-29 20:26:54,146 INFO Serial RX: 9 16 2 0 0 0 0 220 0
2013-10-29 20:26:54,149 DEBUG Node: 9
2013-10-29 20:26:54,151 DEBUG Values: [528, 0, 0, 220]
2013-10-29 20:26:54,153 DEBUG Server fabiusmontana.dynalias.com/emoncms -> send data: [9, 528, 0, 0, 220]
2013-10-29 20:26:54,155 DEBUG Data string: &node=9&json={1:528,2:0,3:0,4:220}
2013-10-29 20:26:54,157 DEBUG URL string: http://fabiusmontana.dynalias.com/emoncms/input/post.json?apikey=****I deleted*********$
2013-10-29 20:26:54,160 INFO Sending to fabiusmontana.dynalias.com/emoncms
Re: RFM12Pi sometimes stops receiving
Even the values received are strange, at 5 pm (it was almost dark), marked about 1000w PV production.
I rebooted, and it has fallen to zero, the correct value.
The strange thing is that the value went down slowly, so as to seem normal.
Re: RFM12Pi sometimes stops receiving
OK, it seems stuck while sending to your server.
Can you please try to add a timeout to urllib2.urlopen() ?
In oemgatewaybuffer.py, replace
result = urllib2.urlopen(url_string)
with
result = urllib2.urlopen(url_string, timeout=60)
and see if this still occurs.
Re: RFM12Pi sometimes stops receiving
Ok, I try.
thanks
Re: RFM12Pi sometimes stops receiving
Hello Jerome. Last night I made the change you suggested, and so far not 'locked. It remains the problem of misalignment of the data collected.
This morning the inverter was producing 900w, but emoncms marked zero. I rebooted, and you will be updated on the correct value.
It could be a atmega328's buffer that does not empty?
Re: RFM12Pi sometimes stops receiving
Hi.
Good if it doesn't lock anymore. The timeout has been added in master branch but please don't upgrade now, as latest revision is broken. Just keep your local fix until you upgrade and don't bother.
Regarding your data, it could be that the Pi does not send fast enough (?). This could be seen in the logs. Basically, if you send every 3 seconds, and each "Sending to server" takes more than that, then you end up being late.
We're working on a better sending method to avoid these issues.
Until then, you may want to
- Check this is actually the problem. The logs will help.
- Lower sampling frequency (depending on what you see in the logs, perhaps a period of 10 seconds or more instead of 3 or 5)
> The strange thing is that the value went down slowly, so as to seem normal.
I think this is just a side effect of sampling: one sample up, another down and later, hence a steep that is not perfectly vertical.
Re: RFM12Pi sometimes stops receiving
I ask forgiveness for my English, I use google to translate.
Ok.
Where do I set the sample rate?
sendtimeinterval in oemgateway.conf?
>>I think this is just a side effect of sampling: one sample up, another down and later, hence a steep that is not perfectly vertical.
This may not be a side effect of sampling.
The first image is taken directly from the inverter logs.
The second image from emoncms (local).
At 14:30 there was a gap of 250w. I restarted the raspberrypi, and the data were realigned.
At 15:15 there was again a difference of 120w.
I'm not a programmer, I'm just a geek, but I think that the couple raspberrypi/rmf12pi, used as a gateway, should only allow the passage to data arriving from emontx, in real time, without manipulation or storage, as happens with the emonbase/nanoderf. Or mark with date and time each incoming packet from emontx when rfm12pi receives them.
Re: RFM12Pi sometimes stops receiving
Hi.
By sample rate, I mean the frequency at which the emonTX emits. Basically, if emonTX transmits every 3 seconds, this generates, in the gateway, a call to urlopen() every 3 seconds. And if that call lasts more than 3 seconds, then the delay keeps accumulating. Just an hypothesis.
When arriving to the gateway, the data is stored with a timestamp. Then reemitted. There is an issue we are working on that affects latest versions, but I think the gateway version you are using should work correctly. Maybe older versions were broken as well. Anyway, Trystan is working on an API modification on emoncms side, and this should be sorted out.
Re: RFM12Pi sometimes stops receiving
Hello Jerome.
I do not think the problem is in emoncms.
Even this morning, with inverter already on and in the production of 500W, the gateway continued to send the last data of last night.
By controlling the input in my account emoncms, these were updated every 3 seconds.
I restarted the raspberry, and inputs were realigned.
Re: RFM12Pi sometimes stops receiving
OK so my guess is a 3 second period is too much for the gateway to handle.
Would you mind trying to increase the period to 5, ideally 10 seconds and see if it works ? Again, if the bottleneck is here, it should be obvious from the logs.
I'm not saying the problem is in emoncms. I modified the gateway to group http requests and avoid what I think is your problem (see latest commits), but my new implementation does not work with emoncms, which Trystan is trying to solve on emoncms side by modifying the API.
Re: RFM12Pi sometimes stops receiving
Hello Jerome. The part of the code to be changed in the sketch is this?
emontx_sleep (time in seconds)
Re: RFM12Pi sometimes stops receiving
Yes, I suppose.
Re: RFM12Pi sometimes stops receiving
Hello Jerome.
I modified the sketch as you suggested, and now the gateway works well, without any delays.
I brought the sleep of my two emontx to 10 seconds:
emontx_sleep (10);
I also set a threshold for the detection of flashes, because the Italian electricity meter has 2 LEDs, the second shows the reactive power, which I false counts.
Also introduced a threshold for minimum power, which eliminates the problem of false indications at night, because remained the last reading (40W) before turning off the inverter .
// The interrupt routine - runs each time a falling edge of a pulse is detected
void onPulse()
{
lastTime = pulseTime; //used to measure time between pulses.
pulseTime = micros();
if ((pulseTime - lastTime)>100000000) //threshold for minimum power
{
emontx.power = 0;
}
else if ((pulseTime - lastTime)>410000) //minimum threshold between 2 flashes(8.5Kwp = 0.42 second between 2 flashes)
{
pulseCount++; //pulseCounter
emontx.power = int((3600000000.0 / (pulseTime - lastTime))/ppwh); //Calculate power
}
}
Re: RFM12Pi sometimes stops receiving
OK, thanks for the feedback. This confirms what I suspected: bottleneck in the gateway due to long urlopen() calls.
We're on it already: https://github.com/Jerome-github/oem_gateway/issues/6#issuecomment-27209920


Beep Boop
Input text to see what the robot says:
Who is talking to the robot (name):
See Robot Translation


Awesome Books
List
Add New
Contact
All Awesome Books
Books
Add a new books
Add
Contact information
Do have any questions or you just want to say "Hello"?
you can reach out to us!
Moaz's e-mail:
<EMAIL_ADDRESS>Moaz's phone number: +963 960 694 292
Moaz's Adress: Damascus, Syria
Ahmad's e-mail:
<EMAIL_ADDRESS>Ahmad's phone number:+201064934399
Ahmad's adress:Cairo Egypt
Bunbee's e-mail:
<EMAIL_ADDRESS>Bunbee's phone number:+263771066268
Bunbee's adress: West Kadoma Zimbabwe


Season :
Fetch Games
Game :
Twitch
Name
Color
Category light
Category dark
200 pts
100 pts
0 pts
min
max
LIGHT
DARK
Game
Send
Send
Chrono
Countdown
Light
Dark
Both
None
Pause
Stop