| 1 | /* =========================================================== | |
| 2 | * JFreeChart : a free chart library for the Java(tm) platform | |
| 3 | * =========================================================== | |
| 4 | * | |
| 5 | * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors. | |
| 6 | * | |
| 7 | * Project Info: http://www.jfree.org/jfreechart/index.html | |
| 8 | * | |
| 9 | * This library is free software; you can redistribute it and/or modify it | |
| 10 | * under the terms of the GNU Lesser General Public License as published by | |
| 11 | * the Free Software Foundation; either version 2.1 of the License, or | |
| 12 | * (at your option) any later version. | |
| 13 | * | |
| 14 | * This library is distributed in the hope that it will be useful, but | |
| 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
| 16 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public | |
| 17 | * License for more details. | |
| 18 | * | |
| 19 | * You should have received a copy of the GNU Lesser General Public | |
| 20 | * License along with this library; if not, write to the Free Software | |
| 21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, | |
| 22 | * USA. | |
| 23 | * | |
| 24 | * [Java is a trademark or registered trademark of Sun Microsystems, Inc. | |
| 25 | * in the United States and other countries.] | |
| 26 | * | |
| 27 | * ----------------------- | |
| 28 | * RelativeDateFormat.java | |
| 29 | * ----------------------- | |
| 30 | * (C) Copyright 2006-2008, by Object Refinery Limited and Contributors. | |
| 31 | * | |
| 32 | * Original Author: David Gilbert (for Object Refinery Limited); | |
| 33 | * Contributor(s): Michael Siemer; | |
| 34 | * | |
| 35 | * Changes: | |
| 36 | * -------- | |
| 37 | * 01-Nov-2006 : Version 1 (DG); | |
| 38 | * 23-Nov-2006 : Added argument checks, updated equals(), added clone() and | |
| 39 | * hashCode() (DG); | |
| 40 | * 15-Feb-2008 : Applied patch 1873328 by Michael Siemer, with minor | |
| 41 | * modifications (DG); | |
| 42 | * 01-Sep-2008 : Added new fields for hour and minute formatting, based on | |
| 43 | * patch 2033092 (DG); | |
| 44 | * | |
| 45 | */ | |
| 46 | ||
| 47 | package org.jfree.chart.util; | |
| 48 | ||
| 49 | import java.text.DateFormat; | |
| 50 | import java.text.DecimalFormat; | |
| 51 | import java.text.FieldPosition; | |
| 52 | import java.text.NumberFormat; | |
| 53 | import java.text.ParsePosition; | |
| 54 | import java.util.Calendar; | |
| 55 | import java.util.Date; | |
| 56 | import java.util.GregorianCalendar; | |
| 57 | ||
| 58 | /** | |
| 59 | * A formatter that formats dates to show the elapsed time relative to some | |
| 60 | * base date. | |
| 61 | * | |
| 62 | * @since 1.0.3 | |
| 63 | */ | |
| 64 | public class RelativeDateFormat extends DateFormat { | |
| 65 | ||
| 66 | /** The base milliseconds for the elapsed time calculation. */ | |
| 67 | private long baseMillis; | |
| 68 | ||
| 69 | /** | |
| 70 | * A flag that controls whether or not a zero day count is displayed. | |
| 71 | */ | |
| 72 | private boolean showZeroDays; | |
| 73 | ||
| 74 | /** | |
| 75 | * A flag that controls whether or not a zero hour count is displayed. | |
| 76 | * | |
| 77 | * @since 1.0.10 | |
| 78 | */ | |
| 79 | private boolean showZeroHours; | |
| 80 | ||
| 81 | /** | |
| 82 | * A formatter for the day count (most likely not critical until the | |
| 83 | * day count exceeds 999). | |
| 84 | */ | |
| 85 | private NumberFormat dayFormatter; | |
| 86 | ||
| 87 | /** | |
| 88 | * A prefix prepended to the start of the format if the relative date is | |
| 89 | * positive. | |
| 90 | * | |
| 91 | * @since 1.0.10 | |
| 92 | */ | |
| 93 | private String positivePrefix; | |
| 94 | ||
| 95 | /** | |
| 96 | * A string appended after the day count. | |
| 97 | */ | |
| 98 | private String daySuffix; | |
| 99 | ||
| 100 | /** | |
| 101 | * A formatter for the hours. | |
| 102 | * | |
| 103 | * @since 1.0.11 | |
| 104 | */ | |
| 105 | private NumberFormat hourFormatter; | |
| 106 | ||
| 107 | /** | |
| 108 | * A string appended after the hours. | |
| 109 | */ | |
| 110 | private String hourSuffix; | |
| 111 | ||
| 112 | /** | |
| 113 | * A formatter for the minutes. | |
| 114 | * | |
| 115 | * @since 1.0.11 | |
| 116 | */ | |
| 117 | private NumberFormat minuteFormatter; | |
| 118 | ||
| 119 | /** | |
| 120 | * A string appended after the minutes. | |
| 121 | */ | |
| 122 | private String minuteSuffix; | |
| 123 | ||
| 124 | /** | |
| 125 | * A formatter for the seconds (and milliseconds). | |
| 126 | */ | |
| 127 | private NumberFormat secondFormatter; | |
| 128 | ||
| 129 | /** | |
| 130 | * A string appended after the seconds. | |
| 131 | */ | |
| 132 | private String secondSuffix; | |
| 133 | ||
| 134 | /** | |
| 135 | * A constant for the number of milliseconds in one hour. | |
| 136 | */ | |
| 137 | private static long MILLISECONDS_IN_ONE_HOUR = 60 * 60 * 1000L; | |
| 138 | ||
| 139 | /** | |
| 140 | * A constant for the number of milliseconds in one day. | |
| 141 | */ | |
| 142 | private static long MILLISECONDS_IN_ONE_DAY = 24 * MILLISECONDS_IN_ONE_HOUR; | |
| 143 | ||
| 144 | /** | |
| 145 | * Creates a new instance with base milliseconds set to zero. | |
| 146 | */ | |
| 147 | public RelativeDateFormat() { | |
| 148 | this(0L); | |
| 149 | } | |
| 150 | ||
| 151 | /** | |
| 152 | * Creates a new instance. | |
| 153 | * | |
| 154 | * @param time the date/time (null not permitted). | |
| 155 | */ | |
| 156 | public RelativeDateFormat(Date time) { | |
| 157 | this(time.getTime()); | |
| 158 | } | |
| 159 | ||
| 160 | /** | |
| 161 | * Creates a new instance. | |
| 162 | * | |
| 163 | * @param baseMillis the time zone (null not permitted). | |
| 164 | */ | |
| 165 | public RelativeDateFormat(long baseMillis) { | |
| 166 | super(); | |
| 167 | this.baseMillis = baseMillis; | |
| 168 | this.showZeroDays = false; | |
| 169 | this.showZeroHours = true; | |
| 170 | this.positivePrefix = ""; | |
| 171 | this.dayFormatter = NumberFormat.getNumberInstance(); | |
| 172 | this.daySuffix = "d"; | |
| 173 | this.hourFormatter = NumberFormat.getNumberInstance(); | |
| 174 | this.hourSuffix = "h"; | |
| 175 | this.minuteFormatter = NumberFormat.getNumberInstance(); | |
| 176 | this.minuteSuffix = "m"; | |
| 177 | this.secondFormatter = NumberFormat.getNumberInstance(); | |
| 178 |
1
1. |
this.secondFormatter.setMaximumFractionDigits(3); |
| 179 |
1
1. |
this.secondFormatter.setMinimumFractionDigits(3); |
| 180 | this.secondSuffix = "s"; | |
| 181 | ||
| 182 | // we don't use the calendar or numberFormat fields, but equals(Object) | |
| 183 | // is failing without them being non-null | |
| 184 | this.calendar = new GregorianCalendar(); | |
| 185 | this.numberFormat = new DecimalFormat("0"); | |
| 186 | } | |
| 187 | ||
| 188 | /** | |
| 189 | * Returns the base date/time used to calculate the elapsed time for | |
| 190 | * display. | |
| 191 | * | |
| 192 | * @return The base date/time in milliseconds since 1-Jan-1970. | |
| 193 | * | |
| 194 | * @see #setBaseMillis(long) | |
| 195 | */ | |
| 196 | public long getBaseMillis() { | |
| 197 |
1
1. getBaseMillis : replaced return of long value with value + 1 for org/jfree/chart/util/RelativeDateFormat::getBaseMillis → NO_COVERAGE |
return this.baseMillis; |
| 198 | } | |
| 199 | ||
| 200 | /** | |
| 201 | * Sets the base date/time used to calculate the elapsed time for display. | |
| 202 | * This should be specified in milliseconds using the same encoding as | |
| 203 | * java.util.Date. | |
| 204 | * | |
| 205 | * @param baseMillis the base date/time in milliseconds. | |
| 206 | * | |
| 207 | * @see #getBaseMillis() | |
| 208 | */ | |
| 209 | public void setBaseMillis(long baseMillis) { | |
| 210 | this.baseMillis = baseMillis; | |
| 211 | } | |
| 212 | ||
| 213 | /** | |
| 214 | * Returns the flag that controls whether or not zero day counts are | |
| 215 | * shown in the formatted output. | |
| 216 | * | |
| 217 | * @return The flag. | |
| 218 | * | |
| 219 | * @see #setShowZeroDays(boolean) | |
| 220 | */ | |
| 221 | public boolean getShowZeroDays() { | |
| 222 |
1
1. getShowZeroDays : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return this.showZeroDays; |
| 223 | } | |
| 224 | ||
| 225 | /** | |
| 226 | * Sets the flag that controls whether or not zero day counts are shown | |
| 227 | * in the formatted output. | |
| 228 | * | |
| 229 | * @param show the flag. | |
| 230 | * | |
| 231 | * @see #getShowZeroDays() | |
| 232 | */ | |
| 233 | public void setShowZeroDays(boolean show) { | |
| 234 | this.showZeroDays = show; | |
| 235 | } | |
| 236 | ||
| 237 | /** | |
| 238 | * Returns the flag that controls whether or not zero hour counts are | |
| 239 | * shown in the formatted output. | |
| 240 | * | |
| 241 | * @return The flag. | |
| 242 | * | |
| 243 | * @see #setShowZeroHours(boolean) | |
| 244 | * | |
| 245 | * @since 1.0.10 | |
| 246 | */ | |
| 247 | public boolean getShowZeroHours() { | |
| 248 |
1
1. getShowZeroHours : replaced return of integer sized value with (x == 0 ? 1 : 0) → NO_COVERAGE |
return this.showZeroHours; |
| 249 | } | |
| 250 | ||
| 251 | /** | |
| 252 | * Sets the flag that controls whether or not zero hour counts are shown | |
| 253 | * in the formatted output. | |
| 254 | * | |
| 255 | * @param show the flag. | |
| 256 | * | |
| 257 | * @see #getShowZeroHours() | |
| 258 | * | |
| 259 | * @since 1.0.10 | |
| 260 | */ | |
| 261 | public void setShowZeroHours(boolean show) { | |
| 262 | this.showZeroHours = show; | |
| 263 | } | |
| 264 | ||
| 265 | /** | |
| 266 | * Returns the string that is prepended to the format if the relative time | |
| 267 | * is positive. | |
| 268 | * | |
| 269 | * @return The string (never null). | |
| 270 | * | |
| 271 | * @see #setPositivePrefix(String) | |
| 272 | * | |
| 273 | * @since 1.0.10 | |
| 274 | */ | |
| 275 | public String getPositivePrefix() { | |
| 276 |
1
1. getPositivePrefix : mutated return of Object value for org/jfree/chart/util/RelativeDateFormat::getPositivePrefix to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE |
return this.positivePrefix; |
| 277 | } | |
| 278 | ||
| 279 | /** | |
| 280 | * Sets the string that is prepended to the format if the relative time is | |
| 281 | * positive. | |
| 282 | * | |
| 283 | * @param prefix the prefix (null not permitted). | |
| 284 | * | |
| 285 | * @see #getPositivePrefix() | |
| 286 | * | |
| 287 | * @since 1.0.10 | |
| 288 | */ | |
| 289 | public void setPositivePrefix(String prefix) { | |
| 290 |
1
1. setPositivePrefix : negated conditional → NO_COVERAGE |
if (prefix == null) { |
| 291 | throw new IllegalArgumentException("Null 'prefix' argument."); | |
| 292 | } | |
| 293 | this.positivePrefix = prefix; | |
| 294 | } | |
| 295 | ||
| 296 | /** | |
| 297 | * Sets the formatter for the days. | |
| 298 | * | |
| 299 | * @param formatter the formatter (null not permitted). | |
| 300 | * | |
| 301 | * @since 1.0.11 | |
| 302 | */ | |
| 303 | public void setDayFormatter(NumberFormat formatter) { | |
| 304 |
1
1. setDayFormatter : negated conditional → KILLED |
if (formatter == null) { |
| 305 | throw new IllegalArgumentException("Null 'formatter' argument."); | |
| 306 | } | |
| 307 | this.dayFormatter = formatter; | |
| 308 | } | |
| 309 | ||
| 310 | /** | |
| 311 | * Returns the string that is appended to the day count. | |
| 312 | * | |
| 313 | * @return The string. | |
| 314 | * | |
| 315 | * @see #setDaySuffix(String) | |
| 316 | */ | |
| 317 | public String getDaySuffix() { | |
| 318 |
1
1. getDaySuffix : mutated return of Object value for org/jfree/chart/util/RelativeDateFormat::getDaySuffix to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE |
return this.daySuffix; |
| 319 | } | |
| 320 | ||
| 321 | /** | |
| 322 | * Sets the string that is appended to the day count. | |
| 323 | * | |
| 324 | * @param suffix the suffix (null not permitted). | |
| 325 | * | |
| 326 | * @see #getDaySuffix() | |
| 327 | */ | |
| 328 | public void setDaySuffix(String suffix) { | |
| 329 |
1
1. setDaySuffix : negated conditional → KILLED |
if (suffix == null) { |
| 330 | throw new IllegalArgumentException("Null 'suffix' argument."); | |
| 331 | } | |
| 332 | this.daySuffix = suffix; | |
| 333 | } | |
| 334 | ||
| 335 | /** | |
| 336 | * Sets the formatter for the hours. | |
| 337 | * | |
| 338 | * @param formatter the formatter (null not permitted). | |
| 339 | * | |
| 340 | * @since 1.0.11 | |
| 341 | */ | |
| 342 | public void setHourFormatter(NumberFormat formatter) { | |
| 343 |
1
1. setHourFormatter : negated conditional → KILLED |
if (formatter == null) { |
| 344 | throw new IllegalArgumentException("Null 'formatter' argument."); | |
| 345 | } | |
| 346 | this.hourFormatter = formatter; | |
| 347 | } | |
| 348 | ||
| 349 | /** | |
| 350 | * Returns the string that is appended to the hour count. | |
| 351 | * | |
| 352 | * @return The string. | |
| 353 | * | |
| 354 | * @see #setHourSuffix(String) | |
| 355 | */ | |
| 356 | public String getHourSuffix() { | |
| 357 |
1
1. getHourSuffix : mutated return of Object value for org/jfree/chart/util/RelativeDateFormat::getHourSuffix to ( if (x != null) null else throw new RuntimeException ) → KILLED |
return this.hourSuffix; |
| 358 | } | |
| 359 | ||
| 360 | /** | |
| 361 | * Sets the string that is appended to the hour count. | |
| 362 | * | |
| 363 | * @param suffix the suffix (null not permitted). | |
| 364 | * | |
| 365 | * @see #getHourSuffix() | |
| 366 | */ | |
| 367 | public void setHourSuffix(String suffix) { | |
| 368 |
1
1. setHourSuffix : negated conditional → KILLED |
if (suffix == null) { |
| 369 | throw new IllegalArgumentException("Null 'suffix' argument."); | |
| 370 | } | |
| 371 | this.hourSuffix = suffix; | |
| 372 | } | |
| 373 | ||
| 374 | /** | |
| 375 | * Sets the formatter for the minutes. | |
| 376 | * | |
| 377 | * @param formatter the formatter (null not permitted). | |
| 378 | * | |
| 379 | * @since 1.0.11 | |
| 380 | */ | |
| 381 | public void setMinuteFormatter(NumberFormat formatter) { | |
| 382 |
1
1. setMinuteFormatter : negated conditional → KILLED |
if (formatter == null) { |
| 383 | throw new IllegalArgumentException("Null 'formatter' argument."); | |
| 384 | } | |
| 385 | this.minuteFormatter = formatter; | |
| 386 | } | |
| 387 | ||
| 388 | /** | |
| 389 | * Returns the string that is appended to the minute count. | |
| 390 | * | |
| 391 | * @return The string. | |
| 392 | * | |
| 393 | * @see #setMinuteSuffix(String) | |
| 394 | */ | |
| 395 | public String getMinuteSuffix() { | |
| 396 |
1
1. getMinuteSuffix : mutated return of Object value for org/jfree/chart/util/RelativeDateFormat::getMinuteSuffix to ( if (x != null) null else throw new RuntimeException ) → KILLED |
return this.minuteSuffix; |
| 397 | } | |
| 398 | ||
| 399 | /** | |
| 400 | * Sets the string that is appended to the minute count. | |
| 401 | * | |
| 402 | * @param suffix the suffix (null not permitted). | |
| 403 | * | |
| 404 | * @see #getMinuteSuffix() | |
| 405 | */ | |
| 406 | public void setMinuteSuffix(String suffix) { | |
| 407 |
1
1. setMinuteSuffix : negated conditional → KILLED |
if (suffix == null) { |
| 408 | throw new IllegalArgumentException("Null 'suffix' argument."); | |
| 409 | } | |
| 410 | this.minuteSuffix = suffix; | |
| 411 | } | |
| 412 | ||
| 413 | /** | |
| 414 | * Returns the string that is appended to the second count. | |
| 415 | * | |
| 416 | * @return The string. | |
| 417 | * | |
| 418 | * @see #setSecondSuffix(String) | |
| 419 | */ | |
| 420 | public String getSecondSuffix() { | |
| 421 |
1
1. getSecondSuffix : mutated return of Object value for org/jfree/chart/util/RelativeDateFormat::getSecondSuffix to ( if (x != null) null else throw new RuntimeException ) → KILLED |
return this.secondSuffix; |
| 422 | } | |
| 423 | ||
| 424 | /** | |
| 425 | * Sets the string that is appended to the second count. | |
| 426 | * | |
| 427 | * @param suffix the suffix (null not permitted). | |
| 428 | * | |
| 429 | * @see #getSecondSuffix() | |
| 430 | */ | |
| 431 | public void setSecondSuffix(String suffix) { | |
| 432 |
1
1. setSecondSuffix : negated conditional → KILLED |
if (suffix == null) { |
| 433 | throw new IllegalArgumentException("Null 'suffix' argument."); | |
| 434 | } | |
| 435 | this.secondSuffix = suffix; | |
| 436 | } | |
| 437 | ||
| 438 | /** | |
| 439 | * Sets the formatter for the seconds and milliseconds. | |
| 440 | * | |
| 441 | * @param formatter the formatter (null not permitted). | |
| 442 | */ | |
| 443 | public void setSecondFormatter(NumberFormat formatter) { | |
| 444 |
1
1. setSecondFormatter : negated conditional → KILLED |
if (formatter == null) { |
| 445 | throw new IllegalArgumentException("Null 'formatter' argument."); | |
| 446 | } | |
| 447 | this.secondFormatter = formatter; | |
| 448 | } | |
| 449 | ||
| 450 | /** | |
| 451 | * Formats the given date as the amount of elapsed time (relative to the | |
| 452 | * base date specified in the constructor). | |
| 453 | * | |
| 454 | * @param date the date. | |
| 455 | * @param toAppendTo the string buffer. | |
| 456 | * @param fieldPosition the field position. | |
| 457 | * | |
| 458 | * @return The formatted date. | |
| 459 | */ | |
| 460 | public StringBuffer format(Date date, StringBuffer toAppendTo, | |
| 461 | FieldPosition fieldPosition) { | |
| 462 | long currentMillis = date.getTime(); | |
| 463 |
1
1. format : Replaced long subtraction with addition → SURVIVED |
long elapsed = currentMillis - this.baseMillis; |
| 464 | String signPrefix; | |
| 465 |
2
1. format : changed conditional boundary → SURVIVED 2. format : negated conditional → KILLED |
if (elapsed < 0) { |
| 466 |
1
1. format : Replaced long multiplication with division → SURVIVED |
elapsed *= -1L; |
| 467 | signPrefix = "-"; | |
| 468 | } | |
| 469 | else { | |
| 470 | signPrefix = this.positivePrefix; | |
| 471 | } | |
| 472 | ||
| 473 |
1
1. format : Replaced long division with multiplication → KILLED |
long days = elapsed / MILLISECONDS_IN_ONE_DAY; |
| 474 |
2
1. format : Replaced long multiplication with division → SURVIVED 2. format : Replaced long subtraction with addition → SURVIVED |
elapsed = elapsed - (days * MILLISECONDS_IN_ONE_DAY); |
| 475 |
1
1. format : Replaced long division with multiplication → KILLED |
long hours = elapsed / MILLISECONDS_IN_ONE_HOUR; |
| 476 |
2
1. format : Replaced long multiplication with division → KILLED 2. format : Replaced long subtraction with addition → KILLED |
elapsed = elapsed - (hours * MILLISECONDS_IN_ONE_HOUR); |
| 477 |
1
1. format : Replaced long division with multiplication → KILLED |
long minutes = elapsed / 60000L; |
| 478 |
2
1. format : Replaced long multiplication with division → KILLED 2. format : Replaced long subtraction with addition → KILLED |
elapsed = elapsed - (minutes * 60000L); |
| 479 |
1
1. format : Replaced double division with multiplication → KILLED |
double seconds = elapsed / 1000.0; |
| 480 | ||
| 481 | toAppendTo.append(signPrefix); | |
| 482 |
2
1. format : negated conditional → KILLED 2. format : negated conditional → KILLED |
if (days != 0 || this.showZeroDays) { |
| 483 | toAppendTo.append(this.dayFormatter.format(days) + getDaySuffix()); | |
| 484 | } | |
| 485 |
2
1. format : negated conditional → KILLED 2. format : negated conditional → KILLED |
if (hours != 0 || this.showZeroHours) { |
| 486 | toAppendTo.append(this.hourFormatter.format(hours) | |
| 487 | + getHourSuffix()); | |
| 488 | } | |
| 489 | toAppendTo.append(this.minuteFormatter.format(minutes) | |
| 490 | + getMinuteSuffix()); | |
| 491 | toAppendTo.append(this.secondFormatter.format(seconds) | |
| 492 | + getSecondSuffix()); | |
| 493 |
1
1. format : mutated return of Object value for org/jfree/chart/util/RelativeDateFormat::format to ( if (x != null) null else throw new RuntimeException ) → KILLED |
return toAppendTo; |
| 494 | } | |
| 495 | ||
| 496 | /** | |
| 497 | * Parses the given string (not implemented). | |
| 498 | * | |
| 499 | * @param source the date string. | |
| 500 | * @param pos the parse position. | |
| 501 | * | |
| 502 | * @return null, as this method has not been implemented. | |
| 503 | */ | |
| 504 | public Date parse(String source, ParsePosition pos) { | |
| 505 |
1
1. parse : mutated return of Object value for org/jfree/chart/util/RelativeDateFormat::parse to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE |
return null; |
| 506 | } | |
| 507 | ||
| 508 | /** | |
| 509 | * Tests this formatter for equality with an arbitrary object. | |
| 510 | * | |
| 511 | * @param obj the object (null permitted). | |
| 512 | * | |
| 513 | * @return A boolean. | |
| 514 | */ | |
| 515 | public boolean equals(Object obj) { | |
| 516 |
1
1. equals : negated conditional → KILLED |
if (obj == this) { |
| 517 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → NO_COVERAGE |
return true; |
| 518 | } | |
| 519 |
1
1. equals : negated conditional → KILLED |
if (!(obj instanceof RelativeDateFormat)) { |
| 520 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → NO_COVERAGE |
return false; |
| 521 | } | |
| 522 |
1
1. equals : negated conditional → KILLED |
if (!super.equals(obj)) { |
| 523 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → NO_COVERAGE |
return false; |
| 524 | } | |
| 525 | RelativeDateFormat that = (RelativeDateFormat) obj; | |
| 526 |
1
1. equals : negated conditional → KILLED |
if (this.baseMillis != that.baseMillis) { |
| 527 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 528 | } | |
| 529 |
1
1. equals : negated conditional → KILLED |
if (this.showZeroDays != that.showZeroDays) { |
| 530 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 531 | } | |
| 532 |
1
1. equals : negated conditional → KILLED |
if (this.showZeroHours != that.showZeroHours) { |
| 533 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → NO_COVERAGE |
return false; |
| 534 | } | |
| 535 |
1
1. equals : negated conditional → KILLED |
if (!this.positivePrefix.equals(that.positivePrefix)) { |
| 536 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → NO_COVERAGE |
return false; |
| 537 | } | |
| 538 |
1
1. equals : negated conditional → KILLED |
if (!this.daySuffix.equals(that.daySuffix)) { |
| 539 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 540 | } | |
| 541 |
1
1. equals : negated conditional → KILLED |
if (!this.hourSuffix.equals(that.hourSuffix)) { |
| 542 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 543 | } | |
| 544 |
1
1. equals : negated conditional → KILLED |
if (!this.minuteSuffix.equals(that.minuteSuffix)) { |
| 545 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 546 | } | |
| 547 |
1
1. equals : negated conditional → KILLED |
if (!this.secondSuffix.equals(that.secondSuffix)) { |
| 548 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 549 | } | |
| 550 |
1
1. equals : negated conditional → KILLED |
if (!this.dayFormatter.equals(that.dayFormatter)) { |
| 551 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 552 | } | |
| 553 |
1
1. equals : negated conditional → KILLED |
if (!this.hourFormatter.equals(that.hourFormatter)) { |
| 554 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 555 | } | |
| 556 |
1
1. equals : negated conditional → KILLED |
if (!this.minuteFormatter.equals(that.minuteFormatter)) { |
| 557 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 558 | } | |
| 559 |
1
1. equals : negated conditional → KILLED |
if (!this.secondFormatter.equals(that.secondFormatter)) { |
| 560 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return false; |
| 561 | } | |
| 562 |
1
1. equals : replaced return of integer sized value with (x == 0 ? 1 : 0) → KILLED |
return true; |
| 563 | } | |
| 564 | ||
| 565 | /** | |
| 566 | * Returns a hash code for this instance. | |
| 567 | * | |
| 568 | * @return A hash code. | |
| 569 | */ | |
| 570 | public int hashCode() { | |
| 571 | int result = 193; | |
| 572 |
4
1. hashCode : Replaced integer multiplication with division → SURVIVED 2. hashCode : Replaced Unsigned Shift Right with Shift Left → SURVIVED 3. hashCode : Replaced XOR with AND → SURVIVED 4. hashCode : Replaced integer addition with subtraction → SURVIVED |
result = 37 * result |
| 573 | + (int) (this.baseMillis ^ (this.baseMillis >>> 32)); | |
| 574 |
2
1. hashCode : Replaced integer multiplication with division → SURVIVED 2. hashCode : Replaced integer addition with subtraction → SURVIVED |
result = 37 * result + this.positivePrefix.hashCode(); |
| 575 |
2
1. hashCode : Replaced integer multiplication with division → SURVIVED 2. hashCode : Replaced integer addition with subtraction → SURVIVED |
result = 37 * result + this.daySuffix.hashCode(); |
| 576 |
2
1. hashCode : Replaced integer multiplication with division → SURVIVED 2. hashCode : Replaced integer addition with subtraction → SURVIVED |
result = 37 * result + this.hourSuffix.hashCode(); |
| 577 |
2
1. hashCode : Replaced integer multiplication with division → SURVIVED 2. hashCode : Replaced integer addition with subtraction → SURVIVED |
result = 37 * result + this.minuteSuffix.hashCode(); |
| 578 |
2
1. hashCode : Replaced integer multiplication with division → SURVIVED 2. hashCode : Replaced integer addition with subtraction → SURVIVED |
result = 37 * result + this.secondSuffix.hashCode(); |
| 579 |
2
1. hashCode : Replaced integer multiplication with division → SURVIVED 2. hashCode : Replaced integer addition with subtraction → SURVIVED |
result = 37 * result + this.secondFormatter.hashCode(); |
| 580 |
1
1. hashCode : replaced return of integer sized value with (x == 0 ? 1 : 0) → SURVIVED |
return result; |
| 581 | } | |
| 582 | ||
| 583 | /** | |
| 584 | * Returns a clone of this instance. | |
| 585 | * | |
| 586 | * @return A clone. | |
| 587 | */ | |
| 588 | public Object clone() { | |
| 589 | RelativeDateFormat clone = (RelativeDateFormat) super.clone(); | |
| 590 | clone.dayFormatter = (NumberFormat) this.dayFormatter.clone(); | |
| 591 | clone.secondFormatter = (NumberFormat) this.secondFormatter.clone(); | |
| 592 |
1
1. clone : mutated return of Object value for org/jfree/chart/util/RelativeDateFormat::clone to ( if (x != null) null else throw new RuntimeException ) → KILLED |
return clone; |
| 593 | } | |
| 594 | ||
| 595 | /** | |
| 596 | * Some test code. | |
| 597 | * | |
| 598 | * @param args ignored. | |
| 599 | */ | |
| 600 | public static void main(String[] args) { | |
| 601 | GregorianCalendar c0 = new GregorianCalendar(2006, 10, 1, 0, 0, 0); | |
| 602 | GregorianCalendar c1 = new GregorianCalendar(2006, 10, 1, 11, 37, 43); | |
| 603 |
1
1. main : removed call to java/util/GregorianCalendar::set → NO_COVERAGE |
c1.set(Calendar.MILLISECOND, 123); |
| 604 | ||
| 605 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println("Default: "); |
| 606 | RelativeDateFormat rdf = new RelativeDateFormat(c0.getTimeInMillis()); | |
| 607 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println(rdf.format(c1.getTime())); |
| 608 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println(); |
| 609 | ||
| 610 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println("Hide milliseconds: "); |
| 611 |
1
1. main : removed call to org/jfree/chart/util/RelativeDateFormat::setSecondFormatter → NO_COVERAGE |
rdf.setSecondFormatter(new DecimalFormat("0")); |
| 612 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println(rdf.format(c1.getTime())); |
| 613 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println(); |
| 614 | ||
| 615 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println("Show zero day output: "); |
| 616 |
1
1. main : removed call to org/jfree/chart/util/RelativeDateFormat::setShowZeroDays → NO_COVERAGE |
rdf.setShowZeroDays(true); |
| 617 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println(rdf.format(c1.getTime())); |
| 618 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println(); |
| 619 | ||
| 620 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println("Alternative suffixes: "); |
| 621 |
1
1. main : removed call to org/jfree/chart/util/RelativeDateFormat::setShowZeroDays → NO_COVERAGE |
rdf.setShowZeroDays(false); |
| 622 |
1
1. main : removed call to org/jfree/chart/util/RelativeDateFormat::setDaySuffix → NO_COVERAGE |
rdf.setDaySuffix(":"); |
| 623 |
1
1. main : removed call to org/jfree/chart/util/RelativeDateFormat::setHourSuffix → NO_COVERAGE |
rdf.setHourSuffix(":"); |
| 624 |
1
1. main : removed call to org/jfree/chart/util/RelativeDateFormat::setMinuteSuffix → NO_COVERAGE |
rdf.setMinuteSuffix(":"); |
| 625 |
1
1. main : removed call to org/jfree/chart/util/RelativeDateFormat::setSecondSuffix → NO_COVERAGE |
rdf.setSecondSuffix(""); |
| 626 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println(rdf.format(c1.getTime())); |
| 627 |
1
1. main : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println(); |
| 628 | } | |
| 629 | } | |
Mutations | ||
| 178 |
1.1 |
|
| 179 |
1.1 |
|
| 197 |
1.1 |
|
| 222 |
1.1 |
|
| 248 |
1.1 |
|
| 276 |
1.1 |
|
| 290 |
1.1 |
|
| 304 |
1.1 |
|
| 318 |
1.1 |
|
| 329 |
1.1 |
|
| 343 |
1.1 |
|
| 357 |
1.1 |
|
| 368 |
1.1 |
|
| 382 |
1.1 |
|
| 396 |
1.1 |
|
| 407 |
1.1 |
|
| 421 |
1.1 |
|
| 432 |
1.1 |
|
| 444 |
1.1 |
|
| 463 |
1.1 |
|
| 465 |
1.1 2.2 |
|
| 466 |
1.1 |
|
| 473 |
1.1 |
|
| 474 |
1.1 2.2 |
|
| 475 |
1.1 |
|
| 476 |
1.1 2.2 |
|
| 477 |
1.1 |
|
| 478 |
1.1 2.2 |
|
| 479 |
1.1 |
|
| 482 |
1.1 2.2 |
|
| 485 |
1.1 2.2 |
|
| 493 |
1.1 |
|
| 505 |
1.1 |
|
| 516 |
1.1 |
|
| 517 |
1.1 |
|
| 519 |
1.1 |
|
| 520 |
1.1 |
|
| 522 |
1.1 |
|
| 523 |
1.1 |
|
| 526 |
1.1 |
|
| 527 |
1.1 |
|
| 529 |
1.1 |
|
| 530 |
1.1 |
|
| 532 |
1.1 |
|
| 533 |
1.1 |
|
| 535 |
1.1 |
|
| 536 |
1.1 |
|
| 538 |
1.1 |
|
| 539 |
1.1 |
|
| 541 |
1.1 |
|
| 542 |
1.1 |
|
| 544 |
1.1 |
|
| 545 |
1.1 |
|
| 547 |
1.1 |
|
| 548 |
1.1 |
|
| 550 |
1.1 |
|
| 551 |
1.1 |
|
| 553 |
1.1 |
|
| 554 |
1.1 |
|
| 556 |
1.1 |
|
| 557 |
1.1 |
|
| 559 |
1.1 |
|
| 560 |
1.1 |
|
| 562 |
1.1 |
|
| 572 |
1.1 2.2 3.3 4.4 |
|
| 574 |
1.1 2.2 |
|
| 575 |
1.1 2.2 |
|
| 576 |
1.1 2.2 |
|
| 577 |
1.1 2.2 |
|
| 578 |
1.1 2.2 |
|
| 579 |
1.1 2.2 |
|
| 580 |
1.1 |
|
| 592 |
1.1 |
|
| 603 |
1.1 |
|
| 605 |
1.1 |
|
| 607 |
1.1 |
|
| 608 |
1.1 |
|
| 610 |
1.1 |
|
| 611 |
1.1 |
|
| 612 |
1.1 |
|
| 613 |
1.1 |
|
| 615 |
1.1 |
|
| 616 |
1.1 |
|
| 617 |
1.1 |
|
| 618 |
1.1 |
|
| 620 |
1.1 |
|
| 621 |
1.1 |
|
| 622 |
1.1 |
|
| 623 |
1.1 |
|
| 624 |
1.1 |
|
| 625 |
1.1 |
|
| 626 |
1.1 |
|
| 627 |
1.1 |


