If you love Telegram but don't want to leave Discord then you'll be pleased to find we've built a bridge in this channel. If you'd like to join the group in the Telegram app you can find it here: https://t.me/KomodoPlatform_Official.
100 messages
Before 05-Dec-19 12:00 AM
GatewayBOT07-Jun-19 05:50 PM
[telegram] <Dimension 9> Many thanks...got it...is it safe now in version 0.6.0-13? (re @Sungonightly: If you still have problems, write to me personally, then I make several screenshots about the process)
[telegram] <Sungonightly> Yes i think so (re @Dimension 9: Many thanks...got it...is it safe now in version 0.6.0-13?)
[telegram] <Dimension 9> Many thanks...appreciate the help...so after all that...all I needed to do was update the wallet...I’ve been filling in forms to get it back from the account they’ve put all the funds in, creating new wallets etc... (re @Sungonightly: Yes i think so)
GatewayBOT07-Jun-19 06:44 PM
[telegram] <Umitkara48> Hey i forget this wallet seed i have 4 kmd please hack this thanks
[telegram] <Umitkara48>
jl777c07-Jun-19 06:46 PM
we cant
we only could save the funds using the data the hacker had, so if we didnt sweep it already, we dont have the ability
GatewayBOT07-Jun-19 06:50 PM
[telegram] <TonyStarkBR> (re @Matterbridge_kmdbot: [discord] <jl777c> it is more the position of the firemen who are breaking down doors to save people. really the damage to the door is not considered at all, as the building is in the process of burning down anyway)
[telegram] <TonyStarkBR> Well, my 2 cents... All info released by the team about what they've done and how to recover the funds are pretty clear!

