{% extends 'panel.html' %} {% load utilities %} {% block head_title %} Page not found {% endblock %} {% block panel_content %}
The requested page was not found.


http://www.speakers-podium.com/susangranger.
Susan Granger's review of "DOUG'S 1st MOVIE" (Walt Disney Pictures)
"Disney's Doug" leaps from ABC-TV's Saturday morning series onto the big screen but, for the most part, I doubt if it's worth paying - at a theater - for what you can get free - at home, unless you're the parent of a pre-schooler who is desperate for something-to-do. The 77-minute story revolves around 12 1/2 year-old Doug Funnie (voiced by Thomas McHugh) and his blue-faced buddy Skeeter (Fred Newman) and their search for the supposedly mythical monster of Bluffington's Lucky Duck Lake. When they find the creature - a gentle baby dinosaur mutant - and befriend him, naming him Herman Melville, they also discover an environmental hazard, a pond of industrial waste, covered-up by evil industrialist Bill Bluff (Doug Preis) who is determined to keep his nasty secret. In addition, Doug's romantic crush, Patti Mayonnaise (Constance Shulman), is being courted by Guy Graham (Guy Hadley), the slick editor of the school newspaper, who just happens to be the powerful Bluff's spy in the community. Will Doug risk Patti's love and do the right thing? To put it tactfully, Nickelodeon screenwriter Ken Scarborough was obviously inspired by the plot of "E.T.," and the animation, while pleasant, is flat and unimaginative except in one virtual-reality sequence in which everything is exactly the same as in real life - except more expensive. "Doug's" was originally conceived as a direct-to-video project but diverted to theaters following the success of "The Rugrats Movie." On the Granger Movie Gauge of 1 to 10, "Doug's 1st Movie" is a flimsy 3. Wait for the video.
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


LARGER THAN LIFE A film review by Rob Conrad Copyright 1996 Rob Conrad
I just came back from seeing Bill Murray's elephant movie. I wish I had happy news for you, but I don't. Bill has been very, very funny in the past and in some part of himself he must know how far off the tracks he has gone, like even the worst alcoholic knows dimly, in the back of his or her mind, that they once had another life somewhere and that it was different from where they are now. Bill, if you can hear me -- if this reaches you -- Get away from the people you're with! Move your legs! RUN!!! You can do it!
This movie blows like an elephant blows.  Even though it was written by Roy Blount, Jr., one of my favorite prose comedians, the script is inept, embarrassingly predictable and irritatingly, boringly cutesy-pie. There is no dramatic tension. You can see the end of the movie from the beginning of the movie. The best Bill lines come in (literally) the last five minutes of the movie, and the best line before that is delivered by Bill's mother in (literally) the first five minutes of the movie. If it should ever be my great fortune to meet The Great Smart Ass Comedy God face to face, I will ask him for a partial rebate on the $5.75 I put into his alimony payments this evening.
I know mainstream American cinema has dug itself into a deep, deep rut, but -- Bill should examine his artistic conscience and think long and hard about why he feels the need to participate. Bad Bill! Kneel!
IN A NUTSHELL
Even avoid it on video or at the 99 cent theatre. One huge elephant trunk down!
AND BECAUSE I KNOW YOU CARE DEEPLY ABOUT THE STATE OF THE CINEMATIC ARTS IN AMERICA TODAY
Why do we feel the need to put EVERY SINGLE PERSON who was in ANY WAY connected with the movie, in the credits? I'm talking about people identified as Assistant Accountants (yes!) and Coffee Person (true!), and I'm just getting started. What's next, The Guy Who Put the Sprocket Holes In the Film? I believe we're heading for a situation where the credits will eventually be longer than the film. We'll watch names for 87 minutes and then a very brief two-minute movie, about as long as a trailer is now. A few cars will explode, two people will hold onto each other like velcro while Whitney Houston sings part of a song, maybe a quick shot of Arnold Schwarzenegger or Whoopi Goldberg, and that's it, that's your movie. Ticket prices won't go down. This is what I'm thinking! _____________________________ Rob Conrad (540)628-TYPE Dependable Type Graphic Design<EMAIL_ADDRESS>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


Gateway
BOT
09-Jul-18 09:56 PM
[dscrdeql] < millsy> morning
[dscrdeql] <cypherzero> good night
[dscrdeql] <sourge> night cypherzero
[dscrdeql] <sourge> and morning au millsy
[dscrdeql] <jellysmash> @ millsy morning there
[dscrdeql] <jellysmash> Where abouts are you in Australia...I'm in Sydney
[dscrdeql] < millsy> bundaberg
[dscrdeql] <jellysmash> Cool...I was at bunderberg in early Jan....visiting wife's cousins
[dscrdeql] <jellysmash> Damn hot there
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Hey @jellysmash
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Good morning
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> How's it going?
[dscrdeql] <Cypher - Founder> not too bad
[dscrdeql] <Cypher - Founder> your self
[dscrdeql] <Cypher - Founder>
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> All good
[dscrdeql] <Cypher - Founder> moon coming baby
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> On the train to work
[dscrdeql] <slipersty> haha nice one ^^
[dscrdeql] <slipersty> nice what you work with ?
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Software engineer
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Want to learn blockchain at some point of time
[dscrdeql] <Cypher - Founder> oh sweet front end or full stak
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Full stack
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Current role is DevOps engineer
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]>
[dscrdeql] <Flate> LETS GOOO
[dscrdeql] <Cypher - Founder> oh sweet yeah they love devops
[dscrdeql] <slipersty> cool @CryptoNoob8[BuyTheFuckingMN] i whuld also but think it's hard too do it with dyslexia >.<
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> @slipersty
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> I want to learn enough to participate in bug bounties initially
[dscrdeql] <slipersty> thats nice lots too gain
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Yeah, I believe better than slogging 9 to 5 in a corporate job
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Right now, just a wage cuck
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Want to break free but need sustainable income for that
[dscrdeql] <jellysmash> hah that baby
[dscrdeql] <jellysmash> how funny
[dscrdeql] <jellysmash> hey @CryptoNoob8[BuyTheFuckingMN]
[dscrdeql] <jellysmash> I'm still drinking coffee in bed now...about to come to work today
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> How much coffee you drink in a day
[dscrdeql] <jellysmash> 3 cups
[dscrdeql] <jellysmash> gotta get in the groove
[dscrdeql] <jellysmash> stomach ok so far
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> I can't even handle one full cup
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Zero on most days for me
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Half cup if I really need
[dscrdeql] <Jonathan> My Dad was a coal miner for most of his life, made me claustrophobic just hearing his stories lol
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> What’s claustrophobia? I have read about it but forgot
[dscrdeql] <Jonathan> Fear of small spaces
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Ah
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> Can one find a diamond in a coal mine?
[dscrdeql] <CryptoNoob8[BuyTheFuckingMN]> What’s the chance?


{{/* show side bar for a page: if the page section is a toplevel this is single-layer list, simply list section pages else show section parent in form of accordin, with the current section "checked" and others unchecked. */}}


Your vote at %100
Link to post
Post age
Current votes total
Bot vote estimation
Ratio
Max Efficient Vote
Vote %
Curation to Earn
Efficiency
*write your vote at %100 as seen at steemnow.com
SBD


A/C details, packed into an array message.
More...
#include <XPMPRemote.h>
|
| | RemoteAcDetailTy () |
| | Default Constructor sets all to zero. More...
|
| |
| | RemoteAcDetailTy (const Aircraft &_ac, double _lat, double _lon, float _alt_ft, std::uint16_t _dTime) |
| | A/c copy constructor fills from passed-in XPMP2::Aircraft object. More...
|
| |
| void | CopyFrom (const Aircraft &_ac, double _lat, double _lon, float _alt_ft, std::uint16_t _dTime) |
| | Copies values from passed-in XPMP2::Aircraft object. More...
|
| |
| void | SetLabelCol (const float _col[4]) |
| | set the label color from a float array (4th number, alpha, is always considered 1.0) More...
|
| |
| void | GetLabelCol (float _col[4]) const |
| | writes color out into a float array More...
|
| |
| void | SetPitch (float _p) |
| | sets pitch from float More...
|
| |
| float | GetPitch () const |
| | returns float pitch More...
|
| |
| void | SetHeading (float _h) |
| | Sets heading from float. More...
|
| |
| float | GetHeading () const |
| | returns float heading More...
|
| |
| void | SetRoll (float _r) |
| | sets pitch from float More...
|
| |
| float | GetRoll () const |
| | returns float pitch More...
|
| |
A/C details, packed into an array message.
◆ RemoteAcDetailTy() [1/2]
| XPMP2::RemoteAcDetailTy::RemoteAcDetailTy |
( |
| ) |
|
Default Constructor sets all to zero.
◆ RemoteAcDetailTy() [2/2]
| XPMP2::RemoteAcDetailTy::RemoteAcDetailTy |
( |
const Aircraft & |
_ac, |
|
|
double |
_lat, |
|
|
double |
_lon, |
|
|
float |
_alt_ft, |
|
|
std::uint16_t |
_dTime |
|
) |
| |
◆ CopyFrom()
| void XPMP2::RemoteAcDetailTy::CopyFrom |
( |
const Aircraft & |
_ac, |
|
|
double |
_lat, |
|
|
double |
_lon, |
|
|
float |
_alt_ft, |
|
|
std::uint16_t |
_dTime |
|
) |
| |
◆ GetHeading()
| float XPMP2::RemoteAcDetailTy::GetHeading |
( |
| ) |
const |
|
inline |
◆ GetLabelCol()
| void XPMP2::RemoteAcDetailTy::GetLabelCol |
( |
float |
_col[4] | ) |
const |
writes color out into a float array
◆ GetPitch()
| float XPMP2::RemoteAcDetailTy::GetPitch |
( |
| ) |
const |
|
inline |
◆ GetRoll()
| float XPMP2::RemoteAcDetailTy::GetRoll |
( |
| ) |
const |
|
inline |
◆ msgSize()
| static constexpr size_t XPMP2::RemoteAcDetailTy::msgSize |
( |
| ) |
|
|
inlinestaticconstexpr |
◆ SetHeading()
| void XPMP2::RemoteAcDetailTy::SetHeading |
( |
float |
_h | ) |
|
Sets heading from float.
- Note
- Only works well for
0 <= _h < 360
◆ SetLabelCol()
| void XPMP2::RemoteAcDetailTy::SetLabelCol |
( |
const float |
_col[4] | ) |
|
set the label color from a float array (4th number, alpha, is always considered 1.0)
◆ SetPitch()
| void XPMP2::RemoteAcDetailTy::SetPitch |
( |
float |
_p | ) |
|
|
inline |
◆ SetRoll()
| void XPMP2::RemoteAcDetailTy::SetRoll |
( |
float |
_r | ) |
|
|
inline |
◆ aiPrio
| std::int16_t XPMP2::RemoteAcDetailTy::aiPrio |
priority for display in limited TCAS target slots, -1
indicates "no TCAS display"
◆ airline
| char XPMP2::RemoteAcDetailTy::airline[40] |
◆ alt_ft
| float XPMP2::RemoteAcDetailTy::alt_ft |
◆ aptFrom
| char XPMP2::RemoteAcDetailTy::aptFrom[5] |
◆ aptTo
| char XPMP2::RemoteAcDetailTy::aptTo[5] |
Destination airport (ICAO)
◆ bDrawLabel
| bool XPMP2::RemoteAcDetailTy::bDrawLabel |
Draw the label of the aircraft? (new with v2)
◆ bOnGrnd
| bool XPMP2::RemoteAcDetailTy::bOnGrnd |
Is the aircraft on the ground?
◆ bRender
| bool XPMP2::RemoteAcDetailTy::bRender |
Shall the CSL model be drawn in 3D world?
◆ bValid
| bool XPMP2::RemoteAcDetailTy::bValid |
is this object valid? (Will be reset in case of exceptions)
◆ bVisible
| bool XPMP2::RemoteAcDetailTy::bVisible |
Shall this plane be drawn at the moment?
◆ contrailDist_m
| std::uint8_t XPMP2::RemoteAcDetailTy::contrailDist_m |
distance between several contrails and to the aircraft's centerline, in meter
◆ contrailLifeTime
| std::uint8_t XPMP2::RemoteAcDetailTy::contrailLifeTime |
this aircraft's contrail's life time
◆ contrailNum
| std::uint8_t XPMP2::RemoteAcDetailTy::contrailNum |
number of contrails requested
◆ dTime
| std::uint16_t XPMP2::RemoteAcDetailTy::dTime |
[0.0001s] time difference to previous position in 1/10000s
◆ filler
| std::uint8_t XPMP2::RemoteAcDetailTy::filler[3] |
yet unused
Array of packed dataRef values for CSL model animation
◆ flightNum
| char XPMP2::RemoteAcDetailTy::flightNum[10] |
◆ heading
| std::uint16_t XPMP2::RemoteAcDetailTy::heading |
◆ icaoOp
| char XPMP2::RemoteAcDetailTy::icaoOp[4] |
◆ icaoType
| char XPMP2::RemoteAcDetailTy::icaoType[4] |
◆ label
| char XPMP2::RemoteAcDetailTy::label[23] |
◆ labelCol
| std::uint8_t XPMP2::RemoteAcDetailTy::labelCol[3] |
◆ lat
| double XPMP2::RemoteAcDetailTy::lat |
◆ lon
| double XPMP2::RemoteAcDetailTy::lon |
◆ manufacturer
| char XPMP2::RemoteAcDetailTy::manufacturer[40] |
a/c manufacturer, human readable
◆ model
| char XPMP2::RemoteAcDetailTy::model[40] |
a/c model, human readable
◆ modeS_id
| std::uint32_t XPMP2::RemoteAcDetailTy::modeS_id |
plane's unique id at the sender side (might differ remotely in case of duplicates)
◆ pitch
| std::int16_t XPMP2::RemoteAcDetailTy::pitch |
◆ pkgHash
| std::uint16_t XPMP2::RemoteAcDetailTy::pkgHash |
hash value of package name
◆ roll
| std::int16_t XPMP2::RemoteAcDetailTy::roll |
◆ sShortId
| char XPMP2::RemoteAcDetailTy::sShortId[20] |
◆ tailNum
| char XPMP2::RemoteAcDetailTy::tailNum[10] |
registration, tail number
The documentation for this struct was generated from the following files:


Wallpaper: here PCB-Image: here CanSat-Logo: here HTL-Leonding-Image: here Motivation-Image: here
Click to copy!


- adler
- avail_in
- avail_out
- avail_out=
- close
- closed?
- data_type
- end
- ended?
- finish
- finished?
- flush_next_in
- flush_next_out
- new
- reset
- stream_end?
- total_in
- total_out
[ show source ]
# File lib/zliby.rb, line 54 def initialize @input_buffer = [] @output_buffer = [] @out_pos = -1 @in_pos = -1 @bit_bucket = 0 @bit_count = 0 end
Returns the adler-32 checksum of the input data.
[ show source ]
# File lib/zliby.rb, line 64 def adler end
Returns the number of bytes read. Normally 0 since all bytes are read at once.
[ show source ]
# File lib/zliby.rb, line 68 def avail_in @input_buffer.length - @in_pos end
Returns number of free bytes in the output buffer. As the output buffer is self expanding this normally returns 0.
[ show source ]
# File lib/zliby.rb, line 73 def avail_out @output_buffer.length - @out_pos end
Allocates size bytes in output buffer. If size < avail_out it truncates the buffer.
[ show source ]
# File lib/zliby.rb, line 78 def avail_out= size size.times do if size > avail_out @output_buffer.push nil else @output_buffer.pop end end end
Closes stream. Further operations will raise Zlib::StreamError
[ show source ]
# File lib/zliby.rb, line 89 def close @closed = true end
True if stream closed, otherwise False.
[ show source ]
# File lib/zliby.rb, line 94 def closed? @closed end
Best guess of input data, one of Zlib::BINARY, Zlib::ASCII, or Zlib::UNKNOWN
[ show source ]
# File lib/zliby.rb, line 99 def data_type end
Finishes the stream, flushes output buffer, implemented by child classes
[ show source ]
# File lib/zliby.rb, line 113 def finish close end
True if stream is finished, otherwise False
[ show source ]
# File lib/zliby.rb, line 118 def finished? if @finished.nil? then false else @finished end end
Flushes input buffer and returns the data therein.
[ show source ]
# File lib/zliby.rb, line 127 def flush_next_in @in_pos = @input_buffer.length @finished = true ret = @input_buffer.pack("c*") @input_buffer = [] ret end
Flushes the output buffer and returns all the data
[ show source ]
# File lib/zliby.rb, line 136 def flush_next_out @out_pos = @output_buffer.length @finished = true ret = @output_buffer.pack("c*") @output_buffer = [] ret end
Reset stream. Input and Output buffers are reset.
[ show source ]
# File lib/zliby.rb, line 145 def reset @out_pos = -1 @in_pos = -1 @input_buffer = [] @output_buffer = [] end
See finished.
[ show source ]
# File lib/zliby.rb, line 153 def stream_end? finished? end
Size of input buffer.
[ show source ]
# File lib/zliby.rb, line 158 def total_in @input_buffer.length end
Size of output buffer.
[ show source ]
# File lib/zliby.rb, line 163 def total_out @output_buffer.length end


Enter User Name to play the game and click submit. Follow the pattern of lights on the screen to play the game. Click to copy the pattern. The longer you go, the higher the score you get. You can see your score in the leader board. If you don't give user name, the game logs you in as John Doe.


A networking library for Realm of the Mad God.
npm install @realmlib/net
The realmlib networking module cannot be used on its own. It is designed to be used as a building block for larger RotMG projects which require an implementation of the RotMG networking protocol. Such project may include
PacketIO
classThe PacketIO
class provides an event based way of sending and receiving RotMG packets. It is very likely that a project which depends upon @realmlib/net will make use of the PacketIO
class.
When a new PacketIO
instance is constructed, it expects an object with 3 optional properties.
socket
- An instance of net.Socket
rc4
- An object which contains an incoming RC4 key and an outgoing RC4 key.packetMap
- An object which maps packet types to their IDs.By default,
socket
will be initialised to undefined
.rc4
will be initialised to an object containing the current RotMG incoming and outgoing RC4 keys.packetMap
will be initialised to an empty object literal ({}
).If a socket
is provided, the PacketIO
instance will be immediately attached to that socket. A PacketIO
instance can always be attached to a socket after constructed via the attach()
method, so providing a socket to the constructor is not necessary.
The default values which are used for the rc4
property are set up for a clientless application. However, they are configurable to allow the PacketIO
class to be used for other applications. For example, when building a MITM proxy, the PacketIO
instance which listens to traffic coming from the server should use the incoming key for both the incoming and outgoing key configurations. The PacketIO
instance which is listening to traffic coming from the client should use the outgoing key for both the incoming and outgoing key configurations.
import { PacketIO, INCOMING_KEY, OUTGOING_KEY } from '@realmlib/net';
const serverIO = new PacketIO({
rc4: {
incomingKey: INCOMING_KEY,
outgoingKey: INCOMING_KEY,
}
});
const clientIO = new PacketIO({
rc4: {
incomingKey: OUTGOING_KEY,
outgoingKey: OUTGOING_KEY,
}
})
The packetMap
property is the most important one, as it allows the PacketIO
instance to resolve packet ids to their types. This is necessary in order to create the right instances of packets when they are received, and to use the right id when sending packets.
The packetMap
object is expected to bidirectional. That is, if the map contains the property
import { PacketMap, PacketType } from '@realmlib/net';
const packetMap: PacketMap = {
FAILURE: 0,
};
it should also contain the reverse of that property.
const packetMap: PacketMap = {
FAILURE: 0,
0: PacketType.FAILURE,
};
Ideally, the packetMap
should contain an entry for each property present in the PacketType
enum. This will ensure that the PacketIO
instance knows how to create any type of packet which it may receive. If some of the packet types are missing, the PacketIO
will be unable to send those packets, and will not be able to create an instance of the packet when one is received.
Generated using TypeDoc


--- layout: post title: Scaling High-Availability Infrastructure in the Cloud date: '2011-12-15T05:12:00.001Z' author: solrevdev tags: modified_time: '2011-12-15T05:12:00.582Z' blogger_id: tag:blogger.com,1999:blog-31446756.post-3261119022931923049 blogger_orig_url: http://www.solrevdev.com/2011/12/scaling-high-availability.html ---
An interesting post by one of my favourite start ups at the moment.


Rainfall:
Daily maximum
Daily average
Cumulative maximum
Animate
SEPT. 8
SEPT. 17
Sources:
CoCoRaHS
Credits: Vaughn Hagerty, Nelson Hsu / DFM


Orim of the Shadow:
I command thee, devil trapped in this prison of spirits! I invoke the name of Gran Kain, ruler of all darkness, get thee back from whence ye came!
Oh chains of heaven which bind the evil creatures of shadow, I beseech thee in the name of Einhasad, may this sealed seraph imprison the demon forever!
Now hurry! Give me the key!
Give the Purgatory Key to Orim.


Connected to {{ serverAddress.split(":")[0] }}
Disconnect
WebPad Client
Connect to:
Connect
{{ alertMessage }}
Enter your password
Password:
{{ alertMessage }}
Returned from command
×
{{ popupData }}
Select command options
×
{{ arg.friendlyName }}:
{{ alertMessage }}
{{ alertMessage }}
{{ command.friendlyName }}
v2.0.1 8-Aug-2020 SuperN64