{% extends "catalogue/detail.html" %} {% block product_review %}
Read customer reviews on this product. If you have read this book, why not post your own review?
{% if reviews %}{{ review.date_created }}
{{ review.body|linebreaks }}
Permalink {% include 'reviews/_vote_bit.html' %} {% if review.has_votes %}
{{ review.num_up_votes }} customers agreed.
{% endif %}This product does not have any reviews yet.
{% endif %} {% endblock %}


ABOUT MARTY FITCHEN
Hey there! My name is Marty... Fitchen (just like "kitchen" with an F), and I am a dad, husband, younger brother, and son... I am also a creative. Creative work is my professional passion. Whether I am doing the design work myself or managing the design process of others, it brings me so much joy to be a part of revitalizing creative work.
A rarity these days in Portland, Oregon, I am also southeast PDX born and bred. I love Portland! The trees, the rain, the food, the bridges, the air... it has shaped me in ways that I am still discovering today. More than anything, Portland has influenced my creativity. This city is beautiful... and if you ask me, it's beautifully designed. Sure, out-of-towners might get turned around by a few funky roads but Burnside splits the city North | South and the river divides the city East | West. Simple. Smart.
I aim to approach any creative project in this way. And there's nothing like bringing that one idea to fruition. It fuels the drive to create something special. My life has groomed me to be a leader and a team-player. I have been captain of a State-winning soccer team, graphics editor and editor-in-chief of the highest-producing high school newspaper in Oregon, led incoming college students in outdoor activities at Passages (the University of Puget Sound [UPS] outdoor orientation program), and choreographed hip-hop and breakdance routines with the largest student-run organization at UPS (Repertory Dance Group).
Leading various teams helped me dive into the professional world. I have been doing freelance design work since 2007 and have joined a bunch of marketing teams since 2006.
And while this is great, I was beginning to find that I wasn't moving up the way I wanted to, so I needed something else. I first tested the waters of project management by taking the four-course Project Management Certificate Program through Portland State University's continued education program. I was calling it "Project Management Light" during interviews, but this certificate wasn't landing me any PM jobs. Again, I needed something else. This is when I found out about Epicodus. And I thought I should learn how to code. I figured that having a solid coding foundation coupled with my creative work experience would make me a real threat as a front end developer. So here I am, enrolled in the front develper track with Epicodus.
EXPERIENCE
Marketing Specialist
Monsoon Commerce
October 2011 – May 2014 (2 years 8 months) | Portland, OR
- Managed creative content and final asset deliverables for brand campaigns, sales tools, and communications, both print and digital, to ensure they are on time and on budget
- Maintained consistent branding for all communications and campaigns, aligning with corporate marketing objectives and brand guidelines
- Updated website content using Concrete5 content management system
- Managed social media accounts and reported monthly share of voice metrics
- Supported trade shows and event staff by planning onsite logistics, providing creative
materials, and implementing registration microsite
- Developed and maintained strong relationships with various partners and sponsors
E-Marketing Specialist
Monsoon Commerce
August 2010 – October 2011 (1 year 3 months) | Portland, OR
- Executed marketing strategy and created assets for online promotions and advertisements, social media, and interactive media
- Led content creation, deployment, and tracking of email marketing campaigns
- Vetted creative content to the highest standards while adhering to brand guidelines
- Promoted to Marketing Specialist in October 2011
Marcom Specialist
CCLC
October 2008 – August 2010 (1 year 11 months) | Portland, OR
- Designed marketing programs for child care centers at Fortune 1000 companies such as: Pixar, Electronic Arts, Procter & Gamble, and Cisco Systems
- Led rebranding project for 50+ centers, which included renaming, licensing, hiring freelancers for developing logos, and installing signage, van wraps, and decals
- Coordinated launch of new website and managed ongoing administration of content using Drupal
- Designed, produced graphics for, and edited weekly company-wide e-newsletter
- Created year-in-review template and 100+ year-in-review guides annually
Marketing Intern
CCLC
October 2007 – October 2008 (1 year 1 month) | Portland, OR
- Designed marketing programs for child care centers at Fortune 1000 companies such as: Pixar, Electronic Arts, Procter & Gamble, and Cisco Systems
- Led rebranding project for 50+ centers, which included renaming, licensing, hiring freelancers for developing logos, and installing signage, van wraps, and decals
- Coordinated launch of new website and managed ongoing administration of content using Drupal
- Designed, produced graphics for, and edited weekly company-wide e-newsletter
- Created year-in-review template and 100+ year-in-review guides annually
Assistant Account Development Manager
Nike | Sports Knowledge Underground [ SKU ]
August 2006 – January 2007 (6 months) | Portland, OR
- Developed product knowledge base, working with 170+ accounts and reaching 38,000+ user
- Managed 80+ accounts: generated weekly status and monthly booking reports, communicated with clients, coordinated projects, and shipped promotional and technical materials
Busser
Paragon Restaurant & Bar
2005 – 2007 (2 years) | Portland, OR