Sadly, because otherwise I'd agree with you... ♂ (re @Keytothegate: Regarding the possible bad and / or misinformed rumors or "news" in social media about the whole hack case: After everything that the team and community has done we owe it to Komodo to correct these and comment on wordt fudders.  If so, just look it up in the block explorer and you should find the TXID there (re @Dimension 9: I have no access to this in my Agama wallet...there is no transactions shown...its balck with a message saying "Connection error etc" I can see any transaction out of the wallet!)
jl777c07-Jun-19 06:57 PM
any help about fixing the social media trolling is much appreciated. feel free to start posts about how it saved you from the hacker and the alternative of just doing nothing would have been a horrible choice, the one the trolls are suggesting
GatewayBOT07-Jun-19 06:58 PM
[telegram] <Dimension 9> Sorted it now...thanks (re @TonyStarkBR: Do you know your (old) address? If so, just look it up in the block explorer and you should find the TXID there)
[telegram] <Sungonightly> (re @Dimension 9: Sorted it now...thanks)
[telegram] <Tammy> Selling nudes
[telegram] <TonyStarkBR> Doing nothing would put you in bad light and sell more newspapers... You've FUBAR the media narrative... ♂ (re @Matterbridge_kmdbot: [discord] <jl777c> any help about fixing the social media trolling is much appreciated. feel free to start posts about how it saved you from the hacker and the alternative of just doing nothing would have been a horrible choice, the one the trolls are suggesting)
[telegram] <TonyStarkBR> (re @Dimension 9: Sorted it now...thanks)
gcharang07-Jun-19 07:15 PM
Anyone who still has the Komodo version of agama installed (0.3.6/0.3.5/0.3.4/mobile) please uninstall them
you don't need it, just having a backup of old seed is enough for any future use
GatewayBOT07-Jun-19 07:19 PM
[telegram] <mo7881> Can someone clarify, I moved over my kmd to ledger about a year ago but so have some other kmd asset tokens in my agama which I have logged in or opened since.
From my understanding the seeds are only sent during the login process. If I haven't logged in are they safe?
gcharang07-Jun-19 07:20 PM
mo7881
did you use the same ledger seed in agama to access the assetchains?
GatewayBOT07-Jun-19 07:21 PM
[telegram] <mo7881> I never used my ledger seeds. I used the luke Childs app to claim
[telegram] <mo7881> I'm mostly concerned with my other asset tokens like chainzilla
[telegram] <PTYX11> Chainzilla is compatible with ledger on Magnum Wallet (re @mo7881: I'm mostly concerned with my other asset tokens like chainzilla)
[telegram] <Acura360>
Anyone who still has the Komodo version of agama installed (0.3.6/0.3.5/0.3.4/mobile) please uninstall them
you don't need it, just having a backup of old seed is enough for any future use
jl777c07-Jun-19 07:24 PM
if you used the cli window and agama saw the seed, that is bad too
This is a video tutorial to claim KMD interest if you're using the Ledger hardware wallet. Follow this link for the written guide: https://support.chainzilla...
[telegram] <PTYX11> @mo7881
[telegram] <mo7881> Thanks I will import into magnum. I already tested it out. Will transfer out from there.
[telegram] <mo7881> I wasn't affected by the sweep was wondering if it was dangerous to launch agama to send the assets out
[telegram] <mo7881> But I'll just recover from the seed
GatewayBOT07-Jun-19 07:41 PM
[telegram] <Keytothegate> Yeah I think reasonable people will listen. I explained the situation and how insanely good the actions taken were by the team and community couple of hours ago in chico crypto tg-channel to admin who was calling komodo scum. And he took it well and it also brought up some other needed talk about komodo and for example wallet security risks (re @TonyStarkBR: Well, my 2 cents... All info released by the team about what they've done and how to recover the funds are pretty clear!

Sadly, because otherwise I'd agree with you... ♂)
jl777c07-Jun-19 07:41 PM
thanks!
every single public post like that helps
GatewayBOT07-Jun-19 07:45 PM
[telegram] <Keytothegate> Only people who cannot tell the difference between a car and a road or wallet and blockchain won't understand when you give them facts. And it was for the benefit of all, kmd investors, ecosystem and whole crypto (because also btc's were rescued. It was good in general. And funny fact no one is yelling btc is scam because of wallet hack)
[telegram] <Keytothegate> Plus this should bring some attention to wallet security issues in general. Something that can benefit others too.
[telegram] <Keytothegate> I can see that there might be some value in giving out some statements and maybe interviews regarding the incident. Both to correct misinformation and fud and also maybe there is even some marketing value to be gained in some eyes (re @Matterbridge_kmdbot: [discord] <jl777c> every single public post like that helps)
[telegram] <Andy> Yeah all part of the rebranding (re @Keytothegate: I can see that there might be some value in giving out some statements and maybe interviews regarding the incident. Both to correct misinformation and fud and also maybe there is even some marketing value to be gained in some eyes)
GatewayBOT07-Jun-19 08:00 PM
[telegram] <Keytothegate> It is an opportunity to tell the facts and let em decide. I believe most would like the actions taken and the result. And on top of that it's an opportunity to tell what is coming from Komodo. Turning possible bad publicity in to good.
GatewayBOT07-Jun-19 08:08 PM
[telegram] <tele090> I feel google form what next ? Waite email ?
[telegram] <Keytothegate> Couldn't even watch till the end, had to stop at like 75% cause felt like my iq was starting to melt down.  But maybe interview dealing with komodo ecosystem news and also about the incident with some respected youtuber would do good? (re @yorklab: I'm a bit late, but I made a comment on that fud YouTube post
https://t.me/KomodoPlatform_Official/139547)
[telegram] <Jaime_Meneguele> Kmd is off in binance?
[telegram] <at_mw> Guys what is the versus agama version, where do i find this?
[telegram] <Skelet0r_1> Forwarded from xmaik005: Hi Binance Community,
Our system is under a system maintenance/upgrade by tech team. Trading stops. Funds are SAFU! Sorry for the inconvenience. We hope it will resume shortly.
Thanks for your patience and support!
Desktop App for SuperNET DAPPs. Contribute to VerusCoin/Agama development by creating an account on GitHub.
[telegram] <Jaime_Meneguele> All coins or kmd? (re @Skelet0r_1: Hi Binance Community,
Our system is under a system maintenance/upgrade by tech team. Trading stops. Funds are SAFU! Sorry for the inconvenience. We hope it will resume shortly.
Thanks for your patience and support!)
[telegram] <Skelet0r_1> All
[telegram] <Jaime_Meneguele> Ty bro.
[telegram] <Skelet0r_1> No problem
[telegram] <Skelet0r_1> Now send 1 eth
[telegram] <Skelet0r_1>
GatewayBOT07-Jun-19 08:57 PM
[telegram] <DigitalWealthCreator> Which wallet is the best for staking Komodo token?(edited)
[telegram] <Skelet0r_1> Mine. Send them (re @DigitalWealthCreator: Which wallet is the best for staking Komodo token?)
[telegram] <CaptainButters> Chameleon works well for me. (re @DigitalWealthCreator: Which wallet is the best for staking Komodo token?)
[telegram] <DigitalWealthCreator> Is this officially recommended on the Komodo website? I am looking for a wallet on the Komodo website that is the best for staking. I have AGAMA and am trying to replace it. Thanks. AGAMA works fine in the past but something has muddied the waters lately.... (re @CaptainButters: Chameleon works well for me.)
[telegram] <CaptainButters> Idk (re @DigitalWealthCreator: Is this officially recommended on the Komodo website? I am looking for a wallet on the Komodo website that is the best for staking. I have AGAMA and am trying to replace it. Thanks. AGAMA works fine in the past but something has muddied the waters lately....)
[telegram] <Keytothegate> If you like Agama you can consider Verus Agama version (re @DigitalWealthCreator: Is this officially recommended on the Komodo website? I am looking for a wallet on the Komodo website that is the best for staking. I have AGAMA and am trying to replace it. Thanks. AGAMA works fine in the past but something has muddied the waters lately....)
GatewayBOT07-Jun-19 09:16 PM
[telegram] <DigitalWealthCreator> I tried that last night, but I am going to have to erase it and start over because it does not show my wallet username and I had to paste in the mnemonic but it did not allow my username to come up or allow for a password to be put into a field to open the wallet. (re @Keytothegate: If you like Agama you can consider Verus Agama version)
[telegram] <Werxadler> I changed everything to verus agama today, works fine for me (Arrr and KMD)... Tried also chameleon, works also nice for Android, but you have to pay small fees for transactions (claiming also), and i prefer wallets on PC (re @DigitalWealthCreator: I tried that last night, but I am going to have to erase it and start over because it does not show my wallet username and I had to paste in the mnemonic but it did not allow my username to come up or allow for a password to be put into a field to open the wallet.)
[telegram] <DigitalWealthCreator> I am going to uninstall the download I did last night and reinstall versus agama soon. I will tell you of my experience.
GatewayBOT07-Jun-19 09:43 PM
[telegram] <Werxadler> Make sure to use the newest version, i think it is v06.0 from github link, on verus homepage it is still v05. 6 (re @DigitalWealthCreator: I am going to uninstall the download I did last night and reinstall versus agama soon. I will tell you of my experience.)
Desktop App for SuperNET DAPPs. Contribute to VerusCoin/Agama development by creating an account on GitHub.
[telegram] <DigitalWealthCreator> I did use that one, but I was not even given the ICON to use on the screen of my computer like the old version. So everything is not the same as before. (re @Werxadler: Make sure to use the newest version, i think it is v06.0 from github link, on verus homepage it is still v05. 6)
[telegram] <Werxadler> You have to open the file where you saved latest version and open agama (re @DigitalWealthCreator: I did use that one, but I was not even given the ICON to use on the screen of my computer like the old version. So everything is not the same as before.)
[telegram] <DigitalWealthCreator> Yes, that is what I did. It is not the same as the other one that gave me a nice ICON on the screen of my computer that I could click on. Not as user friendly. (re @Werxadler: You have to open the file where you saved latest version and open agama)(edited)
[telegram] <Werxadler> You can just copy it to the desktop, everything else is same (re @DigitalWealthCreator: Yes, that is what I did. It is not the same as the other one that gave me a nice ICON on the screen of my computer that I could click on. Not as user friendly.)
[telegram] <DigitalWealthCreator> Working on it now.....
[telegram] <tele090> If recive tx send it from haked agama ?(edited)
[telegram] <tele090> Or need from verus agama + import priv
[telegram] <DigitalWealthCreator> You can tell the age group I am probably in...... LOL... (re @Werxadler: You can just copy it to the desktop, everything else is same)
[telegram] <tele090> Verus agama not lanch on my pc
[telegram] <Werxadler> I am as well, don't worry (re @DigitalWealthCreator: You can tell the age group I am probably in...... LOL...)
gcharang07-Jun-19 09:57 PM
use that privkey in any other wallet you can use
GatewayBOT07-Jun-19 09:58 PM
[telegram] <misi12> My kmd was Sent to some Adress not intermediate what to do now?
[telegram] <tele090> Its not start i not see window , restart pc not help (re @Matterbridge_kmdbot: [discord] <gcharang> tele090
verus agama not connecting?)(edited)
gcharang07-Jun-19 10:00 PM
misi12
check the explorer to see if your address received a small amoint of KMD from: R9JCEd6xnCxNUSpLrHEWvzPSh7CNXm7z75
GatewayBOT07-Jun-19 10:00 PM
[telegram] <tele090> If i send from old haked agama its be normal ?
gcharang07-Jun-19 10:01 PM
tele090
yes you can do it, if it works for you
but don't enter new seed in it
GatewayBOT07-Jun-19 10:01 PM
[telegram] <tele090> Ok its i understand
[telegram] <tele090> Next qestion were to send test tx to my new wallet ?
[telegram] <tele090> Claim wallet what i fill in google form rigth ?
gcharang07-Jun-19 10:03 PM
tele090
yes, send 0.0001 KMD to the new address you have submitted in the form
GatewayBOT07-Jun-19 10:04 PM
[telegram] <tele090> Ok ... and coins send to me ? Or need waite 1 day
[telegram] <tele090> I hope when login to agama kmd team not flush my kmd
gcharang07-Jun-19 10:07 PM
tele090
once you have sent the small transaction, you need to wait
maximum by june 15, your claim should be processed
maybe alot sooner
GatewayBOT07-Jun-19 10:08 PM
[telegram] <DigitalWealthCreator> Okay, I got the entry face of the wallet to come up after downloading the newest Agama wallet. But I want to make this act like the old wallet. Do I input my seed phrase which will open my wallet, but I would rather have this act like the old wallet by seeing the custom pin wallet name appear so I can then input the PIN like the old Agama wallet had me do? Please help me take the next step so my custom pin wallet name can appear and so I can then input my old PIN number so the address that my Komodo is on appears. I await your instructions. Thanks.
[telegram] <Werxadler> Check in settings, it's not a big deal (re @DigitalWealthCreator: Okay, I got the entry face of the wallet to come up after downloading the newest Agama wallet. But I want to make this act like the old wallet. Do I input my seed phrase which will open my wallet, but I would rather have this act like the old wallet by seeing the custom pin wallet name appear so I can then input the PIN like the old Agama wallet had me do? Please help me take the next step so my custom pin wallet name can appear and so I can then input my old PIN number so the address that my Komodo is on appears. I await your instructions. Thanks.)
[telegram] <DigitalWealthCreator> The danger here is in creating a new wallet with a new address so that my coins do not appear. Where do I go in the settings section and what do I do there? I have settings open right now. Thanks. (re @Werxadler: Check in settings, it's not a big deal)(edited)
gcharang07-Jun-19 10:16 PM
DigitalWealthCreator
as long as you have the seed(24 words), you can't lose access even if you forgot pin or anything like that
where did you create the seed phrase if not in the Verus Agama wallet?
GatewayBOT07-Jun-19 10:17 PM
[telegram] <DigitalWealthCreator> I created the seed phrase in the old Agama wallet and the seed phrase I have, but using the seed phrase will not recreate the wallet like I had it before with the name of the wallet and the PIN to open it up. I have all of that but want to recreate it in this new version of the AGAMA wallet. Thanks. (re @Matterbridge_kmdbot: [discord] <gcharang> DigitalWealthCreator
as long as you have the seed(24 words), you can't lose access even if you forgot pin or anything like that
where did you create the seed phrase if not in the Verus Agama wallet?)
[telegram] <Werxadler> Sorry i can't tell because i am not at my PC anymore, but as long you have saved your seed you will have access anyway (re @DigitalWealthCreator: The danger here is in creating a new wallet with a new address so that my coins do not appear. Where do I go in the settings section and what do I do there? I have settings open right now. Thanks.)
[telegram] <DigitalWealthCreator> See above. (re @Werxadler: Sorry i can't tell because i am not at my PC anymore, but as long you have saved your seed you will have access anyway)
Desktop App for SuperNET DAPPs. Contribute to VerusCoin/Agama development by creating an account on GitHub.
GatewayBOT07-Jun-19 10:20 PM
[telegram] <Werxadler> Sorry, i don't understand, if you have New adress and New seed you can install passwort and walletname under settings (re @DigitalWealthCreator: See above.)
[telegram] <DigitalWealthCreator> I have old address and old seed. I want to recreate the wallet like I had it before. But the instructions given above by admin are way too complicated to do on one computer I think. (re @Werxadler: Sorry, i don't understand, if you have New adress and New seed you can install passwort and walletname under settings)(edited)


Welcome to my personal portfolio! Below I've listed the languages/frameworks I'm proficient in as well as examples of some of my recent work! You can find my contact info at the bottom of the page! Thanks for visiting!
Find Out MoreI am a recent University of Arizona Web Development Program graduate with a passion for the user experience and being creative. I thrive on feedback and I have a strong determination to grow. I enjoy working in any size team where we can learn from each other. I love playing music, video games, and spending time with my family. In my spare time I also play snare drum for the Arizona Cardinals drumline.
Learn More!Thanks for taking a look at my portfolio! Feel free to reach out to me via email or call/text! I'll make sure to promptly respond.


Dgame.Window.Window
-
Declaration
struct
Window
;Window
is the rendering window where all drawable objects are drawn.Discussion
Note that the default clear-color is
Color.White
and the default VerticalSync is
, which means the Applications runs with full FPS.Window
.VerticalSync.DisableAuthor: Randy Schuett<EMAIL_ADDRESS>-
Declaration
enum
VerticalSync
: byte;The Window syncronisation mode. Default VerticalSyncronisation is
.VerticalSync
.Enable-
Declaration
Enable
VerticalSync is enabled
-
Declaration
Disable
VerticalSync is disabled
-
Declaration
LateSwapTearing
For late swap tearing
-
-
Declaration
enum
Style
: int;The specific window styles
-
Declaration
Default
Default
is Shown -
Declaration
Fullscreen
Window is fullscreened
-
Declaration
Desktop
Window has
Desktop
Fullscreen -
Declaration
Shown
Show the Window immediately
-
Declaration
Hidden
Hide the Window immediately
-
Declaration
Borderless
The Window has no border
-
Declaration
Resizeable
Window is resizeable
-
Declaration
Maximized
Maximize the Window immediately
-
Declaration
Minimized
Minimize the Window immediately
-
Declaration
InputGrabbed
Grab the input inside the window
-
Declaration
InputFocus
The Window has input (keyboard) focus
-
Declaration
MouseFocus
The Window has mouse focus
-
Declaration
MouseCapture
window has mouse captured (unrelated to InputGrabbed)
-
Declaration
AllowHighDPI
Window should be created in high-DPI mode if supported
-
-
Declaration
Matrix4x4
projection
;The current
projection
MatrixNote: This is intended for advanced users only.
See: Matrix4x4
-
Declaration
this(uint
width
, uintheight
, stringtitle
, uintstyle
= Style.Default, const GLContextSettingsgl
= GLContextSettings.init);CTor Position of the Window is default 100x, 100y and the VerticalSync is disabled
-
Declaration
this(const DisplayMode
mode
, stringtitle
, uintstyle
= Style.Default, const GLContextSettingsgl
= GLContextSettings.init);CTor Position is at 100x, 100y and the VerticalSync is enabled, if
mode
.refreshRate > 0 -
Declaration
this(const Rect
view
, stringtitle
, uintstyle
= Style.Default, const GLContextSettingsgl
= GLContextSettings.init);CTor Position is specifiable and the VerticalSync is disabled
-
Declaration
const nothrow @nogc void
loadProjection
();Load the projection Matrix, so that any change / transformation of the Matrix will now be visible
-
Declaration
const nothrow @nogc void
setClearColor
(const Color4bcol
);Set the color which this windows use to clear the buffer. This is also the background color of the window.
-
Declaration
const nothrow @nogc void
clear
();Clears the screen with the color you specified in setClearColor
-
Declaration
const nothrow @nogc bool
setVerticalSync
(VerticalSyncsync
);Set the VerticalSyncronisation mode of this window. Default VerticalSyncronisation is
VerticalSync.Enable
.See: VerticalSync enum
Returns if thesync
mode is supported. -
Declaration
nothrow @nogc VerticalSync
getVerticalSync
();Returns the current syncronisation mode.
See: VerticalSync enum
-
Declaration
nothrow @nogc Surface
capture
(Texture.Formatfmt
= Texture.Format.BGRA);Capture the pixel data of the current window and returns a Surface with this pixel data. You can also alter the format of the pixel data. Default is
Texture.Format.BGRA
. This method is predestinated for screenshots.Example:
Window wnd = ... ... wnd.capture().saveToFile("samples/img/screenshot.png");
-
Declaration
nothrow @nogc void
restore
();Restore the size and position, if the Window is minimized or maximized.
-
Declaration
nothrow @nogc void
raise
();Raises the Window above other Windows and set the input focus.
-
Declaration
nothrow @nogc void
maximize
();Make the window as large as possible.
-
Declaration
nothrow @nogc void
minimize
();Minimize the Window to an iconic representation.
-
Declaration
nothrow @nogc void
setBorder
(boolenable
);Set the border state of the Window.
-
Declaration
const nothrow @nogc bool
hasKeyboardFocus
();Returns if the keyboard focus is on this window.
-
Declaration
const nothrow @nogc bool
hasMouseFocus
();Returns if the mouse focus is on this window.
-
Declaration
nothrow @nogc void
setPosition
(intx
, inty
);Set a new position to this window
-
Declaration
nothrow @nogc void
setPosition
(const Vector2ivec
);Set a new position to this window
-
Declaration
nothrow @nogc Vector2i
getPosition
();Returns the current position of the window.
-
Declaration
nothrow @nogc void
setSize
(uintwidth
, uintheight
);Set a new size to this window
-
Declaration
nothrow @nogc void
setSize
(const Sizesize
);Set a new
size
to this window -
Declaration
nothrow @nogc Size
getSize
();Returns the size (width and height) of the Window
-
Declaration
nothrow @nogc Size
getDrawableSize
();Returns the size of the underlying drawable area (e.g. for use with glViewport). This method may only differ from getSize if you are using High-DPI.
-
Declaration
nothrow @nogc void
setMinimumSize
(uintwidth
, uintheight
);Set the minimum Size for the Window
-
Declaration
nothrow @nogc void
setMinimumSize
(const Sizesize
);Set the minimum Size for the Window
-
Declaration
nothrow @nogc Size
getMinimumSize
();Returns the minimum Size of the Window
-
Declaration
nothrow @nogc void
setMaximumSize
(uintwidth
, uintheight
);Set the maximum Size of the Window
-
Declaration
nothrow @nogc void
setMaximumSize
(const Sizesize
);Set the maximum Size of the Window
-
Declaration
nothrow @nogc Size
getMaximumSize
();Returns the maximum Size of the Window
-
Declaration
nothrow @nogc uint
getStyle
();Returns the Window Style.
See: Style enum
-
Declaration
const nothrow @nogc bool
poll
(Event*event
);Update the parameter
event
and set the data of the currentevent
in it.Return Value
true
, if there was a validevent
andfalse
if not. -
Declaration
const nothrow @nogc bool
wait
(Event*event
, inttimeout
= -1);Waits for the given Event. If the second parameter is greater then -1, it waits maximal
timeout
milliseconds. -
Declaration
const nothrow @nogc bool
push
(Event.Typetype
);Push an event of the given
type
inside the Event queue.Return Value
if the
push
was successfull or not. -
Declaration
const nothrow @nogc bool
hasEvent
(Event.Typetype
);Return Value
if inside of the Event Queue is an Event of the given
type
. -
Declaration
const nothrow @nogc bool
hasQuitEvent
();Return Value
if the current Event queue has the Quit Event.
-
Declaration
const nothrow @nogc void
draw
(Drawabled
);Draw a drawable object on screen
-
Declaration
nothrow @nogc void
display
();Make all changes visible on screen
-
Declaration
nothrow @nogc string
getTitle
();Returns the current title of the window.
-
Declaration
nothrow @nogc string
setTitle
(stringtitle
);Set a new
title
to this windowReturn Value
the old
title
-
Declaration
@nogc void
setIcon
(ref Surfacesrfc
);Set an icon for this window.
-
Declaration
nothrow @nogc int
getDisplayIndex
();Returns the index of the display which contains the center of the window
Note: If something went wrong (e.g. your Window is invalid), a negative value is returned
-
Declaration
nothrow @nogc void
setDisplayMode
(const DisplayModemode
);Set the DisplayMode when the Window is visible at fullscreen.
-
Declaration
nothrow @nogc DisplayMode
getDisplayMode
();Returns the DisplayMode when the Window is visible at fullscreen.
-
Declaration
nothrow @nogc bool
setFullscreen
(uintstyle
, booladaptProjection
= true);Use this function to (re)set Window's fullscreen states.
Discussion
style
may be Style.Fullscreen for "real" fullscreen with a display mode change or Style.Desktop for "fake" fullscreen that takes the size of the desktop Use 0 for windowed mode.
ifadaptProjection
istrue
(which is the default) the projection will automatically adapted. set it tofalse
if you want to specify your own projection afterwards. -
Declaration
nothrow @nogc void
toggleFullscreen
(booladaptProjection
= true);Toggle between Fullscreen and windowed mode, depending on the current state.
Discussion
if
adaptProjection
istrue
(which is the default) the projection will automatically adapted. set it tofalse
if you want to specify your own projection afterwards. -
Declaration
nothrow @nogc bool
isFullscreen
();Returns, if this Window is in fullscreen mode.
-


The ATP Dataset and The Filthy Rich Tennis Players
After approximately an hour thinking about an interesting dataset to test what I’ve learned from my recent studies in Data Science and Machine Learning, all of a sudden, someone at home starts to watch the USOpen. Perfect, that’s exactly what I was looking for. But where can you find the data? Well, let’s go to the source: the ATP Singles Ranking website.
Unfortunately, that’s not enough to study a little bit more in-depth
the patterns of the sport. We need a way of storing that data so we
can manipulate it — although they do make some structured data
available with some
files, those are very superficial statistics
- How to Get the Data
- Analyzing the Data
I assume the first section is not for everybody, but, still, the second part has many interesting conclusions and you can just skip to it.
As is the norm, I’ve made all the source code for this article
available in this
ATP Github Repo and you can
use it to get the stats for any given range of players and also from
any date in time
There are basically two ways of obtaining the necessary scraps from
the .html
files:
- Parsehub
- Python Web Scraping
The first method is way more easy-going and friendlier, but also much more expensive and time consuming — in terms of downloading time. Parsehub is a paid software which will slow down the free version — and limit the amount of pages per run — on purpose just so you feel more inclined to pay for the complete package. The subscription ranges from US$150 for the standard version to US$500 for the professional — what pro would use that software when he can get much more data much faster via programming? — version, not at all cheap. Personally, I wouldn’t recommend it if you want to get a big dataset (more than 200 web pages), but if it’s a small amount of data, Parsehub will get you going very fast: they have good tutorials and a nice interface.
You could use basically any language you like for this, but I’ll use
Python as it is very easy and has the very useful package
BeautifulSoup
First, you will need to send a request for the singles ranking web page and then obtain all the links for each player’s web page, this way we will be able to loop around each player’s statistics. These steps would be condensed to:
import requests
from bs4 import BeautifulSoup
N = 5
page_ranking = requests.get('https://www.atpworldtour.com/en/rankings/singles?rankDate=2018-08-27&rankRange=1-' \
+ str(N))
ranking = BeautifulSoup(page_ranking.content, 'html.parser')
ranking_list = list(ranking.findAll('td', {'class':'player-cell'}))
rank_url = []
for i in range(0, N):
a = str(list(ranking_list[i])[1])
b = 'https://www.atpworldtour.com' + \
a[(a.find('href="')+6):(a.find('>')-1)].replace('overview','')
rank_url.append([i+1,b])
As you can see from the for
loop, web scraping does not
yield the cleanest code in the universe, in fact, it looks very dirty,
but you usually just can’t avoid it, you will have to find the html
tag that contains the bit of text you need using the
find()
or findAll()
methods and cut out the
trash, which is inherently done case by case and mostly not pretty
— a more experienced coder will certainly find better solutions
than I dolist
and
str
commands to make things easier to deal with —
and to have normal Python objects instead of BeautifulSoup ones
— we get the string:
'
\n\r\n\t\t\tBreak Points
Converted\r\n\t\t	\n\r\n\t\t\t41%\r\n\t\t	\n
'
. With that string, we can then select only the part we want, the
percentage, with a slice like c = int(b[55:-16])
. And
that’s one of the easiest selections in this dataset.
page_plrstats = requests.get(rank_url[1][1] + 'player-stats')
plrstats = BeautifulSoup(page_plrstats.content, 'html.parser')
a = plrstats.findAll('table', {'class':'mega-table'})
b = str(list(list(list(a)[1])[3])[7])
c = int(b[55:-16])
One last thing I would like to point out is that using the
try
and except
Python blocks will make your
life much easier. Sometimes the player will not have the data or might
have an irregular formatting, so you don’t want to have errors popping
out all the time. As an example, the basic cell in my code for this
dataset is then:
# Service Games Won
try:
a = plrstats.find('table', {'class':'mega-table'})
b = str(list(list(a)[3])[17])
c = int(b[50:-16])
player_dict['serve_won'] = c
except:
print('serve won',i+1)
Both Parsehub and Python offer two very common file types for saving
data: csv
and json
. You may choose the
easiest for you, however, I highly recommend you use json, as it is
way easier to organize the data and write better structures, sometimes
csv’s can be marginally readable, csv is a bit too crude to my taste.
After making a list of dictionaries, you have all the ingredients to
save the data inside a json file, and this can be easily done with:
import json
name = 'atp_python_1-' + str(N) + '.json'
with open(name, 'w') as f:
for dic in players:
json.dump(dic, f)
f.write('\n')
Later, opening the file is similarly easy:
N = 1500
date = '2018-08-27'
name = 'atp_python_' + date + '_1-' + str(N) + '.json'
with open(name) as d:
players = [json.loads(line) for line in d]
Extracting the whole dataset for the first 1,500 — I wouldn’t go much further than that, there is not a lot of data beyond rank 1,500 — players took me a bit more than half an hour, about 50 players per minute — don’t be afraid of the prints you get on the screen, they happen when the extractor couldn’t get that particular datum from the player, most likely because there wasn’t any.
This will only be a brief analysis, I’ll leave a more in-depth and complete one to other posts; nonetheless, the conclusions are still interesting. I believe that (my) the saying “sport is the epitome of society” will resonate very strongly with you after this brief discussion.
Let’s start with a graph of the prize in tournaments versus the rank of the player:
The top left dots are the filthy rich dominating players Rafael Nadal,
Roger Federer and Novak Djokovic (and the dot around 60 million is
Andy Murray). That graph shows us a huge disparity in the wealth
distribution available to the players, much like society in general,
where we have 1% (even less nowadays) of the people owning 99% of the
wealth
Let’s take out the four top grossing players to take a closer look at the bottom curve:
The shape is pretty close to an exponential curve with a very steep decay, again the heavy mark of inequality. I wouldn’t call the players from rank 400 and above poor, but the difference to the top is quite staggering.
Another useful graph to take into account is that of the sum of the prize money up to a certain rank:
The total sum is about US$1.43 billion — damn, tennis is big — and we have 50% of that shared by only 50 players. In the ATP website, only about 2,000 players appear, but, in reality, around the world, there are more than 10,000 male professional players, giving us a 0.5% of the players controlling more than half of the prize budget, worse than society — that’s what pure competition will give you, after all, only one can be the best. Granted the curve is not as steep as expected and sponsorships are in general more valuable than prize money, the problem is not way too big, but when a low-ranked professional complains to you about his life, just give him a hug.
Now let’s analyze in more detail the problem of the bias in the weight and height for tennis players, i.e., a range of weight and height being dominant in tournaments.
The histograms of weight (kg) and height (cm) make it evident that the top players are biased towards a certain weight and height: ~78 kg (172 lbs) and ~185 cm (6.06 ft ~ 6’1). To make this more clear, let’s make it two dimensional:
With the scatter and histogram graphs, we can see the aglomeration around the 180 cm to 195 cm and 75 kg to 90 kg. This bias gets all the more clear when you highlight the heights and weights yielding millionaires:
We can see that there is an internal shape to the graph, and it seems very consistent, not that many outliers. Obviously, this is not unknown to tennis players or coaches, they can usually say, by just looking at someone’s physique, if he’s going to be a successful player or not. But how good would that sort of predicament be? — i.e., what is the accuracy of that predictor?
To answer that question I wrote a script that compares four Machine Learning algorithms — Decision Trees, Support Vector Machines (SVM), K-Nearest Neighbors and Gaussian Naive Bayes; SVM and GaussianNB are almost always best in this case — to see which one gives us the best results and then averaged their performances across 500 attempts. The results are quite astonishing:
- For low caps, that is, knowing if the player is going to get US$ 500,000 or more as prize money, you don’t get as good results, only 77.7% accuracy.
- For medium-high caps, such as US$ 1,000,000, you start to get good predictions at 83.3% accuracy.
- But the real deal starts when we put a higher cap, for example, at US$ 10,000,000: we can get up to 97% accuracy with the SVM and K-Neigh! — there isn’t that much data, so this is kind of questionable, but you get the idea.
Feel free to play with the predictor and see what you could hope for if you were (or are) a tennis player. As of me, I’m glad I didn’t try tennis as a profession, because with 500 tries I still wouldn’t be a millionaire a single millionaire.
I’ll continue to post about Machine Learning and this dataset will, most likely, be used. Other even more interesting conclusions will surely come forward and I intend to put my recent Deep Learning courses to use, which will invariably yield better predictors. Also, if you spot any mistakes (I had to do so many cross-checks to get to this point…) in my code or want to suggest an improvement, feel free to message me through Facebook or initiate an issue at Github.


labeled
by None at 2020-02-26 20:31:20.Superseded by #2.
closed
by None at 2020-02-26 20:31:22.head_ref_deleted
by None at 2020-02-26 20:31:23.Yes, I did advise that we'd need some time after the policy is drafted to have a release of the app that will reflect it.
head_ref_deleted
by None at 2020-02-26 13:18:22.referenced
by Axa Mei Liauw at 2020-02-26 14:08:46.referenced
by None at 2020-02-26 16:01:21.referenced
by None at 2020-02-26 13:21:58.merged
by None at 2020-02-26 13:21:58.closed
by None at 2020-02-26 13:21:58.head_ref_deleted
by None at 2020-02-26 13:22:03.assigned
by None at 2020-02-26 14:09:02.referenced
by Axa Mei Liauw at 2020-02-26 14:12:36.merged
by Axa Mei Liauw at 2020-02-26 14:12:36.closed
by Axa Mei Liauw at 2020-02-26 14:12:36.head_ref_deleted
by Axa Mei Liauw at 2020-02-26 14:12:39.Does this request mean that we can get rid of the "Recording Report" that was intended to support bulk recording by Admin Assistants? Yes we can remove this report.
Can we get rid of the entire "recorded" concept entirely? This might be useful, so let's leave it in for the moment.
Does Communications have recommended wording and a link for this? #612
Recorded column to the reporting data table.
unlabeled
by None at 2020-02-26 14:37:54.labeled
by None at 2020-02-26 14:37:57.milestoned
by None at 2020-02-26 14:37:59.assigned
by Kevin Reiss at 2020-02-26 14:42:40.@jpstroop indicated that request changes should be enough.
closed
by None at 2020-02-26 14:48:26.mentioned
by Jon Stroop at 2020-02-26 14:48:27.subscribed
by Jon Stroop at 2020-02-26 14:48:27.renamed
by None at 2020-02-26 15:17:53.Duplicate of #366
closed
by None at 2020-02-26 15:20:25.Assume this will be in the travel policy.
closed
by None at 2020-02-26 15:21:14.We have the link on the home page
closed
by None at 2020-02-26 15:24:22.head_ref_force_pushed
by Axa Mei Liauw at 2020-02-26 14:19:15.referenced
by None at 2020-02-26 15:31:17.merged
by None at 2020-02-26 15:31:17.closed
by None at 2020-02-26 15:31:18.head_ref_deleted
by None at 2020-02-26 15:31:24.referenced
by Axa Mei Liauw at 2020-02-26 14:08:46.closed
by None at 2020-02-26 16:01:22.No, I was told not to make that change at this time. If the need to further restrict this arises we will likely be asked to change the app to allow only admin assistants to become delegates.
assigned
by Axa Mei Liauw at 2020-02-26 13:30:12.closed
by Axa Mei Liauw at 2020-02-26 16:26:24.assigned
by None at 2020-02-26 13:10:30.closed
by Axa Mei Liauw at 2020-02-26 16:26:26.closed
by Axa Mei Liauw at 2020-02-26 16:26:31.head_ref_force_pushed
by None at 2020-02-26 19:18:40.renamed
by None at 2020-02-26 15:06:41.assigned
by None at 2020-02-26 19:27:43.I'll take an action to check if other transit has already been used. If it has not been used let's remove it.
assigned
by None at 2020-02-26 14:45:38.renamed
by None at 2020-02-26 19:52:32.closed
by Eliot Jordan at 2020-02-26 19:00:10.deployed
by Trey Pendragon at 2020-02-26 18:51:07.referenced
by Eliot Jordan at 2020-02-26 19:00:10.merged
by Eliot Jordan at 2020-02-26 19:00:10.closed
by Eliot Jordan at 2020-02-26 19:00:10.renamed
by Eliot Jordan at 2020-02-26 19:00:20.referenced
by Eliot Jordan at 2020-02-26 19:01:13.merged
by Eliot Jordan at 2020-02-26 19:01:13.closed
by Eliot Jordan at 2020-02-26 19:01:13.closed
by Eliot Jordan at 2020-02-26 19:01:13.closed
by Trey Pendragon at 2020-02-26 19:04:08.@tpendragon Made the change you suggested. Ready for re-review.
head_ref_force_pushed
by Eliot Jordan at 2020-02-26 18:15:41.mentioned
by Trey Pendragon at 2020-02-26 19:02:09.subscribed
by Trey Pendragon at 2020-02-26 19:02:09.referenced
by Trey Pendragon at 2020-02-26 19:04:08.merged
by Trey Pendragon at 2020-02-26 19:04:08.closed
by Trey Pendragon at 2020-02-26 19:04:08.head_ref_deleted
by Trey Pendragon at 2020-02-26 19:04:12.@roelmoon is gonna see if he can get a good conversion command.
mentioned
by Roel Munoz at 2020-02-26 20:00:28.subscribed
by Roel Munoz at 2020-02-26 20:00:28.closed
by Christina Chortaria at 2020-02-26 20:05:41.review_dismissed
by Eliot Jordan at 2020-02-26 18:18:56.head_ref_force_pushed
by Eliot Jordan at 2020-02-26 18:18:56.head_ref_force_pushed
by Eliot Jordan at 2020-02-26 19:04:14.referenced
by Christina Chortaria at 2020-02-26 20:05:41.merged
by Christina Chortaria at 2020-02-26 20:05:41.closed
by Christina Chortaria at 2020-02-26 20:05:41.head_ref_deleted
by Eliot Jordan at 2020-02-26 21:49:40.From Rails integration standpoint, I've been adjusting the BrowseEverything branch to support certain aspects of Rails which raised errors during integration: https://github.com/samvera/browse-everything/commit/36aa1fde9863d8b1d9aa3d0cf945a251a3a93436. Integrating activestorage
support for Rails 5.1.z required a bit more in terms of adjustment here: https://github.com/samvera/browse-everything/commit/c91218985566abea143195ecdae2b2a08ac86a58, as well as for https://github.com/pulibrary/figgy/commit/9e4cf594946d4cc7543d0dc1b32cba2f9d975095
I've also made some light improvements to the UI with https://github.com/samvera-labs/browse-everything-redux-react/commit/8ccd6c4666a731bbb010e482cc5cf93484c47746 and https://github.com/samvera-labs/browse-everything-redux-react/commit/c05c649bf1e6dc06603a47a99aeb7cfc41c4f429 (which starts down the path for supporting i18n).
Uploads now do work within BE, but I'm still working to integrate the UI with the "File Manager" button.
https://github.com/pulibrary/figgy/commit/dc9266f5386acafda4788804a559a288cbf2e930 and https://github.com/samvera/browse-everything/commit/61b352736b84a739193e72b5907b589a79c52573 were necessary in order to support single-file uploads using BE in the "File Manager" interface.
New Drop downs:
Accession - Person (linked) - Firm (linked)
Reference - ~~Author (linked)~~ (is multiple, which we can't do at the moment)
assigned
by Eliot Jordan at 2020-02-26 23:08:13.assigned
by Eliot Jordan at 2020-02-26 23:08:19.referenced
by Eliot Jordan at 2020-02-26 20:06:32.merged
by Eliot Jordan at 2020-02-26 20:06:32.closed
by Eliot Jordan at 2020-02-26 20:06:32.head_ref_deleted
by Eliot Jordan at 2020-02-26 20:06:39.closed
by Axa Mei Liauw at 2020-02-26 02:28:15.referenced
by Axa Mei Liauw at 2020-02-26 02:28:14.merged
by Axa Mei Liauw at 2020-02-26 02:28:14.closed
by Axa Mei Liauw at 2020-02-26 02:28:15.head_ref_deleted
by Axa Mei Liauw at 2020-02-26 02:28:18.Coverage increased (+0.05%) to 96.488% when pulling fdd30124ba45a4fc63f6e5feb615f2698e408748 on testruby2.6 into 2adb605181bda9d84bc7014688c0b62c2f8b96a7 on master.
head_ref_force_pushed
by Trey Pendragon at 2020-02-25 22:12:17.head_ref_force_pushed
by Trey Pendragon at 2020-02-25 22:39:18.head_ref_force_pushed
by Trey Pendragon at 2020-02-26 01:07:02.added_to_project
by Trey Pendragon at 2020-02-26 01:08:02.referenced
by Nikitas Tampakis at 2020-02-26 19:01:45.merged
by Nikitas Tampakis at 2020-02-26 19:01:45.closed
by Nikitas Tampakis at 2020-02-26 19:01:45.moved_columns_in_project
by Nikitas Tampakis at 2020-02-26 19:01:46.Orangelight has some work going on, so putting this back to "To Do". Some in progress work:
https://github.com/pulibrary/orangelight/tree/update_bundler updates bundler https://github.com/pulibrary/princeton_ansible/compare/update_orangelight_ruby updates staging to be Ruby 2.6
moved_columns_in_project
by Trey Pendragon at 2020-02-26 19:09:46.unassigned
by Trey Pendragon at 2020-02-26 19:09:51.Coverage remained the same at 100.0% when pulling 7585298a86ed44168be3de1d573a0052a938cf4a on remove26_testing into 7d591b960394cfbcb0f1062eb1dfe61244670a2a on master.
added_to_project
by Trey Pendragon at 2020-02-25 22:42:05.referenced
by None at 2020-02-26 18:55:52.merged
by None at 2020-02-26 18:55:52.closed
by None at 2020-02-26 18:55:53.moved_columns_in_project
by None at 2020-02-26 18:55:53.head_ref_deleted
by None at 2020-02-26 18:55:58.referenced
by Trey Pendragon at 2020-02-25 22:41:51.closed
by None at 2020-02-26 18:55:53.moved_columns_in_project
by None at 2020-02-26 18:55:53.referenced
by None at 2020-02-26 18:55:54.@kelea99 I'm not really sure what it used to look like. do you happen to have any old screenshots on your computer??
I definitely see the vertical alignment issues in the subnav.
@hackmastera Ive got an old screenshot from staging and am looking for another which may prove more useful:
Additions: the search box isn't lining up properly (thanks, @sdellis ) and the masthead width may be wonky as well?
labeled
by Kim Leaman at 2020-02-26 20:06:01.renamed
by Kim Leaman at 2020-02-26 20:08:16.mentioned
by Kim Leaman at 2020-02-26 20:43:25.subscribed
by Kim Leaman at 2020-02-26 20:43:25.mentioned
by None at 2020-02-26 20:56:27.subscribed
by None at 2020-02-26 20:56:27.mentioned
by Shaun Ellis at 2020-02-26 22:12:42.subscribed
by Shaun Ellis at 2020-02-26 22:12:42.closed
by Trey Pendragon at 2020-02-26 23:41:38.Coverage remained the same at 100.0% when pulling ffeea0a801f8eb92dd4d7df245ee3cf7ab456cc9 on pinpulassets into bfe34d32d4129bf619a8d7b6d64cb15ac8275a8c on master.
deployed
by Trey Pendragon at 2020-02-26 23:25:10.referenced
by Trey Pendragon at 2020-02-26 23:41:38.merged
by Trey Pendragon at 2020-02-26 23:41:38.closed
by Trey Pendragon at 2020-02-26 23:41:39.head_ref_deleted
by Trey Pendragon at 2020-02-26 23:41:42.Coverage remained the same at 100.0% when pulling 56b545cfdce1d271254634ce9986106524160947 on dependabot/bundler/nokogiri-1.10.8 into 7d591b960394cfbcb0f1062eb1dfe61244670a2a on master.
head_ref_force_pushed
by None at 2020-02-26 23:42:41.added_to_project
by Trey Pendragon at 2020-02-25 22:30:07.assigned
by Francis Kayiwa at 2020-02-26 18:41:41.review_requested
by Francis Kayiwa at 2020-02-26 18:32:29.head_ref_force_pushed
by Francis Kayiwa at 2020-02-26 20:49:00.Migrating solr data to a new znode.
ZK_HOST
param to append the new znode. When it's time to edit this config file, you can just swap in the copy.cd /opt/solr
bin/solr zk mkroot /solr7 -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk cp -r zk:/clusterstate.json zk:/solr7/clusterstate.json -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk cp -r zk:/aliases.json zk:/solr7/aliases.json -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk cp -r zk:/live_nodes zk:/solr7/live_nodes -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk cp -r zk:/overseer zk:/solr7/overseer -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk cp -r zk:/overseer_elect zk:/solr7/overseer_elect -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk cp -r zk:/collections zk:/solr7/collections -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk cp -r zk:/configs zk:/solr7/configs -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
/zookeeper
.bin/solr zk ls /solr7 -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk rm -r /clusterstate.json -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk rm -r /aliases.json -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk rm -r /live_nodes -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk rm -r /overseer -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk rm -r /overseer_elect -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk rm -r /collections -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk rm -r /configs -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
bin/solr zk ls / -z lib-zk-staging1:2181,lib-zk-staging2:2181,lib-zk-staging3:2181
/zookeeper
and /solr7
.root:deploy
.added_to_project
by Trey Pendragon at 2020-02-26 21:03:58.review_requested
by Trey Pendragon at 2020-02-26 21:17:40.referenced
by Eliot Jordan at 2020-02-26 21:31:50.merged
by Eliot Jordan at 2020-02-26 21:31:51.closed
by Eliot Jordan at 2020-02-26 21:31:51.moved_columns_in_project
by Eliot Jordan at 2020-02-26 21:31:51.head_ref_deleted
by Eliot Jordan at 2020-02-26 21:38:13.closed
by Kevin Reiss at 2020-02-26 19:00:45.head_ref_force_pushed
by Axa Mei Liauw at 2020-02-26 18:12:20.head_ref_force_pushed
by Axa Mei Liauw at 2020-02-26 18:50:14.referenced
by Kevin Reiss at 2020-02-26 19:00:45.merged
by Kevin Reiss at 2020-02-26 19:00:45.closed
by Kevin Reiss at 2020-02-26 19:00:46.head_ref_deleted
by Kevin Reiss at 2020-02-26 19:00:50.labeled
by Amanda Ferrara at 2020-02-26 16:31:07.labeled
by Amanda Ferrara at 2020-02-26 16:31:07.milestoned
by Amanda Ferrara at 2020-02-26 16:31:08.milestoned
by Amanda Ferrara at 2020-02-26 16:39:44.labeled
by Amanda Ferrara at 2020-02-26 16:55:28.labeled
by Amanda Ferrara at 2020-02-26 16:55:28.labeled
by Amanda Ferrara at 2020-02-26 16:55:28.labeled
by Amanda Ferrara at 2020-02-26 16:55:28.labeled
by Amanda Ferrara at 2020-02-26 16:55:28.milestoned
by Amanda Ferrara at 2020-02-26 16:55:28.labeled
by Amanda Ferrara at 2020-02-26 17:07:13.milestoned
by Amanda Ferrara at 2020-02-26 17:07:14.For dsc[2] containers, this should be fairly straightforward. All retrieval containers are described in the dsc[2], e.g. MC016 Box 26:
<c level="otherlevel" otherlevel="physicalitem" id="MC016_i2">
<did>
<container type="box">26</container>
<unitid type="barcode">32101106254731</unitid>
<physloc type="code">rcpph</physloc>
</did>
</c>
Items or subcontainers contained in the retrieval container are referenced in the dsc[1] through the container/@parent, e.g. MC016 Box 26 Reel 6:
<container type="reel" parent="MC016_i2">6</container>
The situation is a little murkier for "classic" containers because it is not always evident whether a container is the retrieval container or a subcontainer.
Other than box/folder pairs and multiple single-type containers, we currently have the following scenarios represented in our EAD files (though the Mudd dsc[2] Retro Project currently underway will significantly cut down on the variety and in particular on the various cabinet/drawer scenarios):
<did count="1249">
<type>cabinet</type>
<type>drawer</type>
<type>folder</type>
</did>
<did count="734">
<type>folder</type>
<type>page</type>
</did>
<did count="660">
<type>item</type>
<type>page</type>
</did>
<did count="650">
<type>box</type>
<type>reel</type>
</did>
<did count="605">
<type>volume</type>
<type>folio</type>
</did>
<did count="470">
<type>box</type>
<type>volume</type>
</did>
<did count="412">
<type>case</type>
<type>box</type>
</did>
<did count="368">
<type>box</type>
<type>case</type>
</did>
<did count="346">
<type>scrapbook</type>
<type>page</type>
</did>
<did count="259">
<type>box</type>
<type>item</type>
</did>
<did count="183">
<type>reel</type>
<type>box</type>
<type>folder</type>
</did>
<did count="167">
<type>folder</type>
<type>cabinet</type>
<type>drawer</type>
</did>
<did count="150">
<type>portfolio</type>
<type>packet</type>
</did>
<did count="148">
<type>box</type>
<type>cassette</type>
</did>
<did count="100">
<type>volume</type>
<type>page</type>
</did>
<did count="94">
<type>reel</type>
<type>item</type>
</did>
<did count="63">
<type>box</type>
<type>file</type>
</did>
<did count="46">
<type>case</type>
<type>drawer</type>
</did>
<did count="31">
<type>folder</type>
<type>reel</type>
</did>
<did count="22">
<type>file</type>
<type>folder</type>
</did>
<did count="22">
<type>box</type>
<type>tape</type>
</did>
<did count="15">
<type>folder</type>
<type>folder</type>
<type>cabinet</type>
<type>drawer</type>
</did>
<did count="13">
<type>cabinet</type>
<type>drawer</type>
</did>
<did count="8">
<type>scrapbook</type>
<type>page</type>
<type>page</type>
</did>
<did count="6">
<type>box</type>
<type>folders</type>
</did>
<did count="5">
<type>folder</type>
<type>folder</type>
<type>folder</type>
<type>cabinet</type>
<type>drawer</type>
</did>
<did count="2">
<type>box</type>
<type>box</type>
<type>folder</type>
</did>
<did count="2">
<type>drawer</type>
<type>folder</type>
</did>
<did count="2">
<type>box</type>
<type>folder</type>
<type>folder</type>
</did>
<did count="2">
<type>box</type>
<type>binder</type>
</did>
<did count="2">
<type>folder</type>
<type>folder</type>
<type>folder</type>
<type>folder</type>
<type>folder</type>
<type>cabinet</type>
<type>drawer</type>
</did>
<did count="2">
<type>folder</type>
<type>folder</type>
<type>folder</type>
<type>folder</type>
<type>cabinet</type>
<type>drawer</type>
</did>
<did count="2">
<type>cabinet</type>
<type>drawer</type>
<type>folder</type>
<type>box</type>
</did>
<did count="1">
<type>folder</type>
<type>reel</type>
<type>reel</type>
</did>
<did count="1">
<type>scrapbook</type>
<type>page</type>
<type>page</type>
<type>page</type>
</did>
<did count="1">
<type>bin</type>
<type>folder</type>
</did>
<did count="1">
<type>folder</type>
<type>cabinet</type>
<type>folder</type>
</did>
<did count="1">
<type>drawer</type>
<type>folder</type>
<type>folder</type>
</did>
<did count="1">
<type>cabinet</type>
<type>drawer</type>
<type>folder</type>
<type>cabinet</type>
<type>drawer</type>
<type>folder</type>
<type>cabinet</type>
<type>drawer</type>
<type>folder</type>
</did>
<did count="1">
<type>cabinet</type>
<type>drawer</type>
<type>box</type>
</did>
<did count="1">
<type>folder</type>
<type>cabinet</type>
<type>drawer</type>
<type>folder</type>
</did>
<did count="1">
<type>box</type>
<type>box</type>
<type>box</type>
<type>cabinet</type>
<type>drawer</type>
<type>folder</type>
</did>
<did count="1">
<type>box</type>
<type>folder</type>
<type>box</type>
</did>
<did count="1">
<type>cabinet</type>
<type>folder</type>
<type>drawer</type>
</did>
To follow up on @regineheberlein's description of "classic" containers being "murkier," we do keep a list of what is considered a "container" and "subcontainer" in the XSL. This helps us figure out what to send to Aeon when users request a component.
The introduction of several new container types from Mudd has perhaps made this a bit more confusing, but I'm not sure we need them anymore, given the desire to implement the DSC2 approach for the renovation needs. (It would be helpful to remove them in the current system if they are no longer needed.)
@sdellis Indeed, except the container/subcontainer divide is not always consistent. Things like box + item or box + reel etc. are sometimes a container AND an item and sometimes an item IN a box. The barcoding project has actually helped a lot in flushing those out.
mentioned
by None at 2020-02-26 17:17:45.subscribed
by None at 2020-02-26 17:17:46.mentioned
by None at 2020-02-26 17:47:59.subscribed
by None at 2020-02-26 17:47:59.mentioned
by Shaun Ellis at 2020-02-26 18:25:50.subscribed
by Shaun Ellis at 2020-02-26 18:25:50.Coverage decreased (-0.003%) to 99.282% when pulling aaee16c47651373383b2cbd1bbf788076223f4f3 on testruby2_6 into 780a91099b793b719a9d3a5e5cf621d3f55feba5 on master.
review_requested
by Trey Pendragon at 2020-02-26 19:45:03.referenced
by Eliot Jordan at 2020-02-26 19:46:25.merged
by Eliot Jordan at 2020-02-26 19:46:25.closed
by Eliot Jordan at 2020-02-26 19:46:26.head_ref_deleted
by Eliot Jordan at 2020-02-26 19:46:29.added_to_project
by Trey Pendragon at 2020-02-26 21:04:28.review_requested
by Trey Pendragon at 2020-02-26 21:17:35.referenced
by Eliot Jordan at 2020-02-26 21:32:52.merged
by Eliot Jordan at 2020-02-26 21:32:52.closed
by Eliot Jordan at 2020-02-26 21:32:52.moved_columns_in_project
by Eliot Jordan at 2020-02-26 21:32:53.head_ref_deleted
by Eliot Jordan at 2020-02-26 21:32:55.moved_columns_in_project
by Trey Pendragon at 2020-02-26 19:01:13.assigned
by Trey Pendragon at 2020-02-26 19:01:18.Coverage decreased (-0.003%) to 99.282% when pulling 76ca3fe5984976b90226c22cc4ea572154d72b9d on use26_only into 0666fde8cd342d77f57dddc2e4adfc7e398fd7c2 on master.
added_to_project
by Trey Pendragon at 2020-02-26 22:21:53.Content issue. Resolved.
closed
by Kevin Reiss at 2020-02-26 13:59:35.labeled
by None at 2020-02-26 00:24:56.


{% extends "base.html" %} {% block header %}
Interactive maps reveal the anatomy and functional relationships of the autonomic nerves and the organs that they innervate. 2D and 3D maps render spatial dynamics, connectivity, and physiology across a range of species and nerve-organ systems.


 In this series the JPF will not only debunk the major theories driving the BDS movement, but also go through the BDS Divestment Handbook used by anti-Israel “activists” all over the world and show how to counter their lies.
The forward of the BDS handbook sets the stage with two important points that must be properly understood:
The use of an anti-apartheid framework can be instrumental for student BDS activists, because some schools already have policies prohibiting investment in apartheid. (page 4)
Here they are admitting that their use of the “anti-apartheid framework” is tactical rather than substantive! BDS supporters are attempting to hijack a cause that is not their own in order to manipulate the system for their own benefit. The article this quote is referencing attempts to make the charge fit and is very effective if the reader knows nothing about the conflict, which is precisely why this debunking is so important
Showing reverence for the concept of self-determination is key when struggling in solidarity, and this call should be the basis for international BDS campaigns to challenge Israel’s occupation and apartheid. (page 5)
Anyone hearing a BDSer make this charge should immediately ask, “What about Jewish self-determination?! Why should the Jews be the only people denied the right to self-determination? If BDS cares so much about the right of self-determination, why are they trying to take this right away from one of the most persecuted groups in history?” Most supporters of Israel are not against the idea of Palestinian self-determination, but they do not support the idea of establishing a Palestinian state without it making peace with Israel.
Since this Handbook says the “concept of self-determination… should be the basis for international BDS campaigns” it is all the more important to point out the hypocrisy of doing so while denying that right to the Jewish People and by showing that Israel supports this right for the Palestinians, but in the context of peace.
Always highlight that Israel isn’t against Palestinian self-determination - every government since Oslo has supported it. Israel offered statehood to the Palestinians in 2000, 2001 and 2008 and negotiated on that basis in 2010, 2012 and 2014. Each peace offer was rejected without a counteroffer from the Palestinians and each peace negotiation was torpedoed by the Palestinians.
Israel even sought to “end the occupation” on its own, completely withdrawing from Gaza and four towns in northern Samaria (West Bank) in 2005. Then in 2006, Israelis then voted in a new government headed by Kadima, a political party based solely on the idea of pulling out of the rest of the West Bank. But before this new government could act on this platform, the Palestinians went to the polls and instead of voting for peace, they voted for the Islamic Resistance Movement (Hamas). This created a power struggle with the ruling Fatah party and eventually to the violent takeover of Gaza by Hamas.
So not only does Israel agree with the concept of Palestinian self-determination, but it has taken concrete steps to help bring this about. The only reason why more has not yet been done is because of Palestinian rejectionism and support for terrorism over peace.
###Back to main page: Calling BS on BDS


Mary has been trying to get her son help for his drug addiction for nine years
by Kimberley Le LievreMary was so desperate to get help for her drug-addicted son she went to a tribunal to ask for guardianship so she could force him into rehabilitation.
But as with the other avenues she's tried, there was nothing they could do.
"How do you get help for someone with an addiction fuelled by mental health issues when they won't help themselves?"
It's a question that has plagued Mary since her 26-year-old son became addicted to pot at 17, and then moved on to ice and a cocktail of other drugs.
Mary, who requested her surname be withheld, is not the stereotypical drug addict's mother. She has two other sons, one older and one younger than the 26-year-old, who are living happy and productive lives.
Stereotypes and stigma are parts of the problem in seeking help for addicts and their families.
Mary's been in this situation for nine years now, and there isn't a light at the end of the tunnel.
She's been told the average time for people to recover from drug addiction is 20 years, but she's not willing to wait it out.
"We don't believe our son has the luxury of time. At this rate, he'll be lucky to reach 40," she said.
"If there's nothing that can be done, clearly the system doesn't work."
She said the main problem is fear. Her son wants to get help, but he's scared.
READ MORE:
- Mary's letter to her son
- In the void: New policing model to help struggling families in the ACT
- 'The whole family suffers': Self-help support for loved ones
The handful of times he's started on the path to getting help, there have been hurdles he's been unable to overcome - the wait times are too long, there are no appointments on the day, he needs a GP's referral to access services, there's no beds available in the mental health unit at the hospital.
Three times he's been able to discharge himself from hospital after mental health episodes, only to turn up angry at the family home or at Mary's work without any warning.
"He goes so far but he doesn't take that last step. That's where we said we'd walk it with him, we'd go with him."
Mary believes her son is self-medicating to escape from his mental health problems.
At one stage, he went to stay in Wagga with his cousin. It was his decision, and it came after a particularly violent episode in the family home.
"I said to him, 'I've had enough.  We can't do this anymore'."
In Wagga, after a few false starts, he cleaned himself up. He took the time to get his licence, signed up for a gym membership and was completing a community service course online.
"He got a certificate, took a snapshot and showed me," Mary said.
"He was as clean as a whistle. I talked to him on the phone. I was so happy."
But then he wanted to come back to Canberra. Mary and Ross urged him to stay in Wagga, they told him it was too soon and he should take more time to recover.
But he came home, and Mary said that was a big mistake. She found him shooting up ice at a drug dealer's house after his friends tipped her off.
It was then that they decided to go to the tribunal to seek guardianship, so they could make decisions for him about rehabilitation, and about what he did with his Centrelink money.
The case was not successful for Mary and Ross. Mary said it seemed like the panel couldn't fathom her son having both mental health issues and a drug addiction. They were told they were the only avenue to getting help. In a letter of feedback, Mary wrote: "We are not mental health professionals... we need the system to help us".
Mary said in recent weeks, her son has been seeing a doctor who she hopes has got through to him. She said she's relieved to have some support from the ACT mental health crisis team, but it had taken too long to get to this point.
"Years ago we needed that help. He's gotten so bad, he could be significantly brain damaged, I'm glad he's not that impaired, but it can ruin somebody to wait this long and wait for them to hit rock bottom but rock bottom may be too late.
"I think he's got a bit of a chance now," she said.
- This is part of a series by the Sunday Canberra Times exploring illicit drug addiction, the impact it has on families and the community, and what's being done to help.


| mnetonix |
index mne2nix.py |
mne2nix.py
Usage:
python mne2nix.py [--split-data] [--split-stimuli] <datafile> <montage>
Arguments:
datafile Either an EDF file or a BrainVision header file (vhdr).
montage Any format montage file supported by MNE.
Flags:
--split-data If specified, each channel of raw data is stored in its own
separate DataArray.
--split-stimuli If specified, each stimulus type (identified by its label)
is stored in a separate MultiTag (one MultiTag per
stimulus type).
(Requires Python 3)
Command line script for reading EDF and BrainVision files using MNE
(mne-python) and storing the data and metadata into a NIX file. Supports
reading montage files for recording channel locations.
To include in a script, call the 'write_raw_mne()' and provide a NIX filename
and MNE Raw structure as arguments.
NIX Format layout
=================
Data
----
Raw Data are stored in either a single 2-dimensional DataArray or a collection
of DataArrays (one per recording channel). The latter makes tagging easier
since MultiTag positions and extents don't need to specify every channel they
reference. However, creating multiple DataArrays makes file sizes much
bigger.
Stimuli
-------
MNE provides stimulus information through the Raw.annotations dictionary.
Onsets correspond to the 'positions' array and durations correspond to the
'extents' array of the "Stimuli" MultiTag. If stimulus information is split
by label, each MultiTag uses the label as its name.
Metadata
--------
MNE collects metadata into a (nested) dictionary (Raw.info). All non-empty
keys are converted into Properties in NIX. The nested structure of the
dictionary is replicated in NIX by creating child Sections, starting with one
root section with name "Info".
Some extra metadata is kept in the '_raw_extras' private member when loading
from EDF files. This seems to be missing from the 'Info' dictionary in order
to keep it anonymous (missing keys are 'subject_info', 'meas_date', 'file_id',
and 'meas_id'). The '_raw_extras' are also stored in the NIX file in a
separate Section with name "Extras".
| Modules |
||||||
|
| Functions |
||
|
| Data |
||
|
DATA_BLOCK_NAME = 'EEG Data Block' DATA_BLOCK_TYPE = 'Recording' RAW_DATA_GROUP_NAME = 'Raw Data Group' RAW_DATA_GROUP_TYPE = 'EEG Channels' RAW_DATA_TYPE = 'Raw Data' |


请参阅: 说明
| 接口 | 说明 |
|---|---|
| TargetSourceCreator |
Implementations can create special target sources, such as pooling target
sources, for particular beans.
|
| 类 | 说明 |
|---|---|
| AbstractAdvisorAutoProxyCreator |
Generic auto proxy creator that builds AOP proxies for specific beans
based on detected Advisors for each bean.
|
| AbstractAutoProxyCreator |
BeanPostProcessor implementation
that wraps each eligible bean with an AOP proxy, delegating to specified interceptors
before invoking the bean itself. |
| AbstractBeanFactoryAwareAdvisingPostProcessor |
Extension of
AbstractAutoProxyCreator which implements BeanFactoryAware ,
adds exposure of the original target class for each proxied bean
(AutoProxyUtils.ORIGINAL_TARGET_CLASS_ATTRIBUTE ),
and participates in an externally enforced target-class mode for any given bean
(AutoProxyUtils.PRESERVE_TARGET_CLASS_ATTRIBUTE ). |
| AutoProxyUtils |
Utilities for auto-proxy aware components.
|
| BeanFactoryAdvisorRetrievalHelper |
Helper for retrieving standard Spring Advisors from a BeanFactory,
for use with auto-proxying.
|
| BeanNameAutoProxyCreator |
Auto proxy creator that identifies beans to proxy via a list of names.
|
| DefaultAdvisorAutoProxyCreator |
BeanPostProcessor implementation that creates AOP proxies based on all
candidate Advisor s in the current BeanFactory . |
| InfrastructureAdvisorAutoProxyCreator |
Auto-proxy creator that considers infrastructure Advisor beans only,
ignoring any application-defined Advisors.
|
| ProxyCreationContext |
Holder for the current proxy creation context, as exposed by auto-proxy creators
such as
AbstractAdvisorAutoProxyCreator . |
The various post-processors in this package need only be added to an ApplicationContext (typically in an XML bean definition document) to automatically proxy selected beans.
NB: Automatic auto-proxying is not supported for BeanFactory implementations, as post-processors beans are only automatically detected in application contexts. Post-processors can be explicitly registered on a ConfigurableBeanFactory instead.


Earlier this week Nate already said that I was doing some work on Ninject, now I have it working :). Everything I’m about to talk about is currently in the master tree of the ninject github repository. Getting IronRuby to play nice with Ninject was surprisingly easy :).
There was only one place that required some kind of weird workaround and from that workaround I’m entirely sure that it will go away by the time .NET 4.0 will be here. The DLR duplicates a number of delegates from .NET 4.0 but .NET 3.5 also defines them (i.e. System.Func<T, TT>) and then you get great exception messages like: System.Func is not of type System.Func. The solution is to not reference System.Core in your project. Except that Ninject expects the System.Core variant at some point and that was solved by aliasing the System.Core assembly and talking to the types in that assembly by their alias.
Anyway the juicy stuff :) How can you take advantage of Ninjects newly found friendship with IronRuby.
Ninject now has 2 flavors of Kernels. We have a StandardKernel that knows how to deal with the module configuration system that uses a fluent interface defined in C#. And now we also have a DlrKernel that extends the StandardKernel with a RubyModuleLoader plugin. If you tell the DlrKernel to look inside a path for configuration files it will scan those folders for .dll or .rb files. Those files should contain the configuration for the ninject bindings.
So to create a Kernel that is ruby enabled you would use the following code:
1 2 3 4 5 |
|
The above snippet could then for example load a configuration file that has been defined like this:
1 2 3 4 5 6 7 |
|
The configuration above shows how most of a typical configuration would be defined by you the full configuration API at your disposal. All the options for the configuration can be specified in 2 ways. The first way is in a hash like syntax and the second way uses a more fluent syntax.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Or
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
Some of the nicer consequences of using Ruby as a configuration language is the syntax for open generics. The example below shows how to configure types with open generics.
1 2 3 4 5 6 7 8 9 10 11 |
|
To specify a condition the syntax would look like this
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Well that’s all. I hope you like it. I will be looking into more ways to integrate DLR stuff into Ninject the most obvious is allowing you to inject dynamic types into static classes.


Toggle navigation
Codefusion
Feedback
Analysis of Train Earnings
Additional Train
Search by Train No.
adfcadc


{% if user %}
Currently logged in user: {{user}}
Search
Logout
{% else %}
Currently logged in user: None
Login
{% endif %}


importance: 5
We have an empty DOM element elem and a string text.
elem
text
Which of these 3 commands will do exactly the same?
elem.append(document.createTextNode(text))
elem.innerHTML = text
elem.textContent = text


UI Elements
Search Box with Filter Demo
Filter your search
All Categories
Automotive
Baby
Beautys
Books
Cell Phones & Service
Clothing & Accessories
Electronics
Gourmet Food
Health & Personal Care
Home & Garden
Industrial & Scientific
Jewelry
Magazines
© Codrops - back to post


Git
2020-05-09
3 minutes
I always forget certain git commands. Especially when I don’t use them often enough or am involved in a workflow that doesn’t use git to it’s fullest extent. So here’s a list of git commands in some sort of loose categorization (some of which I hope I remember now and others that I would like to be reminded of in case I forget).
Cloning and Configs
Show the remote info. (Note, origin is the default name for remote that the repository was cloned from.)
git remote show origin
Cloning a repository that’s available on GitHub.
git clone https://github.com/username/repository.git
Sometimes you may need to clone with a different user name. This is useful if you have a personal and a work GitHub with different username/password. [link]
git clone<EMAIL_ADDRESS>You may need to set your user name and email for your local repository (not your global git config). This is useful if you don’t want your personal email associated with commits made to a work repository (and vice versa).
git config user.name <user name>
git config user.email <user email>
Branching and merging
List all the branches in your repository.
git branch
List all remote branches.
git branch -m
Delete a branch called feature
.
git branch -d feature
To create a branch called feature
and work on that branch.
git branch feature
git checkout feature
# or
git checkout -b feature
To push your new branch feature
and track it on GitHub.
git push -u origin feature
To pull and updated version of the branch you’re working on.
git checkout feature
git pull
To pull a newly created branch new-feature
(that’s not on your local machine).
git fetch
git checkout new-feature
Merging
To update a branch from another branch (e.g. updating your feature
branch with new commits in master
).
git checkout feature
git merge master
If you want to rebase then use the rebase option.
git checkout feature
git merge master --rebase
Merging vs rebasing
Some useful links that’ll probably describe the difference better than I ever can.
- https://stackoverflow.com/questions/18930527/difference-between-git-pull-and-git-pull-rebase
- https://stackoverflow.com/questions/16666089/whats-the-difference-between-git-merge-and-git-rebase/16666418#16666418
Diff
Sometimes it’s useful to look at the difference between the original file and the changes you’ve made via the command line. Before adding the file,
git diff foo.txt
and after adding the file
git diff --cached foo.txt
Submodules
So useful, and something I often overlook. There’s a great overview of submodules on the GitHub blog. A git submodule allows you to keep a git repository as a subdirectory of another git repository (link). Submodules are static in that they track a specific commit and won’t be automatically updated.
To create a submodule in the folder foo
using branch master
living at url/to/remote/repo
.
git submodule add -b master url/to/remote/repo foo
To update a submodule.
cd foo
git checkout master
git pull
git cd ..
git add .
git commit -m "updating submodule in foo"
To clone a repository that uses submodules.
git clone --recursive url/to/remote/repo
Hugo’s directions on deploying a statically generated website on GitHub is a good example of using submodules. In this case, the submodule is in the public
folder which is connected to the [username.github.io](http://username.github.io)
repository. And this folder contains the site files generated by hugo when you build your site.
532 Words


AOA drops stunning 'New Moon' jacket teaser images of Seolhyun
by danisurstAOA has dropped another 'New Moon' teaser featuring Seolhyun!
On November 17 KST, a couple hours after the release of Seolhyun's individual teaser video, FNC Entertainment revealed her two jacket teaser images. In one of the photos, she is wearing an all-black outfit similar to the one she wore in her teaser video; in the second, she looks polished in a fitted vest look, complete with her hair pulled up in a chic ponytail.
Meanwhile, AOA's sixth mini album 'New Moon' is set for release on November 16 at 6 PM KST.
Check out the images below!


Cursoring
Selecting the active trace
Simply click on the trace you wish to cursor. The cursor will move to the
trace you clicked on and that trace will become active. The x and y-cursor edit
boxes will change to the color of the new active trace and those edit boxes will
be updated to contain the current x and y locations of the cursor. Although the
color of the edit box will often be enough to let you know which trace is active it
sometimes may be difficult to tell at a glance if there are many traces plotted.
For this reason a cursor ID tag is displayed just to the left of the
y-cursor edit box. This will be especially helpful if you assigned meaningful
trace names in the plt calling sequence. This cursor ID tag is also in the same
color as the active trace.
Dragging the cursor
Click on a trace, hold down the mouse button and drag the cursor left or
right. The cursor will follow the mouse as you are dragging and the edit boxes
will continually update with the current cursor location. Make sure you click
directly on the trace. If you are not close enough to the trace when you click
the mouse button, dragging the mouse will pan the display instead of moving the
cursor. Once you start to drag the cursor however, the cursor will follow the
mouse x position even if the mouse moves far away from the line. This is the
easiest and most natural way to move the cursor, and probably the only way you
will use for small data sets. The other ways of moving the cursor (described below)
become more attractive as the data set gets larger (perhaps over 500 points or so).
Typing in a cursor location
If you type a new value into the x-cursor edit box, the cursor will move to the
ordered pair (x,y) on the active trace, where x is equal to, or as close as
possible to the value you typed in.
Likewise, if you type a new value into the y-cursor edit box, the cursor will move to the
ordered pair (x,y) on the active trace, where y is equal to, or as close as
possible to the value you typed in.
In some cases there may be more than one position on the active trace that meets the
above condition. If that happens, the cursor will move to the first such position.
Clicking on the x-axis label
The advantage of this method is that it is very easy to move the cursor by the
smallest amount possible (i.e. one data element) even when the data density is
very high. Simply click on the x-axis label (for example "Milli-seconds"
in the plot shown in the above Preliminaries section) and the cursor will move forward
by one data element. And a right click will move in the reverse direction. This method
is especially useful when the data order is not clear from the plot (unconnected
markers for instance). If you are viewing the entire data set (i.e. the x axis is not
zoomed in) then continuing to click after the cursor has reached the left or right edge
will have no effect. However if you are zoomed in, then the cursor will continue to move
to the next data element beyond the edge of the display, but then the display will
pan so that the cursor remains at the display edge.
A useful feature of the x-axis label is that if after the left or right click you hold
down mouse button, after a short delay (called the repeat delay) the cursor will continue
to step left or right at the "repeat rate". When the x-axis is zoomed in, this provides
a pleasing and smooth way to pan the display left or right. The default repeat rate is
0.03 seconds (i.e. 33Hz) but you like to pan slower or faster you can change the repeat
rate. For example, to change the repeat rate to 0.01 seconds (i.e. 100Hz) use the command:
setappdata(findobj(gcf,'string','ABC'),'repeat',0.01)
(where "ABC" is the current x-axis label string).
The use of the 'repeat' application data property is explained more fully in the description
of the edit pseudo object in the
Pseudo objects section.
You will see from that section that it is also possible to change the default repeat delay
(which is 0.4 seconds)
The Cursor button group
In the lower left corner of the display you will find these four cursor buttons.
The up and down arrow buttons on the left are the peak and valley finder buttons respectively.
When you click on the ↑ button (peak finder), the cursor will move to the largest peak in the
current display range of the active trace. The next click on the up arrow will move
the cursor to the second largest peak and so on. Moving the cursor by clicking
on the trace or by using the cursor slider will reset the peak finder so that the next time
you click on the up arrow the cursor again moves to the largest peak in the
display range. An alternate way to reset the peak finder is to right
click on the peak finder button. The ↓ button (valley finder) works the same as the
peak finder except that the cursor moves to successive local minima.
Left clicking on the marker button (o) will toggle the line styles used for all traces in the figure
(including subplots). The first click will change the style from lines to markers.
The 2nd click will change the style to showing both lines and markers, and the 3rd click
will restore the traces back to the original lines only style. Right clicking on the marker button
will toggle the line smoothing property of all plot traces from off to on or visa versa.
Note that the initial state of the line smoothing property may be turned on using the
Options parameter.
Matlab automatically switches to the OpenGL renderer when line smoothing is turned on and then switches
back to the default renderer when line smoothing is turned off again. Usually line smoothing results
in a more pleasing plot although on many systems, bugs in the OpenGL renderer will cause (mostly minor)
display anomalies. Surprisingly, turning smoothing on may increase plotting speed. I discovered this
while running demo\wfall.m which starts up with smoothing turned on.
The plotting slows down by a factor of 3 or 4 when I toggle the smoothing off, suggesting
that the OpenGL renderer is better optimized for speed on the systems I tested. Be aware that line
smoothing probably will not work on versions of Matlab older than about 2008. Also the line smoothing
property is ignored in version Matlab R2014b or later. I believe this is because the newer graphics engine
introduced with R2014b is supposed to smooth the lines all the time. (It doesn't work on my five year
old computer however, even with updated graphics drivers. I actually get better looking plots
using R2014a or earlier although I suspect with newer hardware R2014b will have the advantage.)
The last button (Δ) controls the delta cursor mode which is described below.
Delta cursors
Delta cursors are useful for measuring horizontal or vertical distances between two
points on a trace. First move the cursor to the desired reference point on the
trace. Then press the Delta (∆) cursor button. The
reference location will be marked with a large red plus (about 4 times bigger
than the normal cursor). Also the Delta cursor button will be highlighted as an
additional reminder that delta cursors are enabled. Next, click on a different point on the same trace (or drag
the cursor to the desired location). The view will then look similar to the
picture shown here. (You can also click on a point on a different trace -- the
delta cursor will still work as expected.) You can read the current location of the cursor (the small
yellow plus) in the usual way - i.e. the edit boxes just to the right of the
grey x/y labels. In this case the cursor x location is 5.75 msec and the y
location is 0.377755. The other two edit boxes show how far away the cursor is
from the marked reference. In this example, it shows that the cursor at a
location 1.55 msec later than and .37885 units less than the marked reference.
Simply click on the delta cursor button again, and the reference mark will
disappear, the delta cursor button returns to its normal color, and the usual cursor operation will return.
Average, RMS, Slope, & Distance readout
When you click on the cursor ID tag (Line 4 in this example) the ID tag changes
to Avg and the edit box then shows the average y-value of all the points
of the active trace that are within the current display x limits.
When you click on the ID tag a second time, the Avg changes to
RMS and the edit box then shows the rms value of the active
trace. As with Avg, the rms calculation only includes points that are within the currently
displayed x-axis limits. (In case you are not familiar with this commonly used form
of averaging - rms stands for "root mean square" and is calculated by taking the
square root of the average of the squares of the data values).
When you click on the ID tag a third time, the
RMS changes to y/x
and the value in the y-cursor edit box changes to show the ratio of the y and x
cursor values at the current cursor position (i.e. the slope of the line from
the origin to the cursor). If delta cursors were enabled, and additional edit
box appears to the right of the y-cursor edit box containing ΔY/ΔX, which is the slope of
the line connecting the marked position to the current cursor. You can use this
to estimate the slope of a trace at a particular point.
When you click on the ID tag a fourth time, the
y/x changes to
√x2+y2 and the value
in the y-cursor edit box changes to show distance from the origin to the cursor
position (i.e. the magnitude of x+yi). If delta cursors were enabled, and additional
edit box appears to the right of the y-cursor edit box showing the distance from the
marked position to current cursor position (i.e. the magnitude of ΔX+ΔYi).
Clicking the ID tag a fifth time (or clicking in the plot area) restores the
cursor readout to show the usual Y value and the ID tag again shows the name of
the cursored trace.
Dual cursor
The usual cursor can show the value of only one of the visible traces on the
plot. With a dual cursor, two such values can be shown at the same time. This is
especially useful when displaying two tightly linked values (for example, the
magnitude and phase of a complex quantity). You specify a dual cursor for
the Nth trace by including 'DualCur',N in the
parameter list. Then when you move the cursor, two y value readouts are updated.
The first one (the active trace) in the usual y value readout location (immediately
to the right of the "y:" cursor label) and immediately to the right of
that the second value (trace N) will appear. In the plot area, in addition to the
normal cursor on the active trace you will see the dual cursor on trace N (where
N is the number specified as the DualCur argument). Just as with the regular cursor,
the dual cursor will be shaped like an plus for a trace on the left axis or a circle
for a trace on the right axis.
This example was created by including 'DualCur',5
in the parameter list so that the fifth trace (blue in this example) is always
cursored along with the active trace. In this picture, Line 1 (green) has been
selected as the active trace (by clicking on it) and so its y value is shown
(also in green) in the usual y-readout location. As you move the active cursor
back and forth along the x-axis, the dual cursor on trace 5 (the circle)
tracks the back and forth movement so that it always remains vertically aligned
with the main cursor on trace 1.
Instead of specifying a particular trace for the dual cursor, it is also possible to
specify a particular offset so that the trace for the dual cursor can depend on
which trace has the active cursor. For example, suppose I supplied the parameters
'DualCur',-4 . Then plt would add 4 to the line number
associated with the active cursor and make that the dual cursor. (For example if
trace 3 was the active trace, trace 7 would be the dual trace.) If adding 4 pointed
to a trace number larger than the number of defined traces, then the 4 would be
subtracted from the active trace number to obtain the dual cursor trace.
Normally you set the DualCur parameter in the initial call to plt, however if you
can also interactively adjust this parameter by using the "Set dual cursor" submenu
under the plt menu. The offset method of specifying the dual cursor (i.e. negative
values of DualCur can't be selected using this submenu.
(See details at Menu Bar)
A complication happens when you are using the dual cursor and delta cursor features
at the same time, because the same auxiliary y readout location is used for both
features. To resolve this conflict plt disables the dual cursor while delta cursors
are being used.
The editz.m and gui2.m demo programs
demonstrate the use of both the positive & negative DualCur parameter (respectively).
multiCursor
Usually the single or dual cursors mentioned above are sufficient, but sometimes want you
really want is to cursor all the traces simultaneously. For the common situation where all
the traces share the same x vector, the multiCursor shown to the right is effective. (If the
x vectors for each trace are different, the multiCursor is unlikely to be very useful.)
To enable the multiCursor, first right-click on the y-cursor edit box, which will bring
up the Yedit popup menu shown to the left. Then click on the 2nd menu item ("multiCursor") and
a vertical line will appear on the plot at the current cursor location. Also a circular
marker will appear at all points where this vertical line crosses one of the traces. A string
will also appear to the right of each of these markers showing the Y-value associated with
the marker. All the methods of moving the cursor mentioned above will also move the multiCursor.
If you want the multiCursor to follow the mouse as you drag it back and forth, you must first
click on one of the traces (but not on the multiCursor) and then drag the mouse while holding
down the mouse button.
The "multiCursor" menu item is a toggle, meaning that when you select it a second time
the multiCursor will be disabled.
Usually the multiCursor is enabled from the Yedit popup menu as shown above, however if you
wanted to the multiCursor to appear when your program starts up, you can include the string
multiCur in the 'Options' parameter.
If you wanted to enable or disable the multiCursor from the command line or in a program
use the command plt click Yedit 2; or its functional
form plt('click','Yedit',2);
(Equivalent to selecting the 2nd item in the popup shown above.)
The appearance of the multiCursor elements is probably suitable for most situations, but
you can modify the appearance of the multiCursor by using the mcProps figure application data.
This is best illustrated with an example. Suppose we follow the call to plt with the expression:
setappdata(gcf,'mcProps', ...
{'|vis','off','+markersize',12, ...
'fontsize',14,'tag',' \\leftarrow %4w'});
The cell array consists of property name/value pairs. The property names may have a prefix.
So the first property ('visible') has the vertical bar prefix which signifies that the property
should be applied to the vertical dotted line that is usually shown with the multiCursor.
(So this name/value pair makes that dotted line invisible.) The next property ('markersize')
has the plus sign prefix which indicates that this property should be applied to the markers.
The next two properties (fontsize & tag) have no prefix and this indicates that the properties
should be applied to the text objects associated with each marker. The tag property is a
special case in that this is where the multiCursor formatting string is stored. So in this
example the text next to each marker will be a left arrow (tex character) followed by
a four character floating point string (using the w formatting code). One variation is that
any of the values for the markers or text objects may be cell arrays. As an example, suppose
there were 3 traces and you wanted the first trace to have a larger cursor text than the
last two traces. Then you could replace the "14" above with {14;10;10}. Note that this cell
array must be a column vector and its length must be equal to the number of traces.
If you need to read out values for all the traces at once but don't want the clutter of the
many cursors on the plot, there are alternatives to the multiCursor. One of these is to
bring up the "Cursor Data Window" by right-clicking on the Menu tag in the MenuBox
(described here). Yet another alternative is to make double use
of the TraceID box to display cursor values as well as the TraceIDs.
The pltsq.m example demonstrates how this can be done.
X-axis cursor slider
If the string 'Slider'
or 'S' appear in the
'Options' argument then this slider is inserted just
below the cursor button group discussed above. The X-axis cursor slider has two different
functions depending on whether the x axis has been expanded.
If the x axis has not been expanded (or has been expanded by less than a factor
of two) then this slider moves the cursor left or right by 1% of the data length
when you click on the left or right slider arrows and left or right by 5% of the
data length when you click in the trough area of the slider to the left or right
of the slider button. The slider button itself is not used in this mode and
remains fixed in the middle of the slider.
If the x axis has been expanded (by more than a factor of two) then this slider
makes it easy to quickly scroll through the data set or to pan to a particular
location. (Note that in this situation the X-axis cursor slider performs a similar
function as the xView slider described in the in the
Zooming and panning section. Although
the xView slider is more versatile in this role it does require some sacrifice in the
vertical space available for the plot.)
Clicking on the left or right arrows moves the view window left or
right by 10% of the visible range i.e. currently visible data will be scrolled
out of view after 10 clicks. (Holding the mouse button down over these arrows
results in a pleasing continuous scrolling effect.) Clicking in the trough
area to the left or right of the slider button moves the view window left or
right by 100% of the visible range (i.e. currently visible data will be scrolled
out of view for every click). Note that the slider button moves to show the
relative position of the data currently in view. Also you can do a quick pan by
grabbing the slider button with the mouse and dragging it left or right.
Dragging it as far as possible to the left or right causes the plot to pan to
the beginning or end of the data and dragging it near the center of the slider
pans the plot to show data near the middle of the data set. Note that all three
panning methods (arrow, trough, button) keep the amount of data displayed
constant (i.e. the difference between the upper and lower x-axis limits doesn't
change). The data cursor is kept in the middle of the x-axis during this type of panning.
Most of the cursor movement and display panning capabilities of this slider
(as well as the xView slider) are also achieved using the x-axis
label features described above. So you should experiment with these three methods to
figure out which ones work best for any particular plot. One disadvantage of the x-axis label
method over either of the slider methods is that without dedicated graphical element for
these functions it's easy to forget that these panning and cursor movement capabilities exist.
Subplot cursors
Each subplot has its own cursor marker but the x-axis readout edit box is shared with
the other subplots in the same column. The y-axis readout edit box is also shared
with the other subplots in the same column when using the independent subplot mode.
(In the linked mode however, each cursor has its own y-axis edit box.)
When using subplots the "Average, RMS, Slope, & Distance" modes mentioned above are
not supported. Also the following cursor features are supported only on the main (lower left) plot:
- delta cursors
- x-axis slider
- xView slider
- multiCursor
As noted above, there are two subplot modes (set using the SubPlot parameter).
With the linked mode, when you move a cursor, all the other cursors for subplots in the same
column will move to the same x-axis location. (The cursors in other columns will not be affected.)
Also when you change the x-axis limits of a plot (via any method including zooming and panning)
then all the subplots in that column will be adjusted so they have the same x-axis limits.
On the other hand, when using the independent mode, changing the cursor or axis limits in one
subplot will never affect any of the other subplots.
Cursor data window
In addition to all the ways to extract data from a plot, there is one final method
that is best when you want to see the values for all the traces at several x positions
at once. To do this, simply right-click on the Menu tag of the MenuBox and the cursor
data window will appear. A complete description of this window and an example of what
it looks like can be found in the Menu Box section.
Right-clicking on the y-axis label
When you right-click on the y-axis label, the menu box and all cursor objects
disappear. This is useful for making screen captures of the plots since these
objects are used for data exploration and are normally just a distraction in a
hardcopy. Right-clicking again causes the objects to reappear. (The
plt hideCur; command has the same effect.)
Right-clicking on the Cursor ID Tag
Left-clicking on the Cursor ID Tag has a quite different function described above, but right
clicking on this tag is used when you would like to change the name of the currently selected
trace. (The name that was specified in the TraceID parameter.)
Granted, this need may be rare, but hear it is if you need it.
After you have clicked on the trace that you want to change, its name will appear
in the Cursor ID Tag. In this example the trace name is "err-constant" and we will change
this name to "ErrorOffset". Click on the Y cursor edit box and enter the desired new name.
It may be instinct to press "Enter" at this point, but be careful not to do that.
Now right-click on Cursor ID Tag. As soon as you do this, you will see the name of the trace
change, both in the Cursor ID Tag and in the TraceID box.


i
Reporter
Speak up. Ask for help.
Home
My Profile
Report
Red-flags
Interventions
Log out
Create a report
Comment:
Type of report:
Select an option
Red-flag
Intervention
File Type: Image
File Type: Video
Use current location