Here's an attempt to reproduce the functionality of the Underscore Javascript library. I've not looked at the source code, so all the code here is based on the documentation for the individual functions at that link. I'll be working, roughly, from the top to the bottom of the functions listed in the sidebar.
Firstly, create a class to hold the functionality. I've decided that the only method that I need initially is a poor copy of jQuery $.extend()
. This will allow me to add the new functionality a small chunk at a time. The first thing that I'll add is a simple log
function. Note that, from this point, the _
object exists in the global namespace, and I'll be using extend
to add the new functionality.
function Underscore() { // Provide the facility to acquire other objects' // properties... this.extend = function(target, extension) { if (! extension) { extension = target; target = this; } for (let index in extension) { target[index] = extension[index]; } return target; } // Use given arguments to extend this class... for (let index in arguments) { this.extend(arguments[index]); } } // Instantiate the Underscore container... let _ = new Underscore({ log: function(message) { if (typeof(message) === "string") { console.log("log: " + message); } else { var properties = ""; for (let index in message) { properties += "[key=" + index + "][value=" + message[index] + "]"; } console.log("log: " + properties); } } }); _.log("hello, world!");
The first function to be added is each
. This is an easy one, and the same code iterates over both the values in an array, and the properties of an object. So, no special-case work needs to be done. Like all the functions that take a function argument, the context/scope is optional and, if not given, will default to this
. Having defined each
, another call to extend
is made to add the forEach
alias.
_.extend({ each: function(list, iteratee, context) { for (let index in list) { iteratee.call(context || this, list[index], index, list); } } }); _.extend({ forEach: _.each }); _.forEach([9, 8, 7], function(value, index, list) { _.log("forEach [index=" + index + "][value=" + value + "]"); }); _.forEach({one: 1, two: 2, three: 3}, function(value, index, list) { _.log("forEach [index=" + index + "][value=" + value + "]"); }); });
Next is map
. Very similar to each
, but if the iteratee returns anything, it is added to the array of mapped values that is returned. Note that I could have used the previously defined each
to do the iteration.
_.extend({ map: function(list, iteratee, context) { let mapped = []; for (let index in list) { let v = iteratee.call(context || this, list[index], index, list); if (v) { mapped.push(v); } } return mapped; } }); _.extend({ collect: _.map }); let x = _.collect([1, 2, 3], function(value, index) { if ((index % 2) === 0) { return value * 10; } }); _.log(x);
A bit more complicated is reduce
. This involves chaining a calculation through an array of values. I've added a guard against the iteratee failing to return a value, otherwise the memo
field would be reset to the next (if any) value in the list. Not sure if this is the correct way of dealing with this.
_.extend({ reduce: function(list, iteratee, memo, context) { for (let index in list) { if (! memo) { memo = list[index]; continue; } reduction = iteratee.call(context || this, memo, list[index], index, list); if (reduction !== undefined) { memo = reduction; } } return memo; } }); _.extend({ inject: _.reduce, foldl: _.reduce }); let sum = _.reduce([1, 2, 3, 4, 5, 6], function(sum, val) { return sum + val; }); _.log("reduce [sum=" + sum + "]");
The reduceRight
function does the same thing as reduce
, except that it starts at the tail of the list and works up to the head.
_.extend({ reduceRight: function(list, iteratee, memo, context) { for (let index = list.length - 1; index >= 0; --index) { if (! memo) { memo = list[index]; continue; } reduction = iteratee.call(context || this, memo, list[index], index, list); if (reduction !== undefined) { memo = reduction; } } return memo; } }); _.extend({ foldr: _.reduceRight }); let list = [[0, 1], [2, 3], [4, 5]]; let flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []); _.log("reduceRight - " + flat);
Next up is find
. Simple.
_.extend({ find: function(list, predicate, context) { for (let index in list) { if (predicate.call(context || this, list[index], index, list)) { return list[index]; } } } }); _.extend({ detect: _.find }); let even = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); _.log("find - " + even);
The filter
function is similar to find
except that it scans the entire list and returns all matches.
_.extend({ filter: function(list, predicate, context) { let filtered = []; for (let index in list) { if (predicate.call(context || this, list[index], index, list)) { filtered.push(list[index]); } } return filtered; } }); _.extend({ select: _.filter }); let evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); _.log("filter - " + evens);
The where
function is a bit trickier. It uses a nested loop to test the properties to be matched against each item in the list.
_.extend({ where: function(list, properties) { let matched = []; for (let index in list) { let item = list[index]; var equal = true; for (let match in properties) { if (item[match] !== properties[match]) { equal = false; break; } } if (equal) { matched.push(item); } } return matched; } }); let plays = [ {title: "Twelfth Night", author: "Shakespeare", year: 1609}, {title: "Cymbeline", author: "Shakespeare", year: 1611}, {title: "Death of a Salesman", author: "Miller", year: 1950}, {title: "The Tempest", author: "Shakespeare", year: 1611} ]; let shakespeare = _.where(plays, {author: "Shakespeare", year: 1611}); _.each(shakespeare, function(play) { console.log("where - [play=" + play.title + "]"); });
The findWhere
function is like the where
function, except that it returns after find the first match.
_.extend({ findWhere: function(list, properties) { for (let index in list) { let item = list[index]; var equal = true; for (let match in properties) { if (item[match] !== properties[match]) { equal = false; break; } } if (equal) { return item; } } } }); let play = _.findWhere(plays, {author: "Shakespeare", year: 1611}); console.log("findWhere - [play=" + play.title + "]");
The reject
function is the oppposite of filter
, so the code is very similar.
_.extend({ reject: function(list, predicate, context) { let rejected = []; for (let index in list) { if (! predicate.call(context || this, list[index], index, list)) { rejected.push(list[index]); } } return rejected; } }); let odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); _.log("reject - " + odds);
The every
function. According to the documentation, the predicate is optional. So, in the case where no predicate is given, true
is returned. I don't know whether this is correct.
_.extend({ every: function(list, predicate, context) { if (predicate) { for (let index in list) { if (! predicate.call(context || this, list[index], index, list)) { return false; } } } return true; } }); _.extend({ all: _.every }); let result = _.every([2, 4, 5], function(num) { return num % 2 == 0; }); _.log("every - " + result);
The some
function. Again, the predicate is optional. Where no predicate is given, defaults to returning false
.
_.extend({ some: function(list, predicate, context) { if (predicate) { for (let index in list) { if (predicate.call(context || this, list[index], index, list)) { return true; } } } return false; } }); _.extend({ any: _.some }); let result = _.every([2, 4, 5], function(num) { return num % 2 == 0; }); _.log("some - " + result);
The contains
function. Uses 2 different styles of loop, depending upon whether fromIndex
is supplied. Have to do this, because starting from a specific index isn't possible (is it?) when iterating through the properties of an object.
_.extend({ contains: function(list, value, fromIndex) { if (fromIndex) { for (let index = fromIndex; index < list.length; ++index) { if (list[index] === value) { return true; } } } else { for (let index in list) { if (list[index] === value) { return true; } } } return false; } }); _.extend({ includes: _.contains }); let has = _.contains([1, 2, 3, 4, 5], 3); _.log("contains - " + has); let hasO = _.contains({"one":1, "two":2, "three":3, "four":4, "five":5}, 7); _.log("containsO - " + hasO);
The invoke
function. I need to figure out the correct way to pass the arguments to the invoked method. If the invoked method does not return a value, the results array that is returned remains unchanged for that invocation.
_.extend({ invoke: function(list, methodName, arguments) { let results = []; for (let index in list) { let item = list[index]; let result = item[methodName](arguments); if (result !== undefined) { results.push(result); } } return results; } }); let sorted = _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); _.log("invoke - " + sorted);
The pluck
method. Only the values of properties that exist and are defined will be added to the returned array, so it's possible (if the property name is not applicable to any object in the list) that an empty array may be returned. The returned array may contain duplicate values.
_.extend({ pluck: function(list, propertyName) { let plucked = []; for (let index in list) { let item = list[index]; let property = item[propertyName]; if (property !== undefined) { plucked.push(property); } } return plucked; } }); let stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}]; let p = _.pluck(stooges, 'name'); _.log("pluck - " + p);
The min
and max
methods are so similar that it makes sense to hoist the bulk of the code into a common function. This could have been done using the previously defined reduce
function, but I'm using a specially created listCompare
function because I want to be able to handle the special case where only number
values are compared. Whilst reduce
could deal with this, it's simpler to isolate the code here. I have to call _.extend()
twice here, so that the listCompare
method is in scope at the point it's needed.
_.extend({ listCompare: function(list, iteratee, context, startValue, predicate) { var result = startValue; for (let index in list) { let value = iteratee ? iteratee.call(context || this, list[index]) : list[index]; if (typeof(value) === "number") { result = predicate(result, value) ? result : value; } } return result; } }); _.extend({ max: function(list, iteratee, context) { return _.listCompare(list, iteratee, context, -Infinity, function(a, b) { return a > b; } ) }, min: function(list, iteratee, context) { return _.listCompare(list, iteratee, context, Infinity, function(a, b) { return a < b; } ) } }); let stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'jerry', age: 80}, {name: 'billy', age: 20}, {name: 'curly', age: 60}]; let max = _.max(stooges, function(stooge){ return stooge.age; }); _.log("max - " + max); let min = _.min(stooges, function(stooge){ return stooge.age; }); _.log("min - " + min);
The sortBy
function operates on objects. The field to be sorted by can be specified by name (as a string), or by a selector function that operates on each member of the list. There's a few holes in this implementation; if a named field is not present on the object being sorted, or the named field isn't a string or number, or the selector function returns something that is not a string or number, then the result of the sort will be unpredictable. Note that this implementation uses the underlying Javascript sort
method for arrays, and so the array that is passed in will be modified; this could be prevented by cloning the array argument but, obviously, that has some overhead.
_.extend({ sortBy: function(list, iteratee, context) { list.sort(function(a, b) { var valueA, valueB; if (typeof(iteratee) === "string") { valueA = a[iteratee]; valueB = b[iteratee]; } else if (typeof(iteratee) === "function") { valueA = iteratee.call(context || this, a, list); valueB = iteratee.call(context || this, b, list); } else { valueA = a; valueB = b; } return (typeof(valueA) === "string") ? valueA.localeCompare(valueB) : (valueA - valueB); }); return list; } }); let stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'jerry', age: 80}, {name: 'billy', age: 20}, {name: 'curly', age: 60}]; let sorted = _.sortBy(stooges, function(item) { return item.name }); _.each(sorted, function(item) { _.log("sortBy - [name=" + item.name + "][age=" + item.age + "]"); });
The groupBy
function. As with sortBy
, if the iteratee is incorrect, the results will be unspecified.
_.extend({ groupBy: function(list, iteratee, context) { let results = {}; for (let index in list) { let item = list[index]; var key; if (typeof(iteratee) === "string") { key = item[iteratee]; } else if (typeof(iteratee) === "function") { key = iteratee.call(context || this, item, list); } else { key = item; } let group = results[key]; if (group) { group.push(item); } else { results[key] = [item]; } } return results; } }); //let groups = _.groupBy(['one', 'two', 'three'], 'length'); let groups =_.groupBy([1.3, 2.1, 2.4], function(num){ return Math.floor(num); }); for (let key in groups) { _.log("groupBy - [key=" + key + "][group=" + groups[key] + "]"); }
The indexBy
function is similar to groupBy
, except that the field to group/index by should be unique across the list.
_.extend({ indexBy: function(list, iteratee, context) { let results = {}; for (let index in list) { let item = list[index]; var key; if (typeof(iteratee) === "string") { key = item[iteratee]; } else if (typeof(iteratee) === "function") { key = iteratee.call(context || this, item, list); } else { key = item; } results[key] = item; } return results; } }); let stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'jerry', age: 80}, {name: 'billy', age: 20}, {name: 'curly', age: 60}]; let indexed = _.indexBy(stooges, "age"); for (let key in indexed) { _.log("indexBy - [key=" + key + "][item=" + indexed[key].name + "]"); }
The countBy
function.
_.extend({ countBy: function(list, iteratee, context) { let results = {}; for (let index in list) { let item = list[index]; var key; if (typeof(iteratee) === "string") { key = item[iteratee]; } else if (typeof(iteratee) === "function") { key = iteratee.call(context || this, item, list); } else { key = item; } results[key] = (results[key] || 0) + 1; } return results; } }); let counted = _.countBy([1, 2, 3, 4, 5], function(num) { return num % 2 == 0 ? 'even': 'odd'; }); for (let key in counted) { _.log("indexBy - [key=" + key + "][count=" + counted[key] + "]"); }