PGM-Lab
☰
Research
Papers
Projects
Talks
Tutorials
Education
Software
Consultancy
Team
Blog
Juan Jesús Ojeda
Published on
Jan 17, 2019
| By
|
Permalink
juanje.ojeda@ual.es


Sporting Skills
Duckworth Lewis Calculator
How many interruptions in the Team 2's innings?
Calculate


Welcome to my personal page! I am Guglielmo Menchetti, a Computer Science and Engineering student in a Double Master Degree program between Politecnico di Milano and University of Illinois at Chicago.
I am passionate about Software Development and Machine Learning, in particular Deep Learning applications in Computer Vision.
I am also a wine lover and an apprentice climber.
For more information about my self, you can download my most updated resume.


NSString(CSS) Category Reference
| Declared in | NSString+CSS.h |
Overview
Methods to make dealing with CSS strings easier. Extract shadows from this string, extract CSS styles found in this string, extract the pixel size of a CSS measurement relative to the current text size, and extract the CSS pixel measurement of this string.
Tasks
-
– dictionaryOfCSSStyles
Examine a string for all CSS styles that are applied to it and return a dictionary of those styles. Implemented using scanCSSAttribute: which is defined in NSScanner+HTML.h.
-
– pixelSizeOfCSSMeasureRelativeToCurrentTextSize:
Takes a textSize and modifies the current string’s pixel measurement to be modified by it. Used in DTHTMLElement.
-
– arrayOfCSSShadowsWithCurrentTextSize:currentColor:
Parse CSS shadow styles, consisting of color, blur, and offset, out of this string. The input string must be comma delimited in the format:
? ? where the third length and the color are not required per CSS shadows. To calculate the sizes of the blur and offset pixelSizeOfCSSMeasureRelativeToCurrentTextSize is used. Used in DTHTMLElement. -
– CSSpixelSize
If this string ends with ‘px’ return the float value stored therein. Ex: The following ‘17.0px;’ will return 17.0. I DON’T KNOW WHAT USES THIS METHOD IF ANYTHING AT ALL-grep returned just this class
-
– stringByDecodingCSSContentAttribute
Decodes a content attribute which might contained unicode sequences.
Instance Methods
CSSpixelSize
If this string ends with ‘px’ return the float value stored therein. Ex: The following ‘17.0px;’ will return 17.0. I DON’T KNOW WHAT USES THIS METHOD IF ANYTHING AT ALL-grep returned just this class
- (CGFloat)CSSpixelSize
Return Value
The float value stored in this string.
Declared In
NSString+CSS.h
arrayOfCSSShadowsWithCurrentTextSize:currentColor:
Parse CSS shadow styles, consisting of color, blur, and offset, out of this string. The input string must be comma delimited in the format:
- (NSArray *)arrayOfCSSShadowsWithCurrentTextSize:(CGFloat)textSize currentColor:(DTColor *)color
Parameters
- textSize
In order to determine the shadow offset we need what text size it will be displayed at.
- color
Used if no shadow attribute color is found.
Return Value
An array of dictionaries, each of which is a shadow consisting of color, blur, and offset keys value pairs.
Declared In
NSString+CSS.h
dictionaryOfCSSStyles
Examine a string for all CSS styles that are applied to it and return a dictionary of those styles. Implemented using scanCSSAttribute: which is defined in NSScanner+HTML.h.
- (NSDictionary *)dictionaryOfCSSStyles
Return Value
A dictionary of strings containing the CSS styles which are applied to this string.
Declared In
NSString+CSS.h
pixelSizeOfCSSMeasureRelativeToCurrentTextSize:
Takes a textSize and modifies the current string’s pixel measurement to be modified by it. Used in DTHTMLElement.
- (CGFloat)pixelSizeOfCSSMeasureRelativeToCurrentTextSize:(CGFloat)textSize
Parameters
- textSize
The current size which the CSS size is relative to.
Return Value
A float that is the size textSize be it %, em or just numbers .
Declared In
NSString+CSS.h


