text:
Operations Dashboard
The Operations Dashboard in AEM 6 helps system operators to monitor AEM system health at a glance. It also provides auto-generated diagnosis informations on relevant aspects of AEM and allows to configure and run self-contained maintenance automation to reduce project operations and support cases significantly. The Operations Dashboard can be extended with custom health checks and maintenance tasks. Further, Operations Dashboard data can be accessed from external monitoring tools via JMX.
The Operations Dashboard:
- Is a one-click system status to help operations departments gain efficiency
- Provides system health overview in a single, centralized place
- Reduces time to find, analyze and fix issues
- Provides self-contained maintenance automation that helps reduce project operations costs significantly
It can be accessed by going to Tools - Operations from the AEM Welcome screen.
In order to be able to access the Operations Dashboard, the logged in user must be part of the "Operators" user group. For more info, see documentation on User, Group and Access Right Administration .
Health Reports
The Health Report system provides information on the health of an AEM instance through Sling Health Checks. This can be done via either OSGI, JMX, HTTP requests (via JSON) or through the Touch UI. It offers measurements and threshold of certain configurable counters and in some cases, will offer information on how to resolve the issue.
It has several features, described below.
Health Checks
The Health Reports are a system of cards indicating good or bad health with regard to a specific product area. These cards are visualizations of the Sling Health Checks, which aggregate data from JMX and other sources and expose processed information again as MBeans. These MBeans can also be inspected in the JMX web console , under the org.apache.sling.healthcheck domain.
The Health Reports interface can be accessed through the Tools - Operations - Health Reports menu on the AEM Welcome screen, or directly through the following URL:
The card system exposes three possible states: OK , WARN and CRITICAL . The states are a result of rules and thresholds, which can be configured by hovering the mouse over the card and then clicking the gear icon in the action bar:
Health Check Types
There are two types of health checks in AEM 6:
- Individual Health Checks
- Composite Health Checks
An Individual Health Check is a single health check that corresponds to a status card. Individual Health Checks can be configured with rules or thresholds and they can provide one or more hints and links to solve identified health issues. Let's take the "Log Errors" check as an example: if there are ERROR entries in the instance logs, you will find them on the details page of the health check. At the top of the page you will see a link to the "Log Message" analyzer in the Diagnosis Tools section, which will enable you to analyze these errors in more detail and reconfigure the loggers.
A Composite Health Check is a check that aggregates information from several individual checks.
Composite health checks are configured with the aid of filter tags . In essence, all single checks that have the same filter tag will be grouped as a composite health check. A Composite Health Check will have an OK status only if all the single checks it aggregates have OK statuses as well.
How to create Health Checks
In the Operations Dashboard you can visualize the result of both individual and composite Health Checks.
Creating an individual Health Check
Creating an individual Health Check involves two steps: implementing a Sling Health Check and adding an entry for the Health Check in the Dashboard's configuration nodes.
- In order to create a Sling Health Check, you need to create an OSGI component implementing the Sling HealthCheck interface. You will add this component inside a bundle. The properties of the component will fully identify the Health Check. Once the component is installed, a JMX MBean will automatically be created for the Health Check. See the Sling Health Check Documentation for more information.Example of a Sling Health Check component, written with OSGI service component annotations:
@Component(service = HealthCheck.class, property = { HealthCheck.NAME + "=Example Check", HealthCheck.TAGS + "=example", HealthCheck.TAGS + "=test", HealthCheck.MBEAN_NAME + "=exampleHealthCheckMBean" }) public class ExampleHealthCheck implements HealthCheck { @Override public Result execute() { // health check code } }The MBEAN_NAME property defines the name of the mbean that will be generated for this health check.
- After creating a Health Check, a new configuration node needs to be created, in order to make it accessible in the Operations Dashboard interface. For this step, it is necessary to know the JMX Mbean name of the Health Check (the MBEAN_NAME property). To create a configuration for the Health Check, open CRXDE and add a new node (of type nt:unstructured ) under the following path: /apps/settings/granite/operations/hcThe following properties should be set on the new node:
The resource path above is created as follows: if the mbean name of your Health Check is "test", add "test" to the end of the path /system/sling/monitoring/mbeans/org/apache/sling/healthcheck/HealthCheckSo the final path will be:/system/sling/monitoring/mbeans/org/apache/sling/healthcheck/HealthCheck/testMake sure that the /apps/settings/granite/operations/hc path has the following properties set to true:sling:configCollectionInheritsling:configPropertyInheritThis will tell the configuration manager to merge the new configurations with the existing ones from /libs .
- Name: sling:resourceType
- Type: String
- Value: granite/operations/components/mbean
- Name: resource
- Type: String
- Value: /system/sling/monitoring/mbeans/org/apache/sling/healthcheck/HealthCheck/exampleHealthCheck
Creating a Composite Health Check
A Composite Health Check's role is to aggregate a number of individual Health Checks sharing a set of common features. For instance, the Security Composite Health Check groups together all the individual health checks performing security-related verifications. The first step in order to create a composite check is to add a new OSGI configuration. For it to be displayed in the Operations Dashboard, a new configuration node needs to be added, the same way we did for a simple check.
- Go to the Web Configuration Manager in the OSGI Console. You can do this by accessing https://serveraddress:port/system/console/configMgr
- Search for the entry called Apache Sling Composite Health Check . After you find it, notice that there are two configurations already available: one for the System Checks and another one for the Security Checks.
- Create a new configuration by pressing the "+" button on the right hand side of the configuration. A new window will appear, as shown below:
- Create a configuration and save it. A Mbean will be created with the new configuration.The purpose of each configuration property is as follows:
A new JMX Mbean is created for each new configuration of the Apache Sling Composite Health Check.**
- Name (hc.name): The name of the Composite Health Check. A meaningful name is recommended.
- Tags (hc.tags): The tags for this Health Check. If this composite health check is intended to be a part of another composite health check (such as in a hierarchy of health checks), add the tags this composite is related to.
- MBean Name (hc.mbean.name): The name of the Mbean that will be given to the JMX MBean of this composite health check.
- Filter Tags (filter.tags): This is a property specific to composite health checks. These are the tags which the composite should aggregate. The composite health check will aggregate under its group all the health checks that have any tag matching any of the filter tags of this composite. For example, a composite health check having the filter tags test and check will aggregate all the individual and composite health checks that have any of the test and check tags in their tags property ( hc.tags ).
- Finally, the entry of the composite health check that has just been created needs to be added in the Operations Dashboard configuration nodes. The procedure for this is the same as with individual health checks: a node of type nt:unstructured needs to be created under /apps/settings/granite/operations/hc . The resource property of the node will be defined by the value of hc.mean.name in the OSGI configuration.If, for example, you created a configuration and set the hc.mbean.name value to diskusage , the configuration nodes will look like this:
With the following properties:
- Name: Composite Health Check
- Type: nt:unstructured
If you create individual health checks that logically belong under a composite check that is already present in the Dashboard by default, they will be automatically captured and grouped under the respective composite check. Because of this, there is no need to create a new configuration node for these checks.For example, if you create an individual security health check, all you need to do is assign it the " security " tag, and it is installed, it will automatically appear under the Security Checks composite check in the Operations Dashboard.
- Name: sling:resourceType
- Type: String
- Value: granite/operations/components/mbean
- Name: resource
- Type: String
- Value: /system/sling/monitoring/mbeans/org/apache/sling/healthcheck/HealthCheck/diskusage
Health Checks Provided with AEM
|zHealthcheck Name
|Query Performance
This health check was simplified in AEM 6.4 , and now checks the recently-refactored Oak QueryStats MBean, more specifically the SlowQueries attribute. If the statistics contain any slow queries, then the health check returns a warning. Otherwise, it returns the OK status.
The MBean for this health check is org.apache.sling.healthcheck:name=queriesStatus,type=HealthCheck .
|Observation Queue Length
Observation Queue Length iterates over all Event Listeners and Background Observers, compares their queueSize to their maxQueueSize and:
The maximum length of each queue comes from separate configurations (Oak and AEM), and is not configurable from this health check. The MBean for this health check is org.apache.sling.healthcheck:name=ObservationQueueLengthHealthCheck,type=HealthCheck .
|Query Traversal Limits
Query Traversal Limits checks the QueryEngineSettings MBean, more specifically the LimitInMemory and LimitReads attributes, and returns the following status:
The Mbean for this health check is org.apache.sling.healthcheck:name=queryTraversalLimitsBundle,type=HealthCheck .
|Synchronized Clocks
This check is relevant only for document nodestore clusters . It returns the following status:
The Mbean for this health check is org.apache.sling.healthcheck:name=slingDiscoveryOakSynchronizedClocks,type=HealthCheck .
|Asynchronous Indexes
The Asynchronous Indexes check:
Both the Critical and Warn status thresholds are configurable. The Mbean for this health check is org.apache.sling.healthcheck:name=asyncIndexHealthCheck,type=HealthCheck .
Note: This health check is available with AEM 6.4 and has been backported to AEM 188.8.131.52.
|Large Lucene Indexes
This check uses the data exposed by the Lucene Index Statistics MBean to identify large indexes and returns:
The thresholds are configurable and the MBean for the health check is org.apache.sling.healthcheck:name=largeIndexHealthCheck,type=HealthCheck.
Note: This check is available with AEM 6.4 and has been backported to AEM 126.96.36.199.
|System Maintenance
System Maintenance is a composite check that returns the OK if all maintenance tasks are running as configured. Keep in mind that:
The MBean for this health check is org.apache.sling.healthcheck:name=systemchecks,type=HealthCheck .
|Replication Queue
This check iterates over replication agents and looks at their queues. For the item at the top of the queue, the check looks at how many times the agent retried replication. If the agent retried replication more than the value of the numberOfRetriesAllowed parameter, it returns a warning. The numberOfRetriesAllowed parameter is configurable.
The MBean for this health check is org.apache.sling.healthcheck:name=replicationQueue,type=HealthCheck .
|Sling Jobs
Sling Jobs checks the number of jobs queued in the JobManager, compares it to the maxNumQueueJobs threshold, and:
Only the maximum number of queued jobs parameter is configurable and it has the default value of 1000.
The MBean for this health check is org.apache.sling.healthcheck:name=slingJobs,type=HealthCheck .
|Request Performance
This check looks at the granite.request.metrics.timer Sling metric and:
The MBean for this health check is org.apache.sling.healthcheck:name=requestsStatus,type=HealthCheck .
|Log Errors
This check returns the Warn status if there are errors in the log.
The MBean for this health check is org.apache.sling.healthcheck:name=logErrorHealthCheck,type=HealthCheck .
|Disk Space
The Disk Space check looks at the FileStoreStats MBean, retrieves the size of the Node Store and the amount of usable disk space on the Node Store partition, and:
Both thresholds are configurable. The check only works on instances with a Segment Store.
The MBean for this health check is org.apache.sling.healthcheck:name=DiskSpaceHealthCheck,type=HealthCheck .
|Scheduler Health Check
This check returns a warning if the instance has Quartz jobs running for more than 60 seconds. The acceptable duration threshold is configurable.
The MBean for this health check is org.apache.sling.healthcheck:name=slingCommonsSchedulerHealthCheck,type=HealthCheck .
|Security Checks
The Security check is a composite which aggregates the results of multiple security-related checks. These individual health checks address different concerns from the security checklist available at the Security Checklist documentation page. The check is useful as a security smoke test when the instance is started.
|Active Bundles
Active Bundles checks the state of all bundles and:
The ignore list parameter is configurable.
The MBean for this health check is org.apache.sling.healthcheck:name=inactiveBundles,type=HealthCheck .
|Code Cache Check
This is a Health Check that verifies several JVM conditions that can trigger a CodeCache bug present in Java 7:
The minimum.code.cache.size threshold is configurable. For more information about the bug, check view_bug.do?bug_id=8012547view_bug.do?bug_id=8012547 this page .
The MBean for this health check is org.apache.sling.healthcheck:name=codeCacheHealthCheck,type=HealthCheck .
|Resource Search Path Errors
Checks if there are any resources in the path /apps/foundation/components/primary and:
The MBean for this health check is org.apache.sling.healthcheck:name=resourceSearchPathErrorHealthCheck,type=HealthCheck .
Monitoring with Nagios
The Health Check Dashboard can integrate with Nagios via the Granite JMX Mbeans. The below example illustrates how to add a check that shows used memory on the server running AEM.
- Setup and install Nagios on the monitoring server.
- Next, install the Nagios Remote Plugin Executor (NRPE).For more info on how to install Nagios and NRPE on your system, please consult the Nagios Documentation .
- Add a host definition for the AEM server. This can be done via the Nagios XI Web Interface, by using the Configuration Manager:
Below is an example of a host configuration file, in case you are using Nagios Core:
- Open a browser and point to the Nagios server.
- Press the Configure button in the top menu.
- In the left pane, press the Core Config Manager under Advanced Configuration .
- Press the Hosts link under the Monitoring section.
- Add the host definition:
define host { address 192.168.0.5 max_check_attempts 3 check_period 24x7 check-command check-host-alive contacts admin notification_interval 60 notification_period 24x7 }
- Install Nagios and NRPE on the AEM server.
- Install the check_http_json plugin on both servers.
- Define a generic JSON check command on both servers:
define command{ command_name check_http_json-int command_line /usr/lib/nagios/plugins/check_http_json --user "$ARG1$" --pass "$ARG2$" -u 'https://$HOSTNAME$:$ARG3$/$ARG4$' -e '$ARG5$' -w '$ARG6$' -c '$ARG7$' }
- Add a service for used memory on the AEM server:
define service { use generic-service host_name my.remote.host service_description AEM Author Used Memory check_command check_http_json-int!<cq-user>!<cq-password>!<cq-port>!system/sling/monitoring/mbeans/java/lang/Memory.infinity.json!{noname}.mbean:attributes.HeapMemoryUsage.mbean:attributes.used.mbean:value!<warn-threshold-in-bytes>!<critical-threshold-in-bytes> }
- Check your Nagios dashboard for the newly created service:
Diagnosis tools
The Operation Dashboard also provides access to Diagnosis Tools that can help finding and troubleshooting root causes of the warnings coming from the Health Check Dashboard, as well as providing important debug information for system operators.
Amongst its most important features are:
- A log message analyzer
- The ability to access heap and thread dumps
- Requests and query performance analyzers
You can reach the Diagnosis Tools screen by going to Tools - Operations - Diagnosis from the AEM Welcome screen. You can also access the screen by directly accessing the following URL: https://serveraddress:port/libs/granite/operations/content/diagnosis.html
Log Messages
The log messages User Interface will display all ERROR messages by default. If you want to have more log messages displayed, you need to configure a logger with the appropriate log level.
The log messages use an in memory log appender and therefore, are not related to the log files. Another consequence is that changing the log levels in this UI will not change the information that gets logged in the traditional log files. Adding and removing loggers in this UI will only affect the in memory logger. Also, note that changing the logger configurations will be reflected in the future of the in memory logger - the entries that are already logged and are not relevant anymore are not deleted, but similar entries will not be logged in the future.
You can configure what gets logged by providing logger configurations from the upper left gear button in the UI. There, you can add, remove or update logger configurations. A logger configuration is composed of a log level (WARN / INFO / DEBUG) and a filter name . The filter name has the role of filtering the source of the log messages that get logged. Alternatively, if a logger should capture all the log messages for the specified level, the filter name should be " root ". Setting the level of a logger will trigger the capture of all the messages with a level equal or higher than the one specified.
- If you plan on capturing all the ERROR messages - no configuration is required. All the ERROR messages are captured by default.
- If you plan on capturing all the ERROR , WARN and INFO messages - the logger name should be set to: " root ", and the logger level to: INFO .
- If you plan on capturing all the messages coming from a certain package (for example com.adobe.granite) - the logger name should be set to: "com.adobe.granite", and the logger level to: DEBUG (this will capture all the ERROR , WARN , INFO and DEBUG messages), as shown in the image below.
You can not set a logger name to capture only ERROR messages via a specified filter. By default, all the ERROR messages are captured.
The log messages user interface does not reflect the actual error log. Unless you are configuring other types of log messages in the UI, you will see ERROR messages only. For how to display specific log messages, see instructions above.
The settings in the diagnosis page do not influence what is logged to the log files and vice-versa. So, while the error log might catch INFO messages, you might not see them in the log messages UI. Also, through the UI it's possible to catch DEBUG messages from certain packages without it affecting the error log. For more information on how to configure the log files, see Logging .
With AEM 6.4 , maintenance tasks are logged out of the box in a more information rich format at the INFO level. This allows for better visiblity into the state of the maintenance tasks.
In case you are using third party tools (such as Splunk) to monitor and react to maintenance task activity you can make use of the following log statements:
Log level: INFO DATE+TIME [MaintanceLogger] Name=<MT_NAME>, Status=<MT_STATUS>, Time=<MT_TIME>, Error=<MT_ERROR>, Details=<MT_DETAILS>
Request performance
The Request Performance page allows the analysis of the slowest page requests processed. Only content requests will be registered on this page. More specifically, the following requests will be captured:
- Requests accessing resources under /content
- Requests accessing resources under /etc/design
- Requests having the ".html" extension
The page displays:
- The time when the request was made
- The URL and the method of request
- The duration in milliseconds
By default, the slowest 20 page requests are captured, but the limit can be modified in the Configuration Manager.
Query Performance
The Query Performance page allows the analysis of the slowest queries performed by the system. This information is provided by the repository in a JMX Mbean. In Jackrabbit, the com.adobe.granite.QueryStat JMX Mbean provides this information, while in the Oak repository, it is offered by org.apache.jackrabbit.oak.QueryStats.
The page displays:
- The time when the query was made
- The language of the query
- The number of times the query was issued
- The statement of the query
- The duration in milliseconds
Explain Query
For any given query, Oak attempts to figure out the best way to execute based on the Oak indexes defined in the repository under the oak:index node. Depending on the query, different indexes may be chosen by Oak. Understanding how Oak is executing a query is the first step to optimizing the query.
The Explain Query is a tool that explains how Oak is executing a query. It can be accessed by going to Tools - Operations - Diagnosis from the AEM Welcome Screen, then clicking on Query Performance and switching over to the Explain Query tab.
- Supports the Xpath, JCR-SQL and JCR-SQL2 query languages
- Reports the actual execution time of the provided query
- Detects slow queries and warns about queries that could be potentially slow
- Reports the Oak index used to execute the query
- Displays the actual Oak Query engine explanation
- Provides click-to-load list of Slow and Popular queries
Once you are in the Explain Query UI, all you need to do in order to use it is enter the query and press the Explain button:
The first entry in the Query Explanation section is the actual explanation. The explanation will show the type of index that was used to execute the query.
The second entry is the execution plan.
Ticking the Include execution time box before running the query will also show the amount of time the query was executed in, allowing for more information that can be used for optimizing the indexes for your application or deployment.
The Index Manager
The purpose of the Index Manager is to facilitate index management such as maintaining indexes, or viewing their status.
It can be accessed by going to **Tools - Operations - Diagnosis **from the Welcome Screen, and then clicking the Index Manager button.
It can also be accessed directly at this URL: https://serveraddress:port/libs/granite/operations/content/diagnosistools/indexManager.html
The UI can be used to filter indexes in the table by typing in the filter criteria in the search box in the upper left corner of the screen.
Download Status ZIP
This will trigger the download of a zip containing useful information about the system status and configuration. The archive contains contains instance configurations, a list of bundles, OSGI, Sling metrics and statistics and this can result in a large file. You can reduce the impact of large status files by using the **Download Status ZIP **window. The window can be accessed from: AEM > Tools > Operations > Diagnosis > Download Status ZIP.
From this window you can select what to export (log files and or thread dumps) and the number of days of logs included in the download relative to the current date.
Download Thread Dump
This will trigger the download of a zip containing information about the threads present in the system. Information about each thread is provided, such as its status, the classloader and the stacktrace.
Download Heap Dump
You also have the ability to download a snapshot of the heap, in order to analyze it at a later time. Take note that this will trigger the download of a large file, in the order of hundreds of megabytes.
Automated Maintenance Tasks
The Automated Maintenance Tasks page is a place where you can view and track recommended maintenance tasks scheduled for periodic execution. The tasks are integrated with the Health Check system. The tasks can also be manually executed from the interface.
In order to get to the Maintenance page in the Operations Dashboard, you need to go to Tools - Operations - Dashboard - Maintenance from the AEM Welcome screen, or directly follow this link:
The following tasks are available in the Operations Dashboard:
- The **Revision Clean Up **task, located under the Daily Maintenance Window menu.
- The **Lucene Binaries Cleanup **task, located under the Daily Maintenance Window menu.
- The **Workflow purge **task, located under the Weekly Maintenance Window menu.
- The Data Store Garbage Collection task, located under the Weekly Maintenance Window menu.
- The Audit Log Maintenance task, located under the Weekly Maintenance Window menu.
- The Version Purge Maintenance task, located under the Weekly Maintenance Window menu.
The default timing for the daily maintenance window is 2 to 5 AM. The tasks configured to run in the weekly maintenance window will execute between 1 and 2 AM on Saturdays.
You can also configure the timings by pressing the gear icon on any of the two maintenance cards:
Since AEM 6.1, the existing maintenance windows can also be configured to run monthly.
Revision Clean Up
For more information on performing Revision Clean Up for AEM 6.4, see this dedicated article .
Lucene Binaries Cleanup
By using the Lucene Binaries Cleanup task, you can purge lucene binaries and reduce the running data store size requirement. This is because the lucene's binary churn will be re-claimed daily instead of the earlier dependency on a successful data store garbage collection run.
Though the maintenance task was developed to reduce Lucene related revision garbage, there are general efficiency gains when running the task:
- The weekly execution of the data store garbage collection task will complete more quickly
- It may also slightly improve the overall AEM performance
You can access the Lucene Binaries Cleanup task from: AEM > Tools > Operations > Maintenance > Daily Maintenance Window > Lucene Binaries Cleanup .
Data Store Garbage Collection
For details on Data Store Garbage Collection, see the dedicated documentation page .
Workflow purge
Workflows can also be purged from the Maintenance Dashboard. In order to run the Workflow Purge task, you need to:
- Click on the Weekly Maintenance Window page.
- In the following page, click the Play button in the Workflow purge card.
For more detailed information about Workflow Maintenance, see this page .
Audit Log Maintenance
For Audit Log Maintenance, see the separate documentation page.
Version Purge
You can schedule the Version Purge maintenance task to delete old versions automatically. As a result, this minimizes the need to manually use the Version Purge tools . You can schedule and configure the Version Purge task by accessing Tools > Operations > Maintenance > Weekly Maintenance Window and following these steps:
- Click the Add button.
- Choose Version Purge from the drop-down menu.
- To configure the Version Purge task, click on the gears icon on the newly created Version Purge maintenance card.
With AEM 6.4 , you can stop the Version Purge maintenance task as follows:
- Automatically - If the scheduled maintenance window closes before the task can complete, the task stops automatically. It will resume when the next maintenance window opens.
- Manually - To manually stop the task, on the Version Purge maintenance card, click the Stop icon. On the next execution, the task will safely resume.
To stop the maintenance task means to suspend its execution without losing track of the job already in progress.
In order to optimize the repository size you should run the version purge task frequently. The task should be scheduled outside of business hours when there is a limited amount of traffic.
Custom Maintenance Tasks
Custom maintenance tasks can be implemented as OSGi services. As the maintenance task infrastructure is based on Apache Sling's job handling, a maintenance task must implement the java interface [org.apache.sling.event.jobs.consumer.JobExecutor](https://sling.apache.org/apidocs/sling7/org/apache/sling/event/jobs/consumer/JobExecutor.html) . In addition, it must declare several service registration properties to be detected as a maintenance task, as listed below:
|Service Property Name
|Boolean attribute defining whether the task can be stopped by the user. If a task declares that it is stoppable it must check during its execution whether it has been stopped and then act accordingly. The default is false.
|Boolean attribute defining whether a task is mandatory and must be run periodically. If a task is mandatory but currently not in any active schedule window, a Health Check will report this as an error. The default is false.
|A unique name for the task - this is used to reference the task. This is usally a simple name.
|A title displayed for this task
|My Special Maintenance Task
|This is a unique topic of the maintenance task. The Apache Sling job handling will start a job with exactly this topic to execute the maintenance task and as the task is registered for this topic it gets executed. The topic must start with com/adobe/granite/maintenance/job/
Apart from the above service properties, the process() method of the JobConsumer interface needs to be implemented by adding the code that should be executed for the maintance task. The provided JobExecutionContext can be used to output status information, check if the job is stopped by the user and create a result (success or failed).
For situations where a maintenance task should not be run on all installations (for example, run only on the publish instance), you can make the service require a configuration in order to be active by adding @Component(policy=ConfigurationPolicy.REQUIRE) . You can then mark the according configuration as being run mode dependent in the repository. For more information, see Configuring OSGi .
Below is an example of a custom maintenance task that deletes files from a configurable temporary directory which have been modified in the last 24 hours:
* sample-maintenance-task
* %%
* Copyright (C) 2014 Adobe
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
package com.adobe.granite.samples.maintenance.impl;
import java.io.File;
import java.util.Calendar;
import java.util.Collection;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.event.jobs.Job;
import org.apache.sling.event.jobs.consumer.JobConsumer;
import org.apache.sling.event.jobs.consumer.JobExecutionContext;
import org.apache.sling.event.jobs.consumer.JobExecutionResult;
import org.apache.sling.event.jobs.consumer.JobExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.granite.maintenance.MaintenanceConstants;
@Component(metatype = true,
label = "Delete Temp Files Maintenance Task",
description = "Maintatence Task which deletes files from a configurable temporary directory which have been modified in the last 24 hours.")
@Property(name = MaintenanceConstants.PROPERTY_TASK_NAME, value = "DeleteTempFilesTask", propertyPrivate = true),
@Property(name = MaintenanceConstants.PROPERTY_TASK_TITLE, value = "Delete Temp Files", propertyPrivate = true),
@Property(name = JobConsumer.PROPERTY_TOPICS, value = MaintenanceConstants.TASK_TOPIC_PREFIX
+ "DeleteTempFilesTask", propertyPrivate = true) })
public class DeleteTempFilesTask implements JobExecutor {
private static final Logger log = LoggerFactory.getLogger(DeleteTempFilesTask.class);
@Property(label = "Temporary Directory", description="Temporary Directory. Defaults to the java.io.tmpdir system property.")
private static final String PROP_TEMP_DIR = "temp.dir";
private File tempDir;
private void activate(Map<string, object=""> properties) {
this.tempDir = new File(PropertiesUtil.toString(properties.get(PROP_TEMP_DIR),
public JobExecutionResult process(Job job, JobExecutionContext context) {
log.info("Deleting old temp files from {}.", tempDir.getAbsolutePath());
Collection<file> files = FileUtils.listFiles(tempDir, new LastModifiedBeforeYesterdayFilter(),
int counter = 0;
for (File file : files) {
log.debug("Deleting file {}.", file.getAbsolutePath());
// TODO - capture the output of delete() and do something useful with it
return context.result().message(String.format("Deleted %s files.", counter)).succeeded();
* IOFileFilter which filters out files which have been modified in the last 24 hours.
private static class LastModifiedBeforeYesterdayFilter implements IOFileFilter {
private final long minTime;
private LastModifiedBeforeYesterdayFilter() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
this.minTime = cal.getTimeInMillis();
public boolean accept(File dir, String name) {
// this method is never actually called.
return false;
public boolean accept(File file) {
return file.lastModified() <= this.minTime;
experiencemanager-java-maintenancetask-sample - src/main/java/com/adobe/granite/samples/maintenance/impl/DeleteTempFilesTask.java
Once the service is deployed, it will be exposed to the Operations Dashboard UI and can be added to one of the available maintenance schedules:
This will add a corresponding resource at /apps/granite/operations/config/maintenance/ schedule / taskname . If the task is run mode dependent, the property granite.operations.conditions.runmode needs to be set on that node with the values of the runmodes which need to be active for this maintenance task.
System Overview
The System Overview Dashboard displays a high-level overview of the configuration, hardware and health of the AEM instance. This means that system health status is transparent and all the information is aggregated in a single dashboard.
You can also watch this video for an introduction to the System Overview Dashboard.
How To Access
To access the System Overview Dashboard, navigate to Tools > Operations > System Overview .
System Overview Dashboard Explained
The table below, describes all the informations displayed in the System Overview Dashboard. Keep in mind that when there is no relevant information to show (for example, backup is not in progress, there are no health checks that are critical) the respective section will display the "No Entries" message.
You can also download a JSON file summarizing the dashboard information by clicking the Download button in the upper right-hand corner of the dashboard.The JSON endpoint is /libs/granite/operations/content/systemoverview/export.json and it can be used in a curl script for external monitoring.
|What information is displayed
|When is it critical
|Links To
|Health Checks
|Indicated visually:
|Maintenance Tasks
Indicated visually:
|Distribution Agents
Indicated visually:
|Distribution page
|Replication Agents
Indicated visually:
|Replication page
For each of the statuses presented above a query is performed, with a limit of 400 milliseconds. At 400 milliseconds, the number of entries obtained up to that point is displayed.
Not interpreted:
|Workflow Failures page
|Sling Jobs
Sling job counts - number of jobs in a given status (if any):
Not interpreted:
|Estimated Node Counts
Estimated number of:
The total number of nodes is obtained from the nodeCounterMBean, while the rest of the statistics are obtained from IndexInfoService.
|Displays "Online Backup in Progress" if this is the case.
If an indexing or query thread is present in the thread dump.


text:
Why China Won Malaysia in Thomas Cup 2010
As what we witnessed a few days ago, China knocked Malaysia out from the Thomas Cup 2010 with a 3-0 victory.
Hence, I have done a tiny research on why Malaysia didn't win China in the recent Thomas Cup 2010.
1) Malaysia depends greatly on Datuk Lee Chong Wei and doubles Koo Kien Keat-Tan Boon Heong to grab the vital first 2 points. And they hope to capture one point from the remaining 3 rounds.
Not exactly a good winning strategy right?
2) Malaysia's badminton team has no Indian player and therefore the spirit of "1Malaysia" is not cultivated.
No Indian = Only Malay and Chinese = 1Malaysia not complete = 1Malaysia fail. In conclusion, the team needs an Indian macha to boost things up!
3) According to Victor Tan from Your.World.Pixelated, China team won somehow due to the recent release of influential Ip Man 2.
Yes, Ip Man is a Hong Kong movie. But since HK didn't appear in this year's tournament, I assume that the "power" has been secretly transferred to China and that's why they performed Wing Chun badminton-cum-martial arts.
4) Malaysia has already implemented 1Hospital, 1Vision, 1RotiCanai and 1Utama, but it seems that 1Badminton has not been created.
Therefore Dato' Sri Najib Razak should think about this idea – 1Badminton.
Since it's a believe that the 1-concept is working well for Malaysia, I suggest that 1Badminton will make things better for the national badminton team. 1Badminton FTW!
5) While most Malaysians support Chong Wei to nick the 1st point for Malaysia, some Malaysian ladies (unfortunately) support Lin Dan discreetly. Why?
Let's analyze – Lee Chong Wei VS Lin Dan: Handsome-ness.
According to a non-existent poll on kenwooi.com, it seems that the girls dig Lin Dan more. Handsome always wins? (imagines girls screaming "YES!")
No wonder I also always don't win lah. =/
Anyway, although Malaysia didn't manage to win the title this year, I believe that the team has done their best. Congratulations, and thank you for the effort. =)

subset: commoncrawl


text:
Who'd have thought that I'd be getting into a bit of J-Pop?
Japan has it's fair share of boy bands. Quite logical when just walking around this place I can't help but think that some of the boys here look, how can I say sensitively? Effeminate.
But if I'm going to talk about J-Pop, let's concentrate on the girls shall we?
I let you know earlier that I had a "thing" for Utada Hikaru.
A song that I just heard today is "Call Me" by Chara. Her voice sounds a little unusual in the chorus to these ears, but it has a good beat. I like it.
Where do I hear this stuff? On TV! Usually in the promos. I don't know about you but Japanese tv is pretty lame. It seems like a whole lot of game shows and a few dramas. Sometimes those game shows have girls in bikinis, so not all bad I guess.
This is another song I can't get away from. It's called, "Polyrhythm" (ポリリズム) by a group called Perfume.
Kawai ne?
Tuesday, 29 July 2008
Those J-Pop Girls
Who'd have thought that I'd be getting into a bit of J-Pop?
Posted by Jimmy In Japan at 1:31 am 0 comments
Labels: J-Pop
Monday, 28 July 2008
Looking For Treasure
I hadn't been to a recycle shop since I got sick so, today I thought I'd actually try somewhere new.
I left a little bit later than I wanted to, but luckily I still had enough time to check out the Treasure Factory in Tachikawa.
It's about a 20 minute walk south along the monorail line. You hang a left at the first major intersection (There's a Koban and a petrol station), and cross the road.
With these long walks I sometimes wonder if I'm going the right way.
I came across this yellow building that I thought was it. Nope, this is Cycle Base Asahi. You should be able to find a bicycle you like here, maybe.
Keep walking and you'll see this sign. It's says it becomes an emergency road in case of a major earthquake. Why there's a fish on the sign I'm still trying to work out. We're not too close to the sea from here at all.
Finally I came to a carpark area where there's a video rental shop, Gyu Kaku and a Softbank store.
Right next to that was Treasure Factory!
It feels like there is more of a variety of goods at these places than the "OFF" stores. I didn't buy anything, but it's always interesting to have a look at the stuff that I might actually have a use for.
I'm almost coming to the end of my recycle shop visits. There is another place I plan to go to soon, but after that I might give it a break for a while, or only go infrequently to some of the better ones I liked.
I have enough junk as it is, and I have to somehow figure out the best way to get it back to Australia one day.
Posted by Jimmy In Japan at 11:44 pm 0 comments
Labels: secondhand Recycle shops, Tachikawa
Sunday, 27 July 2008
Two Chicks
I haven't been UFO catchin' for some time now. Because I haven't been exposed to many catchers lately, I've been able to avoid them quite easily. I think I pretty much have beaten my obsession.
She looked at me with those sad puppy dog eyes and said, "Get it for me.. NOW".
It was a smaller catcher and it had some bigger chick toys (Moicho) around the edges. She asked the staff to move it into position. The first go, I fluffed it a little. The second go I thought I went too far but it ended up sinking the smaller one before the big one following behind it.
Witness the proof here in this video.
"Can we keep it, Can We?"
Posted by Jimmy In Japan at 11:06 pm 0 comments
Labels: Moicho, Shinjuku, UFO catchers
Saturday, 26 July 2008
Good Child Must Not Imitate!
I'm in the spending mood so.. I got another Red Bazooka shirt from the Middle shop in Shibuya.
The same place I got the Japanese Sorry one.
As usual I was "uming and ahing" if I really needed/wanted it, but in the end I just decided to fork over the yen and got it.
I'm pretty happy with it. It says "Good Child Must Not Imitate!"
The other teacher that has his iPhone is seriously tempting me to get one for myself.
He's on the same White Plan as me. For 5,000 yen a month he gets unlimited internet and email downloads (as well as the normal phone network of course). He did buy his iPhone outright for 80,000 yen. It's possible to pay it out over 24 months for 8,000 yen a month all up, which is still a pretty impressive deal.
In Australia the best option for internet access on a mobile is with the 3 network and their X-series. Not too bad for $40 for 2GB of downloads, but this just covers the net access. On top of that you'd need to be on a regular pricing plan.
On this day there's also the Sumidagawa fireworks in Tokyo.
Right now I'm watching it on tv.
Yes, I know it's not the same, but we are avoiding the crowds and the view although not "live", omits the rather annoying buildings that seem to get in the way.
The "child" part of me wishes I was there though.
Posted by Jimmy In Japan at 7:26 pm 0 comments
Labels: Red Bazooka, Shibuya
Thursday, 24 July 2008
Nazono Pyramid
Today I can finally forgive my brother. Why?
Because I have finally got that elusive game that he broke when he was a baby. Yes, Nazo No Pyramid (aka. "Invaders Of The Mummy's Tomb").
I was in that big toy shop other people call Akihabara.
The gf wanted to go to Shinjuku but something was calling me, and I really didn't feel it was a day to go to Shinjuku. A damn hot one though. I was sweating like crazy.
So doing my usual rounds, I almost lost a heartbeat when I saw it. The sales clerk confirmed it was in fact, the game I've searched for months to get.
There was actually two of them as well! They were both in much the same condition, except one had a bit of the lines and writing rubbed off, but was still in really clean condition.
Everything worked great so I just got that one. I was tempted to get the other one as well as a backup, but I decided to leave it there (for now). I was also lucky enough to use the two vouchers I had for a nice little discount.
So how is it to play? Fantastic!
In my opinion I think it's the best handheld Bandai has made. Definitely the best of the solar-powered series. Like most LCD games the gameplay is a touch repetitive, but this one's quite a bit of fun to play.
What makes these Bandai's stand out (other than being solar-powered), are the two screens of play.
On the first "level", you are out in the desert and you have to move left and right to stop the ascending snakes and scorpions from attacking the camel.
When you are next to the deadly creatures you automatically kill them with your knife.
If you get 500 points, you can move to the far left and.. enter the pyramid to the "second" level! In here your enemies are mummys (of course), and a spider.
The idea here is to move to the right to get as much treasure as you can avoiding the mummys that come down from the top and the spider than moves up and down stopping you from taking too much of the loot.
Sometimes your buddy will appear at the entrance where if you're quick enough to give him the booty, you get a whole lot of points.
If the bad guys get you in here you don't lose a life, you just get kicked back outside again.
I had my first proper play in Macca's while I was scoffing down a McPork. It's not a difficult game, and playing long enough it's pretty easy to get square eyes, but "I'm lovin' It".
So.. what else did I do in Akky?
Well at Friends, they had Bandai's Dr Dental and Rush Hour.
I'm warming a little towards Dr Dental, but I still didn't buy it.
For the life of me I couldn't work out how to play Rush Hour. It does have an amusing idea of trying to catch a Tokyo train in the peak time. I think it does that pretty well.
This is a pretty cool anime robot outside one of the many figure and robot toy shops along the main drag.
Inside this place they had some pretty cool stuff.
Along with a big selection of Transformers robots there was a G-Force Phoenix, Gundams, a Voltron (missing two lion heads though), and of course lots of hentai dolls.
I asked a sales assistant to let me see a car Transformer. I wanted him to show me how it opens up to become a robot. He just opened the car doors. Not what I meant. I just gave up.
Speaking of hentai dolls I had to take this picture in Mandarake.
(They have notices to say "prohibited to take photos", so slap my wrists).
It's the box packaging for a Transformers toy. Nice attention-getting marketing for kids!?
"More than meets the eye" indeed.
I like walking around this shop. For some reason today I happened to notice all the otaku in here. WHAT A BUNCH OF GEEKS. Oh, I hope I don't come across looking like them.
Maybe I do? Oh..
Posted by Jimmy In Japan at 9:49 pm 0 comments
Labels: 80s handheld electronic games, Akihabara, Bandai, Nazo no Pyramid
Wednesday, 23 July 2008
Gachapin is Gatchaman
When I was younger one of my favourite cartoons on tv was Gatchaman. Don't remember it?
Well actually that's what they called it here in Japan. You might know it better as Battle Of The Planets or G-Force. Like many of the other popular cartoons of the time, I had no idea these anime all originated from Japan.
Last week I went to my special place in Shibuya and saw some small Gachapin dressed up as Gatchaman. I didn't buy them then, but seeing they were still there today I decided to snap them up for 420 yen.
There are three of them.
Mark (what they called him in BOTP), in his normal number one shirt and another in his "bird" suit.
The other one has him driving the Phoenix, the cool spaceship that turned into a fiery bird whenever the guys were in big trouble.
If you're familiar with my blog, you'd know I think Gachapin is one cool, little dinosaur.
Posted by Jimmy In Japan at 11:35 pm 0 comments
Labels: Battle Of The Planets, Gachapin, Gatchaman
Monday, 21 July 2008
Watch Band Resize
On a Marine Day national holiday I should do something useful with myself. How about removing the links to resize my metal watch band?
Great fun!
At first I thought it might be more difficult than it looks. My watch band has a split pin configuration but the pins are straight and flush with the edge of the band.
My tools for this delicate operation are :
1. pliers
2. blue-headed thumb tack
That's it!
First thing I did was remove the pin on the clasp to make it easier to access the links. It's optional though. I think I could've left it attached.
You have to be careful. These pins are spring-loaded and it shot out to the wall. Lucky for me it was easy to find. Make sure you don't hover your face to take a better look either. One of these aiming for your eye could be nasty.
The pins in this band weren't that easy to push out. Using the pliers as a hammer on the thumb tack I was able to punch the pin out slowly. You have to push the pins OUT in the same direction as the arrows on the underside of each link!
I used the edge of the table which wasn't a great idea. The gf isn't too impressed with the dents (albeit small ones) I made.
A better option I used later on was a phone book to absorb the hits. Once enough of the pin came through I yanked it out proper with the pliers. All in all I had to remove four links to fit my wrist.
Putting it back together was just the reverse of what I did. I put the pins IN the opposite direction of the arrows this time. Sometimes I pushed the pin in from underneath with the phone directory, or with some extra hammering with the pliers so the pin was again flush smooth with the edge of the band.
For a first attempt I think I did really good. I looked at a few other sites to do the procedure including this one to make sure I didn't mess it up.
It feels good to fix things with my own two hands. "Look Ma, I can fix stuff!"
She's gonna be real proud of me now. It wasn't a total waste of a national holiday after all.
Posted by Jimmy In Japan at 11:50 pm 2 comments
Labels: watch band resize
Saturday, 19 July 2008
I Think He's Gonna Make It
I haven't posted for a few days.
I'm sure no-one's been too worried about lil' old me. What doesn't kill you, makes you.. nervous.
The worst thing was looking for a doctor in my poor state.
After a second visit to the same Japanese doctor, he actually suggested a cat scan! I wasn't sure what it costs, but from looking at the going rate from online sources, it's not cheap. What surprised me most was he didn't suggest a simple blood test.
So.. I decided it was a good idea to find an English-speaking doctor.
There're actually quite a few around and it's not too hard to find. If you're in Tokyo and haven't been looking for an doctor that speaks English, it's a good idea to do it before you get sick. I started my search from here.
You can thank me later.
After being absent from work up until friday, I gathered my strength to weather a saturday shift in Tama Plaza. I was still feeling a bit weak, but much better than earlier in the week. Thankfully I didn't have to work too hard today.
Last night we had a tabe-hodai at Gyu Kaku because I had a craving for MEAT to hopefully give me a bit of extra energy for today.
Usually it means "all you can eat" but last night it was more like, "all you can eat BUT, we will bring it out really, really slowly, so you are really just paying us to eat less in the 90 minutes we give you."
Quite disappointing. More so when they tried to charge us almost 9,000 yen for the meal that wasn't even close to that if we paid for each plate separately.
On monday there's a Marine Day national holiday, so I have an extra free day to recuperate from this.
Lucky me.
Posted by Jimmy In Japan at 11:46 pm 0 comments
Tuesday, 15 July 2008
I thought I'd be ok. I got myself ready even though I still felt dizzy.
It was about an hour from my start time and I wasn't feeling any better, so I called work once more to say I wasn't feeling well enough to go.
It's really bothering me. I don't want to waste these days, either annual leave days or unpaid absences. I think the heat of summer is prolonging it as well.
I was bed-ridden all day today and up to now I don't feel any better. I'm really hoping I don't miss another day tomorrow.
Posted by Jimmy In Japan at 6:12 pm 0 comments
Monday, 14 July 2008
Tokyo's Giving Me Vertigo
Today there was no way I was able to go to work. I have a very bad case of vertigo.
To anyone who doesn't know what that is, it's when you feel continuously dizzy. Even walking makes you feel uneasy. Lying down helps somewhat. I really don't think I would have made it to Tachikawa. The motion of the train would've made me queasy.
I'm not one for calling in sick. I usually have to be on my death bed not to go to work. I did call in late (at least before the subs would call in), because I was hoping I'd feel better before the time I had to get ready.
One other reason I wanted to go to work is because here in Japan I don't get any kind of sick leave pay. In Australia I had seven days paid sick leave and I never used them. Great timing.
Later in the afternoon I paid my first visit to a Japanese doctor. Luckily I had the gf with me to explain my ills.
I just nodded my head and hoped he'd give me the drugs to make me feel better. He thought I might have had a cold too and prescribed some cold medicine with the vertigo tablets.
I'm glad I have health insurance here. Even with it, it cost me 4,170 yen for the consultation and another 490 yen for the drugs. My insurance pays 70%, but this 30% still seems like a fair bit of money to pay.
That's all I can write for now. I need to go back and lie down some more. I hope I feel better tomorrow.
Posted by Jimmy In Japan at 8:08 pm 0 comments
Saturday, 12 July 2008
Guess Who Got An iPhone?
No not me, but you thought I did didn't you?
I had the opportunity to try it from a co-worker today. He also has the same Windows phone as me that he now wants to sell for 30,000 yen if anyone's interested.
Looks like there was a bit of a queue here in Japan for the impatient and easily excited Japanese today. Just another day for these guys. If you have to wait, the Japanese have nailed it down to a fine art.
It did make me want one. The operating system makes Windows seem slow and pokey. It's also not as sexy as this baby.
I will try to hold off for a bit longer. Like maybe when I need a new phone, AND a new iPod. The audio sounds pretty good to me through headphones too.
Anything not to like? Well, it doesn't do video recording which surprised me (yet). The pictures are only 2 megapixel, but don't look too bad for that resolution.
The lack of a removable battery is a concern, but I can't think of a mobile phone I've had that I ever replaced the battery.
Today I went to my secret shop and picked up another DOA boob mug.
Weird, it looks like she has carrots aiming for her ass, but I think these are some kind of "rocket carrots" attached to her waist. Oh, it also has a carrot bulge instead of boobs. Mouse over the picture for the back of it. Nice. Did I mention it's red?
If you're interested you can read more about this anime character here. Apparently Mina's quite a popular figure in otaku circles.
By the way, my skeleton watch with a fair bit of winding lasts at least a whole day which suits me fine.
Day off tomorrow. Just what I need.
Posted by Jimmy In Japan at 11:15 pm 0 comments
Friday, 11 July 2008
LK Colouring Skeleton Watch
If I see something I like, I should just buy it then and there. Instead, as soon as I get home I curse myself for not just getting the item I really wanted in the first place.
Exhibit A : Lk Colouring Skeleton Watch
Yesterday I checked out this Lk Colouring skeleton watch. It was a very reasonable 4,000 yen.
I like the Swatch "Body & Soul" one, but that costs about 16,000 yen around here. You can see a cool video of the Swatch in action here.
I went home without it.
Today I couldn't help myself, and forced myself to go back to Akihabara before work. I got it in the same place I picked up my cheap "Italian via China" belt.
I looked on the internet and couldn't find much information on this company at all. I think it's made in China and usually sold in online auctions. I have to get the metal band adjusted. The sales guy wasn't that helpful. He looked as disinterested as he was yesterday.
I'm pretty happy with it so far.
It's a mechanical watch so it doesn't need a battery. I just need to wind it up to keep it going. I'm not sure how many times I have to turn it. I only turned it a little today and it only lasted a few hours. I gave it a few more turns now so I hope it keeps the time longer than that.
This is a little video I made so you can see how the movement works. Nice..
Posted by Jimmy In Japan at 11:42 pm 10 comments
Labels: Akihabara, skeleton watch
Thursday, 10 July 2008
Please Do Not The Stabbing
Sheete.. Here I find myself in Akky yet again.
Thankfully this week no stabbings.
It's been a while, so I've actually brought my camera with me.
A student brought in a cool enlargement of a flower (you had to be there), and it made me think to get off my lazy ass and take some daym pichaz!!
From memory, I think this is the first time I've actually taken pics with my Nikon in Akiba.
Unfortunately, I took a whole lot of photos of the Akihabara maids but as soon as they saw my camera they turned their shy selves around. The guy in this pic looks pretty pleased to meet them ("otaku!!!").
Where's the love, or should I say where's the moe?
It looks like they love their job from the looks on their faces. Yep, if I said "Welcome home, master", I'd feel pretty good right now.
I haven't felt compelled to go to a maid cafe yet.
That, and Pachinko. Maybe if it was in English, I'd want to play the juvenile alligator game with them. Maybe not. Sexy uniforms though.
My reason for going to Akihabara was to get a belt.
The one I have is looking worse for wear. Last time I saw one for 680 yen which I thought was reasonable. The label says, "Rocco Italy". Inside, Made In China. What tha.. ?
What's funny is the bag the sales guy put it in says "Electronic Parts". Okay then.
I found a 100 yen shop that sold belts too. I should've known.
Still, this one may have at least been designed in Italy, right?
I had a McPork for lunch. My McDonalds boycott is on hiatus for this brief moment. 100 yen can't be beat. It served it's purpose for now.
I tried the skeleton watch that was 4000 yen. I didn't buy it, but going home I was kicking myself. Sometimes I WISH I was an impulse buyer. I hate regretting things after it's too late. I may have to go back there tomorrow. What a hassle.
On the way home I passed by Yasukuni shrine. They had some lanterns outside. I thought I should take some pictures before going home. Mouse over it for a close-up.
Posted by Jimmy In Japan at 11:50 pm 0 comments
Labels: Akihabara
Sunday, 6 July 2008
Summer Sale Off, I mean ON!
Summer sales are officially in full swing and by the looks of the crowds, no-one is immune from it.
Although my only plan today was to go into Shinjuku specifically to get some coffee and juice from YaMaYa, I couldn't help but get caught up in the shopping frenzy.
I think my mother would be laughing right now. She knows I'm not really a polo shirt kind of guy but I liked the cut of these and the material feels nice and cool to wear this summer. Hold the mouse over the image and you'll (eventually) see the blue one I bought.
I also got some drying inner-wear shirts from here to hopefully beat the heat (or at least my sweating).
Moving right along, I hit the Jackpot at a store by the same name, opposite the Kabuki-cho precinct.
Here I found a nice pair of red Doc Martens shoes.
I used to have a black, and green pair that I bought for about $120 each, something like fifteen years ago, and that was on sale.
These days they are priced well above that.
Lucky for me I picked these up for 14,490 yen. Usually around here they average for around about 23,000 yen, so I think I did good with these. These will be great to wear for work.
I was surprised to find some more frogskins. I didn't buy them. They only had the grey pair and "dalmation" ones. Neither of which I'm interested in.
Later we had some crepes for an early dinner. I'd mention the name of the place if I didn't have the unfortunate incident of throwing it up on arrival back home.
I can't say for sure if it was food poisoning or not, but the gf had the same as me and she's fine. Maybe it was the moving in and out of air-conditioned shops and the almost unbearable humidity that did it.
I guess I'll never know.
Posted by Jimmy In Japan at 11:48 pm 0 comments
Saturday, 5 July 2008
I'll Drink To That
Alcohol in Japan is cheap. It's not written in guidebooks, or "How to live in Japan" books. It's much cheaper than buying it duty-free.
You can buy it in a supermarket, or at the nearest convenience store.
Tonight I went to the local Bic Camera, an electronics store (!), and picked up a 700ml bottle of Kahlua for 1,180 yen, and the same size bottle of Smirnoff Vodka for 980 yen.
In Australia the total wouldn't pay for even one of those bottles. Because I have a points card, I added my purchase to it, but with what I spent I don't think it gave me more than a hundred yen. Still, better than nothing.
Arriving back in Yotsuya, the gf wanted to eat out so we had an all you can eat shabu-shabu.
It's a cool party trick. Watch as I swish thin slices of pork through the boiling broth, and hey presto, it's cooked! Very neat, and tasty too.
Before we went home we stopped into Hanamasa for milk. I had a milk and Kahlua mix before bed. I used to love this stuff. I probably added more Kahlua than milk but it doesn't taste as good as it used to. Lucky I didn't buy the one litre bottle.
I think after these are finished I'll go back to my four litre Shochu bottles. They're real cheap, and they last me for ages.
Posted by Jimmy In Japan at 11:54 pm 0 comments
Thursday, 3 July 2008
Oakley Frogskins
I hadn't been having much luck finding a vintage pair at the recycle shops, and Yahoo Auctions wasn't the best place to find them either.
Unlike in America where they have sold out, it's not too hard to pick up a limited edition re-issue of Oakley Frogskins.
I got a rootbeer/fire iridium one for 17,850 yen at the Oakley store in Harajuku.
A little bit pricey, but they were the best pair of glasses I used to have, and putting these on brought back some memories. They still have a few other ones to choose from.
Neon yellow anyone?
Buying from the official store I'm sure I didn't buy a fake. Unfortunately there wasn't much sun at all to really see how good they were. I'm really hoping these don't give me a headache like the other Oakleys I bought and subsequently took back.
At another store they had a pair with clear see-through frames and purple lenses.
They weren't as dark as the ones I bought, but there was something about them I liked.
I was close to buying them as well, but I'm just going to see how I go with the ones I have, and if I REALLY want to blow some more money I'll go back for them.
They were about 2000 yen cheaper too.
I just wish they hadn't released these as a limited edition. I might have been able to get these for much less.
The other blue (cheap) sunglasses I bought from Donki (that's Don Quijote) recently were ok, but I wasn't 100% satisfied with them. Light and wind were leaking in from underneath making them less than perfect.
I'm finding Yahoo Auctions a bit disappointing lately.
You can't snipe at the end of auctions like on eBay. If you do a late bid, it just adds more time for someone to bid it up even higher. Those Japanese are real sneaky with their bidding too.
Unless you have a premium account you can't bid over 5000 yen, so although there's a lot of stuff I'd like to buy, the prices get inflated far too quick.
We had a big day today.
From Omotosando and Harajuku, to Daikanyama and Roppongi. We settled on TGI Fridays and a "World's Greatest Burger" for dinner. A little expensive (1,780 yen), but these are big burgers with a side of fries as well.
We stopped briefly in Akasaka Mitsuke for some coffee before finally going home.
At last a day off I could do something other than stay home because of rain.
Posted by Jimmy In Japan at 10:41 pm 2 comments


text:
Our professionals have varied training & also consultancy experience in IBM Training Mumbai Thane Vashi in IBM products namely Websphere, DB2, Rational, Mainframes, Tivoli.
Prism is an corporate training firm delivering IBM Training Nagpur Nasik & also in Mumbai, Pune Bangalore. We have provided corporate trainings across INDIA in other locations as well including Hyderabad, New Delhi, Noida,Gurgaon Kolkatta & Chennai as well.
IBM Training Mumbai
We can provide training & consultancy in many IBM products and related skillsets. If you want to make sure that you hire some consultants with significant industry experience in IBM then you have come to the right place.
IBM Training Mumbai
Our consultants have worked for several years for high profile companies and have delivered training to several Our Clientss and individuals.
IBM Websphere Training Courses
- WebSphere Application Server (Administration)
- WebSphere Business Integration
- IBM WebSphere MQ (Formerly MQ Series)
- WebSphere Portal
- WebSphere Portal
- Rational Application Developer (Programming)
IBM DB2 Training Courses
- DB2 System Performance and Tuning for Linux, Unix and also Windows
- DB2 Administration for Linux, Unix and also Windows
- Stored Procedures in DB2 for UNIX and also Windows
- DB2 Universal Database (UDB) Introduction for UNIX and also Windows
- DB2 UDB SQL Stored Procedures for UNIX and also Windows
- IBM DB2 UDB Application Design for Performance for UNIX and also Windows
- DB2 Fundamentals for zOS or UDB
- DB2 UDB Administration for Unix and also Windows II
- IBM DB2 UDB Administration for Unix and also Windows I
- DB2 UDB Advanced Programming Topics for UNIX and also Windows
- DB2 UDB Application Programming for UNIX and also Windows
- IBM DB2 for zOS Advanced Programming
- DB2 for OS390 Application Programming
- DB2 for zOS Application Programming
- SQL for DB2 Advanced
- DB2 SQL/PL Workshop
- SQL WORKSHOP for DB2
- DB2 UDB Performance and Tuning for Unix and also Windows
- DB2 UDB Administration for Unix and also Windows
- IBM DB2 UDB Programming Fundamentals
- DB2 SQL / PL Stored Procedures on z/OS Training
- DB2 Version 8 Transition on z/OS
IBM Mainframes Training Courses
- Cobol
- Eazytrieve
IBM Rational Training Courses
- Rational Robot
- Rational Rose
- IBM Rational Unified Process
- Rational SODA
- Rational Clearquest
- IBM Rational Application Development
IBM Tivoli Training Courses
- Tivoli Access Manager & also Tivoli Identity Manager
- Tivoli Store manager
Courses can be customized according to Our Clients needs.
For training from other vendors like SAP, Microsoft, Oracle, Java etc browse our website further


text:
With the PlayStation 4 and Xbox One set to offer features that record gameplay and share it with friends, it puts the personal video recorder in a tough position. The consoles' new functionality may make PVRs about as relevant as the Flip camcorder. It seems as if they're certainly doomed.
Or maybe not. Although these consoles will be able to record gameplay, I doubt they'll offer the customization or granularity of a Hauppauge combined with a broadcasting programs. In fact, the PVR features promised in the PS4 and Xbox One may not be able to record extended — I'm talking marathon sessions — of gameplay.
So there's still going to be a market for these devices, but companies will have to carve out a better niche for themselves. To see if they can stand a chance, I checked out the Hauppauge PVR 2 Gaming Edition Plus. At first glance, it's an improvement on previous models.
More on Hauppauge PVR2 Gaming Edition Plus on the jump


text:
Twin / Double
Kings Manor has 34 twin or double rooms.
In each of our modern en suite bedrooms you will find each room with flat-screen Sony Bravia TVs with Freeview and selected satellite channels,free Wi-Fi, direct-dial telephone, hair dryer, hospitality tray and all of our rooms are non-smoking.
All twin rooms have two full size single beds ( 2 meters by 1 meter).
Double rooms have either a Queen size bed ( 150cm wide) or have two full sized singles 'zipped and linked' to form a 2 meter wide bed. In some of these rooms we can fit in a baby cot . Please make sure that we are aware of your exact requirements at time of booking.


text:
Posted by Alisa on Monday, April 28, 2014 / Labels: Ashton Kutcher and Mila Kunis
Expectant parents Mila Kunis and Ashton Kutcher were seen at Stagecoach music festival in Indio, CA on Sunday (April 27).
Disclaimer: I do not own any of the images shown on the site. I do not claim credit for any of the pictures unless otherwise noted. Images on this blog are copyrighted to their respectful owner. If an image appears on alisacelebkids that belongs to you, and you wish for it to be taken down, please E-mail me and I will promptly remove it.


text:
My son is just the coolest little guy. He has a heart of gold. He is sensitive and super sweet, yet doesn't hesitate to stand up for himself when he feels he's being taken advantage of. He's surrounded by 4 sisters. Two older and two younger. He handles it really well, although sometimes he is heard to voice displeasure with the situation, "Dad, I am tired of playing with my sisters," he says. (We haven't found any boys his age in the neighborhood yet.
He is way too smart. Today he informed his
hot Sunday School teacher that the word JOY is alphabetical. Hadn't really thought about it, but he is right. I haven't told him or the girls this, but the school called asking if we wanted him moved up to second grade. Nope! Yes, he is a couple of grade levels about first grade, but he fits in beautifully socially. Moving him up could change that. It could make middle school really difficult on him, so he stays in first grade, reading 3rd and 4th grade level books, working on the 5th grade word list and going to the gifted math program. At home he is learning Spanish.
We watch the Biggest Loser on Tuesday nights together. After the first episode he asked me how many calories in milk. I told him. Then he asked how many calories in water. I told him. He told me, "I will have water because I don't want to be on the Biggest Loser."
Recently, he has been working out on the wii to the Biggest Loser. He comes upstairs panting and saying, "Bob really killed me with that workout! See how skinny I am!"
He is addicted to the computer. And he is good on it. I do have to keep an eye on him because he has discovered Google. We are on safe search of course, but you never know. He loves Google Earth.
At the bus stop, no matter where he is in line, when the bus comes, he drops out of line and gives me a hug, putting himself at the end of the line. EVERY DAY!
What a great little guy I have. He never fails to make me smile.


text:
Thanks for the chapter
Editor: HumanTrainingBot
Nack shouted in anguish as he received a direct hit from Mina's explosion magic. Nack continued to run after the initial hit, but the destructive force of Mina's attack covered an extensive range so there was no room to escape.
"Usato! Is he going to be okay!?"
Kazuki and Senpai worriedly looked at me.
"—You could say that Mina's magic is basically only explosion magic. Although it's not reinforced like Usato's magic, it still holds quite a bit of power. She has scattered her magic everywhere now… Even if Nack's legs are fast, it's obviously disadvantageous if his space is restricted. Usato-san, I really don't think he can…"
It was just like Halfa-san said. The situation looked hopeless for Nack as he had no place to run.
"Usato… Is he going to be okay?"
Amako clutched my uniform and worriedly looked at Nack, just like Kazuki and Senpai.
Yeah, this situation isn't good. This definitely isn't okay.
"He just doesn't have a safe place to run to. It's nothing much."
He'll just have to do something about it.
I showed you a path to the Rescue Squad. You will be running on the battlefield with no safe place to run to anyways. It was a situation where it wouldn't be strange for you to get attacked by magic or a sharp weapon from every direction. It was standard for healers in the Rescue Squad to be in such unfavorable conditions.
Nack, I wonder what you're thinking right now as you desperately avoid Mina's attacks.
Avoiding her attacks because you have no choice?
Looking for an opening?
Waiting for your opponent to wear herself out?
At the very least, I'm well aware of how much ambition you have based on the surprise attack you unleashed on Mina.
"Don't joke around with me, Nack."
It wasn't only Senpai and the others who were worried. The people in the audience were in disorder as well. I got irritated because I didn't like that.
I didn't train you just so you could run away.
I trained you for the sake of victory.
It wasn't some temporary measure. If you're just running, you won't be able to enter the Rescue Squad. You have a mission to save people no matter what the situation is.
"It doesn't really suit me but maybe I should give some words of encouragement…"
I inhaled a breath of air.
Amako looked surprised and let out a 'Hyuh!?'. She then covered her ears.
Senpai, Kazuki, and Halfa-san were staring at me in wonder. They probably didn't know what I was going to do.
Without being concerned, I—
The air is hot.
Even breathing is painful—
Even so, I didn't stop running.
No, I couldn't stop running. If I stopped, I would take another direct hit and lose consciousness.
There's no way I could stop now. Even if it's Mina, she couldn't continuously fire her magic like this forever. I'll endure it. I'll endure, endure, endure, and bear with it patiently. Then I'll win with one move.
"—That appearance sure suits you."
"Ugua…. Ahhhhhhh!!"
An explosion occurred near my feet and the resulting debris hit my shoulder. I quickly retreated from the attack on my right but I couldn't escape the hot wind scorching me. I tumbled onto the ground and let out a groan.
"It's because you're like that…"
Because I was on the ground from the blast, I couldn't make out what Mina was muttering.
When I could hear what she was saying again, her voice was different from usual. Mina spoke without any emotion.
"You always.. always have such a miserable appearance like this… That's why you're no good."
I couldn't keep rolling on the ground like this. I used the momentum from my tumble to get up. In the next moment, several orbs appeared before my eyes once more.
I reflexively covered my face with my arms and started to run.
I didn't have the leeway to heal all my injuries. I concentrated on healing the bare minimum while avoiding Mina's attacks.
"That's why, don't get up anymore. Just give up… Don't think about such foolish thoughts like leaving here— Just give it all up!!"
No, I can't look at Mina.
I need to look at her attacks. If I don't… If I take another hit, it'll all be over.
I gritted my teeth and ran.
Need to run… Can't lose…
"I can still go on…. I still haven't lost yet….!"
"….All you're doing is defending! Just thinking that you can win against me is already strange!! Why can't you understand that!? Why are you just taking these attacks and not fighting back!? Why—"
"Shut up!"
I put all my concentration on evading. I couldn't hear where her attacks were coming due to her high-pitched screams.
No, trying to evade like this was too dangerous. I need to run—
Someone shouted and it was loud enough to echo inside my head.
Even Mina stopped when she heard that voice. No, everyone's movements stopped and looked towards where the voice was projected. I turned around and saw a furious-looking Usato-san with his arms folded.
"Usato… San."
His voice surprised me as well.
He was obviously angry and I was frightened of what he would say to me.
"Don't run. Fight, you damn idiot."
After Usato-san said that, he remained silent.
His encouragement and insult was so simple that I could only stare blankly in amazement. Mina didn't seem to understand, as she kept looking back and forth between my face and Usato-san's.
I understood that there was no special meaning behind his words.
He meant exactly what he said. There was nothing more effective for me than his words just now.
"Ha.. Hahahaha… This is really too excessive…"
Don't run, you said.
What were you saying, after making me run and evade during that training?
Those were my initial thoughts but when I thought about my actions just now, I couldn't help but feel embarrassed.
My thoughts were completely different from what Usato-san is telling me to do.
At first, I was avoiding Mina's attacks in order to win. But at the moment, I'm just running away from Mina's attacks. It's completely different.
My thoughts were full of how to defeat Mina in the beginning but now it was completely different… Running away was all I could think of doing.
I was the only one giving up. Mina was seriously trying to beat me.
"I'm really a big idiot…"
I was just making excuses and only running away.
If I really wanted to win, I should be prepared to endure any kind of injury. But… I didn't want to feel pain and didn't want to lose. I had no intention of facing Mina head on.
It was lame and unsightly. It was no different from my past self.
I used all my strength and slapped myself on the cheeks.
I've already woken up. I won't run away from Mina anymore.
"Thank you very much!!"
I'm sure Mina didn't grasp the meaning of Usato-san's words.
It's possible she thought that he was demanding the impossible in this desperate situation. She might even think that he's the lowest and the worst master ever. I personally didn't think that about Usato-san, not even a little. The truth is entirely different.
Usato-san properly understood me. I was well aware how gentle and strict he was. That was why his message reached me. I couldn't run away, I had to fight back…
That's why I'll do as Usato-san says and face Mina.
"—He sure is asking for something unreasonable in a situation like this."
"He's the best master. Just when I was about to run, he made sure to tell me stand back up."
"I see. But you know, don't think you can surpass me with that."
10 magic orbs floated in Mina's hands.
She could fire them at any time. I would have tried to escape a moment ago but it was different now.
I focused and cladded my entire body with healing magic.
I was only using the minimum amount of healing magic before but now I was using all of it.
"I'll defeat you."
"You shouldn't say something you can't do."
"Yeah, I won't say it anymore. That's why… This will be the last."
I ran.
It wasn't for evasion. I wanted to defeat Mina and headed straight for her. As an obvious response, Mina scattered her magic orbs. But I won't run away anymore. No matter how much power her explosion magic held, I had already resolved myself to oppose her.
I plunged forward while crossing my arms to protect my face.
"O, oooooooh!"
The resulting explosions pelted me with pebbles. Wounds appeared all over my body but I didn't stop. This pain was nothing compared to the torment I suffered until now.
Hot wind started to scorch me next.
It felt like my entire body was burning but compared to the sense of loss of being abandoned by my own parents, it was nothing.
Without realizing it, tears started flowing ceaselessly from my eyes. I continued to advance while maintaining my healing magic—
"Nack, you….! Blood!?"
An orb of magic headed straight for me right after I smacked my lips. There wasn't much power since it was immediately created but it was more than enough to knock me out cold.
Normally, I should probably avoid it.
But I'm a healing magician. No matter what I face or how absurd it is, I'm a magician that will overcome it with my own body.
If it's just pain, I could endure it!
During my dash, my shirt was all worn-out and destroyed. I clenched my right fist and wound up…
I struck the orb of magic with my right fist.
I was enveloped in the explosion and burned. A different type of pain assaulted and suffocated me. It was so painful that I couldn't even scream— But I was still conscious.
That was close. My fist was covered in burns but I managed to drown out Mina's explosion magic. I shook my hand. Mina was holding her shield and staring at me with her eyes wide open.
We are now finally facing each other.
We were finally able to face each other.
I realized I was really facing Mina head on.
As expected, I really was afraid of Mina.
What I wrote in my diary about you, it was something I did to deceive myself. All those words were a bluff to hide my own nervousness. I'm cowardly and timid. On top of all that, I'm just a big idiot who was unconsciously running away.
I frantically stabilized my trembling legs and took a step forward.
I couldn't lift my legs to kick. I couldn't lift my right hand either.
But it's not like I couldn't do anything. Even without those, I still have my body!! I could still run with my legs!!
I let out a roar and dashed towards Mina with heavy and powerful steps.
"What can you do with that body of yours!? Just stop it already! You're going to die at this rate, you know!?"
I felt like I would collapse but I used all my strength to move forward.
Anyone who was watching expected that there was nothing I could do.
But Usato-san would probably overcome the situation with his body no matter what!!
And for me to enter the Rescue Squad just like him, this is a big step for me!!
I'll use everything and ram it right into Mina's shield!!
"Ramming with your body—— Guh!?"
Instead of relying on my kick, I leapt and hurled myself at Mina.
I launched myself with all my power and crashed into Mina's shield with my left shoulder. I heard something snap but I ignored it and pushed myself forward with my legs.
The shield was planted firmly in the ground and didn't move. However, I didn't stop and continued to advance.
"I…! I was scared of you! I didn't want to see your face!! When I look at you… I end up remembering the time I was still a noble… When I was still loved by my parents!! That's why…!!"
My eyes were still overflowing with tears.
Mina was looking at my face from behind the shield… She let out only a small voice but she suppressed it.
"But I'm going to end it today!! Today…. Today, I will….!! Enter the Rescue Squad………!!"
I don't mind even if this becomes a monologue.
It's just absolutely necessary for me to declare this to separate from you and bid farewell to my past.
I shouted and pushed with even more force. The crack at the shield's center started to widen and the shield itself was lifted off the ground— Then it broke right in half.
The shield was split in two. There was nothing obstructing my path anymore. I rammed my entire body at Mina———
"Haah…. Haah…."
Mina was blown away by my ramming attack and hit the ground.
I checked her condition while out of breath, and then I fell to my knees.
I have almost no magic left and my entire body is in pain. I'm really tired.
"……..I did it…. Did I win…?"
My vision was somewhat hazy but I could make out my surroundings. The spectating students stared, dumbfounded, with their mouths open. Usato-san let out a sigh of relief.
I see. I… won.
Due to my strange victory, I felt joy. Apart from that, I felt a great sense of relief.
"Not yet…… It's not over yet……"
Mina had fallen and was spitting blood out of her mouth. Even so, her eyes looked odd and were focused on me. She started gathering magic in her hand and aimed it towards me.
Just as I was about to stand up, strength wouldn't enter my body. Consequently, my legs grew weaker and I ended up sitting down.
"There's no way I would lose to you. You're the only one I can't let go……!"
Why go so far, that I'm the only one you won't let go…?
Why me? Aren't there other people besides me? I don't understand the reason. Why are you so fixated on me?
I was paralyzed by an unknown fear.
"Nack-kun! Get away!!"
"Halfa… San?"
Halfa-san shouted, looking flustered.
We never really talked. Why are you looking at me like that and shouting in panic?
While I dazedly thought this, I looked towards Mina. She was gathering her magic again and attempting something.
But something is different. It's not like orbs of magic were being converged in one place, the magic in her hand— It was like Usato-san's…
"Nack! It's Reinforcement! Wait right there, I'm coming!!"
If I recall, Carla-sensei mentioned it was a difficult technique that only skilled magicians could use. But Mina was trying to do that right now. Halfa-san and Usato-san called out to me. Their expressions clearly didn't look calm. Isn't this fairly dangerous?
What's more, it's Mina's explosion magic. She was born with explosion magic, and if she uses Reinforcement on that— If her magic is strengthened recklessly, I might not be the only one who will be harmed. It might even injure the other people here.
I have to get away.
If I don't get away, I'll get caught in the explosion and die.
As I thought that and was about to stand up— I noticed.
This isn't the time to be stunned.
This isn't the time to think about running away, right….?
Figuratively speaking… Even if the people who live here were to desert me, that shouldn't be a reason for me to not save them. That would disqualify me from the Rescue Squad.
"Nack!? What are—"
I looked at Usato-san for a moment, who was making his way over here, before running towards Mina. My left shoulder was broken and I couldn't use it. Then I had no choice but to use my burned right arm. I focused my remaining magic and put everything into my right arm— I recklessly infused my magic. I slapped my trembling legs and forcefully continued to run.
"Like hell I can bear to part…… With you……! If I let you go….."
Her hand was overloaded with an excessive amount of magic power. She was injured and the laceration was overflowing. It was painful enough to make her shed tears, but even so, she was willing to go that far to defeat me. Seeing her like that, I held a feeling inside me that I couldn't express. In spite of that, I kept running towards her.
Even if she oppressed me, there was no way I could just let her die. That wouldn't be good. I'll have to include her if I want to save everyone. For that reason, I have to make her faint right now.
Usato-san is still far away— I have no choice but to finish this myself.
"Let's end this…"
I immediately arrived right in front of her. She looked up at me. Her eyes were filled with some kind of obsession as she looked at me. It seemed like she was staring at me with those eyes for quite some time.
The next moment, her hand started to shine brightly and was about to fire off— But I covered my right hand with healing magic, grabbed her hand and brought it down.
There was definitely a response.
I could feel it.
After a few moments, a burst of light spread out around us.
I didn't know whether it was my magic or Mina's that produced it.
But…… It was very nostalgic.
That was what I thought about that light. I had exhausted all my strength and magic. I brought out everything that I could possibly muster. My body felt unsteady and it violently shook. Before long, I collapsed while my view was hazy from the light.
Just as I was about to fall to the ground, someone supported me.
My vision finally cleared, and as I looked at the person who supported me———
"Nack, are you okay!?"
"Usato…… San."
Usato-san's forehead was dripping with sweat. He looked relieved and exhaled while carrying me. I felt a warm aura from the hand that was supporting me. From that fact, I knew he was in the process of using his healing magic on me.
"I'm glad, it looks like you're fine. You injuries aren't a big deal…… Yeah, they'll recover in no time."
"Mina is…?"
"She's safe. She just fainted thanks to you. The magic she gathered has lost its function and is now being dispersed."
Looks like I made it.
Although I only intended on making her faint, I was really crossing a dangerous bridge just now. It was a little late now but I couldn't help but feel a sense of chill at the situation I was just in.
"Thanks to you, a lot of people including me were saved. You can be proud."
"I… Really…"
"Yeah, you definitely have the qualification to enter the Rescue Squad. Furthermore—"
Since I still couldn't move, Usato-san turned his body until I could see Mina.
She was unconscious. But then I noticed something completely different than before.
"It looks like your healing magic has returned to its original form."
The injury is gone.
In the fight with Mina just now, she inflicted a wound on herself with her own Reinforcement. But it was completely gone now.
Seeing that she was safe, I couldn't help but look at Usato-san.
"It wasn't me, okay? When I arrived next to her, she was already healed. That's why, this is what you did. I don't understand the reason behind it but… Perhaps you can use healing magic on others because you thought about saving other people again?"
"Thought about saving others…"
"As healing magicians, that's the most important thing for us. You were able to regain that at the very last moment. You've severed the ties from your past and on top of that, you personally tried to save the girl that oppressed you."
Upon hearing Usato-san's words, I gathered magic in my right hand.
My magic was pretty much exhausted so I could only gather healing magic at the very tip of my finger. However, I could properly see the green light on my finger. I couldn't help but think of just how precious this was. I enclosed that light in my fist and squeezed tightly.
"It was always here…… But I could only think of myself during those hard times. I was suffering so much that I couldn't even worry about others… Before I knew it, I tucked it away inside me… But… It finally came back. I won't ever let go of it again. I will never forget this feeling again….."
I pressed my fist to my forehead and spoke to Usato-san with some excitement in my voice.
Usato-san listened in silence. He smiled and started to walk.
"Now you have the potential to endure even harsher training than yesterday's. Leader should accept you with no complaints…. At any rate, you really did your best…… Ah."
"Look, the people who want to congratulate you on your victory before anything else are coming this way."
I wiped my tears and looked at where Usato-san was walking.
When I did, I could see the people who had supported me coming this way———
Author: At the very end, Nack was able to retrieve what he had lost.
Thanks for the ch. The kingdoms gonna flip now they got 3 berserk healer lol
World domination!
Thanks for the epic chappu~
Thanks for the chapter!!!
Good growth Nack!
You've got the right headspace now! Save everyone you can. Regardless. just like Usato. And to an extent Rose. Not everyone can be saved.. but if you can save them. Do it.
You're definitely his apprentice. Good job.
Why do I have a feeling that Senpai is going to play matchmaker between Nack and Mina?
You won't see Mina for a good awhile until chapter 170s~.
Lol usato's gonna end up going around recruited healing magicians from everywhere like this xD
Thanks Shiru!
Demon king army : Rose is dangerous
a wild usato appears
Demon king army : THERE'S 2 OF THEM!!??
a wild Nack appears
Demon king army : oh sh*t
btw i wonder how the demon girl under rose "training" is doing right now
Thanks for the chap!
Thanks for the Chapter ^.^


text:
HARTFORD — There's a new effort underway to try to eliminate homelessness among Connecticut's veteran population over the next two years.
Last week, a coalition of groups agreed to a statewide action plan. It was the result of six months of brainstorming and research. By filling in gaps in services and better coordinating existing resources, advocates hope the roughly 400 homeless veterans on a single night in Connecticut can have housing by the end of 2015.
The Connecticut Heroes Project, founded by Greg Behrman of Fairfield, spearheaded this effort to better coordinate services for veterans in order to address the homelessness problem. He said the action plan is one of the most detailed in the nation.
Advocates say they're optimistic because there is currently more federal funding for veterans' housing programs.


text:
Welcome to the Sam Houston Schoolhouse State Historic Site Hope you enjoy your visit. Come in and sit a spell. Imagine it is the year 1812 and Samuel Houston is your schoolmaster. What was school like in the early days of America? Simpler, indeed…but easier? Not quite. Students here learn quickly that life was hard, but full of fun. We teach students of all ages book learnin', colonial games, and old-fashioned chores like candlemaking, corn grinding, bullet making, quilting, and washboard laundering. School and scout field trips are our specialty and a delight to us as well as the students!
Everyone here receives a warm welcome.
April through June, and September through November, students can experience a day at school in colonial times. Visit with a costumed museum interpreter who will help answer your questions about the schoolhouse, artifacts and grounds. In the gift shop you will find arts and crafts fashioned by local artisans and many hard-to-find books about Sam Houston and Blount County, written by local authors.
Bring a picnic lunch to eat . There are several FREE events throughout the year. Click on "events" for more information.
The lovely grounds (especially beautiful in the spring and fall) and pavilion can be reserved for weddings, receptions, teas, luncheons, group picnics, reunions, etc. The possibilities are limited only by your imagination!
"This project is funded under an agreement with the Tennessee Department of Environment and Conservation, Tennessee Historical Commission, a Tennessee Historical Commission State-Owned Historic Site, and supplemented by additional funds raised by "The Sam Houston Memorial Association."
For more information please call the schoolhouse at 865-983-1550.
Please visit our Facebook page "Historic Sam Houston Schoolhouse."


text:
'Awesome phone in all areas'
'Despite the phone being quite stylish, we felt that Motorola spent too much time on the "look†of the phone and not enough time on the "featuresâ€.'
'powerful phone'
'one of best mobiles that Motorola has ever produced and one of the best with AT&T'
'Working with the phone and menus is very easy, the order is intuitive and logically connected and will hardly be difficult for you.'
'most striking phones'
'a powerful phone with a broad range of features.'
'the unique keypad wasn't terribly user-friendly'
'rich, vibrant display'
'In order to make it definitely different, the design was almost drastically changed.'
'It will be available in two colors: noble blue and golden ivory.'
'a proper xenon-gas-filled flash to provide a bright burst of flash to brighten up your subject.'
'The Nokia 6220 classic comes loaded with the new Nokia Maps 2.0 application which helps consumers find the best routes or explore any city for new restaurants, hotels, tourist attractions and other points of interest.'
'microSD memory card slot'
'fairly ordinary looking mobile'
'stylish and compact mobile phone'
'Its a great phone with many features.'
'Navigating playlists and tracks on your phone is clear and easy, and the phone displays album artwork and plays tracks purchased from the iTunes store just like an iPod.'
'The phone works excellent when connected to your computer, you can add playlists or songs as if the phone is an ipod. '
'The Motorola Razr V3i Dolce & Gabbana is an eye-catching slim cell phone'
ReviewGist helps you find the best products to buy by making sense of online reviews.
We are currently aggregating 376,500 reviews
covering over 29,474 products.
© 2020 ReviewGist.com. All Rights Reserved.


text:
According to TotalPCGaming.com, Steam, and the official site, The Witcher 2 requires at least a Radeon HD 3850. How firm is this requirement? Has anyone managed to play with a lesser card? (Bonus points if you can talk about the other required specs as well.)
I ask because one of my PCs has a Radeon HD 3650* (later rebranded 4570/4580), and I'd prefer to use it if possible. I've also noticed that nowadays "minimum specs" are generally the specs required to have everything at medium detail and the like, rather than an actual hard minimum.
* The 3650 is actually superior in some respects, such as having twice the RAM. Memory bandwidth is a bit over half, though.