Salty Hackers
Home
About
Login
Register
Welcome Salty Hackers!
See the saltiest commenters on hacker news. We have ranked individual users and comments based on how "salty" they are. Here is what we have!
Checkout The App
Salty Hacker News
Top 100 Comments
Top 100 Users
Comment Title
Lorem ipsum dolor sit amet.
Comment Title
Lorem ipsum dolor sit amet.
Comment Title
Lorem ipsum dolor sit amet.
Comment Title
Lorem ipsum dolor sit amet.
Comment Title
Lorem ipsum dolor sit amet.
Comment Title
Lorem ipsum dolor sit amet.


In a triangle ,
and angle radians.(a) Given that is a sufficiently small angle, show that
for constants and to be determined.Part (a) of this question is worth 2 marks.
Let us proceed to part (b) of the question.
You leaving this question to return to the home page.
No progress will be saved.
A new question will be generated the next time to access this page.


someExpression
:
someValue
:
someExpression
evaluates to 1.
Some random junk in the middle that will always render.
someExpression
evaluates to someValue + 2
.
someExpression
evaluates to 3 and conditions.moreConditions || conditions.evenMoreConditions
.
someExpression
evaluates to 4 or 5.
someExpression
, so long as conditions.someCondition
.
Default with conditions:
This will also render if none of the above cases match and conditions.anotherCondition
.


Enter a word you would like your mate to guess and then hit the New Game button. Simple as that. Have fun.
This simple website was created to demonstrate some code for the EU Code Week, and let me practise ECMASript 6 as well. Source available @github.
Using this code is fairly simple. You can go ahead and clone the git repository or download its content.
Take a close look at the code and you will very likely understand what's going on. Side note: you can define your own alphabet in the consctuctor of your class.
document.getElementById('new-game').addEventListener('click', function() {
const word = document.getElementById('word').value;
const game = new wordGame(word, 10, ['a', 'b', 'c'...]);
game.uiDiv = 'game';
game.partialDiv = 'partial';
game.attemptsDiv = 'attempts';
game.initUI();
});
Feel free to contact me via email.


Many X configuration options that take a display device name can also be qualified with a GPU. This is done by prepending one of the GPU's names to the display device name. For example, the "MetaModes" X configuration option can be used to enable display devices from multiple GPUs in SLI Mosaic or Base Mosaic configurations:
Option "MetaModes" "1280x1024 +0+0, 1280x1024 +1280+0"
You can use a display device name qualifier along with a GPU qualifier to configure which display should be picked and from which GPU. E.g.,
Option "MetaModes" "GPU-1.DFP-0:1280x1024 +0+0, GPU-0.DFP-0:1280x1024 +1280+0"
Other X configuration options that support GPU names include:
ColorRange
ColorSpace
ConnectedMonitor
CustomEDID
FlatPanelProperties
IgnoreEDIDChecksum
ModeValidation
nvidiaXineramaInfoOrder
UseDisplayDevice
UseEdidFreqs
The description of each X configuration option in Appendix B, X Config Options provides more detail on the available syntax for each option.
To find all available names for your configuration, start the X
server with verbose logging enabled (e.g., startx -- -logverbose 5
, or
enable the "ModeDebug" X configuration option with nvidia-xconfig --mode-debug
and
restart the X server).
The X log (normally /var/log/Xorg.0.log) will contain information regarding each GPU. E.g.,
(II) NVIDIA(0): NVIDIA GPU NVS 510 (GK107) at PCI:15:0:0 (GPU-0) (II) NVIDIA(0): VERBOSE: GPU UUID: GPU-758a4cf7-0761-62c7-9bf7-c7d950b817c6
Alternatively, nvidia-xconfig can be used to query the GPU
names: nvidia-xconfig
--query-gpu-info
GPU #0: Name : NVS 510 UUID : GPU-758a4cf7-0761-62c7-9bf7-c7d950b817c6 PCI BusID : PCI:3:0:0
Each name has different properties that may affect which name is appropriate to use. The possible names are:
An NV-CONTROL target ID-based name (e.g., "GPU-0"). The NVIDIA X driver will assign a unique ID to each GPU on the entire X server. These IDs are not guaranteed to be persistent from one run of the X server to the next, so is likely not convenient for X configuration file use. It is more frequently used in communication with NV-CONTROL clients such as nvidia-settings.
An UUID-based name (e.g., "GPU-758a4cf7-0761-62c7-9bf7-c7d950b817c6"). This name is a SHA-1 hash, formatted in canonical UUID 8-4-4-4-12 format. This UUID is unique for each physical GPU, and will be the same regardless of where the GPU is connected.


'use strict';
var util = require('util');
var Vector = require('./vector');
/**
* Workers are arbitrary containers for processing data. They can be thought of
* almost like "threads", as they run asynchronously over the duration of a
* contract's lifetime as "fulfillment conditions" for its closure.
* @param {Object} initial - Configuration object
* @constructor
*/
function Worker (init) {
//self.worker = new Worker('validator.js');
}
util.inherits(Worker, Vector);
/**
* Handle a task.
* @param {Vector} input Input vector.
* @return {String} Outcome of the requested job.
*/
Worker.prototype.compute = function (input) {
var vector = new Vector(input);
var output = vector.compute();
if (vector.debug) console.log('[WORKER]', 'compute', typeof input, input, output);
switch (input) {
case 'PING':
this.emit('pong');
break;
}
return output;
};
Worker.prototype.route = async function (path) {
switch (path) {
default:
await this.compute(path);
break;
}
};
module.exports = Worker;


Pls login or register to continue into the application.
Old Face is shortly said Facebook without adds, stories and/or any other annoying things you might have seen coming to Facebook in past couple years.


The treeview is controlled by a view model. The model defines the nodes and their behavior. The treeview fires certain events if nodes are being handled. The basic usage looks like this:
<ac-treeview [nodes]="treeData"></ac-treeview>
The following events fire:
(nodeClick)
: The icon or an not selectable node text has been clicked(checkChanged)
: If the node has a checkbox, the status of the checkbox changed(selectedChanged)
: If the node is selectable (invert colors), the node has been selected(collapseChanged)
: If the node is collapsable (has child nodes), it has been opened or closedThe events just provide the information, that something has been changed. After that, one must retrieve the actual state of a node by asking several properties:
stateIsExpandend
: A collapsable node is expanded (shows children)stateIsChecked
: A checkable node is checkedstateIsDisabled
: The node is disabled (and may not fire certain events)stateIsSelected
: A selectable node is currently selectedstate
: An numeric expression of all states (internally, an Enum)The code used in this demo looks like this.
this.treeData = new AcTextTreeNode('Root node', options, [ new AcTextTreeNode('Child node #1', options), new AcTextTreeNode('Child node #2', optionsi), new AcTextTreeNode('Child node #3', options), new AcTextTreeNode('Child node #4', options, [ new AcTextTreeNode('Hello', options), new AcTextTreeNode('Ahoy', optionsc, [ new AcTextTreeNode('Child deep A', options), new AcTextTreeNode('Child deep B', optionsi), new AcTextTreeNode('Child deep C', options) ]), new AcTextTreeNode('Hola', optionsc), ]), new AcTextTreeNode('Child node #5', options), ]);
<ac-tree [nodes]="treeData" (nodeClick)="nodeEvent('click', $event)" (checkChanged)="nodeEvent('checked', $event)" (selectedChanged)="nodeEvent('selected', $event)" (collapseChanged)="nodeEvent('collapsed', $event)" > </ac-tree>
stateIsExpandend:
{{ eventSource.stateIsExpandend }}stateIsChecked:
{{ eventSource.stateIsChecked }}stateIsDisabled:
{{ eventSource.stateIsDisabled }}stateIsSelected:
{{ eventSource.stateIsSelected }}state:
{{ eventSource.state }}
- {{ log }}