--- layout: post title: Passing JSON from Express to Angular and Jade date: 2013-10-17 00:52:21.000000000 -07:00 categories: [] tags: - angular - AngularJS - express - HTML - Jade - JavaScript - JSON - MEAN - mongodb - node - nodejs status: publish type: post published: true meta: _edit_last: '53292888' geo_public: '1' geo_latitude: '0.000000' geo_longitude: '0.000000' geo_accuracy: '0' _wpas_skip_4181345: '1' _wpas_skip_4181352: '1' _publicize_pending: '1' publicize_twitter_user: c2kc publicize_twitter_url: http://t.co/x6aKWblTzd _wpas_done_4181349: '1' _publicize_done_external: a:1:{s:7:"twitter";a:1:{i:194479599;b:1;}} _wpas_skip_4181349: '1' author: login: chrischang12 email<EMAIL_ADDRESS>display_name: chrischang12 first_name: '' last_name: '' ---
Lately I've been working on a side project using the MEJAN stack (MEAN with Jade, copyright C.C.). It's appealing because working with Javascript in the client and server should equate to quick development and intuitive data/object passing from the MongoDB to Express to Jade to Angular and back to Jade. For a beginner however, it's actually not very straightforward. So, I decided to make a boilerplate without any fluff as all the stuff I found online wasn't "to-the-point" enough, or was a little too "hacky" i.e. didn't work or added seemingly unnecessary complexity.
First, the repo: https://github.com/chrischang12/mejan-boilerplate
There are three main files you want to look at: app.js, /public/javascript/controller.js and /views/homepage.jade. I'll do a quick code walkthrough.
[gist]7020467[/gist]
Express passes seed data to the Jade template as a Javascript object- a JSON array stored as the "data" object.
[gist]7020513[/gist]
Jade template then grabs the data object and converts it into JSON and passes it to Angular. By converting the object in this step, your script element contains only JSON, which is super easy to work with.
note: If you've worked with Jade before, you may notice the !{} interpolation. I learned from this blog post that #{} escapes HTML, which ultimately results in undesirable formatting.
[gist]7020581[/gist]
The Angular service (factory) then grabs the JSON and turns it back into a Javascript object and is stored under $parser.data, ready for transport to the controller. This service is a dependency for the controller, which allows the dummy controller access to the data. Now the controller is populated with data and we head back to Jade. The data from the controller is now used in ng-repeat to dynamically create divs. Woohoo!
Hope this saves someone from pulling their hair out!


Type in the text box to add new names to the list, delete all text in a box to remove it. Click and drag the
to reorder the names
Enter Names...
Add Name
{{names}},{{tempplayer}}
Click and drag to re-order
{{name.val}}


Mir Sakhawat Hossain
•Mathematician •Amateur Astronomer •Chess Player
Github
Gitlab
CV
Publications
Email
Twitter
Facebook
Linkedin
Wordpress
Pinterest
Some Favourite Books
Writer: Stephen Hawking
Writer: George Saliba
Writer: Simon Singh
Writer: Michio Kaku
Writer: Kip S. Thorne
Writer: George Saliba
Writer: Sir Isaac


Before Change
@with_seed()
@assert_raises_cudnn_not_satisfied(min_version="5.1.10")
def test_lstm_sym():
T, N, I, H = 5, 32, 800, 800
fused = mx.rnn.FusedRNNCell(H, num_layers=3, mode="lstm", get_next_state=True, prefix="")
stack = mx.rnn.SequentialRNNCell()
stack.add(mx.rnn.LSTMCell(H, prefix="l0_"))
stack.add(mx.rnn.LSTMCell(H, prefix="l1_"))
After Change
@with_seed()
@assert_raises_cudnn_not_satisfied(min_version="5.1.10")
def test_lstm_sym():
Ts = [1, 5]
Ns = [1, 32]
Is = [32, 128, 512]
Hs = [32, 128, 512]
for T, N, I, H in itertools.product(Ts, Ns, Is, Hs):
fused = mx.rnn.FusedRNNCell(H, num_layers=3, mode="lstm", get_next_state=True, prefix="")
stack = mx.rnn.SequentialRNNCell()
stack.add(mx.rnn.LSTMCell(H, prefix="l0_"))
stack.add(mx.rnn.LSTMCell(H, prefix="l1_"))
stack.add(mx.rnn.LSTMCell(H, prefix="l2_"))
check_rnn_consistency(fused, stack, T, N, I, H, "write")
check_rnn_consistency(fused, stack, T, N, I, H, "add")
check_rnn_consistency(fused, stack, T, N, I, H, "null")
@with_seed()
@assert_raises_cudnn_not_satisfied(min_version="5.1.10")
def test_lstm_bidirectional():
Ts = [1, 5]


Class RpgGame
Inheritance
System.Object
RpgGame
Inherited Members
System.Object.Equals(System.Object)
System.Object.Equals(System.Object, System.Object)
System.Object.GetHashCode()
System.Object.GetType()
System.Object.MemberwiseClone()
System.Object.ReferenceEquals(System.Object, System.Object)
System.Object.ToString()
Assembly: Pacman.dll
Syntax
[DataContract]
public class RpgGame : ChannelGame, IUserGame, IStoreableGame, IReactionsGame, IChannelGame, IBaseGame
Constructors
|
Improve this Doc
View Source
RpgGame(String, UInt64, IServiceProvider)
Declaration
public RpgGame(string name, ulong userId, IServiceProvider services)
Parameters
| Type |
Name |
Description |
| System.String |
name |
|
| System.UInt64 |
userId |
|
| System.IServiceProvider |
services |
|
Fields
|
Improve this Doc
View Source
Declaration
public static readonly IReadOnlyList<string> EmoteNumberInputs
Field Value
| Type |
Description |
| System.Collections.Generic.IReadOnlyList<System.String> |
|
|
Improve this Doc
View Source
Declaration
public static readonly IReadOnlyList<string> EmoteOtherInputs
Field Value
| Type |
Description |
| System.Collections.Generic.IReadOnlyList<System.String> |
|
|
Improve this Doc
View Source
enemies
Enemies in an enemy battle.
Declaration
[DataMember]
public List<Enemy> enemies
Field Value
| Type |
Description |
| System.Collections.Generic.List<Enemy> |
|
|
Improve this Doc
View Source
fightEmbed
Declaration
public EmbedBuilder fightEmbed
Field Value
| Type |
Description |
| Discord.EmbedBuilder |
|
|
Improve this Doc
View Source
isPvpTurn
Whether it is this player's turn in a PVP battle.
Declaration
[DataMember]
public bool isPvpTurn
Field Value
| Type |
Description |
| System.Boolean |
|
|
Improve this Doc
View Source
lastBattle
Time when the last battle began.
Declaration
[DataMember]
public DateTime lastBattle
Field Value
| Type |
Description |
| System.DateTime |
|
|
Improve this Doc
View Source
lastEmote
Declaration
Field Value
| Type |
Description |
| System.String |
|
|
Improve this Doc
View Source
lastHeal
Time when the player last healed.
Declaration
[DataMember]
public DateTime lastHeal
Field Value
| Type |
Description |
| System.DateTime |
|
|
Improve this Doc
View Source
Declaration
public const string MenuEmote = "🛂"
Field Value
| Type |
Description |
| System.String |
|
|
Improve this Doc
View Source
NameCharLimit
Declaration
public const int NameCharLimit = 32
Field Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
player
All information about this game's player.
Declaration
[DataMember]
public RpgPlayer player
Field Value
|
Improve this Doc
View Source
ProfileEmote
Declaration
public const string ProfileEmote = "🚹"
Field Value
| Type |
Description |
| System.String |
|
|
Improve this Doc
View Source
PvpEmote
Declaration
public const string PvpEmote = "💥"
Field Value
| Type |
Description |
| System.String |
|
|
Improve this Doc
View Source
pvpUserId
The ID of the opposing user in a PVP battle, proposed or confirmed.
Declaration
[DataMember]
public ulong pvpUserId
Field Value
| Type |
Description |
| System.UInt64 |
|
|
Improve this Doc
View Source
SkillsEmote
Declaration
public const string SkillsEmote = "🅿"
Field Value
| Type |
Description |
| System.String |
|
Properties
|
Improve this Doc
View Source
ChannelId
Declaration
[DataMember]
public override ulong ChannelId { get; set; }
Property Value
| Type |
Description |
| System.UInt64 |
|
Overrides
|
Improve this Doc
View Source
Expiry
Declaration
public override TimeSpan Expiry { get; }
Property Value
| Type |
Description |
| System.TimeSpan |
|
Overrides
|
Improve this Doc
View Source
FilenameKey
Declaration
public string FilenameKey { get; }
Property Value
| Type |
Description |
| System.String |
|
|
Improve this Doc
View Source
GameIndex
Declaration
public override int GameIndex { get; }
Property Value
| Type |
Description |
| System.Int32 |
|
Overrides
|
Improve this Doc
View Source
GameName
Declaration
public override string GameName { get; }
Property Value
| Type |
Description |
| System.String |
|
Overrides
|
Improve this Doc
View Source
IsPvp
Whether this is a PVP battle, proposed or confirmed.
Declaration
public bool IsPvp { get; }
Property Value
| Type |
Description |
| System.Boolean |
|
|
Improve this Doc
View Source
LastPlayed
Declaration
[DataMember]
public override DateTime LastPlayed { get; set; }
Property Value
| Type |
Description |
| System.DateTime |
|
Overrides
|
Improve this Doc
View Source
MessageId
Declaration
[DataMember]
public override ulong MessageId { get; set; }
Property Value
| Type |
Description |
| System.UInt64 |
|
Overrides
|
Improve this Doc
View Source
Opponents
Opponents in the current battle, whether it's against enemies or a player.
Declaration
public IReadOnlyList<Entity> Opponents { get; }
Property Value
| Type |
Description |
| System.Collections.Generic.IReadOnlyList<Entity> |
|
|
Improve this Doc
View Source
OwnerId
Declaration
[DataMember]
public override ulong OwnerId { get; protected set; }
Property Value
| Type |
Description |
| System.UInt64 |
|
Overrides
|
Improve this Doc
View Source
PvpBattleConfirmed
Whether both challenger and challenged are in the same PVP battle.
Declaration
public bool PvpBattleConfirmed { get; }
Property Value
| Type |
Description |
| System.Boolean |
|
|
Improve this Doc
View Source
PvpGame
The opponent's game object in a PVP battle. Managed by pvpUserId.
Declaration
public RpgGame PvpGame { get; }
Property Value
|
Improve this Doc
View Source
State
The state of the current or last battle.
Declaration
[DataMember]
public override GameState State { get; set; }
Property Value
Overrides
Methods
|
Improve this Doc
View Source
Fight(Nullable<Int32>, Skill)
Returns an embed displaying the current fight, performing an action first if applicable.
Declaration
public EmbedBuilder Fight(int? attack = default(int? ), Skill skill = null)
Parameters
| Type |
Name |
Description |
| System.Nullable<System.Int32> |
attack |
|
| Skill |
skill |
|
Returns
| Type |
Description |
| Discord.EmbedBuilder |
|
|
Improve this Doc
View Source
Returns an embed containing secondary information about the current fight.
Declaration
public EmbedBuilder FightMenu()
Returns
| Type |
Description |
| Discord.EmbedBuilder |
|
|
Improve this Doc
View Source
FightPvP(Boolean, Skill)
Returns an embed displaying the current PVP fight, performing an action first if applicable.
Declaration
public EmbedBuilder FightPvP(bool attack = false, Skill skill = null)
Parameters
| Type |
Name |
Description |
| System.Boolean |
attack |
|
| Skill |
skill |
|
Returns
| Type |
Description |
| Discord.EmbedBuilder |
|
|
Improve this Doc
View Source
GetEmbed(Boolean)
Declaration
public override EmbedBuilder GetEmbed(bool showHelp = true)
Parameters
| Type |
Name |
Description |
| System.Boolean |
showHelp |
|
Returns
| Type |
Description |
| Discord.EmbedBuilder |
|
Overrides
|
Improve this Doc
View Source
Declaration
public Task InputAsync(IEmote input, ulong userId = 1UL)
Parameters
| Type |
Name |
Description |
| Discord.IEmote |
input |
|
| System.UInt64 |
userId |
|
Returns
| Type |
Description |
| System.Threading.Tasks.Task |
|
|
Improve this Doc
View Source
Declaration
public bool IsInput(IEmote value, ulong userId)
Parameters
| Type |
Name |
Description |
| Discord.IEmote |
value |
|
| System.UInt64 |
userId |
|
Returns
| Type |
Description |
| System.Boolean |
|
|
Improve this Doc
View Source
PostDeserialize(IServiceProvider)
Declaration
public void PostDeserialize(IServiceProvider services)
Parameters
| Type |
Name |
Description |
| System.IServiceProvider |
services |
|
|
Improve this Doc
View Source
ResetBattle(GameState)
Safely ends a battle, and sets the game state to a non-active state.
Declaration
public void ResetBattle(GameState endState)
Parameters
|
Improve this Doc
View Source
StartFight(Nullable<UInt64>)
Declaration
public void StartFight(ulong? pvpUserId = default(ulong? ))
Parameters
| Type |
Name |
Description |
| System.Nullable<System.UInt64> |
pvpUserId |
|
Implements
Extension Methods