A class file consists of a single ClassFile
structure:
ClassFile { ------------------------------------------------------------------------ u4 magic; 本节内容关注点 ------------------------------------------------------------------------ u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attributes_count]; }
The magic item supplies the magic number identifying the class file format; it has the value 0xCAFEBABE
.
0xCAFEBABE
is<PHONE_NUMBER> in decimal.
In computer science, a standard way to identify a file type is to insert some type of unique metadata at the beginning of a file. This is the convention followed by file types such as PNG, JPEG, etc. The unique identifier is termed as the magic number of a file.
25 50 44 46
)89 50 4E 47
)CAFEBABE
)A lot of facts in java is pointless but they are fun to know.
James Gosling explained this:
We used to go to lunch at a place called St Michael's Alley. According to local legend, in the deep dark past,笔记：dark past: a secret and bad history; a former lifestyle that no one knows about the Grateful Dead笔记：Grateful Dead是一个乐队的名字 used to perform there before they made it big.笔记：make it big 成名 to be extremely successful It was a pretty funky适宜跳舞的 with a strong rhythm that is easy to dance to place that was definitely a Grateful Dead Kinda Place. 笔记：由一个地方引出Grateful Dead乐队
When Jerry died, they even put up a little Buddhist-esque shrine. When we used to go there, we referred to the place as Cafe Dead. Somewhere along the line it was noticed that this was a HEX number. 笔记：由Grateful Dead乐队成员Jerry的去世引出Cafe Dead。
I was re-vamping some file format code and needed a couple of magic numbers: one for the persistent object file, and one for classes. I used CAFEDEAD
for the object file format, and in grepping for 4 character hex words that fit after “CAFE” (it seemed to be a good theme) I hit on BABE and decided to use it.
笔记：由Cafe Dead引出CafeBabe。
At that time, it didn't seem terribly important or destined to go anywhere but the trash-can of history. So CAFEBABE
became the class file format, and CAFEDEAD
was the persistent object format. But the persistent object facility went away, and along with it went the use of CAFEDEAD
- it was eventually replaced by RMI.
笔记：后来，CafeBabe存活了下来，而Cafe Dead被淘汰了。
以前我们曾去过一个叫Michael's Alley的街上吃中午饭。据当地人说，Grateful Dead乐队在成名之前，就在那个地方表演过。后来（1995年），乐队成员Jerry去世，这里还一度变成纪念他的地方，我们将这个地方称之为Cafe Dead。当时我正在改造一些文件的格式，需要2个Magic Number：一个是用来表示object file，另外一个用来表示class文件。我选择使用CAFEDEAD来表示object file，后来又想到了CAFEBABE来表示class文件。当时认为，这两个名字的选择并不是什么特别重要的事情，只会随着时间的流逝而渐渐地被历史所遗忘。从那之后，CAFEBABE就用来表示class文件，而CAFEDEAD就用来表示持久化的object format。再后来，persistence object被RMI(java远程调用)所代替，CAFEDEAD也就不复存在了。
There is an interesting story behind the origin of CAFEBABE moniker. James Gosling, the father of Java, and his friends used to visit a restaurant where Grateful Dead allegedly played before they became famous. After the death of Jerry Garcia, James and his friends started calling the place Cafe Dead. While James was looking for a magic number for the object file, he decided to use CAFEDEAD. Going along with the cafe theme, he came up with CAFEBABE as the magic number of the class file.
Jerry Garcia是Grateful Dead乐队的主唱兼吉他手。James Gosling被称为“Java之父”。
这张图是Grateful Dead乐队的一张专辑的图片。关于“Grateful Dead”名字的来历，有下面一段英文描述。它讲了一个小的故事场景：有一个人死去了，另外一个人，出于怜悯之情，为死去的那个人举办了葬礼，死去的那个人的灵魂对这个人心存感激之情，那么Grateful Dead就指“已经死去的、心怀感激之情的那个人的灵魂”。这与中文翻译后的“感恩而死”差距就非常大。
The name "Grateful Dead" was chosen from a dictionary. According to Phil Lesh, "[Jerry Garcia] picked up an old Britannica World Language Dictionary ... [and] ... In that silvery elf-voice he said to me, 'Hey, man, how about the Grateful Dead?'" The definition there was "the soul of a dead person, or his angel, showing gratitude to someone who, as an act of charity, arranged their burial".
对于Grateful Dead的形象，IMHO，可能与《海贼王》中布鲁克的形象有点类似。
至此，我们知道，在.class
文件当中，Magic Number的值是0xCAFEBABE
。如果我们修改一下Magic Number的值，会出现什么情况呢？
import lsieun.utils.FileUtils; import lsieun.utils.HexUtils; import lsieun.utils.ReadUtils; public class C_Change_MagicNumber { public static void main(String[] args) { String filepath = FileUtils.getFilePath("sample/HelloWorld.class"); byte[] bytes = ReadUtils.readByPath(filepath); String magic_str = "CAFEBABF"; // 注意：正确的值应该是CAFEBABE， byte[] magic_bytes = HexUtils.parse(magic_str); for (int i = 0; i < magic_bytes.length; i++) { bytes[i] = magic_bytes[i]; } FileUtils.writeBytes(filepath, bytes); } }
$ java HelloWorld Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value<PHONE_NUMBER> in class file HelloWorld at java.lang.ClassLoader.defineClass1(Native Method)
Magic Number，可理解为“魔法般突然出现意义不明的数字”。在中文语言环境当中，一般都是将Magic Number称之为“魔数”。 我个人观点，觉得，“魔数”并不是一个好的翻译，因为看到“魔数”，我想到的是“妖魔鬼怪”的“魔”，而不是“魔法”的“魔”。 也有人将Magic Number翻译成“神奇数字”，我也觉得不好，因为我理解不出有任何“神奇”的地方。 笔记：我觉得，对magic number的中文翻译都不是特别好，用magic number就挺好的。
The term magic number also refers to the bad programming practice of using numbers directly in source code without explanation. In most cases this makes programs harder to read, understand, and maintain. Although most guides make an exception for the numbers zero and one, it is a good idea to define all other numbers in code as named constants. 笔记：magic number也可以表示一种坏的编程习惯。
除了0xCAFEBABE
，我们也可以将十六进制数组合成其他容易记忆的单词，来用作Magic Number。
000FF1CE (office) 5CA1AB1E (scalable) 7E1ECAS7 (telecast) ABADBABE (a bad babe) BA5EBA11 (baseball) BADDEED5 (bad deeds) C0DEB10B (code blob) CA11AB1E (callable) CA55E77E (cassette) CAFEBABE (cafe babe) DA7ABA5E (database) DEADBEEF (dead beef) DEADC0DE (dead code) F007BA11 (football) FACEB00C (facebook) FEEDBABE (feed babe)
关于Magic Number，一共需要记住两个知识点：
0xCAFEBABE
。ClassFormatError
的错误。


Why Another ML Blog?
Why?
With the existence of many great machine learning blogs it seems like noise pollution to put another one out there. I decided to make one anyway mostly for my own enjoyment and education. I spent years tutoring and TAing while attending college and it was the most rewarding work I’ve ever done. I also came to believe that I never really understood something until I’ve taught it, so this blog is an opportunity to “teach” anything I really want to understand.
Planned Posts
Looking forward, there are a few topics I’d like to write about, either because they struck me as especially important during my education, they align with my research interests, or because I haven’t found resources that cover them how I would like to see them covered. Here’s a short list of some of these topics:
- The LASSO problem
- Motivation
- Theoretical guarantees
- Algorithms for computation
- Deep learning for point clouds
- Machine learning on sets
- Topological considerations for generative models
- Connections between GANs, VAEs, and Normalizing Flows
- Essential topics in computer science for ML
- High performance computing
- GPU programming
- Parallel and distributed programming
- Practical implementation of hybrid deep learning / graphical model algorithms


PubCode is a prototype platform for developers to present their code in a formal environment, while showcasing useful metadata for researchers regarding the development, upkeep, and activity levels of their code to prospective users. Enhancing the users search for an appropriate tool for their given task provides an incentive to cite of these open source tools, providing further interest in both its use and further development.
Find code from top publications in cutting-edge fields like Artificial Intelligence, Genomics, and Neuroscience.
With unique identifiers associated with author name and version, authors can easily share metrics on usage.
We gather code from journals that require code to be documented and open source.


| Start Time | |||
| End Time | |||
| Duration | |||
| Status | |||
| Exit Code | |||
| Exit Message | |||
| Job Parameters |
|
| Step Name | Reads | Writes | Commits | Rollbacks | Skips (Read/Process/Write) | Duration | Step Status | Exit Message |
|---|---|---|---|---|---|---|---|---|


Code Date Weekday Hour Status No visit requests available Code Date Weekday Hour Status Status Status


ANY GIVEN SUNDAY
STARRING: Al Pacino, Jamie Foxx, Dennis Quaid, James Woods, Cameron Diaz DIRECTOR: Oliver Stone WRITTEN BY: John Logan, Oliver Stone, Rob Huizenga (novel), Pat Toomay (novel)
The worlds of professional sports and movies are very similar in a lot of ways: both involve spending vast sums of money for the sake of entertainment; both bring adoration and fame to highly paid, instantly recognizable stars, and both feature central figures upon whom all the pressure rests. When they succeed, they are respected and admired, sometimes even immortalized. When they fail, they shoulder the blame and often lose their jobs. Whether you call them 'directors' or 'coaches,' their lives are usually summed up, rightly or wrongly, in terms of their work. Which brings us to Tony D'Amato, the fictional football coach and central character in nonfictional director Oliver Stone's Any Given Sunday. It's not hard to see why the beleaguered Stone wanted to do a film about a guy whose passion remains firm despite being second-guessed, criticized, and told he's washed up. It's this passion, both D'Amato's and Stone's, that makes the film worth watching.
D'Amato (Pacino, looking a bit like Pat Riley after a huge loss) is the coach of the Miami Sharks, a team whose four-game losing skid is compounded by the injury of star quarterback Jack "Cap" Rooney (Quaid) just as the playoffs are approaching. Luckily, third-stringer Willie Beamen (former sitcom star Foxx) is an undiscovered talent, and he gives the team a much-needed boost in the late season. Not so luckily, he's as mouthy as he is talented, and his public remarks about the team and particularly D'Amato quickly cause friction as his fame increases. To make D'Amato's problems worse, he's got to deal with ice-cold Christina Pagniacci (Diaz, attacking the role with unsmiling relish), the win-at-any-cost owner who has inherited the Sharks from her father. To her, the players-- and coach-- are mere stocks to be traded away when their value shows signs of diminishing. Then there's team doctor Harvey Mandrake (Woods, in fine snarky form), who uses the players' willingness to sacrifice their bodies as justification for his lack of medical ethics. Worst of all is sportswriter Jack Rose (Stone film regular John C. McGinley), who attacks D'Amato relentlessly in print and on TV. If there were any lingering doubts as to Stone's opinion of critics, they can now be safely put to rest.
None of these characters are particularly original, and the football games that drive the plot are no less predictable in their melodramatic, down-to-the-wire outcomes than any other standard sports-movie fare. This is not to say that the games aren't exciting to watch. The camera pans in blurry zigzags and quick shots of bodies in motion; linebackers crouch like hunting tigers, stalking their quarterback prey. The hits are huge, bone-crunching affairs punctuated by loud, beat-heavy music. What really makes Any Given Sunday work, though, are the characteristic Stone touches: his fascinating depiction of the machinations behind the scenes, his lengthy scenes of charged dialogue, and especially his moralistic approach to the effect of television and big money on athletes, coaches, and the game itself. Football players have often been called modern gladiators; Stone takes the metaphor one step further, using the famous Ben-Hur chariot race to make his point. Like the hapless charioteers who fall and are crushed by their onrushing rivals, today's pro football players are slaves to the spectacle, meat for the grinder of televised entertainment. The only thing the highlight reels crave more than a Hail Mary pass, Stone points out, is footage of a player puking or a blown knee. Even more than Quaid's aging star quarterback, the tragedy of this fate is embodied in the character of Luther "Shark" Lavay, who is willing to literally risk his life for his performance bonus. Former New York Giants great Lawrence Taylor gives the role a naturalness and depth of feeling that could only have come from living it.
Any Given Sunday is both a nostalgic remembrance of professional football's storied history, and an ultimately optimistic look at how today's game relates to that tradition. It may be bigger, richer, and more slick than ever before, but the love of the game is still the most important thing. In that, the worlds of sports and movies are very similar indeed.
GRADE: ***
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


This privacy policy sets out how Tech Mentors uses and protects any information you provide when using this website.
Tech Mentors is committed to protecting your privacy. We will only request and use personally identifiable information in accordance with this privacy statement.
Tech Mentors may change this policy from time to time by updating this page. Please periodically check this page to ensure that you are happy with any changes. You may view the history of this Privacy Policy on GitHub.
This policy is effective from 25th May 2018.
Personal data relates to data that can identify a living individual. Identification can be by the information alone or in conjunction with any other information in the data controller’s possession or likely to come into such possession.
Tech Mentors is the data controller for this website. This means it decides how your personal data is processed and for what purposes.
The Tech Mentors Data Protection Officer is:
Rory Primrose
Email:
Twitter: roryprimrose
We may collect the following information from you and/or an authentication provider such as Microsoft or Google:
We may collection the following additional information directly from you:
Tech Mentors complies with its obligations by keeping personal data up to date; by storing and destroying it securely; by not collecting or retaining excessive amounts of data; by protecting personal data from loss, misuse, unauthorised access and disclosure and by ensuring that appropriate technical measures are in place to protect personal data.
We use the personal information you provide to allow people to search for a mentor and to view a mentor profile. Searching for a mentor is available to the public who can search for a mentor profile by specifying filters of gender, spoken language and/or skill. Viewing a mentor profile will provide public access to all mentor profile information you provide to Tech Mentors with the exception of your email address.
Tech Mentors may run background processing tasks using the personal information you provide. These processes will only involve your personal data for the purposes of administrating this website and the data it holds. Background processing of personal information that involves a third party will only involve nominated third parties from the list below.
We collect your email address so that we may contact you privately for any matter related to Tech Mentors. Tech Mentors will only use your email address for this purpose. Your email address will only be available to a representative of Tech Mentors and the nominated third parties listed below. Tech Mentors will not make your email address available to the public.
Tech Mentors may share your email address and any other personal data with the following nominated third parties:
Any personal data provided to Tech Mentors is stored in the United States of America.
Tech Mentors uses encrypted transport mechanisms (TLS via HTTPS for example) between all points of infrastructure that your personal data moves through. Tech Mentors also encrypts your personal data when stored (encrypted as rest).
We keep your personal data indefinitely. You may delete your account and personal data at any time using the Privacy Controls under your profile administration page.
You have the following rights with respect to your personal data:
You may choose to restrict the collection or use of your personal information in the following ways:
We will not sell, distribute or lease your personal information to third parties unless we are required by law to do so. We may use your personal information to contact you for any matter related to Tech Mentors.
If you believe that any information we are holding on you is incorrect or incomplete, please update, hide or delete your Tech Mentors profile as required.
If we wish to use your personal data for a new purpose, not covered by this Privacy Policy, then we will provide you with a new notice explaining this new use prior to commencing the processing and setting out the relevant purposes and processing conditions. Where and whenever necessary, we will seek your prior consent to the new processing.
To exercise all relevant rights, queries of complaints please in the first instance contact the
A cookie is a small file that asks permission to be placed on your computer's hard drive. Once you agree, the file is added and the cookie helps analyse web traffic or lets you know when you visit a particular site. Cookies allow web applications to respond to you as an individual. The web application can tailor its operations based on information stored in the cookie.
We use traffic log cookies to identify which pages are being used. This helps us analyse data about webpage traffic and improve our website in order to tailor it to customer needs. We only use this information for statistical analysis purposes and then the data is removed from the system.
Overall, cookies help us provide you with a better website by enabling us to monitor which pages you find useful and which you do not. A cookie in no way gives us access to your computer or any information about you, other than the data you choose to share with us.
You can choose to accept or decline cookies. Most web browsers automatically accept cookies, but you can usually modify your browser setting to decline cookies if you prefer. This may prevent you from taking full advantage of the website.
Our website may contain links to other websites of interest. However, once you have used these links to leave our site, you should note that we do not have any control over that other website. Therefore, we cannot be responsible for the protection and privacy of any information that you provide whilst visiting such sites and this privacy statement does not govern such sites. You should exercise caution and look at the privacy statement applicable to the website in question.


[1]
top notch service recovery by general manager - this west hollywood gem is like a home away from home


TimeSearcher
TimeSearcher was created by Harry Hochheiser
in Java as TimeSearcher 1.
Parts of
TimeSearcher 1 was rewritten in C# by Amir Khella as
TimeSearcher 2.
The pattern search was added in cooperation with Paolo Buono.
Aleks Aris is the current person working on TimeSearcher 2.
The TimeSearcher project is being developed
under the supervision of
Catherine Plaisant and Ben Shneiderman.
Human-Computer Interaction Laboratory,
Institute for Advanced Computer Studies, and
Computer Science Department
Copyright (C), University of Maryland, 2005
htttp://www.cs.umd.edu/hcil/timesearcher


What to do
- Record a one-on-one interview using Zoom. Aim for a maximum interview of 30-45 minutes.
- If possible, cut the recording in segments based on (sub)topics of 15 min max.
- Upload the interview to Canvas for viewing as part of structured self-study. Add clear instructions for your students. For example, indicate when students should watch it, add a question, what to look for and/or and what they should be able to do or know afterwards. This way you activate your students while they watch the interview.
- Provide a Discussion Board in Canvas for students to add comments and ask questions after viewing (each segment). Next, invite students to upvote their favorite questions and comments. Consider awarding a bonus point for forum contributions and/or upvotes.
- Record a second interview with your guest-speaker of 30-45 min. Have him or her address the most upvoted questions and comments from the Discussion Board.
Tools to use
Why do this
With large groups, a live Zoom session is less feasible. Students might encounter technical problems which prevent them from (completely) following a live session and there are limits to the number of students that can participate in a Zoom-session. Therefore pre-recorded lectures are the way to go.
Ideally, your students watch the (full) interview in a ‘learning mode’ (active processing) instead of a ‘watching tv mode’ (passive processing). This may take up a lot of your students’ energy. Therefore, we recommend cutting the interview in segments. This way, your students can process the content and view each video with enough headspace. Plus, the longer the videos, the larger the file size, the upload time and playback time. At the same time, don’t worry all night if a video is longer than 15 min. When you add viewing instructions you encourage your students to watch the videos in a ‘learning mode’ too. A Discussion Board and a second interview allows your students to ‘engage’ with your guest and the content. Nothing is more frustrating in life than an unanswered question ;).
Tips
- Add a cliff-hanger to the first interview. For example, if your guest has a real life example, don’t tell the end of the story until the second interview.
- Add a short quiz to your video with Feedback Fruits. For example, to assess students’ understanding of the subject matter, to have your guest raise a question, or to have students think about what they would do in a real life example before your guest continues a story. This way you activate your students while they watch the interview and foster information processing. Plus, you and your guest receive feedback on what students (mis)understand.


WebAssembly is initially designed and implemented by browser vendors who are interested in meeting a variety of use cases. As design and implementation progresses they’ll need input and contributions from developers interested in using WebAssembly.
Interested in participating? We suggest you start by:
irc://irc.w3.org:6667/#webassembly
.With that background understood and communication set up, feel free to file issues in the WebAssembly design repository. Please join the W3C Community Group before sending pull requests: it provides the legal framework that protects the work in this repository. Make sure you’re affiliated with your company or organization in the Community Group, if any.
As WebAssembly moves forward we expect to form an official standards body, which will have its own contribution process to the specification.
Happy assembly!


Hello, my name is Cassie and I am a computer science major at Texas A&M. This website is still being worked on as I set up a portfolio for myself, and make a project out of my own personal website.
You can see my original website on wix
here, and view the progress on my new website
here.
Thanks for stopping by!


{% extends 'base.html' %} {% block title %} SusLab {% endblock %} {% block head %} {% endblock %} {% block body %}
| ExChange: Things Library | ExChange: Swap Shop | Sustainnovation |
| SusShop | SLC | Pool Sports |
| ReStore: Mending | ReStore: Recycling | Restore: Cleanup Drives |


Wiki Definition:
Machine learning (ML) is the study of computer algorithms that improve automatically through experience and by the use of data.[1] It is seen as a part of artificial intelligence. Machine learning algorithms build a model based on sample data, known as "training data", in order to make predictions or decisions without being explicitly programmed to do so.[2] Machine learning algorithms are used in a wide variety of applications, such as in medicine, email filtering, speech recognition, and computer vision, where it is difficult or unfeasible to develop conventional algorithms to perform the needed tasks.
Arxiv Co-Occurence:
Reward specification plays a crucial role in building safe and reliable machine learning systems that
are aligned with human values


<ui5-shellbar>
ShellBar
Application 1
Application 2
Application 3
Application 4
Application 5
App Finder
Settings
Edit Home Page
Help
Sign out
Application 1
Application 2
Application 3
Application 4
Application 5
App Finder
Settings
Edit Home Page
Help
Sign out
ShellBar with search and notifications
ShellBar with product switch and CoPilot


Entering Text
The easiest way to add text to a slide is to type it directly into any placeholder on the slide.If you want to add text outside a placeholder, add text by using the Text Box tool.
The steps to insert the text through text box do are as follow:
1.On the Insert menu, click Text Box .
2.To add text that doesn't wrap, click where you want to add the text, and start typing. or
To add text that does wrap, drag to where you want to add text, and then start typing.
Editing text
In powerpoint , once you write the text in the different placeholder , you can edit the text from the options available in the Edit Menu bar such as cut , copy , paste , undo , redo etc.
The steps to do the following tasks are as follows:
Cut and Paste
1.Select the text from the placeholder which you want to cut.
2. Click at the Edit Menu bar.
3. Click at Cut option from the Edit Menu.
4.Then position the insertion point where you want to paste if you want to do so.
5. Select the paste option from the Edit Menu bar to paste the text.
Note: You can do the above task using Standard toolbar also.
Copy and Paste
1.Select the text from the placeholder which you want to copy.
2. Click at the Edit Menu bar.
3. Click at copy option from the Edit Menu.
4.Then position the insertion point where you want to paste.
5. Select the paste option from the Edit Menu bar to paste the text.
Note: You can do the above task using Standard toolbar also.
Undo and Redo
If you erase the text by mistake ,you can restore it without retyping it , Powerpoint remembers all of the editing you perform during the session,so you can "undo" almost every action you perform.If you undo an action , then change your mind again , you can instantly "redo"it. Steps to the respective task through Standard Toolbar are as following:
1. Pull down the undo button in the standard toolbar, a list of actions will be displayed. The item at the top of the list is the last action you performed.
2.Click on the item you want to undo.
3.If you want to reddo the same action , you can do it with the help of redo button availble next to undo button in the Standard toolbar.
Note: You can do the above task using the Edit Menu Bar also.


Others:
Nyan Bars
Tweet
Source
Blog
REGEXWORKS
is a regular expression test lab.
Blog
.
(
{{ demoText }}
)
Clear All
Here's what you do:
Paste in some input text to work with.
Choose how to break your input up. The default is by lines, but you can use a custom delimiter.
Add regular expressions to filter and transform the input chunks.
View the processed output, and debug using the detailed breakdown below.
Here's some demo setups you can try out:
Demo 1
– Typical 'foo' and 'bar' example.
Demo 2
– Hamlet's most famous soliloquy.
REGEXES
+
#{{ $index + 1 }}
Enabled
←
→
x
Match
Replace
Case sensitive
Global replace
Regex
Replacement
INPUT
OUTPUT
Split on:
Newlines
Custom regex:
DEBUG OUTPUT
Legend:
Regex matched/did not match string
Regex transformed/did not transform string
Line is/isn't in output
Regex is disabled
Line
Regex:
#{{ $index + 1 }}
In Output
{{ line.text }}


How to Use
Click inside cells to type the numbers from the known cells of your sudoku puzzle.
Once you have filled in all the cells you know, you are ready to start getting hints.
Buttons
-
Pencil Marks: shows the current list of available numbers in the empty cells (click a number to hide it)
-
Show Next Hint: shows any available hints (currently supports naked single and hidden single)
-
Do Hint: fills in the known cell from the previous hint
-
Link to this Board: gives you a link directly to this board for copying
-
Clear: starts fresh with an empty board


interface Filterable<DataStructureType, T>
Defines the interface, a data structure, which is filterable using a predicate function or Filter instance, must implement. |
|
interface Sortable<DataStructureType, T>
Defines the interface, a data structure, which is sortable using Comparable or Sorting instances, must implement. |
|
class TransactionalItemSet<ItemType : Item> : ItemSet<ItemType>
An extension of the class ItemSet, which allows to store the transactions, the item set occurs in. |


Hi, I have a question about changing what is displayed on the emonGLCD, but first I would like to thank all who have contributed to make this wonderful project what it is today, Thank-you.
Recently I built the emonGLCD that I'd had for 2 years.
To go with it I bought from the Shop an emoTx v3.4, an emonbase and the Pre-Loaded emonSD
So the system consitst of:-
emonGLCD v1.4 with SolarPV sketch
emonTx v3.4 with emonTxV3_4_DiscreteSampling
Raspberry Pi + emonBase RFM69Pi SD cards + Pre-Loaded emonSD microSD Card 17Jun2015.img
All at 868MHz
Also one of Robin's Mk2 routers.
The emontx as supplied it uses the discrete sampling sketch, the problem being the Power Router causes the samples to appear erratic. I did try the "emonTxV3_4_continuous_kwhtotals" sketch but failed, read about trying a 5V psu, but still appeared dead. Knowing my programing limitations, i gave up. Restored the "emonTxV3_4_DiscreteSampling" sketch.
Next I fitted a ct to ct3 input, monitoring the Immersion Heater current. My various programing attempts to subtract this current from ct1's, in the enonGLCD sketch, all failed.
To get a stable display I routed one of the Immersion Heater cores through the ct monitoring Import/Export. This cancels out the disruption caused by the Power Router. Wrong way and it doubles it. This gives stable displays on the emonGLCD and clear charts in emoncms. But it leaves with the problem of not knowing if Router is working, other than checking tank temperature.
What I would like to do is display ct4 value in place of temperature on the emonGLCD.
If this has been done could someone please point me to the relevant posts, or guide?
Thanks,
John.
Re: emonGLCD - Display 4 ct readings - help needed
It probably won't have been done, but it's not difficult, it just needs a big chunk of patience tracking the variables through the system to the GLCD and to where/how they are displayed.
But first, why did your emonTx 'die' when you loaded the 'continuous' sketch? The ac power supply is deliberately limited in order not to disrupt the ac waveform that it is measuring, so using a separate 5 V dc supply should have removed that problem completely. So it was more likely a configuration setting that stopped it. The likeliest revolve around the radio: did you select 868 MHz and did you get the correct RFM module ("#define RF69_COMPAT 0" for the RFM12B or "#define RF69_COMPAT 1" for the RFM69CW)
Your starting point is the "Tx_struct" in the emonTx sketch. You need to copy that into the GLCD sketch to ensure that the transmitted data is interpreted correctly. If the names are different (as in the 'continuous' sketch), you can either rename the variables in the 'struct' to keep the names used in the GLCD sketch, or rename them throughout the GLCD sketch and keep the names used in the emonTx sketch. See the BB article "RFM12B - Part 2..." about how the data is transmitted for the reasoning and background info. (You might need to edit your Pi's configuration too, to match that.)
Did you find the write-up on the GLCD software - it's attached to the "Solar_PV" sketch so presumably you have? What you'll probably want to do, rather than using the temperature display directly (which is only updated relatively slowly), is to put the CT4 power into the same place on the screen but update it along with the main display, i.e. in the 'fast' loop. To do that, You'll probably want to do as is done with the other powers around line 170 (i.e. accumulate kWh - but see below), then you'll need to add CT4 power to the parameter list passed into draw_solar_page (and remove the temperatures that you don't need any more), and then in the templates file, you need to convert the number to a string and write it to the correct place, following the example of the other powers.
[Don't be tempted to just use temperature and not rename it to power - you'll trip yourself up when you forget at some time in the future!]
One more point: the GLCD History does its own accumulation, so you might want to change that to use the values from the emonTx if/when you get the 'continuous' sketch working.
One final warning: the sketch uses pretty much all of the available memory, so if it fails after you've added things, you'll need to remove unused stuff (e.g. the installation 'type' you're not using).
Re: emonGLCD - Display 4 ct readings - help needed
Thank-you Robert, for your detailed answer, very much appreciated.
When I said dead, I was expecting the Red Led to start flashing. Thinking back, I did not try the Ardunio Serial Monitor. Computer not near the Consumer Unit.
Can a 5V psu just be plugged in, or is there any links, switches or software to be changed?
Yes, I had set "#define RF69_COMPAT 1" for the RFM69CW, and the frequency to 868MHz.
With the "emonTxV3_4_DiscreteSampling" sketch working with only these two changes, I was probably expecting "emonTxV3_4_continuous_kwhtotals" to do the same. Armed with the pointers you've given me, I will certainly be giving it another go.
Re emonGLCD. I am very pleased with it, even if a little late to the party. Hopefully I will not have to go down the route of changing the sketch. I take your point about the units.
John.
Re: emonGLCD - Display 4 ct readings - help needed
The 'continuous' sketch does not flash the LED, so it may well have been working, but (depending on what you're doing with your RPi) the data might have been rejected.
The serial output is:
... etc. (Power:Wh per channel × 4)
The 'discrete' and 'continuous' sketches are completely different, so don't expect too many similarities. The 'continuous' is Robin's work and
is essentially the same sketch asis derived from and has much in common with the diverter.You should remove the link at the end of the battery holder if you're using a 5 V supply with your V3.4.
Mine seems to work at ~250 V with the ac adapter, but at full rf power, operation below 230 V isn't guaranteed.
Re: emonGLCD - Display 4 ct readings - help needed
At least I can see now why it didn't work.
Now I have to decide the best place to make the changes.
Thanks for your help.
Re: emonGLCD - Display 4 ct readings - help needed
Some progress made, thanks.
Installed the 3.4 continuous monitoring, as standard apart from frequency.
Serial Monitor came out as per your printout. So emonTx was working.
I'm getting some readings but not always where I expect them.
emonTx Nchanges made to structure
typedef struct {
unsigned long msgNumber;
int realPower_CT1;
int realPower_CT2;
int realPower_CT3;
int realPower_CT4;
long wh_CT1;
long wh_CT2;
long wh_CT3;
long wh_CT4;
} Tx_struct; // revised data for RF comms
Tx_struct tx_data;
EmonHub
[[10]]
nodename = emonTx_1 # changes for continuous kwhtotals
firmware =emonTxV3_4_continuous_kwhtotals #V1_6_emonTxV3_4_DiscreteSampling
hardware = emonTx_(NodeID_DIP_Switch1:OFF)
[[[rx]]]
names = realPower_CT1, realPower_CT2, realPower_CT3, realPower_CT4, wh_CT1, wh_CT2, wh_CT3, wh_CT4,
#datacode = h
datacodes = L, h, h, h, h, l, l, l, l
#scales = 1,1,1,1,0.01,0.1,0.1, 0.1,0.1,0.1,0.1,1 #Firmware V1.6
units =W,W,W,W,wh,wh,wh,wh #units =W,W,W,W,V,C,C,C,C,C,C,p
#scales = 1,1,1,1,0.01,0.1 #Firmware =<V1.4 (un-comment)
#units =W,W,W,W,V,C #Firmware =<
The results I get in Nodes are:-
Nodes result
Name: emonTx_1
Node id: 10
Node key: emonTx_1
Node hardware: emonTx_(NodeID_DIP_Switch1:OFF)
Node firmware: emonTxV3_4_continuous_kwhtotals
Rx Variables
Rx ID Name Last updated Value
1 realPower_CT1 3s ago 1461 W
2 realPower_CT2 3s ago -13 W
3 realPower_CT3 3s ago 366 W
4 realPower_CT4 3s ago 0 W
5 wh_CT1 3s ago 0 wh
6 wh_CT2 3s ago 150 wh
7 wh_CT3 3s ago 142 wh
8 wh_CT4 3s ago 0 wh
9 3s ago 0
Tx ID Name Last updated Value
CT1 value rises all the time
Could you tell me if the Node data is correct, please?
Re: emonGLCD - Display 4 ct readings - help needed
You've lost count of the data items! Where is the name and the units for the message number? So everything is out of step. A clue is that CT1 value rises all the time, then surely that is (part of) the message number, not CT1 power. Message number is a tally to allow missing transmissions to be identified (check the code for what it actually is, I can't remember without checking). It is NOT the NodeID.
And DON'T DOUBLE-POST. I only have to compare both, then delete one or the other. The reason you didn't see it is under "Site Map" > "Read this before posting".
Re: emonGLCD - Display 4 ct readings - help needed
sorry


Setting it straight for Nov. 24, 2019
Allen Wright, a presenter, was misidentified Friday in the caption of a photo from the Oklahoma Hall of Fame.
Allen Wright, a presenter, was misidentified Friday in the caption of a photo from the Oklahoma Hall of Fame.


Developed using Google Chrome for Mac. Works well in Firefox. Some animation issues in Safari.
All css & html is hand-written. Nav bar designs inspired by Apple. Thanks Wayback Machine!
jQuery handles things like element resizing on input focus, and search suggestion display logic.
Animations are CSS3's -transition property.


|
ActiveTcl User Guide
|
||
Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, Tcl_ParseVarName, Tcl_ParseVar, Tcl_FreeParse, Tcl_EvalTokens, Tcl_EvalTokensStandard - parse Tcl scripts and expressions
#include <tcl.h>
int
Tcl_ParseCommand(interp, string, numBytes, nested,
parsePtr)
int
Tcl_ParseExpr(interp, string, numBytes, parsePtr)
int
Tcl_ParseBraces(interp, string, numBytes, parsePtr,
append, termPtr)
int
Tcl_ParseQuotedString(interp, string, numBytes, parsePtr,
append, termPtr)
int
Tcl_ParseVarName(interp, string, numBytes, parsePtr,
append)
CONST char *
Tcl_ParseVar(interp, string, termPtr)
Tcl_FreeParse(usedParsePtr)
Tcl_Obj *
Tcl_EvalTokens(interp, tokenPtr, numTokens)
Tcl_Obj *
Tcl_EvalTokensStandard(interp, tokenPtr,
numTokens)
These procedures parse Tcl commands or portions of Tcl commands such as expressions or references to variables. Each procedure takes a pointer to a script (or portion thereof) and fills in the structure pointed to by parsePtr with a collection of tokens describing the information that was parsed. The procedures normally return TCL_OK. However, if an error occurs then they return TCL_ERROR, leave an error message in interp's result (if interp is not NULL), and leave nothing in parsePtr.
Tcl_ParseCommand is a procedure that parses Tcl scripts. Given a pointer to a script, it parses the first command from the script. If the command was parsed successfully, Tcl_ParseCommand returns TCL_OK and fills in the structure pointed to by parsePtr with information about the structure of the command (see below for details). If an error occurred in parsing the command then TCL_ERROR is returned, an error message is left in interp's result, and no information is left at *parsePtr.
Tcl_ParseExpr parses Tcl expressions. Given a pointer to a script containing an expression, Tcl_ParseCommand parses the expression. If the expression was parsed successfully, Tcl_ParseExpr returns TCL_OK and fills in the structure pointed to by parsePtr with information about the structure of the expression (see below for details). If an error occurred in parsing the command then TCL_ERROR is returned, an error message is left in interp's result, and no information is left at *parsePtr.
Tcl_ParseBraces parses a string or command argument enclosed in braces such as {hello} or {string \t with \t tabs} from the beginning of its argument string. The first character of string must be {. If the braced string was parsed successfully, Tcl_ParseBraces returns TCL_OK, fills in the structure pointed to by parsePtr with information about the structure of the string (see below for details), and stores a pointer to the character just after the terminating } in the location given by *termPtr. If an error occurs while parsing the string then TCL_ERROR is returned, an error message is left in interp's result, and no information is left at *parsePtr or *termPtr.
Tcl_ParseQuotedString parses a double-quoted string such as "sum is [expr $a+$b]" from the beginning of the argument string. The first character of string must be ". If the double-quoted string was parsed successfully, Tcl_ParseQuotedString returns TCL_OK, fills in the structure pointed to by parsePtr with information about the structure of the string (see below for details), and stores a pointer to the character just after the terminating " in the location given by *termPtr. If an error occurs while parsing the string then TCL_ERROR is returned, an error message is left in interp's result, and no information is left at *parsePtr or *termPtr.
Tcl_ParseVarName parses a Tcl variable reference such as $abc or $x([expr $index + 1]) from the beginning of its string argument. The first character of string must be $. If a variable name was parsed successfully, Tcl_ParseVarName returns TCL_OK and fills in the structure pointed to by parsePtr with information about the structure of the variable name (see below for details). If an error occurs while parsing the command then TCL_ERROR is returned, an error message is left in interp's result (if interp isn't NULL), and no information is left at *parsePtr.
Tcl_ParseVar parse a Tcl variable reference such as $abc or $x([expr $index + 1]) from the beginning of its string argument. The first character of string must be $. If the variable name is parsed successfully, Tcl_ParseVar returns a pointer to the string value of the variable. If an error occurs while parsing, then NULL is returned and an error message is left in interp's result.
The information left at *parsePtr by Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, and Tcl_ParseVarName may include dynamically allocated memory. If these five parsing procedures return TCL_OK then the caller must invoke Tcl_FreeParse to release the storage at *parsePtr. These procedures ignore any existing information in *parsePtr (unless append is non-zero), so if repeated calls are being made to any of them then Tcl_FreeParse must be invoked once after each call.
Tcl_EvalTokensStandard evaluates a sequence of parse tokens from a Tcl_Parse structure. The tokens typically consist of all the tokens in a word or all the tokens that make up the index for a reference to an array variable. Tcl_EvalTokensStandard performs the substitutions requested by the tokens and concatenates the resulting values. The return value from Tcl_EvalTokensStandard is a Tcl completion code with one of the values TCL_OK, TCL_ERROR, TCL_RETURN, TCL_BREAK, or TCL_CONTINUE. In addition, a result value or error message is left in interp's result; it can be retrieved using Tcl_GetObjResult.
Tcl_EvalTokens differs from Tcl_EvalTokensStandard only in the return convention used: it returns the result in a new Tcl_Obj. The reference count of the object returned as result has been incremented, so the caller must invoke Tcl_DecrRefCount when it is finished with the object. If an error or other exception occurs while evaluating the tokens (such as a reference to a non-existent variable) then the return value is NULL and an error message is left in interp's result. The use of Tcl_EvalTokens is deprecated.
Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, and Tcl_ParseVarName return parse information in two data structures, Tcl_Parse and Tcl_Token:
typedef struct Tcl_Parse { char *commentStart; int commentSize; char *commandStart; int commandSize; int numWords; Tcl_Token *tokenPtr; int numTokens; ... } Tcl_Parse; typedef struct Tcl_Token { int type; char *start; int size; int numComponents; } Tcl_Token;
The first five fields of a Tcl_Parse structure are filled in only by Tcl_ParseCommand. These fields are not used by the other parsing procedures.
Tcl_ParseCommand fills in a Tcl_Parse structure with information that describes one Tcl command and any comments that precede the command. If there are comments, the commentStart field points to the # character that begins the first comment and commentSize indicates the number of bytes in all of the comments preceding the command, including the newline character that terminates the last comment. If the command is not preceded by any comments, commentSize is 0. Tcl_ParseCommand also sets the commandStart field to point to the first character of the first word in the command (skipping any comments and leading space) and commandSize gives the total number of bytes in the command, including the character pointed to by commandStart up to and including the newline, close bracket, or semicolon character that terminates the command. The numWords field gives the total number of words in the command.
All parsing procedures set the remaining fields, tokenPtr and numTokens. The tokenPtr field points to the first in an array of Tcl_Token structures that describe the components of the entity being parsed. The numTokens field gives the total number of tokens present in the array. Each token contains four fields. The type field selects one of several token types that are described below. The start field points to the first character in the token and the size field gives the total number of characters in the token. Some token types, such as TCL_TOKEN_WORD and TCL_TOKEN_VARIABLE, consist of several component tokens, which immediately follow the parent token; the numComponents field describes how many of these there are. The type field has one of the following values:
After Tcl_ParseCommand returns, the first token pointed to by the tokenPtr field of the Tcl_Parse structure always has type TCL_TOKEN_WORD or TCL_TOKEN_SIMPLE_WORD. It is followed by the sub-tokens that must be concatenated to produce the value of that word. The next token is the TCL_TOKEN_WORD or TCL_TOKEN_SIMPLE_WORD token for the second word, followed by sub-tokens for that word, and so on until all numWords have been accounted for.
After Tcl_ParseExpr returns, the first token pointed to by the tokenPtr field of the Tcl_Parse structure always has type TCL_TOKEN_SUB_EXPR. It is followed by the sub-tokens that must be evaluated to produce the value of the expression. Only the token information in the Tcl_Parse structure is modified: the commentStart, commentSize, commandStart, and commandSize fields are not modified by Tcl_ParseExpr.
After Tcl_ParseBraces returns, the array of tokens pointed to by the tokenPtr field of the Tcl_Parse structure will contain a single TCL_TOKEN_TEXT token if the braced string does not contain any backslash-newlines. If the string does contain backslash-newlines, the array of tokens will contain one or more TCL_TOKEN_TEXT or TCL_TOKEN_BS sub-tokens that must be concatenated to produce the value of the string. If the braced string was just {} (that is, the string was empty), the single TCL_TOKEN_TEXT token will have a size field containing zero; this ensures that at least one token appears to describe the braced string. Only the token information in the Tcl_Parse structure is modified: the commentStart, commentSize, commandStart, and commandSize fields are not modified by Tcl_ParseBraces.
After Tcl_ParseQuotedString returns, the array of tokens pointed to by the tokenPtr field of the Tcl_Parse structure depends on the contents of the quoted string. It will consist of one or more TCL_TOKEN_TEXT, TCL_TOKEN_BS, TCL_TOKEN_COMMAND, and TCL_TOKEN_VARIABLE sub-tokens. The array always contains at least one token; for example, if the argument string is empty, the array returned consists of a single TCL_TOKEN_TEXT token with a zero size field. Only the token information in the Tcl_Parse structure is modified: the commentStart, commentSize, commandStart, and commandSize fields are not modified.
After Tcl_ParseVarName returns, the first token pointed to by the tokenPtr field of the Tcl_Parse structure always has type TCL_TOKEN_VARIABLE. It is followed by the sub-tokens that make up the variable name as described above. The total length of the variable name is contained in the size field of the first token. As in Tcl_ParseExpr, only the token information in the Tcl_Parse structure is modified by Tcl_ParseVarName: the commentStart, commentSize, commandStart, and commandSize fields are not modified.
All of the character pointers in the Tcl_Parse and Tcl_Token structures refer to characters in the string argument passed to Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, and Tcl_ParseVarName.
There are additional fields in the Tcl_Parse structure after the numTokens field, but these are for the private use of Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, and Tcl_ParseVarName; they should not be referenced by code outside of these procedures.
backslash substitution, braces, command, expression, parse, token, variable substitution
Copyright © 1997 Sun Microsystems, Inc. Copyright © 1995-1997 Roger E. Critchlow Jr.


Karthik Ram
is the co-founder of rOpenSci
and a data science fellow at the Berkeley Institute for Data Science
(BIDS) at UC Berkeley.
He is also a research scientist at the Berkeley Initiative for Global Change Biology.
Karthik is an
active member in the open science and reproducible research community.
He tweets at @_inundata
and blogs at Inudata.