PERSONA (1966) A Film Review by Ivana Redwine Copyright 1999 Ivana Redwine
There are some films that never let you go. For me, Ingmar Bergman's "Persona" (1966) is such a film. Because it has great depth and resonance, new facets of meaning emerge with each viewing. Yet it defies being completely understood, but that is part of its beauty and power.
When I first saw "Persona," I didn't quite know what to make of it. I thought it was a haunting, enigmatic cinepoem, but my mind was unable to grasp it all at once. Much as a wonderfully complex novel demands careful, multiple readings, I knew I would have to see the film several times to start to gauge its depth, even though it's only 81 minutes long.
Every time I watch this film, my mind still reels a little, but that's not surprising. There's a kind of psychological vertigo operating in "Persona" that complements its theme of slippery, shifting, ambiguous personal identity. And Bergman takes great pains to make the people in his audience sharply conscious of the fact that they are watching a movie. Thus, the film is also about the vampiric voyeurism that is inherently part of cinema and the corresponding loss of self it produces.
In "Persona," much of the viewer's time is spent looking at the faces of a pair of women who are very similar in appearance, and as the story progresses there are moments when the two women seem to become one. In a striking sequence near the beginning of the film, an adolescent boy reaches for an image of a huge face apparently projected on a screen that he can almost--but not quite--touch. The face shown in this sequence alternates between the visages of Liv Ullmann and Bibi Andersson, the actresses who portray the main characters in the film. And much later in the movie, in one of the most stunning images in all of cinema, a composite face is formed, half Ullmann's face and the other half Andersson's. There is, in fact, much loving, lingering camera work devoted to faces throughout the film, and it struck me as reminiscent of the incredibly emotive things they used to do with faces in silent films.
The story in "Persona" is deceptively simple. It revolves around Alma (Andersson), a 25-year-old nurse put in charge of Elisabet Vogler (Ullmann), a well-known stage and screen actress who has suddenly, inexplicably stopped speaking. Elisabet steadfastly maintains her silence, evidently through the sheer strength of her will. Early on, Alma expresses feelings of inadequacy to the psychiatrist in charge of the case, fearing that this patient might require a more experienced nurse.
Nothing seems to be really wrong with Elisabet, except for her stubborn refusal to speak. When there seems no good reason for the actress to remain at the hospital any longer, the attending psychiatrist suggests that she stay at a rustic seaside cottage for a while under Alma's supervision. There the nurse does all the talking for both of them. A little in awe of the actress, the nurse is caught up in her glamour and magnetism. Slowly, Alma becomes taken over by Elisabet's persona and temporarily loses part of her own identity in the process.
One evening at the cottage while the two women are relaxing and sipping wine, Alma confesses to Elisabet an incident where, even though she was engaged to be married, she had sex with strangers without her fiance's knowledge. But the nurse goes on to tell of the incident's painful consequences and how she still feels tormented by it. In some ways, the telling of this story makes for a highly erotically charged scene, yet I found that at the same time Alma's feelings of desperation and despair all but cancel out the eroticism.
Not long after sharing this confidence, Alma reads a letter which Elisabet has given her to mail and makes the discovery that the actress regards her as an interesting study, perhaps something she can use in her acting someday. Alma's feelings of disappointment and betrayal as she reads the letter make for a heartbreaking moment of shattered illusions, superbly realized by Bibi Andersson.
In reprisal for her perceived betrayal, the nurse lashes out in an attempt to emotionally wound her patient, and this causes Elisabet to retaliate in kind. The conflict between the two women heightens until we are eventually drawn into a lengthy dream where Alma's identity temporarily merges with Elisabet's, and this dream sequence adds to the film's enormous emotional impact.
It is during this dream sequence that a stunning repeated monologue occurs. It unfolds twice, and each time it is seen from a different point of view. What Bergman does here is completely unexpected, and I was at first taken aback by it, although after seeing it many times, I see it as a stroke of genius. Although I doubt that I ever will completely understand it, I am always affected by its haunting resonance.
Twice Alma speaks the same rather lengthy monologue, in which she accuses Elisabet of being unable to bond with her own son, and each time the words and delivery are almost exactly the same. At this point, the two women's personas are so difficult to differentiate that the scene has the eerie, evocative effect of something seen from each side of a mirror. The first time Alma's monologue is delivered the camera focuses on Elisabet's face, the second time on Alma's.
At the end of Alma's repeated monologue, the fusion of the two identities is indicated by the famous image of the composite face which is half Elisabet's and half Alma's. But before the dream ends, Alma somehow manages to reassert her separate identity. To my mind, this extended dream sequence is a tour de force--managing to be simultaneously both surreal and super-real.
When Alma awakens from her dream, she finds Elisabet packing a suitcase, and both women seem to have come to some strange sort of closure that allows them to keep their respective demons at bay, at least for a while. The women prepare to leave the beach cottage, apparently ready to return to their normal lives and their separate identities.
"Persona" is hardly a film that uses strictly linear storytelling, and I would be remiss if I failed to point out that there are some short, visually jarring sequences at the beginning, roughly at the middle, and near the end of the film. These sequences show such things as film projector components, film winding over spools, a segment from an animated cartoon, a fragment from a silent farce involving a skeleton, a spider, the slaughter of a lamb, a human hand pierced by a spike, and views of hospital grounds and a morgue. These sequences are not directly part of the narrative as described above, but are about filmmaking itself, and I like to think of them as a kind of matrix that surrounds and defines the story of Alma and Elisabet.
Bergman's films are so dear to me that I find it impossible to single out just one as my favorite, and while I love "Wild Strawberries" (1957) and "The Seventh Seal" (1956), "Persona" is definitely one of my favorites as well. It has an uncanny ability to reach down into the depths of the subconscious with its dream-like quality, and on this basis alone, I believe this Swedish film must be considered a masterpiece of world cinema. It also features a point-perfect visual sense, superb cinematography by Sven Nykvist, and extraordinary performances by Andersson and Ullmann, both of whom have extremely difficult roles. Andersson carries the weight of delivering almost all the dialogue in the film, while Ullmann must rely on her facial expressions, body language, and magnetic presence to take her where words cannot. And Ullmann does so with such mesmerizing force that she makes it credible that the nurse could come close to losing herself for a while under the actress' spell.
Although "Persona" is one of my favorites, I realize it's not a film for everyone. The critic John Simon wrote that it was probably "the most difficult film ever made." Although I don't completely agree with him, I can certainly understand his point. "Persona" initially baffled me, yet each time I see it, I comprehend just a bit more. "Persona" is a difficult film, but if you're up for a challenge, it's an intellectually rewarding and emotionally rich experience.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


The interactive console is a Python interpreter executed in the same thread as Spyder’s graphical user interface, providing unique features such as matplotlib figures integration or MATLAB-like Workspace.
The interactive console being not thread safe, one must be conscious that any blocking command send to the console will freeze the whole application, i.e. the whole GUI (Graphical User Interface) will be unavailable until command interpretation is over: events will not be processed by the GUI main loop, including keyboard events - meaning that not only the interface will be freezed but it won’t be possible to interrupt the process by pressing Ctrl+C.
However, there is one exception to this behaviour: standard output or error streams will automatically refresh interactive console’s widget by asking the GUI event loop to process queued events. This will also give the opportunity to the rest of Spyder’s GUI to refresh. In other words, an infinite loop with print statements will not freeze Spyder’s GUI and it will even be possible to interrupt it with Ctrl+C.
To sum up, when using the interactive console, please keep in my mind this thread-safe issue and eventually think about writing print statements in loops if you want to be able to interrupt them (when debugging for example).
Of course, Spyder has a solution to this thread-safe issue: the External Console, a Python interpreter executed in a separate process. But there is a price to pay: more safety, less interactivity (no matplotlib integration).
The interactive console can force the Python interpreter to reload modules completely when executing import statements. This feature is however disabled by default because some modules may be not work properly with it (see Interactive console option submenu in the menu bar “Source” entry).
When enabled, this option will systematically reload imported modules since its activation. In other words, if you would like some modules to be loaded only once, you may import them before enabling the option.
The following special commands are supported by the interactive console.
Edit script
edit foobar.py will open foobar.py with Spyder’s editor. xedit foobar.py will open foobar.py with the external editor.
Execute script
run foobar.py will execute foobar.py in interactive console.
Remove references
clear x, y will remove references named x and y.
Shell commands
!cmd will execute system command cmd (example !ls on Linux or !dir on Windows).
Python help
object? will show object‘s help in documentation viewer.
GUI-based editor
oedit(object) will open an appropriate GUI-based editor to modify object object and will return the result.
The workspace is a global variable browser for the interactive console with the features described below.
The following screenshots show some interesting features such as editing lists, strings, dictionaries, NumPy arrays, or plotting/showing NumPy arrays data.
The default Workspace configuration allows to browse global variables without slowing the interactive console even with very large NumPy arrays, lists or dictionaries. The trick is to truncate values, to hide collection contents (i.e. showing ‘<list @ address>’ instead of list contents) and to show only mininum and maximum values for NumPy arrays (see context menu options on the screenshot at the top of this page).
However, most of the time, choosing the opposite options won’t have too much effect on interactive console’s performance:


This is a model of a three-phase transformer and rectifier unit
using the
Transformer3PhaseYyWithHysteresis model. Use the following
simulation settings:
- Stop time: 0.2 s
- Number of intervals: 5000
- Tolerance: 1e-6
An example simulation shows the transformer inrush currents due
to an initially magnetized transformer core.
Fig. 1: Transformer inrush
currents due to initial magnetization of the magnetic core; (a)
transformer primary currents; (b) transformer secondary currents;
(c) flux densities of the transformer legs; (d) B(H) hysteresis
loops of transformer leg one.; (e) instantaneous static hysteresis,
eddy current and copper losses of the transformer; (f) approximated
average static hysteresis, eddy current and copper losses of the
transformer
|
Generated at 2019-01-25T16:44:03Z by OpenModelica 1.14.0~dev-130-gefa44fb


Quick Installation Guide¶
This document describes the steps for installing mod_wsgi on a UNIX system from the original source code.
Apache Requirements¶
Apache 2.0, 2.2 or 2.4 can be used.
For Apache 2.0, 2.2 and 2.4, the single threaded ‘prefork’ or multithreaded ‘worker’ Apache MPMs can be used. For Apache 2.4 the ‘event’ MPM can also be used.
The version of Apache and its runtime libraries must have be compiled with support for threading.
On Linux systems, if Apache has been installed from a package repository, you must have installed the corresponding Apache “dev” package as well.
For most Linux distributions, the “dev” package for Apache 2.X is “apache2-dev” where the corresponding Apache package was “apache2”. Some systems however distinguish the “dev” package based on which MPM is used by Apache. As such, it may also be called “apache2-worker-dev” or “apache2-prefork-dev”. If using Apache 2.X, do not mix things up and install “apache-dev” by mistake, which is the “dev” package for Apache 1.3 called just “apache”.
Python Requirements¶
Any Python 2.X version from Python 2.6 onwards can be used. For Python 3.X, you will need Python 3.3 or later.
The version of Python being used must have been compiled with support for threading.
On Linux systems, if Python has been installed from a package repository, you must have installed the corresponding Python “dev” package as well.
Python should preferably be available as a shared library. If this is not the case then base runtime memory usage of mod_wsgi will be greater.
Unpacking The Source Code¶
Source code tar balls can be obtained from:
After having downloaded the tar ball for the version you want to use, unpack it with the command:
tar xvfz mod_wsgi-X.Y.tar.gz
Replace ‘X.Y’ with the actual version number for that being used.
Configuring The Source Code¶
To setup the package ready for building run the “configure” script from within the source code directory:
./configure
The configure script will attempt to identify the Apache installation to use by searching in various standard locations for the Apache build tools included with your distribution called “apxs2” or “apxs”. If not found in any of these standard locations, your PATH will be searched.
Which Python installation to use will be determined by looking for the “python” executable in your PATH.
If these programs are not in a standard location, they cannot be found in
your PATH, or you wish to use alternate versions to those found, the
--with-apxs
and --with-python
options can be used in conjunction with
the “configure” script:
./configure --with-apxs=/usr/local/apache/bin/apxs \
--with-python=/usr/local/bin/python
On some Linux distributions, such as SUSE and CentOS, it will be necessary
to use the --with-apxs
option and specify either “/usr/sbin/apxs2-worker”
or “/usr/sbin/apxs2-prefork”. This is necessary as the Linux distribtions
allow installation of “dev” packages for both Apache MPM variants at the
same time, whereas other Linux distributions do not.
If you have multiple versions of Python installed and you are not using that which is the default, you may have to organise that the PATH inherited by the Apache application when run will result in Apache finding the alternate version. Alternatively, the WSGIPythonHome directive should be used to specify the exact location of the Python installation corresponding to the version of Python compiled against. If this is not done, the version of Python running within Apache may attempt to use the Python modules from the wrong version of Python.
Building The Source Code¶
Once the package has been configured, it can be built by running:
make
If the mod_wsgi source code does not build successfully, see:
If successful, the only product of the build process that needs to be installed is the Apache module itself. There are no separate Python code files as everything is done within C code compiled into the Apache module.
To install the Apache module into the standard location for Apache modules as dictated by Apache for your installation, run:
make install
Installation should be done as the ‘root’ user or ‘sudo’ command if appropriate.
If you want to install the Apache module in a non standard location dictated by how your operating system distribution structures the configuration files and modules for Apache, you will need to copy the file manually into place.
If installing the Apache module by hand, the file is called ‘mod_wsgi.so’. The compiled Apache module can be found in the “.libs” subdirectory. The name of the file should be kept the same when copied into its appropriate location.
Loading Module Into Apache¶
Once the Apache module has been installed into your Apache installation’s module directory, it is still necessary to configure Apache to actually load the module.
Exactly how this is done and in which of the main Apache configuration files it should be placed, is dependent on which version of Apache you are using and may also be influenced by how your operating system’s Apache distribution has organised the Apache configuration files. You may therefore need to check with any documentation for your operating system to see in what way the procedure may need to be modified.
In the simplest case, all that is required is to add a line of the form:
LoadModule wsgi_module modules/mod_wsgi.so
into the main Apache “httpd.conf” configuration file at the same point that other Apache modules are being loaded. The last option to the directive should either be an absolute path to where the mod_wsgi module file is located, or a path expressed relative to the root of your Apache installation. If you used “make” to install the package, see where it copied the file to work out what to set this value to.
Restart Apache Web Server¶
Having adding the required directives you should perform a restart of Apache to check everything is okay. If you are using an unmodified Apache distribution from the Apache Software Foundation, a restart is performed using the ‘apachectl’ command:
apachectl restart
If you see any sort of problem, or if you are upgrading from an older version of mod_wsgi, it is recommended you actually stop and the start Apache instead:
apachectl stop
apachectl start
Note that on many Linux distributions where Apache is prepackaged, the Apache software has been modified and as a result the ‘apachectl’ command may not work properly or the command may not be present. On these systems, you will need to use whatever is the sanctioned method for restarting system services.
This may be via an ‘init.d’ script:
/etc/init.d/httpd stop
/etc/init.d/httpd start
or via some special service maintenance script.
On Debian derived distributions, restarting Apache is usually done via the ‘invoke-rc.d’ command:
invoke-rc.d apache2 stop
invoke-rc.d apache2 start
On RedHat derived distributions, restarting Apache is usually done via the ‘service’ command:
service httpd stop
service httpd start
In nearly all cases the scripts used to restart Apache will need to be run as the ‘root’ user or via ‘sudo’.
In general, for any system where you are using a prepackaged version of Apache, it is wise to always check the documentation for that package or system to determine the correct way to restart the Apache service. This is because they often use a wrapper around ‘apachectl’, or replace it, with a script which performs additional actions.
If all is okay, you should see a line of the form:
Apache/2.4.8 (Unix) mod_wsgi/4.4.21 Python/2.7 configured
in the Apache error log file.
Cleaning Up After Build¶
To cleanup after installation, run:
make clean
If you need to build the module for a different version of Apache, you should run:
make distclean
and then rerun “configure” against the alternate version of Apache before attempting to run “make” again.


You're awesome. It's time to celebrate.
Enter your info. Find a holiday to celebrate and a brewery to drink at. Cheers!
::San Diego Events::~::San Diego Events::~::San Diego Events::~::San Diego Events::~::San Diego Events::~::San Diego Events::~
ooo~Tues 7PM: Trivi@ Second Chance Beer Lounge- North Park, ~Thurs 7PM: Trivi@ Dog Haus Biergarten- Gaslamp, ~Sat 315PM: Tech Meetup @ Societe Keaney Mesa~ooo
| Brewery | City | State | Country |
|---|


| DOSE: |
8.0 mg |
smoked |
5-MeO-DMT |
(powder / crystals) |
I must say that this is definately a drug that must be experienced to be known, there is no description that can give you the frame of reference needed to fathom it's sheer power, keep that in mind.
The setting was a relaxed room with low key ambient lighting. Three friends and I were taking a break from exam studies and decided to try and smoke some Salvia in a friend's vapourizer. The vapourizer wasn't hot enough, though, as we had suspected and barely threshold effects were noticed. The notion of trying some 5-meo (which had shown up in the mail earlier that week) came up and we decided to entertain the idea. We were going to wait until the next week when exams had finished, but the suspense was killing us (it was all our first times).
It was decided that I was going first, and I figured I would try a small ~3mg dose in a little glass pipe to 'test the waters'. With some difficulty, I managed to miss the toke almost completely, though i got a touch of a hit. I noticed that i was jittery and very tweaky, but no effects other than that. I decided to load up another hit, this time on top of a very small amount of crushed salvia leaf as a bed (it was close by, there was no other reason to use the salvia, I hear oregano does a fine job and there was nowhere near enough salvia to have an effect). I put about 8mg on this time, going for a more full blown trip.
Melting the 5-meo onto the leaf and vapourizing it, the toke went down smoothly. The effects hit like a mack truck in the span of about 10 seconds. After 3 or 4 seconds, the visuals we akin to those on about 3 hits of acid with trails and loopy liquidy effects. This didn't stay for long and by 10 seconds my entire visual field melted into itself. By this time I was reclined nicely in my bean bag chair and was being rocketed upwards by the 5-Meo force.
My mind was still sailing further and after a few seconds everything surged into a suprisingly relaxed peak; like racing out of a tunnel at 1000 miles an hour into an infinitely empty space(just close your eyes and imagine it for a second). It was fantasticly euphoric; I was in the void. There was me and my senses sucking up input, but not caring about any of it. The notion of nirvana came to mind where I was simply existing in pure and beautiful bliss. There was total object dissociation where everything material or sensory was no longer being associated with anything in my brain, it just simply was. There was a strong sense of oneness; with what, I don't know, but it put me in mind of deep spiritual love. I'm sure I let out a few deep sighs of total euphoric love. Near the end of the peak, I was overcome with a sense of intense beauty, a beauty so powerful that it brought a tear to my eye.
Soon after the peak wore off and I sat up, totally rocked by the experience. I shook off the funk and upon looking around, noticed some residual ~2hit acid trails and visuals that quickly wore off over the next 15 minutes or so with a mild euphoric afterglow. I was told that I sat up at about +5-6 minutes...wow, seemed longer than that! In turn the rest of the group went, each having a similar experience.
What is so creepy about 5-Meo-DMT is that the emotions experienced are SO startlingly real. It's almost chilling in hindsight that a few mg of powder brought out feelings that should be reserved for, as a friend put it, something as profound as witnessing the birth of your first child. Other empathogens like MDMA feel very artificial in the emotional state they produce, but this was uncanny. I also think the tone of the trip would change dramatically with higher doses, it seems we hit a sweet spot.
If I were to offer any words of advice, it would be this :
1. Be prepared. As with any drug, but especially this one, there is little room for emotional instability. Make sure you are confident you can handle this trip. The trick is to let go and let the drug take you, offer no resistance and don't be afraid; feel what the drug wants, it WILL win.
2. MEASURE YOUR DOSE! I don't care how, it's critical with 5-Meo. I have a very good eye that was calibrated on a digital mg scale :-)
3. Let go. At all stages. Realize that when it's all over, the emotions didn't mean anything (nothing meant anything) and that there is still a reality out there that offers you experiences beyond what a drug can give you.
Cheers all, be happy!
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Students Selected in different School categories
National
student Index Number
Extra county
student Index Number
County
student Index Number


Created by Michael Martinez / @mikem3d
A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES
By separating our UI into components, we can reduce code complexity, increase reusability, and separate concerns between components.
React abstracts away the DOM from you, giving a simpler programming model and better performance. React can also render on the server using Node, and it can power native apps using React Native.
React implements one-way reactive data flow which reduces boilerplate and is easier to reason about than traditional data binding.
Most important take away:
In jQuery, you write event handlers which modify the DOM.
In React.js, you write event handlers which modify the state. And you write render() to reflect the current state.
createClass
var searchBar = React.createClass({ })
render
var SearchBar = React.createClass({ render: function(){ return (
Hello world
); } })
reactDOM
ReactDOM.render(
, document.getElementById('example') );
props
ReactDOM.render(
, document.getElementById('example') );


Vision
Never Ending Learning of Sound (NELS) is a computer program that works 24/7 learning information about sounds that it finds on the internet.
Crawled Audio Files:
{% for item in query_results %}
Object Name: {{ item.object_name }}
Crawled On: {{ item.date_crawler }}
{% endfor %}


Become A Patron
Join us to make a difference!
Become a Benefactor
Our humble organisation relies on the kind support of the community. Your support will send a powerful message and improve not only the our Orginsation but also, more importantly, the community. Join us in making a difference.
Become a BenefactorWith a philanthropic gift of $200 or more (we leave that up to you) you can become an Orchestra Benefactor and be placed on our Benefactor roll for twelve months. This roll will be published in each concert program and on our website for twelve months.
As a benefactor you will also receive:
- Two complimentary tickets to our next concert
- Placed on our exclusive mailing list for our newsletter
- Invited to be a guest at our annual Season's Launch function.
Sponsor Us
Help us continue to provide quality entertainment for the Townsville community by supporting the orchestra.
Make a DonationThe North Queensland Ensembles Inc is a tax deductible fund listed on the Register of Cultural Organisations under Subdivision 30-B of the Income tax Assessment Act 1997. Donations of $2.00 or more are tax deductible. Make a Donation
Our generous benifactors:
- Dr Kevin Arlett
- Carol Dall'Osto
- Councillor Ray Gartrell
- Bruce Gibson and Dorothy Gibson-Wilde O.A.M.
- Dr Kerry Gillespie
- Peter Honeycombe
- Judy Hunter O.A.M.
- Ewen Jones MP
- David and Janine Kippin
- Simon and Lorraine McConnell
- Senator Ian McDonald
- Janice Mays
- Terry O'Toole
- Bronia and Neil Renison
- Desley Wheeler
- Graham Wheeler


|
Cheese cake |
Plain cheese cake. Plain pleasure. |
$12.95 |
|
Apple pie |
Our famous apple pie |
$14.95 |
|
Cranberry pie |
A Christmas favorite |
$18.95 |
|
Cherry pie |
A summer classic! |
$18.95 |
|
Peach pie |
Sweet as peach |
$18.95 |
|
Pumpkin pie |
Our Halloween favorite |
$18.95 |
|
Christmas apple pie |
Happy holidays with this pie! |
$19.95 |
|
Blueberry cheese cake |
You'll love it! |
$17.95 |
|
Rhubarb Pie |
My God, so sweet! |
$21.95 |
|
Strawberry Pie |
Our delicious strawberry pie! |
$18.95 |
|
Strawberry Cheese Cake |
One of the best cheese cakes you'll ever find! |
$18.95 |


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/dependencies.html ---
We don't have a tactic version of #print axioms f
, do we? Or any way to check whether a declaration depends on sorry
?
there's meta constant is_sorry
in expr.lean
, but that's only a basic ingredient of what you want
Short answer is no
It can be done in the tactic framework though (at significant cost)
I was hoping to find a way to hack it with emit_command_here
but I don't think it's doable.
Last updated: Apr 24 2020 at 19:02 UTC


Move the mouse cursor through the chart to read tweets. Use the mouse wheel to zoom, and mouse drag to pan.


Name of the Version that will be selected when creating a local copy of the Knowledge Base.
If you leave it blank the 'Trunk' version will be selected by default.


Lowestoft is a useful port, sitting as it does, on the eastern-most part of East Anglia. It also gives access to that wonderful, peaceful sailing area, the Norfolk Broads.
The harbour provides good shelter and is accessible 24hr. With a strong ebb tide and an on shore wind, the entrance can be quite lively.
There are yacht berths in the SW corner of the Outer Harbour.
Lowestoft Haven Marina is based in the former Hamilton Dock. It provides complete shelter. Turn to sta’bd once through the entrance of the Outer Harbour and continue N past the fish market in Waveney Dock. The channel is dredged 3m
Mutford Lock
Tel:+44 (0)1502 531 778 (answerphone check 3 times daily)
VHF Channel 73, 14 (occas.)
Website: http://www.norfolkbroads.com
Opening hours: 08:00-11:00,13:00-16:00
This lock, together with the two bridges, allows access to Oulton Broad. The openings are co-ordinated.
Lowestoft Harbour Bridge
Tel:+44 (0)1502 572286
VHF Channel 14
All yachts must make contact by VHF, phone or visit before proceeding through the bridge.
Green/White/Green is the signal to go. When contacted 20 minutes prior, bridge openings for yachts are at :0300, 0500, 0700, 0945, 1115, 1430, 1600,1800 (not weekdays), 1900, 2100, 2400 (Mon-Fri) and 0300, 0500, 0700, 0945, 1115, 1430, 1600, 1800, 1900, 2100, 2400 (Sat, Sun, Bank Hols).
Last updated April 2016.
[Show additional 4 entries for this category]


I. Research & Engineering Projects
Dec 2012 - Mar 2013
BUAA, Key Laboratory of Beijing Network Technology
Project Description: The project mainly researched on the connectivity problem between virtual cloud platforms like VMware vSphere, Xen and virtual device simulation tools like GNS3, inlcuding designing the tunnel protocol and routing algorithm for data packets between virtual network and physical network. We implement a prototype system based on principles of VPN and NAT.
Responsibility: I focus on the design work of protocol encapsulation and routing algorithm, the rule deployment scheme of virtualized network configuration and implementaion of routing driver in Windows written by NDIS programing.
Jul 2012 - Dec 2012
BUAA, Key Laboratory of Beijing Network Technology
Project Description: VisualPSD aims to capture the packets received by the current machine and analyze whether there's malicious code mixed in them. The hackers usually utilize the delicately contructed packet to send to the vulnerable machines and the code the malicious packet is going to execute is called shellcode. So if we detect the shellcode contained in a packet, we are able to protect the host from the network attacks no matter whether the host is vulnerable or not.
Responsibility: I am responsible for all the design and programming work of VisualPSD.
Jan 2012 - Present
BUAA, Key Laboratory of Beijing Network Technology
Project Description: The project mainly researched on RBAC policy conflict analyzing technique in Microsoft Active Directory surroundings. We have achieved automatic extraction of users, groups, shared resources and access control lists. Conflict detection approaches respectively based on colored petri net and description logic have been proposed, detection reports can be retrieved which consist of conflict locations, types and reasons.
Responsibility: I am responsible for the system implementation of domain information extraction and conflict detection.
Jan 2012 - Apr 2012
BUAA, Key Laboratory of Beijing Network Technology
Project Description: The project mainly researched on the automatic generation and execution of penetration test scheme, during the scheme enforcement, vulnerability and penetration process can be combined and springboard technique is utilized for further penetration.
Responsibility: I am In charge of the development team which consists of three postgraduate members.
Sep 2011 - Dec 2011
BUAA, Key Laboratory of Beijing Network Technology
Project Description: The project mainly researched on the information security demand of China Aero-Polytechnology Establishment and designed a XACML policy conflict detection system based on multi-domain environment. Our system alerts to potential policy conflicts and help improve the security of crosss-domain operations.
Responsibility: I am the main coder in the development team, responsible for the policy integration and sub-graph matching modules.
II. Open-source Projects
Dec 2012 - Present
Tsinghua University, School of Software
Project Description: During the internship in School of Software in Tsinghua University, I work in the laboratory of micro-electronics and my mentor is Prof. Dong Xiang. My work focused on Atalanta, an open source ATPG tool and fault simulator for combinational circuits. We need to improve its test compression rate by furnishing it with more functionality such as influence cone analysis, selective static compression and so on.
Responsibility: In charge of management and improvement of the Atalanta source code, including removing the bugs in Atalanta and helping with experiments written in the Prof. Xiang’s paper.
III. Personal Projects
Sep 2011 - Jul 2012
Personal
Project Description: VPN Helper is a iOS App running under iPhone/iPod Touch/iPad. It's a client side for our VeryFastVPN project. VeryFastVPN is a VPN project which privides Internet surfing accerleration and content filter evading. Our official website is: https://www.vfv-daili.com/. VeryFastVPN supports nearly all platforms including Windows/Linux/Mac OS/iOS/Android.
Responsibility: I am in charge of the VPN Helper development.
Apr 2012 - Apr 2012
Personal
Project Description: HideWizard is a software which can hide windows, processes and files under Windows. The unregistered version will remind you to register every thirty minutes. So I analyzed its disassembled code and cracked it.
Responsibility: I am responsible for all the work of reverse engineering.


| math {pbdDMAT} | R Documentation |
Binary operations for distributed matrix/distributed matrix and distributed matrix/vector operations.
## S4 method for signature 'ddmatrix' sqrt(x) ## S4 method for signature 'ddmatrix' abs(x) ## S4 method for signature 'ddmatrix' exp(x) ## S4 method for signature 'ddmatrix' log(x, base = exp(1)) ## S4 method for signature 'ddmatrix' log2(x) ## S4 method for signature 'ddmatrix' log10(x) ## S4 method for signature 'ddmatrix' log1p(x) ## S4 method for signature 'ddmatrix' sin(x) ## S4 method for signature 'ddmatrix' cos(x) ## S4 method for signature 'ddmatrix' tan(x) ## S4 method for signature 'ddmatrix' asin(x) ## S4 method for signature 'ddmatrix' acos(x) ## S4 method for signature 'ddmatrix' atan(x) ## S4 method for signature 'ddmatrix' sinh(x) ## S4 method for signature 'ddmatrix' cosh(x) ## S4 method for signature 'ddmatrix' tanh(x)
x |
numeric distributed matrix |
base |
a positive number: the base with respect to which logarithms are computed. Defaults to e='exp(1)'. |
Performs the miscellaneous mathematical calculation on a distributed matrix.
Returns a distributed matrix.
## Not run: # Save code in a file "demo.r" and run with 2 processors by # > mpiexec -np 2 Rscript demo.r library(pbdDMAT, quiet = TRUE) init.grid() # don't do this in production code x <- matrix(1:9, 3) x <- as.ddmatrix(x) y <- sqrt(abs(log(x/10))) comm.print(y) finalize() ## End(Not run)


Starting a garden can seem overwhelming. We'll help you learn the essentials, so you can be prepared. Next you'll pick plants that grow well in your region and build a mockup of how you'd like your garden to look. Finally, you can use some of our recipes to turn your fresh fruits and vegetables into a delicious meal!
{{section.content}}


????? ???????
on 2012-04-10 09:55:00
If I might —perhaps you should consider adding a few images. I don’t mean to disrespect what you’ve said ; its very enlightening, indeed. However, I think would respond to it more positively if they could be something tangible to your ideas
Eugen
on 2011-04-21 23:23:19
one example here http://javascript.about.com/library/blsort2.htm
Taai
on 2011-02-08 10:58:52
I improved this code.
function array_rand(input, num_req) {
var input_len, rand, indexes = [], ticks = num_req || 1;
if (input instanceof Array === false || ticks > (input_len = input.length)) {
return null;
}
while (indexes.length != ticks) {
rand = Math.floor(Math.random() * input_len);
if (indexes.indexOf(rand) == -1) {
indexes.push(rand);
}
}
return ticks == 1 ? indexes[0] : indexes;
}
Some (older) browsers doesn't support Array.indexOf function, so, here is a code (wich I also improved) for those older browsers (add this code at least before array_rand):
if (!Array.indexOf) {
Array.prototype.indexOf = function(obj) {
var i = 0, l = this.length;
for (; l--; i++) if (this[i] == obj) return i;
return -1;
}
}
Have fun!
pwoul
on 2009-05-10 03:30:30
thanks a lot, that's working now :)
(here's the code if someone needs it)
var result = "";
alea = array_rand(["a","b","c","d","e","f","g","h"], 8);
for(var i in alea)
{
var kikoo = alea[i];
result = result + tableau[kikoo];
}
Brett Zamir
on 2009-05-09 23:18:59
@pwoul, You are referencing an array/object called "tableau" instead of the one you randomized, "alea". Change it to "alea" (if that's what you want), and the number will vary... best wishes, Brett
pwoul
on 2009-05-09 13:25:38
Hi, first i'd like to thank you for this very nice function.
But (there's always one :D) i have a problem using it :
var result = "";
var alea = array_rand(["a","b","c","d","e","f","g","h"], 8);
for(var i in alea)
{
result = result + tableau[i];
}
This code always returns the string "abcdefgh", the order of the characters isn't random :/
Thanks for your help :)


shopping_cart
Stores NearBy
Shopping
My Wishlist
Community
About
Feedback
What are you craving for...
Cuisines
Select a cuisine
African
American
Cajun
Chinese
French
German
Greek
Indian
Italian
Japanese
Korean
Mediterranean
Mexican
Middle Eastern
Thai
Vietnamese
Diet
Select a Diet
Gluten Free
Ketogenic
Vegetarian
Vegan
Paleo
search
Results:


Buttons
Star this project on GitHub
View more →
Sizes
Apply
w-full
to any button to create a block level button.
Apply
w-full
to any button to create a block level button.


*** User 2017-05-05 22:11:12.552 ***
22:11:12.552 [info] Disabling blocking sync...
*** User 2017-05-05 22:11:12.557 ***
22:11:12.557 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-1@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 22:11:14.182 ***
22:11:14.182 [info] Enabling membership...
*** User 2017-05-05 22:11:14.184 ***
22:11:14.184 [info] Disabling blocking sync...
*** User 2017-05-05 22:11:14.190 ***
22:11:14.190 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-2@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 22:11:15.932 ***
22:11:15.932 [info] Enabling membership...
*** User 2017-05-05 22:11:15.934 ***
22:11:15.934 [info] Disabling blocking sync...
*** User 2017-05-05 22:11:15.940 ***
22:11:15.940 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-3@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 22:11:16.252 ***
Joining node: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54099
*** User 2017-05-05 22:11:16.253 ***
Joining issued: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54099
*** User 2017-05-05 22:11:16.253 ***
Joining node: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54082
*** User 2017-05-05 22:11:16.253 ***
Joining issued: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54082
*** User 2017-05-05 22:11:16.254 ***
Joining node: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54070
*** User 2017-05-05 22:11:16.254 ***
Joining issued: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54070
*** User 2017-05-05 22:11:16.315 ***
Waiting for join to complete with manager: partisan_default_peer_service_manager
*** User 2017-05-05 22:11:16.316 ***
Finished.
*** CT 2017-05-05 22:11:16.316 *** COVER INFO
Adding nodes to cover test: ['runner@MacBook-Pro-de-Anne-France']
*** CT 2017-05-05 22:11:16.325 *** COVER INFO
Successfully added nodes to cover test: []
*** User 2017-05-05 22:11:16.325 ***
Case finished: sql_join_uncontracted_latency_test
*** User 2017-05-05 22:11:23.368 ***
22:11:23.368 [info] Application lasp exited with reason: stopped
*** User 2017-05-05 22:11:23.370 ***
22:11:23.370 [info] Application partisan exited with reason: stopped
=== Ended at 2017-05-05 22:11:23
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


| Assessment |
|---|
| S.No | Project Transition | Status |
|---|---|---|
| 1 |
Pre Conversion |
|
| 2 |
Migration / Pull and Push Data |
|
| 3 |
Post Converstion |
|
| 4 |
Validation |


Taylor Swift's Green AMAs Dress Has A Deeper Meaning Than You Might Have Thought, According to Fans
Taylor Swift surprised us all when she hit the red carpet at the 2019 American Music Awards over the weekend in a stunning olive green dress.
The look was definitely unexpected, given her colorful Lover era, but according to fans, the shade was perfect for the night where she received the Artist of the Decade honor.
Some fans were getting Reputation vibes, while others claimed she wore green as the symbol for money.
Meanwhile, the biggest fans knew what the green truly meant – it symbolized the beginning of her career, which was perfect given the honor Taylor was picking up.
Check out the fans’ reactions below!
https://fearlessin89.tumblr.com/post/189279298860/okay-but-the-green-room-in-the-lover-video
READ MORE:
Taylor Swift Specifically Thanks Her New Record Label at AMAs 2019 (Video)
Taylor Swift Wins Six AMAs in 2019 to Break the All-Time Record!


Featured Work
Build a Portfolio Site
Description: Udacity front-end nanodegree's first project
Source Code (Github)Classic Arcade Game
Description: Udacity front-end nanodegree's third project
Source Code (coming soon)Description: Udacity front-end nanodegree's first project
Source Code (Github)Description: Udacity front-end nanodegree's third project
Source Code (coming soon)


With your help, Project Jupyter can continue to build great open source software.
Jupyter will always be 100% open source software, free for all to use and released under the liberal terms of the modified BSD license. If you have found Jupyter to be useful in your work, research or company, please consider making a donation to the project commensurate with your resources. Any amount helps! All donations will be used strictly to fund the development of Projet Jupyter's open source software, documentation and community.
Our donations are managed by the NumFOCUS Foundation, which is the legal and fiscal umbrella for the projet. NumFOCUS is a 501(c)3 non-profit foundation, so if you are subject to US Tax law, your contributions will be tax-deductible.


#include <joint3d.h>
Inheritance diagram for Joint3DAnimationNode:
Public Member Functions | |
| const string & | GetName () |
| Returns name for this animation node. | |
Static Public Member Functions | |
| static ObjRef< Joint3DAnimationNode > | New () |
| Creates new Joint3DAnimationNode. | |
Protected Member Functions | |
| Joint3DAnimationNode () | |
| Default constructor. | |
| ~Joint3DAnimationNode () | |
| Destructor. | |
Protected Attributes | |
| string | name |
| Node's name. | |
| Int | node_id |
| Node's ID. | |
| vector< Matrix4fx > | matrices |
| List of transformation matrices. |
It contains name of node and list of transformation matrices in all key frames of animation.
|
|
Returns name for this animation node.
|
|
|
Creates new Joint3DAnimationNode. Call this function instead constructor calling.
|